View Javadoc

1   package de.desy.acop.video;
2   
3   import java.awt.datatransfer.DataFlavor;
4   import java.awt.datatransfer.Transferable;
5   import java.awt.datatransfer.UnsupportedFlavorException;
6   import java.beans.PropertyVetoException;
7   import java.io.IOException;
8   
9   import javax.swing.JComponent;
10  
11  import com.cosylab.gui.displayers.DisplayerParameters;
12  import com.cosylab.gui.util.AbstractDisplayerParametersTransferHandler;
13  import com.cosylab.gui.util.DisplayerParametersFlavor;
14  
15  import de.desy.acop.displayers.tools.AcopDisplayerParameters;
16  import de.desy.acop.displayers.tools.AcopDisplayerParametersFlavor;
17  import de.desy.acop.displayers.tools.ConnectionParametersFlavor;
18  import de.desy.acop.transport.ConnectionParameters;
19  
20  /**
21   * 
22   * <code>AcopVideoTransferHandler</code> is the transfer handler employed by the AcopVideo.
23   * 
24   * @author <a href="mailto:jaka.bobnar@cosylab.com">Jaka Bobnar</a>
25   * @version $Id: Templates.xml,v 1.10 2004/01/13 16:17:13 jbobnar Exp $
26   * 
27   */
28  public class AcopVideoTransferHandler extends AbstractDisplayerParametersTransferHandler {
29  
30  	private static final long serialVersionUID = 1L;
31  
32  	/**
33  	 * Constructs a new AcopVideoTransferHandler associated with the given AcopVideo.
34  	 * 
35  	 * @param comp
36  	 */
37  	public AcopVideoTransferHandler(AcopVideo comp) {
38  		super(comp, true, true, new DataFlavor[] { AcopVideoParametersFlavor.FLAVOR, AcopDisplayerParametersFlavor.FLAVOR, DisplayerParametersFlavor.FLAVOR,
39  				ConnectionParametersFlavor.FLAVOR, DataFlavor.stringFlavor }, true);
40  
41  	}
42  
43  	/*
44  	 * (non-Javadoc)
45  	 * 
46  	 * @see com.cosylab.gui.util.DefaultDisplayerParametersTransferHandler#exportDisplayerParameters()
47  	 */
48  	@Override
49  	protected DisplayerParameters exportDisplayerParameters() {
50  		AcopVideo disp = (AcopVideo) displayer;
51  		return new AcopVideoParameters(disp.getConnectionParameters(), //
52  				disp.isAOIZoom(), //
53  				disp.getImageZoom(), //
54  				disp.getOverlayState(), //
55  				disp.isKeepAspectRatio(), //  
56  				disp.isHistogramEqualisation(), //
57  				disp.getHistogramMin(), //
58  				disp.getHistogramMax(), //
59  				disp.getColorMap(), //
60  				disp.isDisplayClutHeader());
61  	}
62  
63  	/*
64  	 * (non-Javadoc)
65  	 * 
66  	 * @see com.cosylab.gui.components.util.CosyTransferHandler#getTransferData(java.awt.datatransfer.DataFlavor)
67  	 */
68  	@Override
69  	public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
70  		if (flavor instanceof AcopDisplayerParametersFlavor) {
71  			return new AcopDisplayerParameters[] { (AcopDisplayerParameters) exportDisplayerParameters() };
72  		} else if (flavor instanceof ConnectionParametersFlavor) {
73  			return new ConnectionParameters[] { ((AcopDisplayerParameters) exportDisplayerParameters()).getConnectionParameters() };
74  		} else if (flavor.isFlavorTextType()) {
75  			return ((AcopDisplayerParameters) exportDisplayerParameters()).getConnectionParameters().getRemoteName();
76  		} else {
77  			return super.getTransferData(flavor);
78  		}
79  	}
80  
81  	/*
82  	 * (non-Javadoc)
83  	 * 
84  	 * @see com.cosylab.gui.util.AbstractDisplayerParametersTransferHandler#importData(javax.swing.JComponent, java.awt.datatransfer.Transferable)
85  	 */
86  	@Override
87  	public boolean importData(JComponent comp, Transferable t) {
88  		try {
89  			if (t.isDataFlavorSupported(AcopDisplayerParametersFlavor.FLAVOR)) {
90  				Object[] drop = (Object[]) t.getTransferData(AcopDisplayerParametersFlavor.FLAVOR);
91  				DisplayerParameters[] dp = null;
92  				dp = castParameters(drop);
93  				if (dp != null) {
94  					return importDisplayerParameters(dp);
95  				}
96  			} else if (t.isDataFlavorSupported(ConnectionParametersFlavor.FLAVOR)) {
97  				Object drop = t.getTransferData(ConnectionParametersFlavor.FLAVOR);
98  
99  				if (drop != null) {
100 					ConnectionParameters[] cp = null;
101 					if (drop instanceof ConnectionParameters) {
102 						cp = new ConnectionParameters[] { (ConnectionParameters) drop };
103 					} else if (drop instanceof ConnectionParameters[]) {
104 						cp = (ConnectionParameters[]) drop;
105 					} else {
106 						return super.importData(comp, t);
107 					}
108 
109 					AcopVideoParameters[] param = new AcopVideoParameters[cp.length];
110 					for (int i = 0; i < param.length; i++) {
111 						param[i] = new AcopVideoParameters(cp[i]);
112 					}
113 
114 					return importDisplayerParameters(param);
115 				}
116 			}
117 			return super.importData(comp, t);
118 		} catch (Exception e) {
119 			e.printStackTrace();
120 		}
121 		return false;
122 
123 	}
124 
125 	/*
126 	 * (non-Javadoc)
127 	 * 
128 	 * @see com.cosylab.gui.util.AbstractDisplayerParametersTransferHandler#importString(java.lang.String)
129 	 */
130 	@Override
131 	protected boolean importString(String string) throws PropertyVetoException {
132 		if (string.indexOf('\n') > 0) {
133 			return false;
134 		}
135 		try {
136 			ConnectionParameters cp = new ConnectionParameters(string);
137 			return importDisplayerParameters(new AcopVideoParameters[] { new AcopVideoParameters(cp) });
138 		} catch (IllegalArgumentException e) {
139 			return false;
140 		}
141 
142 	}
143 
144 	/*
145 	 * (non-Javadoc)
146 	 * 
147 	 * @see com.cosylab.gui.util.AbstractDisplayerParametersTransferHandler#castParameters(java.lang.Object[])
148 	 */
149 	@Override
150 	protected DisplayerParameters[] castParameters(Object... parameters) {
151 		if (parameters instanceof AcopVideoParameters[]) {
152 			return (AcopVideoParameters[]) parameters.getClass().cast(parameters);
153 		} else if (parameters.length == 1) {
154 			if (parameters[0] instanceof AcopVideoParameters[]) {
155 				return (AcopVideoParameters[]) parameters[0];
156 			} else if (parameters[0] instanceof AcopVideoParameters) {
157 				return new AcopVideoParameters[] { (AcopVideoParameters) parameters[0] };
158 			}
159 		}
160 		return super.castParameters(parameters);
161 	}
162 
163 	/*
164 	 * (non-Javadoc)
165 	 * 
166 	 * @see com.cosylab.gui.util.AbstractDisplayerParametersTransferHandler#setParametersToDisplayer(java.lang.Object,
167 	 * com.cosylab.gui.displayers.DisplayerParameters)
168 	 */
169 	@Override
170 	public boolean setParametersToDisplayer(Object disp, DisplayerParameters parameters) throws PropertyVetoException {
171 		((AcopVideo) disp).stop();
172 		boolean result = super.setParametersToDisplayer(disp, parameters);
173 		((AcopVideo) disp).start();
174 		return result;
175 	}
176 
177 }