Skip to content
Snippets Groups Projects
Commit 208dec55 authored by Dongyue Mou's avatar Dongyue Mou
Browse files

removed ObservableValue and Observables, all projects use EMFObservableValue...

removed ObservableValue and Observables, all projects use EMFObservableValue and EMFObservables by default
the DataBindingContext is also changed to EMFDataBindingContext
Moved NavigatorTreeLabelProvider into util package with new name ModelElementLabelProvider, so that it can be reused by other projects
refs 153
parent 91f57194
No related branches found
No related tags found
No related merge requests found
Showing
with 30 additions and 216 deletions
...@@ -16,7 +16,6 @@ Bundle-ActivationPolicy: lazy ...@@ -16,7 +16,6 @@ Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Vendor: fortiss Bundle-Vendor: fortiss
Export-Package: org.fortiss.tooling.kernel.ui, Export-Package: org.fortiss.tooling.kernel.ui,
org.fortiss.tooling.kernel.ui.databinding,
org.fortiss.tooling.kernel.ui.extension, org.fortiss.tooling.kernel.ui.extension,
org.fortiss.tooling.kernel.ui.extension.base, org.fortiss.tooling.kernel.ui.extension.base,
org.fortiss.tooling.kernel.ui.extension.data, org.fortiss.tooling.kernel.ui.extension.data,
......
/*--------------------------------------------------------------------------+
$Id$
| |
| Copyright 2011 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.databinding;
import org.eclipse.core.databinding.observable.Diffs;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.swt.widgets.Display;
import org.fortiss.tooling.kernel.service.ICommandStackService;
/**
* Implementation of {@link IObservableValue} for {@link EObject}s.
*
* @author hummel
* @author $Author$
* @version $Rev$
* @ConQAT.Rating GREEN Hash: 94D2F02DEDBCCDFD7ABC432477684C9B
*/
public class EObjectObservableValue extends AbstractObservableValue {
/** The wrapped object. */
private final EObject eObject;
/** The wrapped structural feature. */
private final EStructuralFeature structuralFeature;
/** Flag used for detecting our own updates. */
private boolean updating = false;
/** The adapter for sending change events. */
private final Adapter modelChangeAdapter = new AdapterImpl() {
/** {@inheritDoc} */
@Override
public void notifyChanged(final Notification msg) {
if (!updating && msg.getFeature() == structuralFeature) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
fireValueChange(Diffs.createValueDiff(
msg.getOldValue(), msg.getNewValue()));
}
});
}
}
};
/** Constructor. */
public EObjectObservableValue(Realm realm, EObject eObject,
EStructuralFeature structuralFeature) {
super(realm);
this.eObject = eObject;
this.structuralFeature = structuralFeature;
eObject.eAdapters().add(modelChangeAdapter);
}
/** {@inheritDoc} */
@Override
public synchronized void dispose() {
eObject.eAdapters().remove(modelChangeAdapter);
super.dispose();
}
/** {@inheritDoc} */
@Override
protected Object doGetValue() {
return eObject.eGet(structuralFeature);
}
/** {@inheritDoc} */
@Override
protected void doSetValue(final Object value) {
Object oldValue = doGetValue();
if (oldValue == null && value == null || oldValue != null
&& oldValue.equals(value)) {
return;
}
updating = true;
ICommandStackService.INSTANCE.runAsCommand(eObject, new Runnable() {
@Override
public void run() {
eObject.eSet(structuralFeature, value);
}
});
updating = false;
}
/** {@inheritDoc} */
@Override
public Object getValueType() {
if (structuralFeature.isMany()) {
return EList.class;
}
if (structuralFeature instanceof EAttribute) {
return ((EAttribute) structuralFeature).getEAttributeType()
.getInstanceClass();
}
return ((EReference) structuralFeature).getEReferenceType()
.getInstanceClass();
}
}
/*--------------------------------------------------------------------------+
$Id$
| |
| Copyright 2011 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.databinding;
import org.conqat.lib.commons.assertion.CCSMPre;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
/**
* Observerables for {@link EObject} models.
*
* @author hummel
* @author $Author$
* @version $Rev$
* @ConQAT.Rating GREEN Hash: 714FEC022718BEA0D783DC7A39A08742
*/
public class Observables {
/** Returns an observable for the given object and structural feature. */
public static IObservableValue observeValue(EObject eObject,
EStructuralFeature structuralFeature) {
return observeValue(Realm.getDefault(), eObject, structuralFeature);
}
/** Returns an observable for the given object and structural feature. */
public static IObservableValue observeValue(Realm realm, EObject eObject,
EStructuralFeature structuralFeature) {
CCSMPre.isTrue(eObject != null, "Can not observe null value!");
return new EObjectObservableValue(realm, eObject, structuralFeature);
}
}
<!--
$Id$
@version $Rev$
@ConQAT.Rating GREEN Hash: 996283773B2EC0D22D4A844A3C9E30A8
-->
<body>
Support classes for using the data binding mechanism with EMF EObjects.
</body>
...@@ -48,4 +48,5 @@ public abstract class EObjectActionBase extends Action { ...@@ -48,4 +48,5 @@ public abstract class EObjectActionBase extends Action {
public EObject getTarget() { public EObject getTarget() {
return target; return target;
} }
} }
...@@ -20,11 +20,11 @@ package org.fortiss.tooling.kernel.ui.extension.base; ...@@ -20,11 +20,11 @@ package org.fortiss.tooling.kernel.ui.extension.base;
import org.conqat.ide.commons.ui.databinding.validate.NumberPositiveValidator; import org.conqat.ide.commons.ui.databinding.validate.NumberPositiveValidator;
import org.conqat.ide.commons.ui.databinding.validate.TextToDoubleValidator; import org.conqat.ide.commons.ui.databinding.validate.TextToDoubleValidator;
import org.conqat.ide.commons.ui.databinding.validate.TextToIntegerValidator; import org.conqat.ide.commons.ui.databinding.validate.TextToIntegerValidator;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.conversion.NumberToStringConverter; import org.eclipse.core.databinding.conversion.NumberToStringConverter;
import org.eclipse.core.databinding.conversion.StringToNumberConverter; import org.eclipse.core.databinding.conversion.StringToNumberConverter;
import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPart;
import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridDataFactory;
...@@ -60,7 +60,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection { ...@@ -60,7 +60,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection {
protected Composite composite; protected Composite composite;
/** Stores the data binding context used. */ /** Stores the data binding context used. */
protected DataBindingContext dbc = new DataBindingContext(); protected EMFDataBindingContext dbc = new EMFDataBindingContext();
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
...@@ -144,7 +144,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection { ...@@ -144,7 +144,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection {
@Override @Override
public void refresh() { public void refresh() {
dbc.dispose(); dbc.dispose();
dbc = new DataBindingContext(); dbc = new EMFDataBindingContext();
} }
/** Binds a positive double value. */ /** Binds a positive double value. */
......
...@@ -18,6 +18,7 @@ $Id$ ...@@ -18,6 +18,7 @@ $Id$
package org.fortiss.tooling.kernel.ui.internal.properties; package org.fortiss.tooling.kernel.ui.internal.properties;
import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
...@@ -25,7 +26,6 @@ import org.eclipse.swt.widgets.Text; ...@@ -25,7 +26,6 @@ import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.fortiss.tooling.kernel.model.FortissToolingKernelPackage; import org.fortiss.tooling.kernel.model.FortissToolingKernelPackage;
import org.fortiss.tooling.kernel.model.IIdLabeled; import org.fortiss.tooling.kernel.model.IIdLabeled;
import org.fortiss.tooling.kernel.ui.databinding.Observables;
import org.fortiss.tooling.kernel.ui.extension.base.PropertySectionBase; import org.fortiss.tooling.kernel.ui.extension.base.PropertySectionBase;
/** /**
...@@ -65,8 +65,9 @@ public class IdLabeledPropertySection extends PropertySectionBase { ...@@ -65,8 +65,9 @@ public class IdLabeledPropertySection extends PropertySectionBase {
public void refresh() { public void refresh() {
super.refresh(); super.refresh();
IObservableValue modelObservable = Observables.observeValue(idLabeled, IObservableValue modelObservable = EMFObservables
FortissToolingKernelPackage.Literals.IID_LABELED__ID); .observeValue(idLabeled,
FortissToolingKernelPackage.Literals.IID_LABELED__ID);
dbc.bindValue(SWTObservables.observeText(idText, SWT.None), dbc.bindValue(SWTObservables.observeText(idText, SWT.None),
modelObservable, null, null); modelObservable, null, null);
} }
......
...@@ -18,6 +18,7 @@ $Id$ ...@@ -18,6 +18,7 @@ $Id$
package org.fortiss.tooling.kernel.ui.internal.properties; package org.fortiss.tooling.kernel.ui.internal.properties;
import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
...@@ -25,7 +26,6 @@ import org.eclipse.swt.widgets.Text; ...@@ -25,7 +26,6 @@ import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.fortiss.tooling.kernel.model.FortissToolingKernelPackage; import org.fortiss.tooling.kernel.model.FortissToolingKernelPackage;
import org.fortiss.tooling.kernel.model.INamedCommentedElement; import org.fortiss.tooling.kernel.model.INamedCommentedElement;
import org.fortiss.tooling.kernel.ui.databinding.Observables;
import org.fortiss.tooling.kernel.ui.extension.base.PropertySectionBase; import org.fortiss.tooling.kernel.ui.extension.base.PropertySectionBase;
/** /**
...@@ -73,12 +73,12 @@ public class NamedCommentedPropertySection extends PropertySectionBase { ...@@ -73,12 +73,12 @@ public class NamedCommentedPropertySection extends PropertySectionBase {
public void refresh() { public void refresh() {
super.refresh(); super.refresh();
IObservableValue modelObservable = Observables.observeValue( IObservableValue modelObservable = EMFObservables.observeValue(
namedCommented, namedCommented,
FortissToolingKernelPackage.Literals.INAMED_ELEMENT__NAME); FortissToolingKernelPackage.Literals.INAMED_ELEMENT__NAME);
dbc.bindValue(SWTObservables.observeText(nameText, SWT.FocusOut), dbc.bindValue(SWTObservables.observeText(nameText, SWT.FocusOut),
modelObservable, null, null); modelObservable, null, null);
modelObservable = Observables modelObservable = EMFObservables
.observeValue( .observeValue(
namedCommented, namedCommented,
FortissToolingKernelPackage.Literals.INAMED_COMMENTED_ELEMENT__COMMENT); FortissToolingKernelPackage.Literals.INAMED_COMMENTED_ELEMENT__COMMENT);
......
...@@ -64,6 +64,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService; ...@@ -64,6 +64,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService;
import org.fortiss.tooling.kernel.ui.service.INavigatorService; import org.fortiss.tooling.kernel.ui.service.INavigatorService;
import org.fortiss.tooling.kernel.ui.service.IPropertiesService; import org.fortiss.tooling.kernel.ui.service.IPropertiesService;
import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils; import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils;
import org.fortiss.tooling.kernel.ui.util.ModelElementLabelProvider;
/** /**
* {@link ViewPart} of the model navigator provided by the tooling kernel. * {@link ViewPart} of the model navigator provided by the tooling kernel.
...@@ -127,7 +128,7 @@ public final class NavigatorViewPart extends ViewPart implements ...@@ -127,7 +128,7 @@ public final class NavigatorViewPart extends ViewPart implements
IDecoratorManager decoratorManager = PlatformUI.getWorkbench() IDecoratorManager decoratorManager = PlatformUI.getWorkbench()
.getDecoratorManager(); .getDecoratorManager();
viewer.setLabelProvider(new DecoratingLabelProvider( viewer.setLabelProvider(new DecoratingLabelProvider(
new NavigatorTreeLabelProvider(), decoratorManager new ModelElementLabelProvider(), decoratorManager
.getLabelDecorator())); .getLabelDecorator()));
viewer.setContentProvider(new NavigatorTreeContentProvider()); viewer.setContentProvider(new NavigatorTreeContentProvider());
......
...@@ -15,51 +15,47 @@ $Id$ ...@@ -15,51 +15,47 @@ $Id$
| See the License for the specific language governing permissions and | | See the License for the specific language governing permissions and |
| limitations under the License. | | limitations under the License. |
+--------------------------------------------------------------------------*/ +--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.ui.internal.views; package org.fortiss.tooling.kernel.ui.util;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.BaseLabelProvider; import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Image;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler; import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService; import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
/** /**
* {@link ILabelProvider} for the model navigator tree.
* *
* @author hoelzlf * @author mou
* @author $Author$ * @author $Author$
* @version $Rev$ * @version $Rev$
* @ConQAT.Rating GREEN Hash: FFAE22D5782B4A3DB33744FDE430B00D * @ConQAT.Rating RED Hash:
*/ */
public final class NavigatorTreeLabelProvider extends BaseLabelProvider public class ModelElementLabelProvider extends LabelProvider {
implements ILabelProvider {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public Image getImage(Object element) { public String getText(Object element) {
// delegate to the model element handlers
if (element instanceof EObject) { if (element instanceof EObject) {
IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
.getModelElementHandler((EObject) element); .getModelElementHandler((EObject) element);
if (handler != null) {
return handler.getIcon(); if (handler != null)
} return handler.getName((EObject) element);
} }
return null;
return super.getText(element);
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public String getText(Object element) { public Image getImage(Object element) {
// delegate to the model element handlers
if (element instanceof EObject) { if (element instanceof EObject) {
IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
.getModelElementHandler((EObject) element); .getModelElementHandler((EObject) element);
if (handler != null) {
return handler.getName((EObject) element); if (handler != null)
} return handler.getIcon();
} }
return "";
return super.getImage(element);
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment