X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fdnd%2FResourceReferenceTransfer.java;fp=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fdnd%2FResourceReferenceTransfer.java;h=98bca314dd6f7b0910db7704cc773421bfed307d;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=10e39c1302e65f39cd31e3f76d48b1a8256a5d6c;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/dnd/ResourceReferenceTransfer.java b/bundles/org.simantics.ui/src/org/simantics/ui/dnd/ResourceReferenceTransfer.java index 10e39c130..98bca314d 100644 --- a/bundles/org.simantics.ui/src/org/simantics/ui/dnd/ResourceReferenceTransfer.java +++ b/bundles/org.simantics.ui/src/org/simantics/ui/dnd/ResourceReferenceTransfer.java @@ -1,145 +1,145 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.ui.dnd; - -import org.eclipse.swt.dnd.ByteArrayTransfer; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.dnd.TransferData; -import org.simantics.db.Resource; -import org.simantics.db.Session; -import org.simantics.db.common.ResourceArray; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.service.SerialisationSupport; -import org.simantics.ui.SimanticsUI; - -/** - * @author Tuukka Lehtonen - */ -public class ResourceReferenceTransfer extends ByteArrayTransfer { - - private static final String TYPENAME = "ResourceReferenceTransfer"; - - private static final int TYPEID = registerType(TYPENAME); - - private static final ResourceReferenceTransfer INSTANCE = createInstance((String) null); - - private String purpose; - private Session session; - - public static ResourceReferenceTransfer getInstance() { - return INSTANCE; - } - - public static ResourceReferenceTransfer createInstance(Session session) { - ResourceReferenceTransfer result = new ResourceReferenceTransfer(null); - result.session = session; - return result; - } - - public static ResourceReferenceTransfer createInstance(String purpose) { - ResourceReferenceTransfer result = new ResourceReferenceTransfer(purpose); - return result; - } - - ResourceReferenceTransfer(String purpose) { - this.purpose = purpose; - } - - private Session getSession() { - // NOTE return SimanticsUI is a big HAXXX - return session == null ? SimanticsUI.getSession() : session; - } - - public void javaToNative(Object object, TransferData transferData) { - if (!checkResourceReference(object) || !isSupportedType(transferData)) { - DND.error(DND.ERROR_INVALID_DATA); - } - ResourceArray[] resources = null; - if (object instanceof Resource) - resources = new ResourceArray[] {new ResourceArray((Resource) object)}; - if (object instanceof Resource[]) - resources = new ResourceArray[] {new ResourceArray((Resource[]) object)}; - if (object instanceof ResourceArray) - resources = new ResourceArray[] {(ResourceArray) object}; - if (object instanceof ResourceArray[]) - resources = (ResourceArray[]) object; - if (resources==null) - DND.error(DND.ERROR_INVALID_DATA); - //throw new IllegalArgumentException(); - - // write data to a byte array and then ask super to convert to - // pMedium - Session s = getSession(); - SerialisationSupport support = s.getService(SerialisationSupport.class); - ResourceTransferData rtd = new ResourceTransferData(s, resources); - rtd.setPurpose(purpose); - - Object buffer; - try { - buffer = ResourceTransferUtils.createStringTransferable(support, rtd); - } catch (DatabaseException e) { - throw new RuntimeException(e); - } - TextTransfer.getInstance().javaToNative(buffer, transferData); - } - - public Object nativeToJava(TransferData transferData) { - if (isSupportedType(transferData)) { - String buffer = (String) TextTransfer.getInstance().nativeToJava(transferData); - if (buffer == null) - return null; - - Session s = getSession(); - SerialisationSupport support = s.getService(SerialisationSupport.class); - ResourceTransferData rtd; - try { - rtd = ResourceTransferUtils.readStringTransferable(support, buffer); - } catch (IllegalArgumentException e) { - throw new RuntimeException(e); - } catch (DatabaseException e) { - throw new RuntimeException(e); - } - // FIXME: the transferred "purpose" data cannot be passed further - // because this method is currently assumed to return - // ResourceArray[] instead of ResourceTransferData - return rtd.toResourceArrayArray(); - } - return null; - } - - protected String[] getTypeNames() { - return new String[] { TYPENAME }; - } - - protected int[] getTypeIds() { - return new int[] { TYPEID }; - } - - boolean checkResourceReference(Object object) { - System.out.println("o = " + object); - if (object == null) return false; - if ( !(object instanceof ResourceArray[]) || ((ResourceArray[]) object).length == 0) { - return false; - } -// ResourceReference[] ResourceReferences = (ResourceReference[]) object; -// for (int i = 0; i < ResourceReferences.length; i++) { -// // Check each reference if there is something to check -// } - return true; - } - - protected boolean validate(Object object) { - return checkResourceReference(object); - } - -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.ui.dnd; + +import org.eclipse.swt.dnd.ByteArrayTransfer; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.TransferData; +import org.simantics.db.Resource; +import org.simantics.db.Session; +import org.simantics.db.common.ResourceArray; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.service.SerialisationSupport; +import org.simantics.ui.SimanticsUI; + +/** + * @author Tuukka Lehtonen + */ +public class ResourceReferenceTransfer extends ByteArrayTransfer { + + private static final String TYPENAME = "ResourceReferenceTransfer"; + + private static final int TYPEID = registerType(TYPENAME); + + private static final ResourceReferenceTransfer INSTANCE = createInstance((String) null); + + private String purpose; + private Session session; + + public static ResourceReferenceTransfer getInstance() { + return INSTANCE; + } + + public static ResourceReferenceTransfer createInstance(Session session) { + ResourceReferenceTransfer result = new ResourceReferenceTransfer(null); + result.session = session; + return result; + } + + public static ResourceReferenceTransfer createInstance(String purpose) { + ResourceReferenceTransfer result = new ResourceReferenceTransfer(purpose); + return result; + } + + ResourceReferenceTransfer(String purpose) { + this.purpose = purpose; + } + + private Session getSession() { + // NOTE return SimanticsUI is a big HAXXX + return session == null ? SimanticsUI.getSession() : session; + } + + public void javaToNative(Object object, TransferData transferData) { + if (!checkResourceReference(object) || !isSupportedType(transferData)) { + DND.error(DND.ERROR_INVALID_DATA); + } + ResourceArray[] resources = null; + if (object instanceof Resource) + resources = new ResourceArray[] {new ResourceArray((Resource) object)}; + if (object instanceof Resource[]) + resources = new ResourceArray[] {new ResourceArray((Resource[]) object)}; + if (object instanceof ResourceArray) + resources = new ResourceArray[] {(ResourceArray) object}; + if (object instanceof ResourceArray[]) + resources = (ResourceArray[]) object; + if (resources==null) + DND.error(DND.ERROR_INVALID_DATA); + //throw new IllegalArgumentException(); + + // write data to a byte array and then ask super to convert to + // pMedium + Session s = getSession(); + SerialisationSupport support = s.getService(SerialisationSupport.class); + ResourceTransferData rtd = new ResourceTransferData(s, resources); + rtd.setPurpose(purpose); + + Object buffer; + try { + buffer = ResourceTransferUtils.createStringTransferable(support, rtd); + } catch (DatabaseException e) { + throw new RuntimeException(e); + } + TextTransfer.getInstance().javaToNative(buffer, transferData); + } + + public Object nativeToJava(TransferData transferData) { + if (isSupportedType(transferData)) { + String buffer = (String) TextTransfer.getInstance().nativeToJava(transferData); + if (buffer == null) + return null; + + Session s = getSession(); + SerialisationSupport support = s.getService(SerialisationSupport.class); + ResourceTransferData rtd; + try { + rtd = ResourceTransferUtils.readStringTransferable(support, buffer); + } catch (IllegalArgumentException e) { + throw new RuntimeException(e); + } catch (DatabaseException e) { + throw new RuntimeException(e); + } + // FIXME: the transferred "purpose" data cannot be passed further + // because this method is currently assumed to return + // ResourceArray[] instead of ResourceTransferData + return rtd.toResourceArrayArray(); + } + return null; + } + + protected String[] getTypeNames() { + return new String[] { TYPENAME }; + } + + protected int[] getTypeIds() { + return new int[] { TYPEID }; + } + + boolean checkResourceReference(Object object) { + System.out.println("o = " + object); + if (object == null) return false; + if ( !(object instanceof ResourceArray[]) || ((ResourceArray[]) object).length == 0) { + return false; + } +// ResourceReference[] ResourceReferences = (ResourceReference[]) object; +// for (int i = 0; i < ResourceReferences.length; i++) { +// // Check each reference if there is something to check +// } + return true; + } + + protected boolean validate(Object object) { + return checkResourceReference(object); + } + +}