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.tools;
24  
25  import java.awt.datatransfer.DataFlavor;
26  import java.awt.datatransfer.Transferable;
27  import java.awt.datatransfer.UnsupportedFlavorException;
28  import java.io.IOException;
29  
30  import javax.swing.JComponent;
31  
32  import com.cosylab.gui.displayers.DisplayerParameters;
33  import com.cosylab.gui.util.DisplayerParametersFlavor;
34  
35  import de.desy.acop.displayers.AcopTable;
36  import de.desy.acop.displayers.selector.AcopTableParametersDialog;
37  import de.desy.acop.displayers.table.AcopTableParameters;
38  import de.desy.acop.displayers.table.AcopTableParametersFlavor;
39  import de.desy.acop.transport.ConnectionParameters;
40  
41  /**
42   * <code>AcopTableTransferHandler</code> is an extension of TransferHandler
43   * than can handle <code>AcopTableParameters</code>.
44   * 
45   * @author <a href="mailto:jaka.bobnar@cosylab.com">Jaka Bobnar</a>
46   * @version $Id: Templates.xml,v 1.10 2004/01/13 16:17:13 jbobnar Exp $
47   * @see AcopTableParameters
48   */
49  public class AcopTableTransferHandler extends AcopMultipleDisplayerParametersTransferHandler{
50  	
51  	private static final long serialVersionUID = 4277524441131938702L;
52  	private AcopTableParametersDialog tableDialog;
53  
54  	public AcopTableTransferHandler(AcopTable comp, boolean reciveEnabled, boolean exportEnabled, DataFlavor[] f, boolean resetFlavors) {
55  		super(comp, reciveEnabled, exportEnabled, f, resetFlavors);
56  	}
57  	
58  	/* (non-Javadoc)
59  	 * @see com.cosylab.gui.components.util.CosyTransferHandler#getTransferData(java.awt.datatransfer.DataFlavor)
60  	 */
61  	@Override
62  	public Object getTransferData(DataFlavor flavor)
63  			throws UnsupportedFlavorException, IOException {
64  		if (flavor.equals(AcopTableParametersFlavor.FLAVOR)) {
65  			return exportDisplayerParameters();
66  		} else if (flavor instanceof DisplayerParametersFlavor) {
67  			return exportDisplayerParameters();
68  		} else if (flavor instanceof ConnectionParametersFlavor) {
69  			return ((AcopTableParameters)exportDisplayerParameters()).getConnectionParameters();
70  		} else if (flavor.isFlavorTextType()){
71  			return ((AcopTableParameters)exportDisplayerParameters()).getConnectionParameters().toString();
72  		} else {
73  			return super.getTransferData(flavor);
74  		}
75  	}
76  	
77  	/*
78  	 * (non-Javadoc)
79  	 * @see de.desy.acop.displayers.tools.AbstractMDPTransferHandler#exportDisplayerParameters()
80  	 */
81  	@Override
82  	protected DisplayerParameters exportDisplayerParameters() {
83  		return ((AcopTable)displayer).getSelectedParameters();
84  	}
85  	
86  	/*
87  	 * (non-Javadoc)
88  	 * @see de.desy.acop.displayers.tools.AcopMultipleDisplayerParametersTransferHandler#convertParameters(de.desy.acop.displayers.tools.AcopDisplayerParameters)
89  	 */
90  	protected AcopTableParameters convertParameters(AcopDisplayerParameters adp) {
91  		if (tableDialog == null) {
92  			tableDialog = new AcopTableParametersDialog(displayer);
93  		}
94  		return tableDialog.showDialog(displayer,adp);	
95  	}
96  	
97  	/*
98  	 * (non-Javadoc)
99  	 * @see de.desy.acop.displayers.tools.AcopMultipleDisplayerParametersTransferHandler#convertParameters(de.desy.acop.transport.ConnectionParameters)
100 	 */
101 	protected AcopTableParameters convertParameters(ConnectionParameters adp) {
102 		if (tableDialog == null) {
103 			tableDialog = new AcopTableParametersDialog(displayer);
104 		}
105 		return tableDialog.showDialog(displayer,adp);	
106 	}
107 	
108 	/*
109 	 * (non-Javadoc)
110 	 * @see com.cosylab.gui.util.DisplayerParametersTransferHandler#castParameters(java.lang.Object[])
111 	 */
112 	@Override
113 	protected DisplayerParameters[] castParameters(Object... parameters) {
114 		if (parameters instanceof AcopTableParameters[]) {
115 			return (AcopTableParameters[])parameters.getClass().cast(parameters);
116 		} else if (parameters instanceof AcopDisplayerParameters[]) {
117 			return (AcopDisplayerParameters[])parameters.getClass().cast(parameters);
118 		} else if (parameters.length == 1) {
119 			if (parameters[0] instanceof AcopTableParameters) {
120 				return new AcopTableParameters[] {(AcopTableParameters)parameters[0]};
121 			} else if (parameters[0] instanceof AcopDisplayerParameters) {
122 				return new AcopDisplayerParameters[] {(AcopDisplayerParameters)parameters[0]};
123 			}
124 		} 
125 		return super.castParameters(parameters);
126 	}
127 	
128 	/* (non-Javadoc)
129 	 * @see com.cosylab.gui.util.DisplayerParametersTransferHandler#importData(javax.swing.JComponent, java.awt.datatransfer.Transferable)
130 	 */
131 	@Override
132 	public boolean importData(JComponent comp, Transferable t) {
133 		try {
134 			if (t.isDataFlavorSupported(AcopTableParametersFlavor.FLAVOR)) {
135 				Object drop = t.getTransferData(AcopTableParametersFlavor.FLAVOR);
136 				
137 				if (!(drop instanceof AcopTableParameters[])) {
138 					return false;
139 				}
140 				
141 				AcopTableParameters[] p = (AcopTableParameters[])drop;
142 				for (int i = 0; i < p.length; i++) {
143 					setParametersToDisplayer(displayer,p[i]);
144 				}
145 				return true;
146 			} 			
147 		} catch (Exception e) {
148 			e.printStackTrace();
149 		}
150 		
151 		if (super.importData(comp,t)) {
152 			return true;
153 		}		
154 
155 		return false;
156 	}
157 	
158 }