An error occurred while loading the file. Please try again.
QuantityControlRendererService.java 2.88 KiB
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; } }