Commit 85e919ec authored by Kai-Holger Brassel's avatar Kai-Holger Brassel
Browse files

New release 1.1.0

 * Switch from EMF Forms to Sirius
 * Replace QuantityLong and QuantityDouble by Quantity (only doubles)
 * Switch from JDK 15 to JDK 16
 * Add obligatory annotation for minnimal and maximal values
 * Allow dimensionless and/or nullable Quantites
 * Tests for nullable and dimensionless Quantites
parent 89b2e825
Pipeline #4791 failed with stage
in 4 seconds
Showing with 52 additions and 575 deletions
+52 -575
......@@ -9,7 +9,7 @@
<parent>
<groupId>de.hftstuttgart</groupId>
<artifactId>de.hftstuttgart.cityunits</artifactId>
<version>1.0.2</version>
<version>1.1.0</version>
</parent>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-15">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-16">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
......
......@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tests
Bundle-SymbolicName: de.hftstuttgart.cityunits.tests
Bundle-Version: 1.0.2
Bundle-Version: 1.1.0
Automatic-Module-Name: de.hft.stuttgart.cityunits.tests
Import-Package: de.hftstuttgart.cityunits.model,
org.junit;version="4.13.0",
......
......@@ -9,7 +9,7 @@
<parent>
<groupId>de.hftstuttgart</groupId>
<artifactId>de.hftstuttgart.cityunits</artifactId>
<version>1.0.2</version>
<version>1.1.0</version>
</parent>
</project>
\ No newline at end of file
......@@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.*;
import java.util.Locale;
import java.util.Locale.Category;
import java.util.Optional;
import javax.measure.Quantity;
import javax.measure.Unit;
......@@ -15,7 +16,9 @@ import org.junit.jupiter.api.Test;
import de.hftstuttgart.cityunits.model.CarbonEmission;
import de.hftstuttgart.cityunits.model.VolumetricFlowRate;
import de.hftstuttgart.cityunits.model.Intensity;
import de.hftstuttgart.cityunits.model.NullableQuantity;
import de.hftstuttgart.cityunits.model.UrbanSimulationUnits;
import tech.units.indriya.AbstractUnit;
import tech.units.indriya.quantity.Quantities;
import tech.units.indriya.unit.Units;
......@@ -92,4 +95,45 @@ class QuantityTest {
assertTrue(q.isEquivalentTo(Quantities.getQuantity((String) "5.2007 tonCO₂eq").asType(CarbonEmission.class)),
"Wrong conversion from kg of CO₂eq to ton of CO₂eq!");
}
@Test
void testFallbackUnit() {
NullableQuantity q = NullableQuantity.create("99 Luftballons");
assertEquals("one", q.getUnit().toString(), "Wrong Unit!");
assertEquals(99, q.getNumber().get(), "Wrong Number!");
}
@Test
void testDimensionless() {
NullableQuantity q = NullableQuantity.create("2.19");
assertEquals("one", q.getUnit().toString(), "Wrong Unit!");
assertEquals(2.19, q.getNumber().get(), "Wrong Number!");
q = NullableQuantity.create("97 ");
assertEquals("one", q.getUnit().toString(), "Wrong Unit!");
assertEquals(97, q.getNumber().get(), "Wrong Number!");
}
@Test
void testMissingValue() {
NullableQuantity q = NullableQuantity.create("kg");
assertEquals("kg", q.getUnit().toString(), "Wrong Unit!");
assertEquals(Optional.empty(), q.getNumber(), "Number not empty!");
q = NullableQuantity.create(" m ");
assertEquals(Units.METRE, q.getUnit(), "Wrong Unit!");
assertEquals(Optional.empty(), q.getNumber(), "Number not empty!");
}
@Test
void testMissingValueAndUnit() {
NullableQuantity q = NullableQuantity.create("");
assertEquals(AbstractUnit.ONE, q.getUnit(), "Wrong Unit!");
assertEquals(Optional.empty(), q.getNumber(), "Number not empty!");
q = NullableQuantity.create(" ");
assertEquals(AbstractUnit.ONE, q.getUnit(), "Wrong Unit!");
assertEquals(Optional.empty(), q.getNumber(), "Number not empty!");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-15">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src/"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>de.hftstuttgart.cityunits.ui.renderer</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ds.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: QuantityControl
Bundle-SymbolicName: de.hftstuttgart.cityunits.ui.renderer;singleton:=true
Bundle-Version: 1.0.2
Bundle-Vendor: HfT Stuttgart
Export-Package: de.hftstuttgart.cityunits.ui.renderer;version="1.0.2"
Require-Bundle: de.hftstuttgart.cityunits.model;bundle-version="1.0.2",
org.eclipse.emf.ecp.edit.swt;bundle-version="[1.24.0,2.0.0)",
org.eclipse.emf.ecp.ui.view.swt;bundle-version="[1.24.0,2.0.0)",
org.eclipse.emf.ecp.view.core.swt;bundle-version="[1.24.0,2.0.0)",
org.eclipse.emf.ecp.view.template.model;bundle-version="[1.24.0,2.0.0)",
org.eclipse.emf.edit;bundle-version="[2.8.0,3.0.0)",
org.eclipse.core.runtime;bundle-version="[3.8.0,4.0.0)",
org.eclipse.emfforms.core.services.editsupport;bundle-version="[1.24.0,2.0.0)",
org.eclipse.emf.databinding;bundle-version="[1.3.0,2.0.0)",
org.eclipse.emfforms.swt.core.di;bundle-version="[1.24.0,2.0.0)",
org.eclipse.emfforms.localization;bundle-version="[1.24.0,2.0.0)",
org.eclipse.jface;bundle-version="0.0.0",
javax.measure.unit-api;bundle-version="[2.1.1,3.0.0)"
Service-Component: OSGI-INF/quantityRendererService.xml
Bundle-ActivationPolicy: lazy
Import-Package: javax.inject;version="1.0.0",
org.eclipse.emfforms.spi.common.report;version="[1.24.0, 2.0.0)",
org.eclipse.jface.layout;version="0.0.0",
org.eclipse.swt;version="0.0.0",
org.eclipse.swt.widgets;version="0.0.0"
Automatic-Module-Name: de.hftstuttgart.units.ui.eclipse.quantityrenderer
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="de.hftstuttgart.units.ui.rendererservice">
<implementation class="de.hftstuttgart.cityunits.ui.renderer.QuantityControlRendererService"/>
<service>
<provide interface="org.eclipse.emfforms.spi.swt.core.di.EMFFormsDIRendererService"/>
</service>
<reference bind="setEMFFormsDatabinding" cardinality="1..1" interface="org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding" name="EMFFormsDatabinding" policy="static"/>
<reference bind="setReportService" cardinality="1..1" interface="org.eclipse.emfforms.spi.common.report.ReportService" name="ReportService" policy="static"/>
</scr:component>
output.. = bin/
bin.includes = META-INF/,\
.,\
OSGI-INF/
source.. = src/
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>de.hftstuttgart.cityunits.ui.renderer</artifactId>
<packaging>eclipse-plugin</packaging>
<name>City Units SWT Renderer</name>
<parent>
<groupId>de.hftstuttgart</groupId>
<artifactId>de.hftstuttgart.cityunits</artifactId>
<version>1.0.2</version>
</parent>
</project>
\ No newline at end of file
package de.hftstuttgart.cityunits.ui.renderer;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import javax.inject.Inject;
import javax.measure.Unit;
import org.eclipse.core.databinding.Binding;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecp.edit.internal.swt.controls.NumericalHelper;
import org.eclipse.emf.ecp.edit.spi.swt.util.ECPDialogExecutor;
import org.eclipse.emf.ecp.view.internal.core.swt.MessageKeys;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
import org.eclipse.emf.ecp.view.spi.core.swt.renderer.TextControlSWTRenderer;
import org.eclipse.emf.ecp.view.spi.model.VControl;
import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emfforms.spi.common.locale.EMFFormsLocaleChangeListener;
import org.eclipse.emfforms.spi.common.locale.EMFFormsLocaleProvider;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
import org.eclipse.emfforms.spi.core.services.editsupport.EMFFormsEditSupport;
import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
import org.eclipse.jface.dialogs.IDialogLabelKeys;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import de.hftstuttgart.cityunits.model.NullableQuantity;
import de.hftstuttgart.cityunits.model.quantities.QuantitiesPackage;
public class QuantityControlRenderer extends TextControlSWTRenderer {
private final EMFFormsLocalizationService localizationService;
private final EMFFormsLocaleProvider localeProvider;
private EMFFormsLocaleChangeListener emfFormsLocaleChangeListener;
private Unit<?> unit;
/**
* Default constructor.
*
* @param vElement the view model element to be rendered
* @param viewContext the view context
* @param reportService The {@link ReportService}
* @param emfFormsDatabinding The {@link EMFFormsDatabinding}
* @param emfFormsLabelProvider The {@link EMFFormsLabelProvider}
* @param vtViewTemplateProvider The {@link VTViewTemplateProvider}
* @param emfFormsEditSupport The {@link EMFFormsEditSupport}
* @param localizationService The {@link EMFFormsLocalizationService}
* @param localeProvider The {@link EMFFormsLocaleProvider}
*/
@Inject
// CHECKSTYLE.OFF: ParameterNumber
public QuantityControlRenderer(VControl vElement, ViewModelContext viewContext, ReportService reportService,
EMFFormsDatabinding emfFormsDatabinding, EMFFormsLabelProvider emfFormsLabelProvider,
VTViewTemplateProvider vtViewTemplateProvider, EMFFormsEditSupport emfFormsEditSupport,
EMFFormsLocalizationService localizationService, EMFFormsLocaleProvider localeProvider) {
// CHECKSTYLE.ON: ParameterNumber
super(vElement, viewContext, reportService, emfFormsDatabinding, emfFormsLabelProvider, vtViewTemplateProvider,
emfFormsEditSupport);
this.localizationService = localizationService;
this.localeProvider = localeProvider;
}
@Override
protected Control createSWTControl(Composite parent) {
final VFeaturePathDomainModelReference featureRef = (VFeaturePathDomainModelReference) getVElement()
.getDomainModelReference();
final String defaultString = featureRef.getDomainModelEFeature().getDefaultValueLiteral();
final NullableQuantity defaultValue = NullableQuantity.create(defaultString);
unit = defaultValue.getUnit();
final Composite composite = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().numColumns(2).applyTo(composite);
GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo(composite);
final Control control = super.createSWTControl(composite);
final Label label = new Label(composite, SWT.PUSH);
label.setText(unit.toString());
return control;
}
@Override
protected int getDefaultAlignment() {
return SWT.RIGHT;
}
/*
* (non-Javadoc)
* @see org.eclipse.emf.ecp.edit.internal.swt.controls.AbstractTextControl#getTextVariantID()
*/
@Override
protected String getTextVariantID() {
return "org_eclipse_emf_ecp_control_numerical"; //$NON-NLS-1$
}
@Override
protected String getTextMessage() {
return ""; //$NON-NLS-1$
}
@Override
protected Object convert(Text text, EDataType attributeType, String value) throws DatabindingFailedException {
final EStructuralFeature eStructuralFeature = (EStructuralFeature) getModelValue().getValueType();
final NumericalTargetToModelUpdateStrategy converter = new NumericalTargetToModelUpdateStrategy(
eStructuralFeature, getModelValue(), getDataBindingContext(), text);
return converter.convert(value);
}
@Override
protected Binding[] createBindings(final Control control) throws DatabindingFailedException {
final EStructuralFeature structuralFeature = (EStructuralFeature) getModelValue().getValueType();
final UpdateValueStrategy<?, ?> targetToModelStrategy = withPreSetValidation(
new NumericalTargetToModelUpdateStrategy(structuralFeature, getModelValue(), getDataBindingContext(),
(Text) Composite.class.cast(control).getChildren()[0]));
final NumericalModelToTargetUpdateStrategy modelToTargetStrategy = new NumericalModelToTargetUpdateStrategy(
getInstanceClass(structuralFeature), false);
final Binding binding = bindValue(control, getModelValue(), getDataBindingContext(),
targetToModelStrategy, modelToTargetStrategy);
final Binding tooltipBinding = createTooltipBinding(control, getModelValue(), getDataBindingContext(),
targetToModelStrategy,
new NumericalModelToTargetUpdateStrategy(getInstanceClass(structuralFeature), true));
emfFormsLocaleChangeListener = new EMFFormsLocaleChangeListener() {
/**
* {@inheritDoc}
*
* @see org.eclipse.emfforms.spi.common.locale.EMFFormsLocaleChangeListener#notifyLocaleChange()
*/
@Override
public void notifyLocaleChange() {
((Text) control).setMessage(getTextMessage());
binding.updateModelToTarget();
}
};
localeProvider.addEMFFormsLocaleChangeListener(emfFormsLocaleChangeListener);
return new Binding[] { binding, tooltipBinding };
}
private Class<?> getInstanceClass(EStructuralFeature feature) {
if (feature.getEType() == QuantitiesPackage.eINSTANCE.getQuantityDouble()) {
return Double.class;
} else if (feature.getEType() == QuantitiesPackage.eINSTANCE.getQuantityLong()) {
return Long.class;
}
assert false;
return null;
}
@Override
protected String getTextFromTextField(Text text, EDataType attributeType) {
return text.getText().isBlank() ? null : super.getTextFromTextField(text, attributeType);
}
/**
* Converts the numerical value from the model to the target. Locale settings are respected,
* i.e. formatting is performed according to the current locale.
*/
private class NumericalModelToTargetUpdateStrategy extends ModelToTargetUpdateStrategy {
private final Class<?> instanceClass;
NumericalModelToTargetUpdateStrategy(Class<?> instanceClass, boolean tooltip) {
super(tooltip);
this.instanceClass = instanceClass;
}
@Override
public Object convertValue(Object value) {
if (value == null) {
return ""; //$NON-NLS-1$
}
return ((NullableQuantity) value).getNumber()
.map(n -> NumericalHelper.setupFormat(localeProvider.getLocale(), instanceClass).format(n))
.orElse(""); //$NON-NLS-1$
}
}
/**
* More specific target to model update strategy that convert the string
* in the text field to a number. If the string is a invalid number,
* for instance because of the current locale, the value is reset to
* the last valid value found in the mode.
*/
private class NumericalTargetToModelUpdateStrategy extends TargetToModelUpdateStrategy {
private final Text text;
private final IObservableValue<?> modelValue;
private final EStructuralFeature eStructuralFeature;
private final DataBindingContext dataBindingContext;
NumericalTargetToModelUpdateStrategy(EStructuralFeature eStructuralFeature,
IObservableValue<?> modelValue, DataBindingContext dataBindingContext, Text text) {
super(eStructuralFeature.isUnsettable());
this.eStructuralFeature = eStructuralFeature;
this.modelValue = modelValue;
this.dataBindingContext = dataBindingContext;
this.text = text;
}
@Override
protected Object convertValue(final Object value) {
final DecimalFormat format = NumericalHelper.setupFormat(
localeProvider.getLocale(), getInstanceClass(eStructuralFeature));
try {
Number number = null;
if (value == null) {
number = NumericalHelper.getDefaultValue(getInstanceClass(eStructuralFeature));
} else {
final ParsePosition pp = new ParsePosition(0);
number = format.parse((String) value, pp);
if (pp.getErrorIndex() != -1 || pp.getIndex() != ((String) value).length()) {
return getOldValue(value);
}
if (isInteger(getInstanceClass(eStructuralFeature))) {
boolean maxValue = false;
boolean minValue = false;
final Class<?> instanceClass = getInstanceClass(eStructuralFeature);
if (number.doubleValue() >= getInstanceMaxValue(instanceClass)) {
maxValue = true;
} else if (number.doubleValue() <= getInstanceMinValue(instanceClass)) {
minValue = true;
}
if (maxValue || minValue) {
return numberToQuantity(number);
}
}
}
String formatedNumber = ""; //$NON-NLS-1$
if (number != null) {
formatedNumber = format.format(number);
}
if (formatedNumber.length() == 0) {
return null;
}
return numberToQuantity(format.parse(formatedNumber));
} catch (final ParseException ex) {
return getOldValue(value);
}
}
/**
* Whether the given class is an integer.
*
* @param instanceClass the class to check
* @return <code>true</code> if integer, <code>false</code> otherwise
*/
private boolean isInteger(Class<?> instanceClass) {
if (instanceClass.isPrimitive()) {
return long.class == instanceClass
|| int.class == instanceClass
|| short.class == instanceClass
|| byte.class == instanceClass;
}
return BigInteger.class == instanceClass
|| Long.class == instanceClass
|| BigInteger.class == instanceClass
|| Short.class == instanceClass
|| Byte.class == instanceClass;
}
private Object numberToQuantity(Number number) {
return NullableQuantity.create(number, unit);
}
private double getInstanceMinValue(Class<?> instanceClass) {
if (Integer.class == instanceClass || int.class == instanceClass) {
return Integer.MIN_VALUE;
}
if (Long.class == instanceClass || long.class == instanceClass) {
return Long.MIN_VALUE;
}
if (Short.class == instanceClass || short.class == instanceClass) {
return Short.MIN_VALUE;
}
return Double.NaN;
}
private double getInstanceMaxValue(Class<?> instanceClass) {
if (Integer.class == instanceClass || int.class == instanceClass) {
return Integer.MAX_VALUE;
}
if (Long.class == instanceClass || long.class == instanceClass) {
return Long.MAX_VALUE;
}
if (Short.class == instanceClass || short.class == instanceClass) {
return Short.MAX_VALUE;
}
return Double.NaN;
}
@Override
protected IStatus doSet(IObservableValue observableValue, Object value) {
final IStatus status = super.doSet(observableValue, value);
// update targets after a model change triggered by the target to model databinding
dataBindingContext.updateTargets();
return status;
}
private Object getOldValue(final Object value) {
if (eStructuralFeature.getDefaultValue() == null && value == null || value.equals("")) { //$NON-NLS-1$
return null;
}
final Object result = modelValue.getValue();
final MessageDialog messageDialog = new MessageDialog(text.getShell(),
localizationService.getString(getClass(), MessageKeys.NumericalControl_InvalidNumber), null,
localizationService.getString(getClass(), MessageKeys.NumericalControl_InvalidNumberWillBeUnset),
MessageDialog.ERROR,
new String[] { JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY) }, 0);
new ECPDialogExecutor(messageDialog) {
@Override
public void handleResult(int codeResult) {
}
}.execute();
dataBindingContext.updateTargets();
if (eStructuralFeature.isUnsettable() && result == null) {
// showUnsetLabel();
return SetCommand.UNSET_VALUE;
}
return result;
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.core.swt.renderer.TextControlSWTRenderer#getUnsetText()
*/
@Override
protected String getUnsetText() {
return localizationService.getString(getClass(), MessageKeys.NumericalControl_NoNumberClickToSetNumber);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#dispose()
*/
@Override
protected void dispose() {
super.dispose();
localeProvider.removeEMFFormsLocaleChangeListener(emfFormsLocaleChangeListener);
}
}
package de.hftstuttgart.cityunits.ui.renderer;
import org.eclipse.core.databinding.property.value.IValueProperty;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
import org.eclipse.emf.ecp.view.spi.model.VControl;
import org.eclipse.emf.ecp.view.spi.model.VElement;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
import org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer;
import org.eclipse.emfforms.spi.swt.core.di.EMFFormsDIRendererService;
import de.hftstuttgart.cityunits.model.NullableQuantity;
/**
* QuantityRendererService which provides the QuantityRenderer.
*
* @author Kai Brassel
*
*/
public class QuantityControlRendererService implements EMFFormsDIRendererService<VControl> {
private EMFFormsDatabinding databindingService;
private ReportService reportService;
/**
* Called by the initializer to set the EMFFormsDatabinding.
*
* @param databindingService The EMFFormsDatabinding
*/
protected void setEMFFormsDatabinding(EMFFormsDatabinding databindingService) {
this.databindingService = databindingService;
}
/**
* Called by the initializer to set the ReportService.
*
* @param reportService The ReportService
*/
protected void setReportService(ReportService reportService) {
this.reportService = reportService;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emfforms.spi.swt.core.di.EMFFormsDIRendererService#isApplicable(VElement,ViewModelContext)
*/
@Override
public double isApplicable(VElement vElement, ViewModelContext viewModelContext) {
if (!VControl.class.isInstance(vElement)) {
return NOT_APPLICABLE;
}
final VControl control = (VControl) vElement;
if (control.getDomainModelReference() == null) {
return NOT_APPLICABLE;
}
@SuppressWarnings("rawtypes")
IValueProperty valueProperty;
try {
valueProperty = databindingService.getValueProperty(control.getDomainModelReference(),
viewModelContext.getDomainModel());
} catch (final DatabindingFailedException ex) {
reportService.report(new DatabindingFailedReport(ex));
return NOT_APPLICABLE;
}
final EStructuralFeature eStructuralFeature = EStructuralFeature.class.cast(valueProperty.getValueType());
if (eStructuralFeature.getEType().getInstanceClass() == NullableQuantity.class) {
return 9; // 9 - not 10 - to avoid priority clash with multi-valued attributes
}
return NOT_APPLICABLE;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emfforms.spi.swt.core.di.EMFFormsDIRendererService#getRendererClass()
*/
@Override
public Class<? extends AbstractSWTRenderer<VControl>> getRendererClass() {
return QuantityControlRenderer.class;
}
}
......@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.hftstuttgart</groupId>
<artifactId>de.hftstuttgart.cityunits</artifactId>
<version>1.0.2</version>
<version>1.1.0</version>
<packaging>pom</packaging>
<name>City Units Parent POM</name>
......@@ -19,8 +19,8 @@
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<source>15</source>
<target>15</target>
<source>16</source>
<target>16</target>
<encoding>UTF-8</encoding>
</configuration>
<extensions>true</extensions>
......@@ -36,7 +36,7 @@
<artifact>
<groupId>de.hftstuttgart</groupId>
<artifactId>de.hftstuttgart.cityunits.target</artifactId>
<version>1.0.2</version>
<version>1.1.0</version>
</artifact>
</target>
<environments>
......@@ -90,7 +90,6 @@
<module>de.hftstuttgart.cityunits.feature</module>
<module>de.hftstuttgart.cityunits.model</module>
<module>de.hftstuttgart.cityunits.model.edit</module>
<module>de.hftstuttgart.cityunits.ui.renderer</module>
<module>de.hftstuttgart.cityunits.p2site</module>
<module>de.hftstuttgart.cityunits.tests</module>
</modules>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment