blob: 1f7469a773a9f7178524aedada48ae094174cf2c [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2018 Fondazione Bruno Kessler.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Luca Cristoforetti - initial API and implementation
******************************************************************************/
package org.polarsys.chess.contracts.transformations.commands;
import java.util.StringJoiner;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.uml2.uml.Class;
import org.polarsys.chess.chessmlprofile.Dependability.DependableComponent.Analysis;
import org.polarsys.chess.chessmlprofile.ParameterizedArchitecture.InstantiatedArchitectureConfiguration;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
import org.polarsys.chess.service.core.exceptions.NoComponentException;
import org.polarsys.chess.service.core.model.ChessSystemModel;
import org.polarsys.chess.service.core.utils.AnalysisResultUtil;
import org.polarsys.chess.service.gui.utils.SelectionUtil;
import eu.fbk.eclipse.standardtools.utils.core.utils.StringArrayUtil;
import eu.fbk.eclipse.standardtools.utils.ui.dialogs.SelectArchitectureConfigurationDialog;
import eu.fbk.tools.adapter.xsap.ComputeFmeaTable;
/**
* This command permits the execution of FMEA using the xSAP tool.
* @author cristofo
*
*/
public class FMEAXSapHandler extends AbstractXSapHandler {
private Class umlSelectedComponent;
private InstantiatedArchitectureConfiguration selectedInstantiatedArchitectureConfiguration ;
private SelectionUtil selectionUtil = SelectionUtil.getInstance();
/**
* Returns the string of expressions, formatted as requested by xSAP.
* @param conditions the string of conditions as reported to the user
* @return
*/
private String processConditions(String conditions) {
StringJoiner arguments = new StringJoiner(" ");
for (String condition : ftaFmeaCond.split(",")) {
arguments.add("\"" + condition + "\"");
}
return arguments.toString();
}
public Object execute(ExecutionEvent event) throws ExecutionException {
//final String storeResultParam = "store_result";
try {
umlSelectedComponent = selectionUtil.getUmlComponentFromSelectedObject(event);
} catch (NoComponentException e) {
umlSelectedComponent = analysisResultUtil.getSystemComponentFromEvent(event);
}
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
EList<InstantiatedArchitectureConfiguration> instantiatedArchitecures = EntityUtil.getInstance().getInstantiatedArchitecureConfigurations(umlSelectedComponent);
if((instantiatedArchitecures!=null)&&(!instantiatedArchitecures.isEmpty())){
SelectArchitectureConfigurationDialog dialog = new SelectArchitectureConfigurationDialog(shell,ChessSystemModel.getInstance(), instantiatedArchitecures);
dialog.open();
if (dialog.goAhead()) {
selectedInstantiatedArchitectureConfiguration =(InstantiatedArchitectureConfiguration)dialog.getSelectedAchitectureConfiguration();
}
}
// Compute all the required files for the analysis
if (!prepareExpandedFiles(event,umlSelectedComponent,selectedInstantiatedArchitectureConfiguration,Analysis.FMEA_ANALYSIS)) {
return null;
}
// final boolean storeResult = (event.getParameter(storeResultParam) != null &&
// event.getParameter(storeResultParam).equals("true")) ? true : false;
final String fmeaFileName = fileNamesUtil.computeFmeaFileName(editor, modelName);
// Compute FMEA and show results in a dedicated view
if (xSapExecService.computeFmea(extendedSmvFileName, fmsFileName, processConditions(ftaFmeaCond),
fmeaFileName, true)) {
EList<String> props= new BasicEList<String>();
StringArrayUtil.addConditionKeyValue(props, AnalysisResultUtil.PROPERTY, ftaFmeaCond);
// If requested, store the result
//if (storeResult) {
analysisResultUtil.createOrUpdateAnalysisContext(Analysis.FMEA_ANALYSIS,props ,
fmeaFileName, false,umlSelectedComponent,selectedInstantiatedArchitectureConfiguration, analysisContext);
//}
// Visualize the result
analysisResultUtil.showResult(ComputeFmeaTable.FUNCTION_NAME, fmeaFileName);
}
return null;
}
}