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.beans.PropertyVetoException;
29  import java.io.IOException;
30  
31  import javax.swing.JComponent;
32  
33  import com.cosylab.gui.displayers.DisplayerParameters;
34  
35  import de.desy.acop.displayers.selector.AcopGraphParametersDialog;
36  import de.desy.acop.transport.ConnectionParameters;
37  
38  /**
39   * <code>GraphParametersTransferHandler</code> is an extension of 
40   * TransferHandler which can handle <code>AcopGraphParameters</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 AcopGraphParameters
45   */
46  public abstract class GraphParametersTransferHandler extends AbstractMDPTransferHandler{
47  	
48  	private static final long serialVersionUID = 4277524441131938702L;
49  	private AcopGraphParametersDialog graphDialog;
50  
51  	/**
52  	 * Constructs new GraphParametersTransferHandler.
53  	 * 
54  	 * @param comp
55  	 * @param reciveEnabled
56  	 * @param exportEnabled
57  	 * @param f 
58  	 * @param resetFlavors
59  	 * @see AbstractMDPTransferHandler#AbstractMDPTransferHandler(JComponent, boolean, boolean, DataFlavor[], boolean)
60  	 */
61  	public GraphParametersTransferHandler(JComponent comp, boolean reciveEnabled, boolean exportEnabled, DataFlavor[] f, boolean resetFlavors) {
62  		super(comp, reciveEnabled, exportEnabled, f, resetFlavors);
63  	}
64  	
65  	@Override
66  	protected boolean importString(String string) throws PropertyVetoException {
67  		ConnectionParameters cp = new ConnectionParameters(string);
68  		return importDisplayerParameters(new AcopGraphParameters[]{new AcopGraphParameters(cp)});
69  	}
70  	
71  	/* (non-Javadoc)
72  	 * @see com.cosylab.gui.components.util.CosyTransferHandler#getTransferData(java.awt.datatransfer.DataFlavor)
73  	 */
74  	@Override
75  	public Object getTransferData(DataFlavor flavor)
76  			throws UnsupportedFlavorException, IOException {
77  		if (flavor instanceof AcopGraphParametersFlavor){
78  			DisplayerParameters[] p = exportMultipleDisplayerParameters();
79  			return p;
80  		} else {
81  			return super.getTransferData(flavor);
82  		}
83  	}
84  	
85  	/*
86  	 * (non-Javadoc)
87  	 * @see de.desy.acop.displayers.tools.AcopMultipleDisplayerParametersTransferHandler#convertParameters(de.desy.acop.displayers.tools.AcopDisplayerParameters)
88  	 */
89  	@Override
90  	protected AcopDisplayerParameters convertParameters(AcopDisplayerParameters adp) {
91  		if (graphDialog == null) {
92  			graphDialog = new AcopGraphParametersDialog(displayer);
93  		}
94  		AcopGraphParameters p = graphDialog.showDialog(displayer,adp);
95  		
96  		return p;
97  	}
98  	
99  	/*
100 	 * (non-Javadoc)
101 	 * @see de.desy.acop.displayers.tools.AcopMultipleDisplayerParametersTransferHandler#convertParameters(de.desy.acop.transport.ConnectionParameters)
102 	 */
103 	@Override
104 	protected AcopDisplayerParameters convertParameters(ConnectionParameters adp) {
105 		if (graphDialog == null) {
106 			graphDialog = new AcopGraphParametersDialog(displayer);
107 		}
108 		return graphDialog.showDialog(displayer,adp);	
109 	}
110 	
111 	/**
112 	 * Override to provide conversion from AcopGraphParameters to higher level 
113 	 * parameters.
114 	 * @param agp
115 	 * @return
116 	 */
117 	protected AcopDisplayerParameters convertParameters(AcopGraphParameters agp) {
118 		return agp;
119 	}
120 	
121 	/*
122 	 * (non-Javadoc)
123 	 * @see com.cosylab.gui.util.DisplayerParametersTransferHandler#castParameters(java.lang.Object[])
124 	 */
125 	@Override
126 	protected DisplayerParameters[] castParameters(Object... parameters) {
127 		if (parameters instanceof AcopGraphParameters[]) {
128 			return (AcopGraphParameters[])parameters.getClass().cast(parameters);
129 		} else if (parameters.length == 1 && parameters[0] instanceof AcopGraphParameters) {
130 			return new AcopGraphParameters[] {(AcopGraphParameters)parameters[0]};
131 		} 
132 		return super.castParameters(parameters);
133 	}
134 		
135 	/* (non-Javadoc)
136 	 * @see com.cosylab.gui.util.DisplayerParametersTransferHandler#importData(javax.swing.JComponent, java.awt.datatransfer.Transferable)
137 	 */
138 	@Override
139 	public boolean importData(JComponent comp, Transferable t) {
140 		try {
141 			if (t.isDataFlavorSupported(AcopGraphParametersFlavor.FLAVOR)) {
142 				Object drop = t.getTransferData(AcopGraphParametersFlavor.FLAVOR);
143 				
144 				if (!(drop instanceof AcopGraphParameters[])) {
145 					return false;
146 				}
147 				
148 				AcopGraphParameters[] p = (AcopGraphParameters[])drop;
149 				for (int i = 0; i < p.length; i++) {
150 					AcopDisplayerParameters a = convertParameters(p[i]);
151 					if (a!=null) {
152 						importDisplayerParameters(new AcopDisplayerParameters[]{a});
153 					}
154 				}
155 				return true;
156 			}
157 		} catch (Exception e) {
158 			e.printStackTrace();
159 		}
160 		
161 		if (super.importData(comp,t)) {
162 			return true;
163 		}		
164 		return false;
165 	}
166 	
167 	/*
168 	 * (non-Javadoc)
169 	 * @see de.desy.acop.displayers.tools.AbstractMDPTransferHandler#exportMultipleDisplayerParameters()
170 	 */
171 	protected abstract AcopDisplayerParameters[] exportMultipleDisplayerParameters();
172 	
173 }