blob: e4fd1da2cc2127f8cb695036bc09d397806bf9c4 [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.CenteredLinearInputConditioning;
import org.eclipse.apogy.core.programs.controllers.ValueSource;
import org.eclipse.emf.common.notify.AdapterFactory;
public class CenteredLinearInputConditioningCustomItemProvider extends CenteredLinearInputConditioningItemProvider {
public CenteredLinearInputConditioningCustomItemProvider(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_CenteredLinearInputConditioning_type");
CenteredLinearInputConditioning centeredLinearInputConditioning = (CenteredLinearInputConditioning) object;
if (centeredLinearInputConditioning.eContainer() instanceof ValueSource) {
ValueSource valueSource = (ValueSource) centeredLinearInputConditioning.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 = centeredLinearInputConditioning.getMinimum();
float max = centeredLinearInputConditioning.getMaximum();
float deadBand = centeredLinearInputConditioning.getDeadBand();
if (displayUnit != null && displayUnit != modelUnit) {
min = ((Double) modelUnit.getConverterTo(displayUnit).convert(min)).floatValue();
max = ((Double) modelUnit.getConverterTo(displayUnit).convert(max)).floatValue();
deadBand = ((Double) modelUnit.getConverterTo(displayUnit).convert(deadBand)).floatValue();
}
label += " (min " + format.format(min);
label += ", max " + format.format(max);
label += ", dead band " + format.format(deadBand) + ")";
} else {
label += " (min " + this.decimalFormat.format(centeredLinearInputConditioning.getMinimum());
label += ", max " + this.decimalFormat.format(centeredLinearInputConditioning.getMaximum());
label += ", dead band " + this.decimalFormat.format(centeredLinearInputConditioning.getDeadBand())
+ ")";
}
}
}
return label;
}
}