/* * Created on 17/02/2004 * */ package com.quantum.extensions; import java.io.IOException; import java.io.StringWriter; import java.util.Iterator; import javax.xml.parsers.ParserConfigurationException; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.ui.IViewPart; import org.eclipse.ui.actions.SelectionListenerAction; import org.w3c.dom.Document; import org.w3c.dom.Element; import com.quantum.Messages; import com.quantum.QuantumPlugin; import com.quantum.model.xml.ModelToXMLConverter; import com.quantum.sql.TableRow; import com.quantum.sql.metadata.MetaDataXMLInterface; import com.quantum.util.xml.XMLHelper; import com.quantum.view.bookmark.BookmarkView; import com.quantum.view.bookmark.EntityNode; import com.quantum.view.bookmark.TreeNode; import com.quantum.view.tableview.TableView; /** * @author panic * * Defines an Action Class to implement extension Actions. * An external plug-in that wants to extend quantum will * generate one ExtensionAction object for each action it * wants to perform. */ public class ExtensionAction extends SelectionListenerAction { private IViewPart view; private IQuantumExtension extension; private TableRow tableRow; public ExtensionAction(IViewPart view, String label, String toolTip, IQuantumExtension extension) { super(label); this.view = view; this.extension = extension; setText(label); setToolTipText(toolTip); //$NON-NLS-1$ tableRow = null; } public void run() { if (extension instanceof IMetadataExtension && view instanceof BookmarkView) runMetadataExtension(); else if (extension instanceof IDataExtension && view instanceof TableView) runDataExtension(); } /** * */ private void runDataExtension() { IDataExtension dataExtension = (IDataExtension) extension; if (tableRow == null) return; Document doc; try { doc = XMLHelper.createEmptyDocument(); } catch (ParserConfigurationException e) { e.printStackTrace(); return; } Element root = (Element) doc.appendChild(doc.createElement(Messages.getString("ExportXMLAction.Metadata"))); //$NON-NLS-1$ MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Author"), //$NON-NLS-1$ Messages.getString("ExportXMLAction.Quantum")); //$NON-NLS-1$ MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Version"), //$NON-NLS-1$ Messages.getString("ExportXMLAction.XMLVersionNumber")); //$NON-NLS-1$ ModelToXMLConverter.getInstance().convert(root, tableRow.getEntity() ); MetaDataXMLInterface.stringMatrixToXML(tableRow.getRowTableData(), doc, root, "DataRow"); //$NON-NLS-1$ dataExtension.run(doc); } private void runMetadataExtension() { IMetadataExtension metadataExtension = (IMetadataExtension) extension; BookmarkView bookmarkView = (BookmarkView) view; StructuredSelection selection = bookmarkView.getSelection(); if (selection == null) return; Document doc; try { doc = XMLHelper.createEmptyDocument(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); return; } Element root = (Element) doc.appendChild(doc.createElement(Messages.getString("ExportXMLAction.Metadata"))); //$NON-NLS-1$ MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Author"), //$NON-NLS-1$ Messages.getString("ExportXMLAction.Quantum")); //$NON-NLS-1$ MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Version"), //$NON-NLS-1$ Messages.getString("ExportXMLAction.XMLVersionNumber")); //$NON-NLS-1$ Iterator iter = selection.iterator(); while (iter.hasNext()) { TreeNode current = (TreeNode) iter.next(); EntityNode entityNode = (EntityNode) current; ModelToXMLConverter.getInstance().convert(root, entityNode.getEntity() ); } StringWriter text = new StringWriter(); try { XMLHelper.write(text, doc); } catch (IOException e) { e.printStackTrace(); } String textXml = new String(text.getBuffer()); QuantumPlugin.getDefault().getSysClip().setContents( new Object[] { textXml }, new Transfer[] { TextTransfer.getInstance()}); metadataExtension.run(doc); } /** * @param row */ public void addRowData(TableRow row) { tableRow = row; } }