initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / extensions / ExtensionAction.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/extensions/ExtensionAction.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/extensions/ExtensionAction.java
new file mode 100644 (file)
index 0000000..50a35db
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * 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.createDOMSerializer(text).serialize(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;
+       }
+
+}