X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/SubsetView.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/SubsetView.java new file mode 100644 index 0000000..448ff51 --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/SubsetView.java @@ -0,0 +1,354 @@ +package com.quantum.view.subset; + +import java.io.IOException; +import java.io.StringReader; +import java.util.Vector; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import com.quantum.Messages; +import com.quantum.QuantumPlugin; +import com.quantum.actions.CustomCopyAction; +import com.quantum.actions.DeleteColumnAction; +import com.quantum.actions.DeleteObjectAction; +import com.quantum.actions.DeleteSubsetAction; +import com.quantum.actions.ExportXMLAction; +import com.quantum.actions.NewSubsetAction; +import com.quantum.actions.ViewTableAction; +import com.quantum.view.bookmark.ColumnNode; +import com.quantum.view.bookmark.TreeNode; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.part.ViewPart; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +/** + * @author panic + * + * View for subsets + * */ +public class SubsetView extends ViewPart { + + private SubsetContentProvider provider = SubsetContentProvider.getInstance(); + private NewSubsetAction newSubsetAction; + private DeleteSubsetAction deleteSubsetAction; + private DeleteObjectAction deleteObjectAction; + private DeleteColumnAction deleteColumnAction; + private CustomCopyAction customCopyAction; + + private ViewTableAction viewTableAction; + private ExportXMLAction exportXMLAction; + private static SubsetView instance = null; + private TreeViewer treeViewer; + private Label status; + public synchronized static SubsetView getInstance() { + return instance; + } + /** + * Returns the current selected object in the tree. If it's a multiple selection, return the first. + * @return + */ + public Object getCurrent() { + if (treeViewer == null) return null; + return ((StructuredSelection) treeViewer.getSelection()) + .getFirstElement(); + } + /** + * Returns the current selected objects in the tree, in the form of a StructuredSelection. + * @return + */ + public StructuredSelection getSelection() { + if (treeViewer == null) return null; + return ((StructuredSelection) treeViewer.getSelection()); + } + + /** + * Navigates the tree to get the current subset (root) of the selected element. + * If it's a multiple selection, it takes the first one. + * @return + */ + public SubsetNode getCurrentSubset() { + TreeNode current = (TreeNode) getCurrent(); + + return getRoot(current); + } + + /** + * Navigates a given TreeNode till finds a SubsetNode + * @param node + * @return + */ + private static SubsetNode getRoot(TreeNode node){ + while (!( node instanceof SubsetNode)) + { + node = (TreeNode) node.getParent(); + } + return (SubsetNode) node; + + } + + + /** + * Deletes the current node (first selected) in the tree + */ + public void deleteCurrent() { + provider.removeSubset(getCurrentSubset()); + treeViewer.refresh(); + } + + public void refreshSubsetData(){ + //if (treeViewer == null) return; + //SubsetContentProvider provider = (SubsetContentProvider) treeViewer.getContentProvider(); + //Object[] objects = provider.getElements(Root.ROOT); + //for (int i = 0; i < objects.length; i++) { + //SubsetNode current = (SubsetNode) objects[i]; + + //} + } + + public void expandCurrent(SubsetNode node) { + treeViewer.setExpandedState(node, true); + treeViewer.refresh(node, false); + } + public void refresh() { + treeViewer.refresh(); + } + public void disconnect() { + } + + public void createPartControl(org.eclipse.swt.widgets.Composite parent) { + instance = this; + initActions(); + Composite main = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(1, false); + layout.horizontalSpacing = 0; + layout.verticalSpacing = 0; + main.setLayout(layout); + + + treeViewer = new TreeViewer(main); + treeViewer.setContentProvider(provider); + treeViewer.setLabelProvider(new SubsetLabelProvider()); + treeViewer.setInput(SubsetRoot.ROOT); + MenuManager manager = new MenuManager(); + manager.setRemoveAllWhenShown(true); + Menu fTextContextMenu = + manager.createContextMenu(treeViewer.getControl()); + treeViewer.getControl().setMenu(fTextContextMenu); + treeViewer.addDoubleClickListener(new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { + Object sel = getCurrent(); + if (sel instanceof ObjectNode) { + viewTableAction.run(); + } + } + }); + + manager.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager mgr) { + Object sel = getCurrent(); + if (sel instanceof SubsetNode) { + mgr.add(deleteSubsetAction); + deleteSubsetAction.setText(Messages.getString("SubsetView.Delete")); //$NON-NLS-1$ + deleteSubsetAction.setImageDescriptor( + QuantumPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$ + mgr.add(pasteAction); + pasteAction.setText(Messages.getString("SubsetView.Paste")); //$NON-NLS-1$ + pasteAction.setImageDescriptor(QuantumPlugin.getImageDescriptor("paste.gif")); //$NON-NLS-1$ + mgr.add(exportXMLAction); + exportXMLAction.setText(Messages.getString("bookmarkview.exportXML")); //$NON-NLS-1$ + exportXMLAction.setImageDescriptor(QuantumPlugin.getImageDescriptor("xml.gif")); //$NON-NLS-1$ + + } else if (sel instanceof ObjectNode) { + mgr.add(deleteObjectAction); + deleteObjectAction.setText(Messages.getString("SubsetView.Delete")); //$NON-NLS-1$ + deleteObjectAction.setImageDescriptor(QuantumPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$ + mgr.add(viewTableAction); + viewTableAction.setText(Messages.getString("bookmarkview.viewTable")); //$NON-NLS-1$ + viewTableAction.setImageDescriptor(QuantumPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$ + mgr.add(exportXMLAction); + exportXMLAction.setText(Messages.getString("bookmarkview.exportXML")); //$NON-NLS-1$ + exportXMLAction.setImageDescriptor(QuantumPlugin.getImageDescriptor("xml.gif")); //$NON-NLS-1$ + customCopyAction.selectionChanged( + (IStructuredSelection) treeViewer.getSelection()); + mgr.add(customCopyAction); + } else if (sel instanceof ColumnNode){ + mgr.add(deleteColumnAction); + deleteColumnAction.setText(Messages.getString("SubsetView.Delete")); //$NON-NLS-1$ + deleteColumnAction.setImageDescriptor(QuantumPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$ + customCopyAction.selectionChanged( + (IStructuredSelection) treeViewer.getSelection()); + mgr.add(customCopyAction); + + } else { + mgr.add(newSubsetAction); + } + } + }); + + GridData gridData = new GridData(); + gridData.horizontalAlignment = GridData.FILL; + gridData.verticalAlignment = GridData.FILL; + gridData.grabExcessHorizontalSpace = true; + gridData.grabExcessVerticalSpace = true; + treeViewer.getControl().setLayoutData(gridData); + status = new Label(main, SWT.NONE); + gridData = new GridData(); + gridData.horizontalAlignment = GridData.FILL; + gridData.grabExcessHorizontalSpace = true; + status.setLayoutData(gridData); + + IActionBars bars = getViewSite().getActionBars(); + bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction); + bars.setGlobalActionHandler(IWorkbenchActionConstants.DELETE, deleteSubsetAction); + + IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager(); + toolBar.add(newSubsetAction); + + status.setText(Messages.getString("bookmarkview.done")); //$NON-NLS-1$ + } + public void initActions() { + newSubsetAction = new NewSubsetAction(); + newSubsetAction.setText("New Subset"); //$NON-NLS-1$ + newSubsetAction.setToolTipText(Messages.getString("SubsetView.CreatesANewEmptySubset")); //$NON-NLS-1$ + newSubsetAction.setImageDescriptor( + QuantumPlugin.getImageDescriptor("subset.gif")); //$NON-NLS-1$ + newSubsetAction.init(this); + deleteColumnAction = new DeleteColumnAction(); + deleteColumnAction.setText("Delete Column"); //$NON-NLS-1$ + deleteColumnAction.setToolTipText(Messages.getString("SubsetView.DeletesTheSelectedColumns")); //$NON-NLS-1$ + deleteColumnAction.setImageDescriptor( + QuantumPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$ + deleteColumnAction.init(this); + deleteObjectAction = new DeleteObjectAction(); + deleteObjectAction.setText("Delete Object"); //$NON-NLS-1$ + deleteObjectAction.setToolTipText(Messages.getString("SubsetView.DeletesTheSelectedObject")); //$NON-NLS-1$ + deleteObjectAction.setImageDescriptor( + QuantumPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$ + deleteObjectAction.init(this); + deleteSubsetAction = new DeleteSubsetAction(); + deleteSubsetAction.setText("Delete Subset"); //$NON-NLS-1$ + deleteSubsetAction.setToolTipText(Messages.getString("SubsetView.DeletesTheSelectedSubset")); //$NON-NLS-1$ + deleteSubsetAction.setImageDescriptor( + QuantumPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$ + deleteSubsetAction.init(this); +// viewTableAction = new ViewTableAction(); +// viewTableAction.setText(Messages.getString("bookmarkview.viewTable")); //$NON-NLS-1$ +// viewTableAction.setImageDescriptor( +// QuantumPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$ +// viewTableAction.init(this); + exportXMLAction = new ExportXMLAction(); + exportXMLAction.setText(Messages.getString("bookmarkview.exportXML")); //$NON-NLS-1$ + exportXMLAction.setImageDescriptor( + QuantumPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$ + exportXMLAction.init(this); + + this.customCopyAction = new CustomCopyAction(this,1); // 1 is unused, just in case more custom copies are defined + this.customCopyAction.setText(Messages.getString("bookmarkview.customCopyAction")); //$NON-NLS-1$ + this.customCopyAction.setImageDescriptor( + QuantumPlugin.getImageDescriptor("copy.gif")); //$NON-NLS-1$ + + + + } + public void setFocus() { + } + + private Action pasteAction = new Action() { + public void run() { + Object sel = getCurrent(); + if (sel == null) return; + if (!(sel instanceof SubsetNode)) return; + + SubsetNode subset = (SubsetNode) sel; + + TextTransfer transfer = TextTransfer.getInstance(); + String xmlMetaData = (String) QuantumPlugin.getDefault().getSysClip().getContents(transfer); + StringReader text = new StringReader(xmlMetaData); + InputSource source = new InputSource(text); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder parser; + Document doc; + try { + parser = factory.newDocumentBuilder(); + doc = parser.parse(source); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + return; + } catch (SAXException e) { + e.printStackTrace(); + return; + } catch (IOException e) { + e.printStackTrace(); + return; + } + Element root = doc.getDocumentElement(); + subset.importXML(root, false); + treeViewer.refresh(); + provider.setHasChanged(true); + + } + }; + + public void addNewSubset(SubsetNode subset) { + provider.addSubset(subset); + treeViewer.refresh(); + } + public void setStatus(String text) { + status.setText(text); + } + public void dispose(){ + super.dispose(); + } + + /** + * Returs a Vector with all the elements of the treeViewer + * @return + */ + public Vector getElements(){ + Vector result = new Vector(); + if (treeViewer == null) return result; + SubsetContentProvider provider = (SubsetContentProvider) treeViewer.getContentProvider(); + Object[] objects = provider.getElements(SubsetRoot.ROOT); + for (int i = 0; i < objects.length; i++) { + SubsetNode current = (SubsetNode) objects[i]; + result.add(current); + } + return result; + } + + public void deleteColumn (ColumnNode column){ + provider.deleteColumn(column); + treeViewer.refresh(); + } + + public void deleteObject (ObjectNode object){ + provider.deleteObject(object); + treeViewer.refresh(); + } + + +}