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/feature/DirectEditAttributeFeature.java')
-rw-r--r--jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/DirectEditAttributeFeature.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/DirectEditAttributeFeature.java b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/DirectEditAttributeFeature.java
new file mode 100644
index 0000000000..a8e268749c
--- /dev/null
+++ b/jpa_diagram_editor/plugins/org.eclipse.jpt.jpadiagrameditor.ui/src/org/eclipse/jpt/jpadiagrameditor/ui/internal/feature/DirectEditAttributeFeature.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * <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:
+ * Kiril Mitov - initial API, implementation and documentation
+ *
+ * </copyright>
+ *
+ *******************************************************************************/
+package org.eclipse.jpt.jpadiagrameditor.ui.internal.feature;
+
+import java.text.MessageFormat;
+
+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.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.features.context.IDirectEditingContext;
+import org.eclipse.graphiti.features.impl.AbstractDirectEditingFeature;
+import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
+import org.eclipse.graphiti.mm.algorithms.Text;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.jdt.core.JavaConventions;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;
+import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.JPADiagramEditorPlugin;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.i18n.JPAEditorMessages;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.IJPAEditorFeatureProvider;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.BidirectionalRelation;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.IRelation;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorUtil;
+import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JpaArtifactFactory;
+
+
+public class DirectEditAttributeFeature extends AbstractDirectEditingFeature {
+
+ private boolean isMethodAnnotated = false;
+
+ public DirectEditAttributeFeature(IFeatureProvider fp) {
+ super(fp);
+ }
+
+ public int getEditingType() {
+ return TYPE_TEXT;
+ }
+
+ @Override
+ public boolean canDirectEdit(IDirectEditingContext context) {
+ return true;
+ }
+
+ public String getInitialValue(IDirectEditingContext context) {
+ PictogramElement pe = context.getPictogramElement();
+ JavaPersistentAttribute jpa = (JavaPersistentAttribute)getFeatureProvider().
+ getBusinessObjectForPictogramElement(pe);
+ isMethodAnnotated = JpaArtifactFactory.instance().isMethodAnnotated(jpa);
+ Text txt = (Text) pe.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(0);
+ String value = txt.getValue();
+ if (isMethodAnnotated)
+ value = JPAEditorUtil.produceValidAttributeName(value);
+ return value;
+ }
+
+ @Override
+ public String checkValueValid(String value, IDirectEditingContext context) {
+ if (isMethodAnnotated)
+ value = JPAEditorUtil.produceValidAttributeName(value);
+ IStatus status = JavaConventions.validateFieldName(value, JavaCore.VERSION_1_5, JavaCore.VERSION_1_5);
+ if (!status.isOK())
+ return status.getMessage();
+ status = checkDuplicateAttribute(value, context);
+ if (!status.isOK())
+ return status.getMessage();
+ return null;
+ }
+
+ private IStatus checkDuplicateAttribute(String value, IDirectEditingContext context) {
+ PictogramElement pe = context.getPictogramElement();
+ JavaPersistentAttribute oldAt = (JavaPersistentAttribute) getBusinessObjectForPictogramElement(pe);
+ JavaPersistentAttribute newAl = (JavaPersistentAttribute)((JavaPersistentType)oldAt.getParent()).getAttributeNamed(value);
+ if (newAl != null && !newAl.equals(oldAt)) {
+ String message = MessageFormat.format(JPAEditorMessages.DirectEditAttributeFeature_attributeExists, value);
+ return new Status(IStatus.ERROR, JPADiagramEditorPlugin.PLUGIN_ID, message);
+ }
+ return Status.OK_STATUS;
+ }
+
+ public IJPAEditorFeatureProvider getFeatureProvider() {
+ return (IJPAEditorFeatureProvider) super.getFeatureProvider();
+ }
+
+ public void setValue(String value, IDirectEditingContext context) {
+ if (isMethodAnnotated)
+ value = JPAEditorUtil.produceValidAttributeName(value);
+ PictogramElement pe = context.getPictogramElement();
+ JavaPersistentAttribute oldAt = (JavaPersistentAttribute) getBusinessObjectForPictogramElement(pe);
+
+ IRelation rel = getFeatureProvider().getRelationRelatedToAttribute(oldAt);
+ String inverseJPTName = null;
+ if (BidirectionalRelation.class.isInstance(rel))
+ inverseJPTName = rel.getInverse().getName();
+ if (oldAt.getName().equals(value))
+ return;
+ JpaArtifactFactory.instance().renameAttribute(oldAt, value, inverseJPTName, getFeatureProvider());
+
+ if (pe.getGraphicsAlgorithm() == null)
+ return;
+ final GraphicsAlgorithm alg = pe.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(0);
+ final String newValue = value;
+
+ TransactionalEditingDomain ted = TransactionUtil.getEditingDomain(alg);
+ ted.getCommandStack().execute(new RecordingCommand(ted) {
+ protected void doExecute() {
+ ((Text) alg).setValue(newValue);
+ }
+ });
+ }
+
+}

Back to the top