/*
* Copyright (c) 2008 Stiftung Deutsches Elektronen-Synchrotron,
* Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
*
* THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
* WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
* IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
* CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
* NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
* DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
* OR MODIFICATIONS.
* THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
* USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
* PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
* AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
*/
package org.csstudio.sds.ui.internal.layers;
import org.csstudio.sds.internal.model.Layer;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.util.Policy;
import org.eclipse.swt.dnd.ByteArrayTransfer;
import org.eclipse.swt.dnd.TransferData;
/**
* Transfer handler for layers. Implements a pattern similar to
* {@link LocalSelectionTransfer}.
*
* @author swende
*
*/
final class LayerTransfer extends ByteArrayTransfer {
/**
* Type name.
*/
private static final String TYPE_NAME = "sds.layertransfer";
/**
* Type identifier.
*/
private static final int TYPE_ID = registerType(TYPE_NAME);
/**
* Singleton instance.
*/
private static LayerTransfer _instance;
/**
* Currently selected layer.
*/
private Layer _selectedLayer;
/**
* Private constructor (singleton pattern).
*/
private LayerTransfer() {
}
/**
* Returns the singleton instance.
*
* @return the singleton instance
*/
public static LayerTransfer getInstance() {
if (_instance == null) {
_instance = new LayerTransfer();
}
return _instance;
}
/**
* {@inheritDoc}
*/
@Override
protected String[] getTypeNames() {
return new String[] { TYPE_NAME };
}
/**
* {@inheritDoc}
*/
@Override
protected int[] getTypeIds() {
return new int[] { TYPE_ID };
}
/**
* {@inheritDoc}
*/
@Override
public void javaToNative(final Object object,
final TransferData transferData) {
byte[] check = TYPE_NAME.getBytes();
super.javaToNative(check, transferData);
}
/**
* {@inheritDoc}
*/
@Override
public Object nativeToJava(final TransferData transferData) {
Object result = super.nativeToJava(transferData);
if (isInvalidNativeType(result)) {
Policy
.getLog()
.log(
new Status(
IStatus.ERROR,
Policy.JFACE,
IStatus.ERROR,
JFaceResources
.getString("LocalSelectionTransfer.errorMessage"), null)); //$NON-NLS-1$
}
return _selectedLayer;
}
/**
* Tests whether native drop data matches this transfer type.
*
* @param result
* result of converting the native drop data to Java
* @return true if the native drop data does not match this transfer type.
* false otherwise.
*/
private boolean isInvalidNativeType(final Object result) {
return !(result instanceof byte[])
|| !TYPE_NAME.equals(new String((byte[]) result));
}
/**
* Sets the transfer data for local use.
*
* @param selectedLayer
* the transfered layer
*/
public void setSelectedLayer(final Layer selectedLayer) {
_selectedLayer = selectedLayer;
}
}