Java tutorial
/******************************************************************************* * Copyright (c) 2003, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.wincom.actor.editor.flow.ui; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.util.EventObject; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.gef.ContextMenuProvider; import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.KeyHandler; import org.eclipse.gef.KeyStroke; import org.eclipse.gef.commands.CommandStackListener; import org.eclipse.gef.dnd.TemplateTransferDragSourceListener; import org.eclipse.gef.dnd.TemplateTransferDropTargetListener; import org.eclipse.gef.editparts.ScalableRootEditPart; import org.eclipse.gef.palette.PaletteRoot; import org.eclipse.gef.ui.actions.ActionRegistry; import org.eclipse.gef.ui.actions.DirectEditAction; import org.eclipse.gef.ui.actions.GEFActionConstants; import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette; import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.swt.SWT; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.dialogs.SaveAsDialog; import org.eclipse.ui.part.FileEditorInput; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.wincom.actor.editor.flow.FlowEditorPaletteFactory; import com.wincom.actor.editor.flow.actions.FlowContextMenuProvider; import com.wincom.actor.editor.flow.model.ActivityDiagram; import com.wincom.actor.editor.flow.parts.ActivityPartFactory; /** * * @author hudsonr Created on Jun 27, 2003 */ public class FlowEditor extends GraphicalEditorWithPalette { Logger log = LoggerFactory.getLogger(this.getClass()); ActivityDiagram diagram; private PaletteRoot root; private KeyHandler sharedKeyHandler; public FlowEditor() { log.info("check"); DefaultEditDomain defaultEditDomain = new DefaultEditDomain(this); setEditDomain(defaultEditDomain); } /** * @see org.eclipse.gef.commands.CommandStackListener#commandStackChanged(java.util.EventObject) */ public void commandStackChanged(EventObject event) { log.info("check"); firePropertyChange(IEditorPart.PROP_DIRTY); super.commandStackChanged(event); } /** * @see org.eclipse.gef.ui.parts.GraphicalEditor#createActions() */ protected void createActions() { log.info("check"); super.createActions(); ActionRegistry registry = getActionRegistry(); IAction action; action = new DirectEditAction((IWorkbenchPart) this); registry.registerAction(action); getSelectionActions().add(action.getId()); } /** * Creates an appropriate output stream and writes the activity diagram out * to this stream. * * @param os * the base output stream * @throws IOException */ protected void createOutputStream(OutputStream os) throws IOException { log.info("check"); ObjectOutputStream out = new ObjectOutputStream(os); out.writeObject(diagram); out.close(); } /** * @see org.eclipse.gef.ui.parts.GraphicalEditor#configureGraphicalViewer() */ protected void configureGraphicalViewer() { log.info("check"); super.configureGraphicalViewer(); getGraphicalViewer().setRootEditPart(new ScalableRootEditPart()); getGraphicalViewer().setEditPartFactory(new ActivityPartFactory()); getGraphicalViewer().setKeyHandler( new GraphicalViewerKeyHandler(getGraphicalViewer()).setParent(getCommonKeyHandler())); ContextMenuProvider provider = new FlowContextMenuProvider(getGraphicalViewer(), getActionRegistry()); getGraphicalViewer().setContextMenu(provider); getSite().registerContextMenu("com.wincom.actor.editor.flow.editor.contextmenu", //$NON-NLS-1$ provider, getGraphicalViewer()); log.info("install dirty checker."); getCommandStack().addCommandStackListener(new CommandStackListener() { @Override public void commandStackChanged(EventObject event) { setDirty(getCommandStack().isDirty()); } }); // getCommandStack().markSaveLocation(); // setDirty(true); } protected void setDirty(boolean dirty) { log.info("dirty status: " + dirty); firePropertyChange(IEditorPart.PROP_DIRTY); } @Override public boolean isDirty() { return getCommandStack().isDirty(); } /** * @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer() */ protected void initializeGraphicalViewer() { log.info("check"); getGraphicalViewer().setContents(diagram); getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(getGraphicalViewer())); } /** * @see org.eclipse.gef.ui.parts.GraphicalEditorWithPalette#initializePaletteViewer() */ protected void initializePaletteViewer() { log.info("check"); super.initializePaletteViewer(); getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer())); } /** * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ public void doSave(IProgressMonitor monitor) { log.info("check"); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); createOutputStream(out); IFile file = ((IFileEditorInput) getEditorInput()).getFile(); file.setContents(new ByteArrayInputStream(out.toByteArray()), true, false, monitor); out.close(); getCommandStack().markSaveLocation(); } catch (Exception e) { e.printStackTrace(); } } /** * @see org.eclipse.ui.ISaveablePart#doSaveAs() */ public void doSaveAs() { log.info("check"); SaveAsDialog dialog = new SaveAsDialog(getSite().getWorkbenchWindow().getShell()); dialog.setOriginalFile(((IFileEditorInput) getEditorInput()).getFile()); dialog.open(); IPath path = dialog.getResult(); if (path == null) return; IWorkspace workspace = ResourcesPlugin.getWorkspace(); final IFile file = workspace.getRoot().getFile(path); WorkspaceModifyOperation op = new WorkspaceModifyOperation() { public void execute(final IProgressMonitor monitor) throws CoreException { log.info("check"); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); createOutputStream(out); file.create(new ByteArrayInputStream(out.toByteArray()), true, monitor); out.close(); } catch (Exception e) { e.printStackTrace(); } } }; try { new ProgressMonitorDialog(getSite().getWorkbenchWindow().getShell()).run(false, true, op); setInput(new FileEditorInput((IFile) file)); getCommandStack().markSaveLocation(); } catch (Exception e) { e.printStackTrace(); } } protected KeyHandler getCommonKeyHandler() { log.info("check"); if (sharedKeyHandler == null) { sharedKeyHandler = new KeyHandler(); sharedKeyHandler.put(KeyStroke.getPressed(SWT.DEL, 127, 0), getActionRegistry().getAction(ActionFactory.DELETE.getId())); sharedKeyHandler.put(KeyStroke.getPressed(SWT.F2, 0), getActionRegistry().getAction(GEFActionConstants.DIRECT_EDIT)); } return sharedKeyHandler; } /** * @see org.eclipse.gef.ui.parts.GraphicalEditorWithPalette#getPaletteRoot() */ protected PaletteRoot getPaletteRoot() { log.info("check"); if (root == null) root = FlowEditorPaletteFactory.createPalette(); return root; } public void gotoMarker(IMarker marker) { log.info("check"); } /** * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() */ public boolean isSaveAsAllowed() { log.info("check"); return true; } /** * @see org.eclipse.ui.part.EditorPart#setInput(org.eclipse.ui.IEditorInput) */ protected void setInput(IEditorInput input) { log.info("check"); super.setInput(input); IFile file = ((IFileEditorInput) input).getFile(); try { InputStream is = file.getContents(false); ObjectInputStream ois = new ObjectInputStream(is); diagram = (ActivityDiagram) ois.readObject(); ois.close(); } catch (Exception e) { // This is just an example. All exceptions caught here. e.printStackTrace(); diagram = new ActivityDiagram(); } } }