| /******************************************************************************* |
| * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency |
| * 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: |
| * Pierre Allard, |
| * Regent L'Archeveque - initial API and implementation |
| * |
| * SPDX-License-Identifier: EPL-1.0 |
| *******************************************************************************/ |
| package org.eclipse.apogy.core.programs.controllers.provider; |
| |
| import java.text.DecimalFormat; |
| |
| import javax.measure.unit.Unit; |
| |
| import org.eclipse.apogy.common.emf.ApogyCommonEMFFacade; |
| import org.eclipse.apogy.common.emf.ui.ApogyCommonEMFUIFacade; |
| import org.eclipse.apogy.common.emf.ui.ApogyCommonEMFUIFactory; |
| import org.eclipse.apogy.common.emf.ui.EOperationEParametersFormatProviderParameters; |
| import org.eclipse.apogy.common.emf.ui.EOperationEParametersUnitsProviderParameters; |
| import org.eclipse.apogy.core.programs.controllers.LinearInputConditioning; |
| import org.eclipse.apogy.core.programs.controllers.ValueSource; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| |
| public class LinearInputConditioningCustomItemProvider extends LinearInputConditioningItemProvider { |
| public LinearInputConditioningCustomItemProvider(AdapterFactory adapterFactory) { |
| super(adapterFactory); |
| } |
| |
| // FIXME Should be centralized. |
| private final DecimalFormat decimalFormat = new DecimalFormat("0.000"); |
| |
| @Override |
| public String getText(Object object) { |
| String label = getString("_UI_LinearInputScalling_type"); |
| LinearInputConditioning linearInputScalling = (LinearInputConditioning) object; |
| |
| if (linearInputScalling.eContainer() instanceof ValueSource) { |
| ValueSource valueSource = (ValueSource) linearInputScalling.eContainer(); |
| if (valueSource.getBindedEDataTypeArgument() != null |
| && valueSource.getBindedEDataTypeArgument().getEParameter() != null) { |
| Unit<?> modelUnit = ApogyCommonEMFFacade.INSTANCE |
| .getEngineeringUnits(valueSource.getBindedEDataTypeArgument().getEParameter()); |
| if (modelUnit != null) { |
| EOperationEParametersUnitsProviderParameters unitsParams = ApogyCommonEMFUIFactory.eINSTANCE |
| .createEOperationEParametersUnitsProviderParameters(); |
| unitsParams.setParam(valueSource.getBindedEDataTypeArgument().getEParameter()); |
| Unit<?> displayUnit = ApogyCommonEMFUIFacade.INSTANCE.getDisplayUnits( |
| valueSource.getBindedEDataTypeArgument().getEParameter().getEOperation(), unitsParams); |
| |
| EOperationEParametersFormatProviderParameters formatParams = ApogyCommonEMFUIFactory.eINSTANCE |
| .createEOperationEParametersFormatProviderParameters(); |
| formatParams.setParam(valueSource.getBindedEDataTypeArgument().getEParameter()); |
| DecimalFormat format = ApogyCommonEMFUIFacade.INSTANCE.getDisplayFormat( |
| valueSource.getBindedEDataTypeArgument().getEParameter().getEOperation(), formatParams); |
| |
| float min = linearInputScalling.getMinimum(); |
| float max = linearInputScalling.getMaximum(); |
| |
| if (displayUnit != null && displayUnit != modelUnit) { |
| min = ((Double) modelUnit.getConverterTo(displayUnit).convert(min)).floatValue(); |
| max = ((Double) modelUnit.getConverterTo(displayUnit).convert(max)).floatValue(); |
| } |
| |
| label += " (min " + format.format(min); |
| label += ", max " + format.format(max); |
| } else { |
| label += " (min " + this.decimalFormat.format(linearInputScalling.getMinimum()); |
| label += ", max " + this.decimalFormat.format(linearInputScalling.getMaximum()); |
| } |
| |
| } |
| } |
| |
| return label; |
| } |
| |
| } |