| /******************************************************************************* |
| * 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.ParabolicInputConditioning; |
| import org.eclipse.apogy.core.programs.controllers.ValueSource; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| |
| public class ParabolicInputConditioningCustomItemProvider extends ParabolicInputConditioningItemProvider { |
| public ParabolicInputConditioningCustomItemProvider(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_ParabolicInputConditioning_type"); |
| ParabolicInputConditioning parabolicInputConditioning = (ParabolicInputConditioning) object; |
| |
| if (parabolicInputConditioning.eContainer() instanceof ValueSource) { |
| ValueSource valueSource = (ValueSource) parabolicInputConditioning.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 = parabolicInputConditioning.getMinimum(); |
| float max = parabolicInputConditioning.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(parabolicInputConditioning.getMinimum()); |
| label += ", max " + this.decimalFormat.format(parabolicInputConditioning.getMaximum()); |
| } |
| |
| } |
| } |
| |
| return label; |
| } |
| |
| } |