View Javadoc

1   /*
2    * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton,
3    * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
4    *
5    * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
6    * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
7    * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
8    * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
9    * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
11   * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
12   * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
13   * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
14   * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
15   * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
16   * OR MODIFICATIONS.
17   * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
18   * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
19   * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
20   * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
21   */
22  
23  package de.desy.acop.displayers.table;
24  
25  import com.cosylab.gui.components.table.cells.StringCell;
26  import com.cosylab.gui.components.table.cells.TableCell;
27  import com.cosylab.gui.displayers.DataConsumer;
28  import com.cosylab.gui.displayers.DataState;
29  import com.cosylab.gui.displayers.DisplayerUtilities;
30  import com.cosylab.gui.displayers.StringSeqConsumer;
31  
32  import de.desy.acop.displayers.AcopTable;
33  
34  /**
35   * TableColumn for presenting string values. 
36   * 
37   * @author Jaka Bobnar, Cosylab
38   *
39   */
40  public class AcopStringTableColumn extends AcopTableColumn implements StringSeqConsumer {
41  	
42  	@SuppressWarnings("unchecked")
43  	public static final Class[] SUPPORTED_CONSUMER_TYPES = {
44  		StringSeqConsumer.class
45  		};
46  	public static final String[] SUPPORTED_CHARACTERISTICS = {};
47  	
48  	private String[] rows;
49  	private DataState state = new DataState(DataState.NORMAL);
50  	
51  	/**
52  	 * Constructs new AcopStringTableColumn.
53  	 *
54  	 */
55  	public AcopStringTableColumn() {
56  		super();
57  	}
58  	
59  	/**
60  	 * Constructs new AcopStringTableColumn.
61  	 * 
62  	 * @param table parent table
63  	 * @param uniqueName unique name of the column
64  	 * @param shortName short name of the column
65  	 */
66  	public AcopStringTableColumn(AcopTable table, String uniqueName, String shortName) {
67  		super(table, uniqueName, shortName);
68  		rows = new String[0];
69  		cells= new StringCell[0];
70  	}
71  	
72  	/*
73  	 * (non-Javadoc)
74  	 * @see de.desy.acop.displayers.tools.table.AcopTableColumn#getColumnClass()
75  	 */
76  	public Class<?> getColumnClass() {
77  		return StringCell.class;
78  	}
79  	
80  	/* (non-Javadoc)
81  	 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedCharacteristics()
82  	 */
83  	public String[] getSupportedCharacteristics() {
84  		return DisplayerUtilities.combineCharacteristics(DisplayerUtilities.COMMON_NUMERIC_DISPLAYER_CHARACTERISTICS,
85  			    SUPPORTED_CHARACTERISTICS);
86  	}
87  
88  	/* (non-Javadoc)
89  	 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedConsumerTypes()
90  	 */
91  	@SuppressWarnings("unchecked")
92  	public Class<DataConsumer>[] getSupportedConsumerTypes() {
93  		return SUPPORTED_CONSUMER_TYPES;
94  	}
95  	
96  	/*
97  	 * (non-Javadoc)
98  	 * @see de.desy.acop.displayers.tools.table.AcopTableColumn#getValue(int)
99  	 */	
100 	public Object getValue(int rowIndex) {
101 		if (rows == null || rowIndex >= rows.length || rowIndex < 0) return null;
102 		if (cells[rowIndex] == null) {
103 			cells[rowIndex] = new StringCell(displayerParameters.getName()+"[" + rowIndex+"]", this, rows[rowIndex], null);
104 			cells[rowIndex].putAllCharacteristics(characteristics);
105 			cells[rowIndex].putCharacteristic(TableCell.SUSPENDED, false);
106 			cells[rowIndex].putCharacteristic(TableCell.ALARM, false);
107 			cells[rowIndex].putCharacteristic(TableCell.WARNING, false);
108 			cells[rowIndex].putCharacteristic(TableCell.TIMEOUT, false);
109 			cells[rowIndex].putCharacteristic(TableCell.ERROR, false);
110 		} else {
111 			cells[rowIndex].setValue(rows[rowIndex]);
112 		}
113 		setCharacteristicsOnCell(cells[rowIndex]);
114 		return cells[rowIndex];
115 	}
116 
117 	/*
118 	 * (non-Javadoc)
119 	 * @see com.cosylab.gui.displayers.StringSeqConsumer#updateValue(long, java.lang.String[])
120 	 */
121 	public void updateValue(long timestamp, String[] names) {
122 		rows = names;	
123 		if (cells.length != names.length) {
124 			cells = new StringCell[names.length];
125 		}
126 		fireColumnChanged();
127 	}
128 	
129 	/*
130 	 * (non-Javadoc)
131 	 * @see de.desy.acop.displayers.tools.table.AcopTableColumn#getDataState()
132 	 */
133 	public DataState getDataState() {
134 		return state;
135 	}
136 }