package net.ms.designer.editors.component.ui; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.EventObject; import java.util.List; import net.ms.designer.core.MsEditorInput; import net.ms.designer.core.MsProject; import net.ms.designer.core.IOStreams; import net.ms.designer.editors.component.actions.PropertyAction; import net.ms.designer.editors.component.dnd.DiagramTemplateTransferDropTargetListener; import net.ms.designer.editors.component.editparts.PartFactory; import net.ms.designer.editors.component.editparts.TreePartFactory; import net.ms.designer.editors.component.models.BizComponent; import net.ms.designer.editors.component.models.CompDiagram; import net.ms.designer.editors.component.models.EnumComponent; import net.ms.designer.editors.component.tools.MyContextMenuProvider; import net.ms.designer.editors.component.tools.PaletteFactory; import net.ms.designer.editors.component.tools.WriteToProjectXML; import net.ms.designer.ui.view.MsTreeView; import net.ms.designer.ui.view.ITreeEntry; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.gef.ContextMenuProvider; import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.dnd.TemplateTransferDragSourceListener; import org.eclipse.gef.editparts.ScalableFreeformRootEditPart; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.ui.actions.ActionRegistry; import org.eclipse.gef.ui.parts.ContentOutlinePage; import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette; import org.eclipse.gef.ui.parts.TreeViewer; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.internal.UIPlugin; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.part.IPageSite; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; /** * @author mashuai * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class ComponentEditor extends GraphicalEditorWithPalette implements ISelectionChangedListener { private CompDiagram diagram = new CompDiagram(); private PaletteRoot paletteRoot; private MsProject project; private IOStreams stream ; private String filePath; private MsEditorInput input; public CompDiagram getDiagram() { return this.diagram; } public ComponentEditor() { setEditDomain(new DefaultEditDomain(this)); stream = new IOStreams(); } protected void configureGraphicalViewer() { super.configureGraphicalViewer(); getGraphicalViewer().setRootEditPart(new ScalableFreeformRootEditPart()); getGraphicalViewer().setEditPartFactory(new PartFactory()); ContextMenuProvider provider = new MyContextMenuProvider(getGraphicalViewer(), getActionRegistry()); getGraphicalViewer().setContextMenu(provider); getGraphicalViewer().addSelectionChangedListener(this); getSite().registerContextMenu(provider, getGraphicalViewer()); updateActions(getSelectionActions()); } protected void initializeGraphicalViewer() { try { // get configure directory path String path = project.getConfigPath(); StringBuffer sb = new StringBuffer(path); sb.append(project.getPackageName()); sb.append(".ce"); filePath = sb.toString(); File file = new File(filePath); if(file.exists()) { diagram = (CompDiagram)stream.inputs(filePath); if(diagram != null) { getGraphicalViewer().setContents(this.diagram); } } else { diagram = new CompDiagram(); getGraphicalViewer().setContents(this.diagram); } } catch(Exception e) { e.printStackTrace(); } getGraphicalViewer().addDropTargetListener(new DiagramTemplateTransferDropTargetListener(getGraphicalViewer())); } public void doSave(IProgressMonitor monitor) { WriteToProjectXML write = new WriteToProjectXML(project,diagram); //get directory of the xml file to save String path = project.getConfigPath(); //get the xml file name StringBuffer sb = new StringBuffer(path); //get full file path sb.append("project.xml"); try { write.accessXMLFile(sb.toString()); stream.outputs(diagram,filePath); } catch(Exception e) { e.printStackTrace(); } ((MsTreeView)UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("net.ms.designer.ui.view.MsTreeView")).refresh(); // 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(); // } getCommandStack().markSaveLocation(); } public void doSaveAs() { } public boolean isDirty() { return getCommandStack().isDirty(); } public boolean isSaveAsAllowed() { return true; } 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")); // } // 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(); // } } public Object getAdapter(Class type) { if (type == IContentOutlinePage.class) return new OutlinePage(); return super.getAdapter(type); } public MsProject getProject() { return this.project; } public void setProject(MsProject project) { this.project = project; } PaletteFactory paletteFactory=new PaletteFactory(); protected PaletteRoot getPaletteRoot() { if (this.paletteRoot == null) { this.paletteRoot = PaletteFactory.createPalette(); } return this.paletteRoot; } protected void initializePaletteViewer() { super.initializePaletteViewer(); getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer())); } public void selectionChanged(SelectionChangedEvent event) { updateActions(getSelectionActions()); } public void createActions() { super.createActions(); ActionRegistry registry = getActionRegistry(); IAction action; action = new PropertyAction(this); registry.registerAction(action); getSelectionActions().add(action.getId()); } class OutlinePage extends ContentOutlinePage { // private PageBook pageBook; private Control outline; public OutlinePage() { super(new TreeViewer()); } public void init(IPageSite pageSite) { super.init(pageSite); ActionRegistry registry = getActionRegistry(); IActionBars bars = pageSite.getActionBars(); String id = IWorkbenchActionConstants.UNDO; bars.setGlobalActionHandler(id, registry.getAction(id)); id = IWorkbenchActionConstants.REDO; bars.setGlobalActionHandler(id, registry.getAction(id)); id = IWorkbenchActionConstants.DELETE; bars.setGlobalActionHandler(id, registry.getAction(id)); bars.updateActionBars(); } public void createControl(Composite parent) { // pageBook = new PageBook(parent, SWT.NONE); // outline = getViewer().createControl(pageBook); // pageBook.showPage(outline); outline = getViewer().createControl(parent); getSelectionSynchronizer().addViewer(getViewer()); getViewer().setEditDomain(getEditDomain()); getViewer().setEditPartFactory(new TreePartFactory()); // getViewer().setKeyHandler(getCommonKeyHandler()); getViewer().setContents(getDiagram()); } public Control getControl() { // return pageBook; return outline; } public void dispose() { getSelectionSynchronizer().removeViewer(getViewer()); super.dispose(); } } protected void superSetInput(IEditorInput input) { super.setInput(input); } public void commandStackChanged(EventObject event) { if (isDirty()) { firePropertyChange(IEditorPart.PROP_DIRTY); } else { firePropertyChange(IEditorPart.PROP_DIRTY); } super.commandStackChanged(event); } }