Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/JPADiagramEditor.java')
-rw-r--r--jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/JPADiagramEditor.java314
1 files changed, 314 insertions, 0 deletions
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/JPADiagramEditor.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/JPADiagramEditor.java
new file mode 100644
index 0000000000..8998a4b976
--- /dev/null
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/JPADiagramEditor.java
@@ -0,0 +1,314 @@
+/*******************************************************************************
+ * <copyright>
+ *
+ * Copyright (c) 2005, 2010 SAP AG.
+ * 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:
+ * Stefan Dimov - initial API, implementation and documentation
+ *
+ * </copyright>
+ *
+ *******************************************************************************/
+package org.eclipse.jpt.jpadiagrameditor.ui.internal;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gef.ContextMenuProvider;
+import org.eclipse.gef.DefaultEditDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.mm.pictograms.ContainerShape;
+import org.eclipse.graphiti.mm.pictograms.Diagram;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.graphiti.mm.pictograms.Shape;
+import org.eclipse.graphiti.ui.editor.DiagramEditor;
+import org.eclipse.graphiti.ui.internal.parts.ConnectionEditPart;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jpt.jpa.core.JpaStructureNode;
+import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;
+import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit;
+import org.eclipse.jpt.jpa.ui.internal.selection.DefaultJpaSelection;
+import org.eclipse.jpt.jpa.ui.internal.selection.JpaSelectionManager;
+import org.eclipse.jpt.jpa.ui.internal.selection.SelectionManagerFactory;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.i18n.JPAEditorMessages;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.modelintegration.ui.JPADiagramEditorInput;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.modelintegration.util.ModelIntegrationUtil;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.IJPAEditorFeatureProvider;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.JPAEditorContextMenuProvider;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.JPAEditorDiagramTypeProvider;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.GraphicsUpdater;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPACheckSum;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorConstants;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorUtil;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JpaArtifactFactory;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.Wrp;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+
+
+@SuppressWarnings("restriction")
+public class JPADiagramEditor extends DiagramEditor {
+
+ public final static String ID = "org.eclipse.jpt.jpadiagrameditor.ui"; //$NON-NLS-1$
+ private DefaultEditDomain editDomain;
+
+ private JavaPersistentType inputJptType;
+ private ISelectionManagerFactory jpaSelectionManagerFactory;
+
+ public JPADiagramEditor() {
+ this(new SelectionManagerFactoryImpl());
+ editDomain = new DefaultEditDomain(this);
+ }
+
+ public JPADiagramEditor(ISelectionManagerFactory jpaSelectionManagerFactory) {
+ super();
+ this.jpaSelectionManagerFactory = jpaSelectionManagerFactory;
+ editDomain = new DefaultEditDomain(this);
+ }
+
+ @Override
+ public JPAEditorDiagramTypeProvider getDiagramTypeProvider() {
+ return (JPAEditorDiagramTypeProvider) super.getDiagramTypeProvider();
+ }
+
+ public IFeatureProvider getFeatureProvider() {
+ return getDiagramTypeProvider().getFeatureProvider();
+ }
+
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Object getAdapter(Class type) {
+ if(IPropertySheetPage.class.equals(type))
+ return null;
+
+ return super.getAdapter(type);
+ }
+
+ public void saveWithoutEntities(IProgressMonitor monitor) {
+ final Diagram d = getDiagramTypeProvider().getDiagram();
+ final Wrp wrp = new Wrp();
+ TransactionalEditingDomain ted = TransactionUtil.getEditingDomain(d);
+ ted.getCommandStack().execute(new RecordingCommand(ted) {
+ protected void doExecute() {
+ JPACheckSum.INSTANCE().assignEntityShapesMD5Strings(d, ModelIntegrationUtil.getProjectByDiagram(d));
+ List<Shape> children = d.getChildren();
+ Iterator<Shape> chIt = children.iterator();
+ boolean save = true;
+ while (chIt.hasNext()) {
+ ContainerShape sh = (ContainerShape)chIt.next();
+ JavaPersistentType jpt = (JavaPersistentType) getFeatureProvider()
+ .getBusinessObjectForPictogramElement(sh);
+ String entName = JPAEditorUtil.getText(jpt);
+ ICompilationUnit cu = JPAEditorUtil.getCompilationUnit(jpt);
+ try {
+ if (cu.hasUnsavedChanges()) {
+ entName = "* " + entName; //$NON-NLS-1$
+ save = false;
+ }
+ } catch (JavaModelException e) {
+ System.err.println("Problem with compilation unit"); //$NON-NLS-1$
+ e.printStackTrace();
+ }
+ GraphicsUpdater.updateHeader(sh, entName);
+ }
+ wrp.setObj(new Boolean(save));
+ }
+ });
+ if ((Boolean)wrp.getObj())
+ super.doSave(monitor);
+ }
+
+ @Override
+ public void doSave(final IProgressMonitor monitor) {
+ final Diagram d = getDiagramTypeProvider().getDiagram();
+ //IJPAEditorFeatureProvider fp = (IJPAEditorFeatureProvider)getFeatureProvider();
+ TransactionalEditingDomain ted = TransactionUtil.getEditingDomain(d);
+ if ((d == null) || (ted == null)) {
+ System.err.println((d == null) ? "Diagram is null" : "TransactionalEditingDomain is null"); //$NON-NLS-1$ //$NON-NLS-2$
+ new Exception().printStackTrace();
+ return;
+ }
+ ted.getCommandStack().execute(new RecordingCommand(ted) {
+ protected void doExecute() {
+ JPACheckSum.INSTANCE().assignEntityShapesMD5Strings(d, ModelIntegrationUtil.getProjectByDiagram(d));
+ List<Shape> children = d.getChildren();
+ Iterator<Shape> chIt = children.iterator();
+ while (chIt.hasNext()) {
+ Shape sh = chIt.next();
+ JavaPersistentType jpt = (JavaPersistentType) getFeatureProvider()
+ .getBusinessObjectForPictogramElement(sh);
+ if (jpt != null)
+ JpaArtifactFactory.instance().forceSaveEntityClass(jpt, (IJPAEditorFeatureProvider) getFeatureProvider());
+ }
+ /*
+ Resource res = ModelIntegrationUtil.getResourceByDiagram(d);
+
+ try {
+ //doSave(monitor);
+ res.save(null);
+ } catch (IOException e) {
+ System.err.println("Can't save the diagram"); //$NON-NLS-1$
+ e.printStackTrace();
+ }
+ */
+
+ }
+ });
+ super.doSave(monitor);
+ }
+
+ @Override
+ protected ContextMenuProvider createContextMenuProvider() {
+ return new JPAEditorContextMenuProvider(getGraphicalViewer(),
+ getActionRegistry(),
+ getConfigurationProvider());
+ }
+
+ private void initWithFileEditorInput(final IEditorSite site,
+ final IFile entityFile) {
+ Diagram diagram = null;
+ try {
+ ProgressMonitorDialog dialog = new ProgressMonitorDialog(site
+ .getShell());
+ dialog.run(true, false, new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor)
+ throws InvocationTargetException, InterruptedException {
+ monitor.beginTask(
+ JPAEditorMessages.JPADiagramEditor_waitingForMoin,
+ IProgressMonitor.UNKNOWN);
+ monitor.done();
+ }
+ });
+
+ inputJptType = JPAEditorUtil.getJPType(JavaCore
+ .createCompilationUnitFrom(entityFile));
+ setPartProperty(
+ JPAEditorConstants.OPEN_WHOLE_PERSISTENCE_UNIT_EDITOR_PROPERTY,
+ inputJptType.getName());
+ PersistenceUnit persistenceUnit = inputJptType.getPersistenceUnit();
+ String diagramURI = ModelIntegrationUtil.createDiagramPath(persistenceUnit).toString();
+ TransactionalEditingDomain defaultTransEditDomain = (TransactionalEditingDomain)inputJptType.
+ getJpaProject().getProject().getAdapter(TransactionalEditingDomain.class);
+ diagram = ModelIntegrationUtil.createDiagram(persistenceUnit, 10, true);
+ JPADiagramEditorInput diagramInput = new JPADiagramEditorInput(diagram,
+ diagramURI,
+ defaultTransEditDomain,
+ JPAEditorDiagramTypeProvider.ID,
+ false);
+ ModelIntegrationUtil.mapDiagramToProject(diagram, persistenceUnit
+ .getJpaProject());
+ super.init(site, diagramInput);
+ } catch (CoreException e) {
+ JPADiagramEditorPlugin.getDefault().getLog().log(e.getStatus());
+ ModelIntegrationUtil.removeDiagramProjectMapping(diagram);
+ } catch (InvocationTargetException e) {
+ IStatus status = new Status(IStatus.ERROR,
+ JPADiagramEditorPlugin.PLUGIN_ID, e.getMessage(), e);
+ JPADiagramEditorPlugin.getDefault().getLog().log(status);
+ ModelIntegrationUtil.removeDiagramProjectMapping(diagram);
+ } catch (InterruptedException e) {
+ IStatus status = new Status(IStatus.ERROR,
+ JPADiagramEditorPlugin.PLUGIN_ID, e.getMessage(), e);
+ JPADiagramEditorPlugin.getDefault().getLog().log(status);
+ ModelIntegrationUtil.removeDiagramProjectMapping(diagram);
+ }
+ }
+
+ public void init(IEditorSite site, IEditorInput input)
+ throws PartInitException {
+ IFile entityFile = (IFile) input.getAdapter(IFile.class);
+
+ if (entityFile != null && entityFile.getFileExtension().equals("java")) { //$NON-NLS-1$
+ initWithFileEditorInput(site, entityFile);
+ } else
+ super.init(site, input);
+ }
+
+ @Override
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ super.selectionChanged(part, selection);
+ if (!(selection instanceof IStructuredSelection))
+ return;
+ IStructuredSelection structSel = (IStructuredSelection)selection;
+ @SuppressWarnings("unchecked")
+ Iterator<IStructuredSelection> iter = structSel.iterator();
+ while(iter.hasNext()){
+ Object object = iter.next();
+ if(object instanceof EditPart){
+ EditPart editPart = (EditPart) object;
+ if(editPart instanceof ConnectionEditPart){
+ ConnectionEditPart connectionEditPart = (ConnectionEditPart) (editPart);
+ connectionEditPart.removeEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE);
+ }
+ }
+ }
+
+ Object o = ((IStructuredSelection) selection).getFirstElement();
+ if (o instanceof EditPart) {
+ JpaSelectionManager selectionManager = getJpaSelectionManager(part);
+ Object m = ((EditPart) o).getModel();
+ if (m == null)
+ return;
+ if (m instanceof PictogramElement) {
+ Object bo = getFeatureProvider()
+ .getBusinessObjectForPictogramElement(
+ (PictogramElement) m);
+ if ((bo == null) || (!(bo instanceof JpaStructureNode)))
+ return;
+ selectionManager.select(new DefaultJpaSelection(
+ (JpaStructureNode) bo), null);
+ return;
+ }
+ }
+ }
+
+ private JpaSelectionManager getJpaSelectionManager(IWorkbenchPart part) {
+ return jpaSelectionManagerFactory.getSelectionManager(part.getSite()
+ .getWorkbenchWindow());
+ }
+
+ public static interface ISelectionManagerFactory {
+ public JpaSelectionManager getSelectionManager(IWorkbenchWindow window);
+ }
+
+ private static class SelectionManagerFactoryImpl implements
+ ISelectionManagerFactory {
+
+ public JpaSelectionManager getSelectionManager(IWorkbenchWindow window) {
+ return SelectionManagerFactory.getSelectionManager(window);
+ }
+
+ }
+
+ @Override
+ public DefaultEditDomain getEditDomain() {
+ return editDomain;
+ }
+
+}

Back to the top