X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExportXMLAction.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExportXMLAction.java new file mode 100644 index 0000000..2dbd6ae --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExportXMLAction.java @@ -0,0 +1,130 @@ +package com.quantum.actions; + + +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Iterator; + +import javax.xml.parsers.ParserConfigurationException; + +import com.quantum.Messages; +import com.quantum.model.xml.ModelToXMLConverter; +import com.quantum.sql.metadata.MetaDataXMLInterface; +import com.quantum.util.xml.XMLHelper; +import com.quantum.view.ViewHelper; +import com.quantum.view.bookmark.BookmarkView; +import com.quantum.view.bookmark.EntityNode; +import com.quantum.view.bookmark.TreeNode; +import com.quantum.view.subset.SubsetView; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.ui.IViewActionDelegate; +import org.eclipse.ui.IViewPart; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * @author root + */ +public class ExportXMLAction extends Action implements IViewActionDelegate { + + IViewPart view; + /** + * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart) + */ + public void init(IViewPart view) { + this.view = view; + } + + /** + * @see org.eclipse.ui.IActionDelegate#run(IAction) + */ + public void run(IAction action) { + run(); + } + + public void run() { + + FileOutputStream out = ViewHelper.askSaveFile("exportxml", view.getSite().getShell()); + if (out == null) + return; + StructuredSelection selection = null; + if (view instanceof BookmarkView){ + BookmarkView bookmarkView = (BookmarkView) view; + selection = bookmarkView.getSelection(); + } else if (view instanceof SubsetView){ + SubsetView subsetView = (SubsetView) view; + selection = subsetView.getSelection(); + } + + try { + Document doc = XMLHelper.createEmptyDocument(); + exportXMLSelection(doc, selection); + try { + XMLHelper.write(out, doc); + } finally { + out.close(); + } + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + + } + + /** + * Exports to an XmlDocument the items selected in a StructuredSelection. + * @param doc + * @param selection + */ + public void exportXMLSelection(Document doc, StructuredSelection selection) { + 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(); +// TODO: reinstate this +// if (current instanceof SubsetNode){ +// SubsetNode subset = (SubsetNode) current; +// MetaDataXMLInterface.createElementText(root, Messages.getString("ExportXMLAction.Subset"), //$NON-NLS-1$ +// subset.getName()); //$NON-NLS-1$ +// Object[] children = subset.getChildren(); +// for (int i = 0; i < children.length; i++) { +// TreeNode objectNode = (TreeNode) children[i]; +// if (objectNode instanceof SelectableNode) +// ExportXMLAction.exportObject(root, (SelectableNode)objectNode); +// } +// } else { + exportObject(root, current); +// } + } + + } + + /** + * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection) + */ + public void selectionChanged(IAction action, ISelection selection) { + } + + /** + * Exports a TreeNode metadata representation to an XmlDocument, based on a an already-created root Element + * @param doc The XmlDocument to receive the metadata representation + * @param node The node with the metadata to export + * @param root The root element (already present in the XmlDocument) that will hold the metadata + */ + public void exportObject(Element root, TreeNode node) { + if (node instanceof EntityNode) { + EntityNode entityNode = (EntityNode) node; + ModelToXMLConverter.getInstance().convert(root, entityNode.getEntity()); + } + } +}