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.DoubleCell;
26  import com.cosylab.gui.displayers.DataConsumer;
27  import com.cosylab.gui.displayers.DisplayerUtilities;
28  import com.cosylab.gui.displayers.DoubleSeqConsumer;
29  import com.cosylab.util.CommonException;
30  
31  import de.desy.acop.displayers.AcopTable;
32  
33  /**
34   * Table column for presenting numerical values.
35   * 
36   * @author Jaka Bobnar, Cosylab
37   *
38   */
39  public class AcopNumericTableColumn extends AcopTableColumn implements DoubleSeqConsumer {
40  	
41  	@SuppressWarnings("unchecked")
42  	public static final Class[] SUPPORTED_CONSUMER_TYPES = {
43  		DoubleSeqConsumer.class
44  		};
45  	public static final String[] SUPPORTED_CHARACTERISTICS = {};
46  	
47  	protected double[] rows;
48  	
49  	/**
50  	 * Constructs new AcopNumericTableColumn.
51  	 *
52  	 */
53  	public AcopNumericTableColumn() {
54  		super();
55  	}
56  	
57  	/**
58  	 * Constructs new AcopNumericTableColumn object.
59  	 * 
60  	 * @param table parent table
61  	 * @param uniqueName unique name of the column
62  	 * @param shortName short name of the column
63  	 */
64  	public AcopNumericTableColumn(AcopTable table, String uniqueName, String shortName) {
65  		super(table, uniqueName, shortName);
66  		rows = new double[0];
67  		cells = new DoubleCell[0];
68  	}
69  	
70  	/*
71  	 * (non-Javadoc)
72  	 * @see de.desy.acop.displayers.tools.table.AcopTableColumn#getColumnClass()
73  	 */
74  	@Override
75  	public Class<?> getColumnClass() {
76  		return DoubleCell.class; //Double.class;
77  	}
78  	
79  	/* (non-Javadoc)
80  	 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedCharacteristics()
81  	 */
82  	public String[] getSupportedCharacteristics() {
83  		return DisplayerUtilities.combineCharacteristics(DisplayerUtilities.COMMON_NUMERIC_DISPLAYER_CHARACTERISTICS,
84  			    SUPPORTED_CHARACTERISTICS);
85  	}
86  
87  	/* (non-Javadoc)
88  	 * @see com.cosylab.gui.displayers.DataConsumer#getSupportedConsumerTypes()
89  	 */
90  	@SuppressWarnings("unchecked")
91  	public Class<DataConsumer>[] getSupportedConsumerTypes() {
92  		return SUPPORTED_CONSUMER_TYPES;
93  	}
94  	
95  	/*
96  	 * (non-Javadoc)
97  	 * @see com.cosylab.gui.displayers.DoubleSeqConsumer#updateValue(long, double[])
98  	 */
99  	public void updateValue(long timestamp, double[] value) throws CommonException {
100 		rows = value;
101 		if (cells.length != value.length) {
102 			cells = new DoubleCell[value.length];
103 		}
104 		fireColumnChanged();
105 	}
106 	
107 	/*
108 	 * (non-Javadoc)
109 	 * @see de.desy.acop.displayers.table.AcopTableColumn#getValue(int)
110 	 */
111 	public Object getValue(int rowIndex) {
112 		if (rows == null || rowIndex >= rows.length || rowIndex < 0) return null;
113 		if (cells[rowIndex] == null) {
114 			cells[rowIndex] = new DoubleCell(displayerParameters.getName()+"[" + rowIndex+"]", this, rows[rowIndex], null);
115 			cells[rowIndex].putAllCharacteristics(characteristics);
116 		} else {
117 			cells[rowIndex].setValue(rows[rowIndex]);
118 		}
119 		setCharacteristicsOnCell(cells[rowIndex]);
120 		return cells[rowIndex];
121 	}
122 	
123 
124 }