package net.ms.designer.editors.enumcomponentdetail.ui; import java.io.IOException; import java.util.EventObject; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import net.ms.designer.core.MsProject; import net.ms.designer.core.IOStreams; import net.ms.designer.editors.enumcomponentdetail.action.PropertyAction; import net.ms.designer.editors.enumcomponentdetail.dnd.LogicTemplateTransferDropTargetListener; import net.ms.designer.editors.enumcomponentdetail.dnd.TextTransferDropTargetListener; import net.ms.designer.editors.enumcomponentdetail.editpart.PartFactory; import net.ms.designer.editors.enumcomponentdetail.model.Container; import net.ms.designer.editors.enumcomponentdetail.model.Table; import net.ms.designer.editors.enumcomponentdetail.palette.PaletteFactory; import net.ms.designer.editors.enumcomponentdetail.tools.MyContextMenuProvider; import net.ms.designer.editors.enumcomponentdetail.tools.WriteToEnumXML; import net.ms.designer.ui.view.MsTreeView; import net.ms.designer.ui.view.ITreeEntry; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.ContextMenuProvider; import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.dnd.TemplateTransferDragSourceListener; import org.eclipse.gef.editparts.FreeformGraphicalRootEditPart; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.ui.actions.ActionRegistry; import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.internal.UIPlugin; public class EnumDetailEditor extends GraphicalEditorWithPalette implements ISelectionChangedListener { private boolean savePreviouslyNeeded = false; Container diagram; IOStreams stream; MsProject project; private String filePath; public MsProject getProject() { return this.project; } public void setProject(MsProject project) { this.project = project; } public EnumDetailEditor() { this.setEditDomain(new DefaultEditDomain(this)); stream = new IOStreams(); } protected PaletteRoot getPaletteRoot() { return PaletteFactory.INSTANCE().createPaletteRoot(); } protected void initializePaletteViewer() { super.initializePaletteViewer(); getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer())); } protected void initializeGraphicalViewer() { // generate the diagram try { // get configure directory path String path = project.getConfigPath(); StringBuffer sb = new StringBuffer(path); sb.append(project.getComponentName()); sb.append(".ede"); filePath = sb.toString(); File file = new File(filePath); if(file.exists() && file.length() != 0) { diagram = (Container)stream.inputs(file.getAbsoluteFile().toString()); if(diagram != null) { this.getGraphicalViewer().setContents(diagram); } } else { diagram = new Container(); Table table = new Table(); Point p = new Point(88,88); table.setTableName(project.getComponentName()); table.setLocation(p); diagram.addChild(table); this.getGraphicalViewer().setContents(diagram); } this.getGraphicalViewer().addDropTargetListener(new LogicTemplateTransferDropTargetListener(getGraphicalViewer())); this.getGraphicalViewer().addDropTargetListener(new TextTransferDropTargetListener(getGraphicalViewer(), TextTransfer.getInstance())); } catch(Exception e) { e.printStackTrace(); } } protected void configureGraphicalViewer() { super.configureGraphicalViewer(); GraphicalViewer viewer = this.getGraphicalViewer(); // set teh RootEditPart viewer.setRootEditPart(new FreeformGraphicalRootEditPart()); // set the factory viewer.setEditPartFactory(new PartFactory()); ContextMenuProvider provider = new MyContextMenuProvider(viewer, getActionRegistry()); viewer.setContextMenu(provider); viewer.addSelectionChangedListener(this); getSite().registerContextMenu(provider, viewer); updateActions(getSelectionActions()); } public void doSave(IProgressMonitor monitor) { // TODO Auto-generated method stub // WriteToEnumXML write = new WriteToEnumXML(diagram , project); // String path = project.getConfigPath(); // StringBuffer sb = new StringBuffer(path); // StringBuffer sb1 = new StringBuffer(project.getProjectName()); // sb1.append("."); // sb1.append(project.getPackageName()); // sb1.append("."); // sb1.append(project.getComponentName()); // sb1.append(".xml"); // try{ // //save component information to xml file // write.writeXMLFile(sb.append(sb1.toString()).toString()); // //save component to file // sb = new StringBuffer(path); // stream.outputs(diagram , filePath); // } // catch(IOException ioe) // { // ioe.printStackTrace(); // } // catch(Exception e) // { // e.printStackTrace(); // } //// try { //// Object tmp = PropertyUtils.getProperty(getEditorInput(),"treeView"); //// Method [] methods = tmp.getClass().getMethods(); //// for(int i = 0; i < methods.length;i++) //// { //// if(methods[i].getName().equals("refresh")) //// methods[i].invoke(tmp , null); //// } //// } //// catch (IllegalAccessException e) //// { //// // TODO Auto-generated catch block //// e.printStackTrace(); //// } //// catch (InvocationTargetException e) //// { //// // TODO Auto-generated catch block //// e.printStackTrace(); //// } //// catch (NoSuchMethodException e) //// { //// // TODO Auto-generated catch block //// e.printStackTrace(); //// } // ((CEECTreeView)UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow() // .getActivePage().findView("net.ms.designer.ui.view.CEECTreeView")).refresh(); // // getCommandStack().markSaveLocation(); } /* (non-Javadoc) * @see org.eclipse.ui.part.EditorPart#doSaveAs() */ public void doSaveAs() { } public boolean isDirty() { return isSaveOnCloseNeeded(); } public boolean isSaveOnCloseNeeded() { return getCommandStack().isDirty(); } public boolean isSaveAsAllowed() { return false; } protected void createActions() { super.createActions(); ActionRegistry registry = getActionRegistry(); IAction action; action = new PropertyAction(this); registry.registerAction(action); getSelectionActions().add(action.getId()); } public void selectionChanged(SelectionChangedEvent event) { updateActions(getSelectionActions()); } public void setInput(IEditorInput input) { superSetInput(input); project = ((net.ms.designer.core.MsEditorInput)getEditorInput()).getProject(); // try // { // Object tmpproject = PropertyUtils.getProperty(getEditorInput(),"project"); // project=new net.ms.designer.core.MsProject(); // // project.setDirectory((String )PropertyUtils.getProperty(tmpproject,"directory")); // project.setProjectName((String )PropertyUtils.getProperty(tmpproject,"projectName")); // project.setGenPackageName((String)PropertyUtils.getProperty(tmpproject, "genPackageName")); // project.setPackageName((String )PropertyUtils.getProperty(tmpproject,"packageName")); // project.setComponentName((String )PropertyUtils.getProperty(tmpproject,"componentName")); // } // catch (IllegalAccessException e) // { // // TODO Auto-generated catch block // e.printStackTrace(); // } // catch (InvocationTargetException e) // { // // TODO Auto-generated catch block // e.printStackTrace(); // } // catch (NoSuchMethodException e) // { // // TODO Auto-generated catch block // e.printStackTrace(); // } } protected void superSetInput(IEditorInput input) { super.setInput(input); } public void commandStackChanged(EventObject event) { if (isDirty()) { if (!savePreviouslyNeeded()) { setSavePreviouslyNeeded(true); firePropertyChange(IEditorPart.PROP_DIRTY); } } else { setSavePreviouslyNeeded(false); firePropertyChange(IEditorPart.PROP_DIRTY); } super.commandStackChanged(event); } private void setSavePreviouslyNeeded(boolean value) { savePreviouslyNeeded = value; } private boolean savePreviouslyNeeded() { return savePreviouslyNeeded; } }