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.selector;
24  
25  import java.awt.Component;
26  
27  import javax.swing.DefaultListCellRenderer;
28  import javax.swing.JList;
29  import javax.swing.ListCellRenderer;
30  
31  import com.cosylab.gui.adapters.Converter;
32  
33  import de.desy.acop.displayers.table.AcopTableParameters;
34  import de.desy.acop.displayers.table.TableColumnType;
35  import de.desy.acop.displayers.tools.MultipleAcopDisplayer;
36  import de.desy.acop.transport.ConnectionParameters;
37  
38  /**
39   * <code>TableConnectionCustomizer</code> is a connection customizer for 
40   * multiple displayers which handles <code>AcopTableParameters</code>.
41   * 
42   * @author <a href="mailto:jaka.bobnar@cosylab.com">Jaka Bobnar</a>
43   * @version $Id: Templates.xml,v 1.10 2004/01/13 16:17:13 jbobnar Exp $
44   * @see MultipleAcopDisplayer
45   * @see AcopTableParameters
46   */
47  public class TableConnectionCustomizer extends MultipleConnectionCustomizer<AcopTableParameters> {
48  
49  
50  	private static final long serialVersionUID = 4596748128425127898L;
51  	private TableCustomizerPanel tableCustomizerPanel;
52  	private SelectorGUI selector;
53  	
54  	protected class AcopTableCellRenderer extends DefaultListCellRenderer {
55  		
56  		private static final long serialVersionUID = 7937185460891053942L;
57  
58  		/*
59  		 * (non-Javadoc)
60  		 * @see javax.swing.DefaultListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
61  		 */
62  		@Override
63  		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
64  			if (value instanceof AcopTableParameters) {
65  				value = ((AcopTableParameters)value).getConnectionParameters() + "; " + ((AcopTableParameters)value).getColumnType() + (((AcopTableParameters)value).getConverter() != null ? "; Converter" : "");
66  			}
67  			
68  			return super.getListCellRendererComponent(list, value, index, isSelected,
69  					cellHasFocus);
70  		}
71  	}
72  	
73  	public TableConnectionCustomizer() {
74  		super();
75  		setConverterTabEnabled(true);
76  	}
77  	
78  	/*
79  	 * (non-Javadoc)
80  	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getListRenderer()
81  	 */
82  	@Override
83  	protected ListCellRenderer getListRenderer() {
84  		return new AcopTableCellRenderer();
85  	}
86  	
87  	/*
88  	 * (non-Javadoc)
89  	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#generateParameters()
90  	 */
91  	@Override
92  	protected AcopTableParameters generateParameters() {
93  		Converter c=null;
94  		try {
95  			c= getConverterPanel().getConverter();
96  			if (c!=null) {
97  				c= (Converter)c.clone();
98  			}
99  		} catch (CloneNotSupportedException e) {
100 			e.printStackTrace();
101 		}
102 		return new AcopTableParameters(
103 				getSelectorGUI().getConnectionParameters(),
104 				getTableCustomizerPanel().getType(),
105 				c,
106 				getTableCustomizerPanel().getName()); 
107 	}
108 	
109 	/*
110 	 * (non-Javadoc)
111 	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getSettingsPanel()
112 	 */
113 	@Override
114 	protected MultipleDisplayerAbstractSettingsPanel<AcopTableParameters> getSettingsPanel() {
115 		return getTableCustomizerPanel();
116 	}
117 	
118 	private TableCustomizerPanel getTableCustomizerPanel() {
119 		if (tableCustomizerPanel == null) {
120 			tableCustomizerPanel = new TableCustomizerPanel();
121 		}
122 		return tableCustomizerPanel;
123 	}
124 	
125 	/*
126 	 * (non-Javadoc)
127 	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getSelectorGUI()
128 	 */
129 	@Override
130 	protected SelectorGUI getSelectorGUI() {
131 		if (selector == null) {
132 			selector = super.getSelectorGUI();
133 			selector.addSelectorGUIListener(new SelectorGUIListener() {
134 				public void selectionChanged(SelectorGUIEvent e) {
135 					ConnectionParameters parameters = selector.getConnectionParameters();
136 					if (parameters.getDeviceName().contains("*") ||
137 							parameters.getDeviceProperty().contains("*")) {
138 						getTableCustomizerPanel().setType(TableColumnType.STRING);
139 					}
140 					getTableCustomizerPanel().setName(parameters.getRemoteName());
141 				}
142 			});
143 		}
144 		
145 	    return super.getSelectorGUI();
146     }
147 	
148 	/*
149 	 * (non-Javadoc)
150 	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getDisplayerParameters()
151 	 */
152 	@Override
153 	public AcopTableParameters[] getDisplayerParameters() {
154 		AcopTableParameters[] p = new AcopTableParameters[displayerParameters.size()];
155     	return displayerParameters.toArray(p);
156 	}  
157 }
158 
159 
160 /* __oOo__ */