/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.studio.scripts.editor; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.util.List; import javax.swing.JComponent; import javax.swing.TransferHandler; import org.w3c.dom.Document; import com.opendoorlogistics.core.scripts.io.XMLConversionHandler; import com.opendoorlogistics.core.utils.XMLUtils; public abstract class ScriptXMLTransferHandler extends TransferHandler{ @Override public void exportToClipboard(JComponent comp, Clipboard clip, int action) { Transferable c = createTransferable(comp); clip.setContents(c, null); exportDone(comp, c, action); } @Override public int getSourceActions(JComponent c) { return COPY_OR_MOVE; } protected abstract XMLConversionHandler conversionHandler(); protected abstract Object getSelected(); protected abstract void pasteItem(Object o); @Override public boolean canImport(TransferHandler.TransferSupport support) { return conversionHandler()!=null; } @SuppressWarnings("unchecked") @Override public boolean importData(JComponent c, Transferable t) { if(conversionHandler()!=null){ if (canImport(new TransferHandler.TransferSupport(c, t))) { DataFlavor flavor = DataFlavor.stringFlavor; if (t.isDataFlavorSupported(flavor)) { try { Object data = t.getTransferData(flavor); if (data instanceof String) { Document doc = XMLUtils.parse((String)data); if(doc!=null){ List<Object> list = conversionHandler().fromXML(doc); if(list!=null){ for(Object obj:list){ pasteItem(obj); } } } } } catch (Throwable e) { } } } } return false; } @Override public Transferable createTransferable(JComponent c) { if(conversionHandler()!=null && getSelected()!=null){ Document doc = conversionHandler().toXML(getSelected()); if(doc!=null){ String s= XMLUtils.toString(doc, XMLUtils.getPrettyPrintFormat()); return new StringSelection(s); } } return null; } }