blob: d3ae78c0728bd07c592eac501c6ee89aadd2a9d4 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}