tmf: Add generics to ITmfEventAspect
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / viewers / events / columns / TmfEventTableColumn.java
1 /*******************************************************************************
2 * Copyright (c) 2014, 2015 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Alexandre Montplaisir - Initial API and implementation
11 ******************************************************************************/
12
13 package org.eclipse.tracecompass.tmf.ui.viewers.events.columns;
14
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
17 import org.eclipse.tracecompass.common.core.NonNullUtils;
18 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
19 import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
20
21 /**
22 * A column in the
23 * {@link org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable}. In
24 * addition to ones provided by default, trace types can extend this class to
25 * create additional columns specific to their events.
26 *
27 * Those additional columns can then be passed to the constructor
28 * {@link org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable#TmfEventsTable(org.eclipse.swt.widgets.Composite, int, java.util.Collection)}
29 *
30 * @author Alexandre Montplaisir
31 * @noextend This class should not be extended directly. You should instead
32 * implement an {@link ITmfEventAspect}.
33 */
34 @NonNullByDefault
35 public class TmfEventTableColumn {
36
37 // ------------------------------------------------------------------------
38 // Fields
39 // ------------------------------------------------------------------------
40
41 private final ITmfEventAspect<?> fAspect;
42
43 // ------------------------------------------------------------------------
44 // Constructors
45 // ------------------------------------------------------------------------
46
47 /**
48 * Constructor
49 *
50 * @param aspect
51 * The {@link ITmfEventAspect} to be used to populate this
52 * column.
53 */
54 public TmfEventTableColumn(ITmfEventAspect<?> aspect) {
55 fAspect = aspect;
56 }
57
58 // ------------------------------------------------------------------------
59 // Getters
60 // ------------------------------------------------------------------------
61
62 /**
63 * Get this column's header name, a.k.a. title
64 *
65 * @return The column's title
66 */
67 public String getHeaderName() {
68 return fAspect.getName();
69 }
70
71 /**
72 * Get the tooltip text for the column header
73 *
74 * @return The header's tooltip
75 */
76 public @Nullable String getHeaderTooltip() {
77 return fAspect.getHelpText();
78 }
79
80 /**
81 * Get the string that should be displayed in this column's cell for a given
82 * trace event. Basically, this defines "what to print in this column for
83 * this event".
84 *
85 * @param event
86 * The trace event whose element we want to display
87 * @return The string to display in the column for this event
88 */
89 public String getItemString(ITmfEvent event) {
90 return NonNullUtils.nullToEmptyString(fAspect.resolve(event));
91 }
92
93 /**
94 * Get the event aspect assigned to this column
95 *
96 * @return The event aspect
97 */
98 public ITmfEventAspect<?> getEventAspect() {
99 return fAspect;
100 }
101
102 // ------------------------------------------------------------------------
103 // hashCode/equals (so that equivalent columns can be merged together)
104 // ------------------------------------------------------------------------
105
106 @Override
107 public int hashCode() {
108 final int prime = 31;
109 int result = 1;
110 result = prime * result + fAspect.hashCode();
111 return result;
112 }
113
114 @Override
115 public boolean equals(@Nullable Object obj) {
116 if (this == obj) {
117 return true;
118 }
119 if (obj == null) {
120 return false;
121 }
122 if (!(obj instanceof TmfEventTableColumn)) {
123 return false;
124 }
125 TmfEventTableColumn other = (TmfEventTableColumn) obj;
126 if (!fAspect.equals(other.fAspect)) {
127 /* Aspects can also define how they can be "equal" to one another */
128 return false;
129 }
130 return true;
131 }
132 }
This page took 0.034228 seconds and 6 git commands to generate.