package cn.edu.whu.sklse.aopworkshop.aosa.ui;
import java.util.ArrayList;
import java.util.EventObject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.GroupBoxBorder;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.parts.ScrollableThumbnail;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.KeyHandler;
import org.eclipse.gef.KeyStroke;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.MouseWheelHandler;
import org.eclipse.gef.MouseWheelZoomHandler;
import org.eclipse.gef.SnapToGeometry;
import org.eclipse.gef.SnapToGrid;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.editparts.ScalableRootEditPart;
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
import org.eclipse.gef.palette.ConnectionCreationToolEntry;
import org.eclipse.gef.palette.CreationToolEntry;
import org.eclipse.gef.palette.MarqueeToolEntry;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.PaletteSeparator;
import org.eclipse.gef.palette.PanningSelectionToolEntry;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.requests.SimpleFactory;
import org.eclipse.gef.rulers.RulerProvider;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.actions.AlignmentAction;
import org.eclipse.gef.ui.actions.DirectEditAction;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gef.ui.actions.ToggleGridAction;
import org.eclipse.gef.ui.actions.ToggleSnapToGeometryAction;
import org.eclipse.gef.ui.actions.ZoomInAction;
import org.eclipse.gef.ui.actions.ZoomOutAction;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.gef.ui.palette.PaletteViewerProvider;
import org.eclipse.gef.ui.palette.FlyoutPaletteComposite.FlyoutPreferences;
import org.eclipse.gef.ui.parts.ContentOutlinePage;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.gef.ui.parts.TreeViewer;
import org.eclipse.gef.ui.rulers.RulerComposite;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import cn.edu.whu.sklse.aopworkshop.aosa.AosaPlugin;
import cn.edu.whu.sklse.aopworkshop.aosa.Application;
import cn.edu.whu.sklse.aopworkshop.aosa.constants.DiagramPaletteStrings;
import cn.edu.whu.sklse.aopworkshop.aosa.constants.IIconNames;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ArrowConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.AspectComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.CombinationConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ConnectorModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.CrosscutConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.CrosscutInterfaceComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.InOutConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.InterfaceComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.LogicRuler;
import cn.edu.whu.sklse.aopworkshop.aosa.models.NoteComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ParentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.LineConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.WhiteInterfaceComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.parts.PartFactory;
import cn.edu.whu.sklse.aopworkshop.aosa.parts.TreeEditPartFactory;
import cn.edu.whu.sklse.aopworkshop.aosa.rulers.LogicRulerProvider;
/**
* @author Terry Qu
*
*/
public class DiagramEditor extends GraphicalEditorWithFlyoutPalette {
/**
*
*/
public static final String ID = "cn.edu.whu.sklse.aopworkshop.aosa.ui.DiagramEditor";
GraphicalViewer diagramViewer;
private ParentModel parentModel;
public DiagramEditor() {
super();
setEditDomain(new DefaultEditDomain(this));
}
protected void loadProperties() {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer()
*/
protected void initializeGraphicalViewer() {
diagramViewer = getGraphicalViewer();
diagramViewer.setProperty(SnapToGrid.PROPERTY_GRID_ENABLED,
new Boolean(true));
// We keep grid visibility and enablement in sync
diagramViewer.setProperty(SnapToGrid.PROPERTY_GRID_VISIBLE,
new Boolean(true));
diagramViewer.setProperty(SnapToGeometry.PROPERTY_SNAP_ENABLED,
new Boolean(true));
// diagramViewer.setProperty(RulerProvider.PROPERTY_VERTICAL_RULER,new
// SubjectRulerProvider(diagram.getLeftRuler()));
// diagramViewer().setProperty(RulerProvider.PROPERTY_HORIZONTAL_RULER,
// new SubjectRulerProvider(diagram.getTopRuler()));
// diagramViewer().setProperty(RulerProvider.PROPERTY_RULER_VISIBILITY,new
// Boolean(diagram.isRulerVisibility()));
//
// // Ruler properties
// LogicRuler ruler = diagramViewer().getRuler(PositionConstants.WEST);
// RulerProvider provider = null;
// if (ruler != null) {
// provider = new LogicRulerProvider(ruler);
// }
// getGraphicalViewer().setProperty(RulerProvider.PROPERTY_VERTICAL_RULER,
// provider);
// ruler = getLogicDiagram().getRuler(PositionConstants.NORTH);
// provider = null;
// if (ruler != null) {
// provider = new LogicRulerProvider(ruler);
// }
// getGraphicalViewer().setProperty(RulerProvider.PROPERTY_HORIZONTAL_RULER,
// provider);
// getGraphicalViewer().setProperty(RulerProvider.PROPERTY_RULER_VISIBILITY,
// new Boolean(getLogicDiagram().getRulerVisibility()));
// Ruler properties
///%%%%%%%%%%%%%%
LogicRuler ruler = new LogicRuler(true);
RulerProvider provider = null;
if (ruler != null) {
provider = new LogicRulerProvider(ruler);
}
getGraphicalViewer().setProperty(RulerProvider.PROPERTY_VERTICAL_RULER,
provider);
ruler = new LogicRuler(true);
provider = null;
if (ruler != null) {
provider = new LogicRulerProvider(ruler);
}
getGraphicalViewer().setProperty(
RulerProvider.PROPERTY_HORIZONTAL_RULER, provider);
getGraphicalViewer().setProperty(
RulerProvider.PROPERTY_RULER_VISIBILITY, new Boolean(true));
parentModel = new ParentModel();
// ComponentModel componentModel_1 = new ComponentModel();
// componentModel_1.setRectConstraint(new Rectangle(0, 0, -1, -1));
//
// InterfaceComponentModel inter = new InterfaceComponentModel();
// inter.setConstraint(new Rectangle(30, 30, -1, -1));
// NoteComponentModel noteComponentModel = new NoteComponentModel();
// noteComponentModel.setRecConstraint(new Rectangle(80, 80, 80,50));
// parentModel.addChild(componentModel_1);
// parentModel.addChild(inter);
// parentModel.addChild(noteComponentModel);
diagramViewer.setContents(parentModel);
diagramViewer.setProperty(MouseWheelHandler.KeyGenerator
.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
*/
public void doSave(IProgressMonitor monitor) {
// TODO Auto-generated method stub
getCommandStack().markSaveLocation();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.EditorPart#doSaveAs()
*/
public void doSaveAs() {
// TODO Auto-generated method stub
}
public boolean isDirty() {
return getCommandStack().isDirty();// true * dirty
}
//
public void commandStackChanged(EventObject event) {
firePropertyChange(IEditorPart.PROP_DIRTY);
super.commandStackChanged(event);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
public boolean isSaveAsAllowed() {
// TODO Auto-generated method stub
return false;
}
// getGraphicalControl RulerComposite
// 配置GraphicalViewer
// 把自定义的PartFactory映射到GraphicalViewer上的EditPartFactory
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
diagramViewer = getGraphicalViewer();
diagramViewer.setEditPartFactory(new PartFactory());
IEditorSite editorSite = getEditorSite();
// create keyboard operation keyhandler
KeyHandler keyHandler = new KeyHandler();
keyHandler.put(KeyStroke.getPressed(SWT.DEL, 127, 0),
getActionRegistry().getAction(GEFActionConstants.DELETE));
keyHandler.put(KeyStroke.getPressed(SWT.F3, 0), getActionRegistry()
.getAction(GEFActionConstants.DIRECT_EDIT));
keyHandler.put(KeyStroke.getPressed(SWT.INSERT, 0), getActionRegistry()
.getAction(GEFActionConstants.EDIT_START));
// getGraphicalViewer().setKeyHandler(keyHandler);
getGraphicalViewer().setKeyHandler(
new GraphicalViewerKeyHandler(getGraphicalViewer())
.setParent(keyHandler));
ContextMenuProvider provider = new DiagramEditorContextMenuProvider(
diagramViewer, getActionRegistry());
diagramViewer.setContextMenu(provider);
getSite().registerContextMenu(
"cn.whu.sklse.aopworkshop.aoso.diagrameditor.contextmenu",
provider, diagramViewer);
ScalableRootEditPart rootEditPart = new ScalableRootEditPart();
diagramViewer.setRootEditPart(rootEditPart);
// get a ZoomManager
ZoomManager manager = rootEditPart.getZoomManager();
//
double[] zoomLevels = new double[] {
// 252000
0.25, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 10.0, 20.0 };
manager.setZoomLevels(zoomLevels); //
//
ArrayList zoomContributions = new ArrayList();
zoomContributions.add(ZoomManager.FIT_ALL);
zoomContributions.add(ZoomManager.FIT_HEIGHT);
zoomContributions.add(ZoomManager.FIT_WIDTH);
manager.setZoomLevelContributions(zoomContributions);
// magnify
IAction zoomIn = new ZoomInAction(manager);
getActionRegistry().registerAction(zoomIn);
// shrink
IAction zoomOut = new ZoomOutAction(manager);
getActionRegistry().registerAction(zoomOut);
getSite().getKeyBindingService().registerAction(zoomIn);
getSite().getKeyBindingService().registerAction(zoomOut);
IAction showGrid = new ToggleGridAction(diagramViewer);
showGrid.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
Application.PLUGIN_ID, "icons/help.gif"));
showGrid.setToolTipText("show a grid on the background");
getActionRegistry().registerAction(showGrid);
IAction snapAction = new ToggleSnapToGeometryAction(diagramViewer);
getActionRegistry().registerAction(snapAction);
}
/**
* A generic selection tool.
*/
private static ToolEntry _selectionTool = new PanningSelectionToolEntry(
DiagramPaletteStrings.SELECTION_LABEL,
DiagramPaletteStrings.SELECTION_DESCRIPTION);
/**
* @return The generic selection tool.
*/
public static ToolEntry getSelectionTool() {
return _selectionTool;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditorWithPalette#getPaletteRoot()
*/
protected PaletteRoot getPaletteRoot() {
// TODO Auto-generated method stub
PaletteRoot paletteRoot = new PaletteRoot();
// PaletteGroup tools = new
// PaletteGroup(DiagramPaletteStrings.GROUP_MAIN_LABEL);
paletteRoot.setDefaultEntry(getSelectionTool());
ToolEntry marqueeTool = new MarqueeToolEntry();
ImageDescriptor descriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.COMPONENT_MODEL);
//notation
ImageDescriptor noteDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.NOTE_COMPONENT_MODEL);
CombinedTemplateCreationEntry combinedTemplateCreationEntry = new CombinedTemplateCreationEntry(
"Notation", "make notations for graphs", NoteComponentModel.class,
new SimpleFactory(NoteComponentModel.class), noteDescriptor, noteDescriptor);
//provided port
ImageDescriptor interDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry interTemplateCreationEntry = new CombinedTemplateCreationEntry(
"provided port ", "create a provided port ",InterfaceComponentModel.class,
new SimpleFactory(InterfaceComponentModel.class),
interDescriptor, interDescriptor);
//connector
ImageDescriptor connectorDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry connectTemplateCreationEntry = new CombinedTemplateCreationEntry(
"connector ", "create a connector used by kinds of components",ConnectorModel.class,
new SimpleFactory(ConnectorModel.class),
connectorDescriptor, connectorDescriptor);
//aspect
ImageDescriptor aspectDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.ASPECT_COMPONENT_MODEL);
CombinedTemplateCreationEntry aspectTemplateCreationEntry = new CombinedTemplateCreationEntry(
"Aspect Component ", "create a aspect component used ",AspectComponentModel.class,
new SimpleFactory(AspectComponentModel.class),
aspectDescriptor, aspectDescriptor);
ImageDescriptor whiteInterDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.WHITE_INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry whiteInterTemplateCreationEntry = new CombinedTemplateCreationEntry(
"required port ", "create a required port ",WhiteInterfaceComponentModel.class,
new SimpleFactory(WhiteInterfaceComponentModel.class),
whiteInterDescriptor, whiteInterDescriptor);
ImageDescriptor cutInterDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.CROSSCUT_INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry cutInterTemplateCreationEntry = new CombinedTemplateCreationEntry(
"crosscutting port ", "create a crosscutting port ",CrosscutInterfaceComponentModel.class,
new SimpleFactory(CrosscutInterfaceComponentModel.class),
cutInterDescriptor, cutInterDescriptor);
/////////////drawer
PaletteDrawer drawer = new PaletteDrawer(
DiagramPaletteStrings.DRAWER_LABEL);
CreationToolEntry creationToolEntry = new CreationToolEntry(
"Base Commponent", "create a base component", new SimpleFactory(
ComponentModel.class), descriptor, descriptor);
drawer.add(creationToolEntry);
// ConnectionCreationToolEntry noteCreationToolEntry = new ConnectionCreationToolEntry(
// "Notation ", "make notations for graphs",
// new SimpleFactory(NoteComponentModel.class),
// noteDescriptor, noteDescriptor);
ImageDescriptor descriptorRelationship = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.RELATIONSHIP_MODEL);
ConnectionCreationToolEntry conCreationToolEntry = new ConnectionCreationToolEntry(
"association ", "create a association among components and connectors ", new SimpleFactory(
LineConnectionModel.class), descriptorRelationship,
descriptorRelationship);
drawer.add(conCreationToolEntry);
drawer.add(new PaletteSeparator());
ImageDescriptor arrowDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.ARROW_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry arrowConCreationToolEntry = new ConnectionCreationToolEntry(
"arrow connector", "create a arrow connector ",
new SimpleFactory(ArrowConnectionModel.class), arrowDescriptor,
arrowDescriptor);
drawer.add(arrowConCreationToolEntry);
ImageDescriptor crosscutDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.CROSSCUT_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry crosscutConCreationToolEntry = new ConnectionCreationToolEntry(
"crosscutting ", "create a crosscutting relationship ",
new SimpleFactory(CrosscutConnectionModel.class),
crosscutDescriptor, crosscutDescriptor);
drawer.add(crosscutConCreationToolEntry);
ImageDescriptor inoutDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.IN_OUT_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry inoutConCreationToolEntry = new ConnectionCreationToolEntry(
"in-out relationship ", "create an inner-outter relationship ",
new SimpleFactory(InOutConnectionModel.class),
inoutDescriptor, inoutDescriptor);
drawer.add(inoutConCreationToolEntry);
ImageDescriptor combinationDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.COMBINATION_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry combinationConCreationToolEntry = new ConnectionCreationToolEntry(
"combination relationship ", "combination relationship between BaseRole and CrosscutRole ",
new SimpleFactory(CombinationConnectionModel.class),
combinationDescriptor, combinationDescriptor);
drawer.add(combinationConCreationToolEntry);
/***********************************************************************
* commono tool
*/
PaletteDrawer commonDrawer = new PaletteDrawer(
DiagramPaletteStrings.COMMON_DRAWER_LABEL);
commonDrawer.add(getSelectionTool());
commonDrawer.add(marqueeTool);
commonDrawer.add(aspectTemplateCreationEntry);
commonDrawer.add(connectTemplateCreationEntry);
commonDrawer.add(combinedTemplateCreationEntry);
commonDrawer.add(interTemplateCreationEntry);
commonDrawer.add(whiteInterTemplateCreationEntry);
commonDrawer.add(cutInterTemplateCreationEntry);
paletteRoot.add(commonDrawer);
paletteRoot.add(drawer);
return paletteRoot;
}
/**
* keyboard operation override method
*
*/
protected void createActions() {
super.createActions();
ActionRegistry registry = getActionRegistry();
// registry DirectEditAction
IAction action = new DirectEditAction((IWorkbenchPart) this);
registry.registerAction(action);
getSelectionActions().add(action.getId());
//
// action = new
// ZoomOutAction(((ScalableRootEditPart)diagramViewer.getRootEditPart()).getZoomManager());
// action.setId(GEFActionConstants.ZOOM_OUT);
// registry.registerAction(action);
// getSelectionActions().add(action.getId());
// action = new
// ZoomInAction(((ScalableRootEditPart)diagramViewer.getRootEditPart()).getZoomManager());
// action.setId(GEFActionConstants.ZOOM_IN);
// registry.registerAction(action);
// getSelectionActions().add(action.getId());
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.LEFT);
registry.registerAction(action);
getSelectionActions().add(action.getId());
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.CENTER);
registry.registerAction(action);
getSelectionActions().add(action.getId());
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.RIGHT);
registry.registerAction(action);
getSelectionActions().add(action.getId());
//
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.TOP);
registry.registerAction(action);
getSelectionActions().add(action.getId());
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.MIDDLE);
registry.registerAction(action);
getSelectionActions().add(action.getId());
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.BOTTOM);
registry.registerAction(action);
getSelectionActions().add(action.getId());
}
/**
* ZoomComboContributionItem
*/
// override
public Object getAdapter(Class type) {
if (type == ZoomManager.class)
return ((ScalableRootEditPart) getGraphicalViewer()
.getRootEditPart()).getZoomManager();
if (type == IContentOutlinePage.class) {
return new CustomContentOutlinePage();
}
return super.getAdapter(type);
}
/**
* outline
*/
// ContentOutlinePage
class CustomContentOutlinePage extends ContentOutlinePage {
public CustomContentOutlinePage() {
super(new TreeViewer());
// TODO Auto-generated constructor stub
}
// SashForm Outline
private SashForm sash;
private ScrollableThumbnail thumbnail;
private DisposeListener disposeListener;
//
public void createControl(Composite parent) {
// SashForm
sash = new SashForm(parent, SWT.VERTICAL);
//
getViewer().createControl(sash);
// Edit Domain
getViewer().setEditDomain(getEditDomain());
// set EditPartFactory
getViewer().setEditPartFactory(new TreeEditPartFactory());
// outline--->ParentModel
getViewer().setContents(parentModel);
// synchronize
getSelectionSynchronizer().addViewer(getViewer());
Canvas canvas = new Canvas(sash, SWT.BORDER);
// LightweightSystem
LightweightSystem lws = new LightweightSystem(canvas);
// RootEditPart
thumbnail = new ScrollableThumbnail(
(Viewport) ((ScalableRootEditPart) getGraphicalViewer()
.getRootEditPart()).getFigure());
thumbnail.setBorder(new GroupBoxBorder("Thumbnail"));
// thumbnail.setBorder(new MarginBorder(3));
thumbnail.setSource(((ScalableRootEditPart) getGraphicalViewer()
.getRootEditPart())
.getLayer(LayerConstants.PRINTABLE_LAYERS));
lws.setContents(thumbnail);
disposeListener = new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
//
if (thumbnail != null) {
thumbnail.deactivate();
thumbnail = null;
}
}
};
// Graphical Viewer thumbnail
getGraphicalViewer().getControl().addDisposeListener(
disposeListener);
}
public Control getControl() {
// outline 为active
return sash;
}
public void dispose() {
// TreeViewer SelectionSynchronizer
getSelectionSynchronizer().removeViewer(getViewer());
if (getGraphicalViewer().getControl() != null
&& !getGraphicalViewer().getControl().isDisposed())
getGraphicalViewer().getControl().removeDisposeListener(
disposeListener);
super.dispose();
}
public void init(IPageSite pageSite) {
super.init(pageSite);
// graphical editor Action
ActionRegistry registry = getActionRegistry();
// Action
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();
}
}
protected FlyoutPreferences getPalettePreferences() {
return new FlyoutPreferences() {
public int getDockLocation() {
return
// AosaPlugin.getDefault().getPreferenceStore().getInt(IConstants.PREF_PALETTE_DOCK_LOCATION);
AosaPlugin.getDefault().getPreferenceStore().getInt("pre");
}
public void setDockLocation(int location) {
AosaPlugin.getDefault().getPreferenceStore().setValue("pre",
location);
}
public int getPaletteState() {
return 0;
}
public int getPaletteWidth() {
return 0;
}
public void setPaletteState(int arg0) {
}
public void setPaletteWidth(int arg0) {
}
};
}
protected PaletteViewerProvider createPaletteViewerProvider() {
return new PaletteViewerProvider(getEditDomain()) {
protected void configurePaletteViewer(PaletteViewer viewer) {
super.configurePaletteViewer(viewer);
viewer
.addDragSourceListener(new TemplateTransferDragSourceListener(
viewer));
}
};
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#createGraphicalViewer(org.eclipse.swt.widgets.Composite)
*/
private RulerComposite rulerComp;
protected void createGraphicalViewer(Composite parent) {
rulerComp = new RulerComposite(parent, SWT.NONE);
super.createGraphicalViewer(rulerComp);
rulerComp
.setGraphicalViewer((ScrollingGraphicalViewer) getGraphicalViewer());
}
// getGraphicalControl RulerComposite
protected Control getGraphicalControl() {
return rulerComp;
}
}
Showing posts with label GEF. Show all posts
Showing posts with label GEF. Show all posts
Tuesday, July 29, 2008
Serializable Problem in GEF
public abstract class Element implements IPropertySource, Cloneable, Serializable {
PropertyChangeSupport listeners = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1;
/** An empty property descriptor. */
private static final IPropertyDescriptor[] EMPTY_ARRAY = new IPropertyDescriptor[0];
public void addPropertyChangeListener(PropertyChangeListener l) {
listeners.addPropertyChangeListener(l);
}
protected void firePropertyChange(String prop, Object old, Object newValue) {
listeners.firePropertyChange(prop, old, newValue);
}
protected void fireStructureChange(String prop, Object child) {
listeners.firePropertyChange(prop, null, child);
}
////
/**
* Returns a value for this property source that can be edited in a property sheet.
*
*
*
* @return this instance
*/
public Object getEditableValue() {
return this;
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
listeners = new PropertyChangeSupport(this);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
listeners.removePropertyChangeListener(l);
}
/**
* Children should override this. The default implementation returns an empty array.
*/
public IPropertyDescriptor[] getPropertyDescriptors() {
return EMPTY_ARRAY;
}
/**
* Children should override this. The default implementation does nothing.
*/
public void resetPropertyValue(Object id) {
// do nothing
}
/**
* Children should override this. The default implementation does nothing.
*/
public void setPropertyValue(Object id, Object value) {
// do nothing
}
/**
* Children should override this. The default implementation returns null.
*/
public Object getPropertyValue(Object id) {
return null;
}
/**
* Children should override this. The default implementation returns false.
*/
public boolean isPropertySet(Object id) {
return false;
}
/*
* Created on 2005-1-24
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.example.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 org.eclipse.core.resources.IFile;
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.DefaultEditDomain;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
//import org.eclipse.gef.examples.shapes.model.ShapesDiagram;
//import org.eclipse.gef.examples.flow.model.ActivityDiagram;
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.dialogs.ProgressMonitorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import com.example.dnd.DiagramTemplateTransferDropTargetListener;
import com.example.model.Diagram;
import com.example.parts.PartFactory;
import com.example.parts.TreePartFactory;
import com.example.tools.PaletteFactory;
public class PracticeEditor extends GraphicalEditorWithPalette {
private Diagram diagram = new Diagram();
private PaletteRoot paletteRoot;
public Diagram getDiagram() {
return this.diagram;
}
public PracticeEditor() {
setEditDomain(new DefaultEditDomain(this));
}
protected void createOutputStream(OutputStream os) throws IOException {
ObjectOutputStream out = new ObjectOutputStream(os);
out.writeObject(diagram);
out.close();
}
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
getGraphicalViewer().setRootEditPart(new ScalableFreeformRootEditPart());
getGraphicalViewer().setEditPartFactory(new PartFactory());
}
protected void initializeGraphicalViewer() {
getGraphicalViewer().setContents(this.diagram);
getGraphicalViewer().addDropTargetListener(new DiagramTemplateTransferDropTargetListener(getGraphicalViewer()));
}
public void doSave(IProgressMonitor monitor) {
// try {
// InputStream in = diagram.getAsStream();
// IFile file = ((IFileEditorInput)getEditorInput()).getFile();
// file.setContents(in, true, false, monitor);
// getCommandStack().markSaveLocation();
// }
// catch (Exception e) {
// e.printStackTrace();
// }
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();
}
}
public void doSaveAs() {
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 {
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();
}
}
public boolean isDirty() {
return getCommandStack().isDirty();
}
public boolean isSaveAsAllowed() {
return true;
}
protected void setInput(IEditorInput input) {
// super.setInput(input);
// try {
// IFile file = ((IFileEditorInput) input).getFile();
// ObjectInputStream in = new ObjectInputStream(file.getContents());
// diagram = (Diagram) in.readObject();
// in.close();
// setPartName(file.getName());
// }
// catch (Exception e) {
// //This is just an example. All exceptions caught here.
// e.printStackTrace();
// diagram = new Diagram();
// }
// super.setInput(input);
//
// IFile file = ((IFileEditorInput)input).getFile();
// try {
// InputStream is = file.getContents(false);
// ObjectInputStream ois = new ObjectInputStream(is);
// diagram = (Diagram)ois.readObject();
// ois.close();
// } catch (Exception e) {
// //This is just an example. All exceptions caught here.
// e.printStackTrace();
// diagram = new Diagram();
// }
super.setInput(input);
IFile file = ((IFileEditorInput) input).getFile();
// diagram = new Diagram();
try { // attempt to read from a file
InputStream istream = file.getContents(false);
diagram = Diagram.makeFromStream(istream);
} catch (Exception e) { // but if there's an error, create a new diagram
e.printStackTrace();
diagram = new Diagram();
}
}
public Object getAdapter(Class type) {
if (type == IContentOutlinePage.class)
return new OutlinePage();
return super.getAdapter(type);
}
protected PaletteRoot getPaletteRoot() {
if (this.paletteRoot == null) {
this.paletteRoot = PaletteFactory.createPalette();
}
return this.paletteRoot;
}
protected void initializePaletteViewer() {
super.initializePaletteViewer();
getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer()));
}
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();
}
}
}
java.io.NotSerializableException: org.eclipse.ui.views.properties.TextPropertyDescriptor
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.ArrayList.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at com.example.ui.PracticeEditor.createOutputStream(PracticeEditor.java:74)
at com.example.ui.PracticeEditor.doSave(PracticeEditor.java:101)
at org.eclipse.ui.internal.SaveableHelper$1.run(SaveableHelper.java:131)
at org.eclipse.ui.internal.SaveableHelper$4.run(SaveableHelper.java:252)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:369)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:313)
at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:763)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:760)
at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2283)
at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:258)
at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:136)
at org.eclipse.ui.internal.EditorManager.savePart(EditorManager.java:1386)
at org.eclipse.ui.internal.WorkbenchPage.savePart(WorkbenchPage.java:2995)
at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3008)
at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:67)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:119)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:461)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:424)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:160)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:466)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:799)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:846)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:564)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:506)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:122)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:982)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:927)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:937)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:965)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:961)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1275)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3346)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3246)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1925)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
PropertyChangeSupport listeners = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1;
/** An empty property descriptor. */
private static final IPropertyDescriptor[] EMPTY_ARRAY = new IPropertyDescriptor[0];
public void addPropertyChangeListener(PropertyChangeListener l) {
listeners.addPropertyChangeListener(l);
}
protected void firePropertyChange(String prop, Object old, Object newValue) {
listeners.firePropertyChange(prop, old, newValue);
}
protected void fireStructureChange(String prop, Object child) {
listeners.firePropertyChange(prop, null, child);
}
////
/**
* Returns a value for this property source that can be edited in a property sheet.
*
My personal rule of thumb:
*
- model elements should return themselves and
- custom IPropertySource implementations (like DimensionPropertySource in the GEF-logic
* example) should return an editable value.
*
*
*
*
Override only if necessary.
* @return this instance
*/
public Object getEditableValue() {
return this;
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
listeners = new PropertyChangeSupport(this);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
listeners.removePropertyChangeListener(l);
}
/**
* Children should override this. The default implementation returns an empty array.
*/
public IPropertyDescriptor[] getPropertyDescriptors() {
return EMPTY_ARRAY;
}
/**
* Children should override this. The default implementation does nothing.
*/
public void resetPropertyValue(Object id) {
// do nothing
}
/**
* Children should override this. The default implementation does nothing.
*/
public void setPropertyValue(Object id, Object value) {
// do nothing
}
/**
* Children should override this. The default implementation returns null.
*/
public Object getPropertyValue(Object id) {
return null;
}
/**
* Children should override this. The default implementation returns false.
*/
public boolean isPropertySet(Object id) {
return false;
}
/*
* Created on 2005-1-24
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.example.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 org.eclipse.core.resources.IFile;
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.DefaultEditDomain;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
//import org.eclipse.gef.examples.shapes.model.ShapesDiagram;
//import org.eclipse.gef.examples.flow.model.ActivityDiagram;
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.dialogs.ProgressMonitorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import com.example.dnd.DiagramTemplateTransferDropTargetListener;
import com.example.model.Diagram;
import com.example.parts.PartFactory;
import com.example.parts.TreePartFactory;
import com.example.tools.PaletteFactory;
public class PracticeEditor extends GraphicalEditorWithPalette {
private Diagram diagram = new Diagram();
private PaletteRoot paletteRoot;
public Diagram getDiagram() {
return this.diagram;
}
public PracticeEditor() {
setEditDomain(new DefaultEditDomain(this));
}
protected void createOutputStream(OutputStream os) throws IOException {
ObjectOutputStream out = new ObjectOutputStream(os);
out.writeObject(diagram);
out.close();
}
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
getGraphicalViewer().setRootEditPart(new ScalableFreeformRootEditPart());
getGraphicalViewer().setEditPartFactory(new PartFactory());
}
protected void initializeGraphicalViewer() {
getGraphicalViewer().setContents(this.diagram);
getGraphicalViewer().addDropTargetListener(new DiagramTemplateTransferDropTargetListener(getGraphicalViewer()));
}
public void doSave(IProgressMonitor monitor) {
// try {
// InputStream in = diagram.getAsStream();
// IFile file = ((IFileEditorInput)getEditorInput()).getFile();
// file.setContents(in, true, false, monitor);
// getCommandStack().markSaveLocation();
// }
// catch (Exception e) {
// e.printStackTrace();
// }
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();
}
}
public void doSaveAs() {
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 {
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();
}
}
public boolean isDirty() {
return getCommandStack().isDirty();
}
public boolean isSaveAsAllowed() {
return true;
}
protected void setInput(IEditorInput input) {
// super.setInput(input);
// try {
// IFile file = ((IFileEditorInput) input).getFile();
// ObjectInputStream in = new ObjectInputStream(file.getContents());
// diagram = (Diagram) in.readObject();
// in.close();
// setPartName(file.getName());
// }
// catch (Exception e) {
// //This is just an example. All exceptions caught here.
// e.printStackTrace();
// diagram = new Diagram();
// }
// super.setInput(input);
//
// IFile file = ((IFileEditorInput)input).getFile();
// try {
// InputStream is = file.getContents(false);
// ObjectInputStream ois = new ObjectInputStream(is);
// diagram = (Diagram)ois.readObject();
// ois.close();
// } catch (Exception e) {
// //This is just an example. All exceptions caught here.
// e.printStackTrace();
// diagram = new Diagram();
// }
super.setInput(input);
IFile file = ((IFileEditorInput) input).getFile();
// diagram = new Diagram();
try { // attempt to read from a file
InputStream istream = file.getContents(false);
diagram = Diagram.makeFromStream(istream);
} catch (Exception e) { // but if there's an error, create a new diagram
e.printStackTrace();
diagram = new Diagram();
}
}
public Object getAdapter(Class type) {
if (type == IContentOutlinePage.class)
return new OutlinePage();
return super.getAdapter(type);
}
protected PaletteRoot getPaletteRoot() {
if (this.paletteRoot == null) {
this.paletteRoot = PaletteFactory.createPalette();
}
return this.paletteRoot;
}
protected void initializePaletteViewer() {
super.initializePaletteViewer();
getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer()));
}
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();
}
}
}
java.io.NotSerializableException: org.eclipse.ui.views.properties.TextPropertyDescriptor
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.ArrayList.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at com.example.ui.PracticeEditor.createOutputStream(PracticeEditor.java:74)
at com.example.ui.PracticeEditor.doSave(PracticeEditor.java:101)
at org.eclipse.ui.internal.SaveableHelper$1.run(SaveableHelper.java:131)
at org.eclipse.ui.internal.SaveableHelper$4.run(SaveableHelper.java:252)
at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:369)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:313)
at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:763)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:760)
at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2283)
at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:258)
at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:136)
at org.eclipse.ui.internal.EditorManager.savePart(EditorManager.java:1386)
at org.eclipse.ui.internal.WorkbenchPage.savePart(WorkbenchPage.java:2995)
at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3008)
at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:67)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:119)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:461)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:424)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:160)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:466)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:799)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:846)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:564)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:506)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:122)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:982)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:927)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:937)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:965)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:961)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1275)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3346)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3246)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1925)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
Subscribe to:
Posts (Atom)


