blob: 6a880243b99e03918f0ff3d1a03d843be329b4e7 [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.service.core.utils;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.eclipse.uml2.uml.Class;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.polarsys.chess.chessmlprofile.Dependability.DependableComponent.Analysis;
/**
* Utility class for generating transformations file names.
*
* @author cristofo
*
*/
// Replaced File.separator with "/" because the URI object does not support the
// backslash "\" (that is returned by File.separator for Windows platforms).
public class FileNamesUtil {
private static final String XML_EXT = ".xml";
public static final String UML_EXT = ".uml";
public static final String OSS_EXT = ".oss";
public static final String SMV_EXT = ".smv";
public static final String FEI_EXT = ".fei";
public static final String OCRA_FOLD = "NuSMV3-OCRA";
public static final String XSAP_FOLD = "NuSMV3-XSAP";
public static final String RES_FOLD = "Results";
public static final String FILES_FOLD = "Files";
public static final String TEMP_FOLD = "Temp";
private static FileNamesUtil fileNamesUtil;
private final AnalysisResultUtil analysisResultUtil = AnalysisResultUtil.getInstance();
public static FileNamesUtil getInstance() {
if (fileNamesUtil == null) {
fileNamesUtil = new FileNamesUtil();
}
return fileNamesUtil;
}
/**
* Computes the folder for xSAP material.
*
* @param editor
* the active editor
* @return
*/
public IFolder computeXSapFolder(IEditorPart editor) {
final IFileEditorInput input = (IFileEditorInput) editor.getEditorInput();
final IFile inputfile = input.getFile();
final IProject project = inputfile.getProject();
IFolder folder = project.getFolder(XSAP_FOLD);
return folder;
}
/**
* Gives the current date and time formatted in a certain way.
*
* @return the string representing the current date and time
*/
private String getDate() {
final String pattern = "yyyy-MM-dd-HH-mm-ss";
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
return simpleDateFormat.format(new Date());
}
/**
* Computes the absolute file name for the fault tree.
*
* @param editor
* the active editor
* @param modelSystemName
* the model name
* @param index
* an index to differentiate the generated file
* @return
*/
public String computeFtFileName(IEditorPart editor, String modelSystemName, int index) {
final String resPath;
final String fileName;
//if (storeResult) {
resPath = analysisResultUtil.getResultDir();
fileName = resPath + File.separator + "extended_" + modelSystemName + "_" + Analysis.FTA_ANALYSIS
+ "_c" + index + "_" + getDate() + XML_EXT;
/*} else {
final IFolder folder = computeXSapFolder(editor);
final IFolder resFolder = folder.getFolder(CommandsCommon.RES_FOLD);
resPath = resFolder.getLocation().toString();
fileName = resPath + File.separator + "extended_" + modelSystemName + "_c" + index + "_ft" + XML_EXT;
}*/
return fileName;
}
/**
* Computes the absolute file name for the FMEA table.
*
* @param editor
* the active editor
* @param modelSystemName
* the model name
* @return
*/
public String computeFmeaFileName(IEditorPart editor, String modelSystemName) {
final String resPath;
final String fileName;
// if (storeResult) {
resPath = analysisResultUtil.getResultDir();
fileName = resPath + File.separator + modelSystemName + "_" + Analysis.FMEA_ANALYSIS + "_"
+ getDate() + XML_EXT;
/* } else {
final IFolder folder = computeXSapFolder(editor);
final IFolder resFolder = folder.getFolder(CommandsCommon.RES_FOLD);
resPath = resFolder.getLocation().toString();
fileName = resPath + File.separator + modelSystemName + "_fmea_table" + XML_EXT;
}*/
return fileName;
}
/**
* Computes the absolute file name for the extended SMV.
*
* @param editor
* the active editor
* @param modelSystemName
* the model name
* @return
*/
public String computeExtendedSmvFileName(IEditorPart editor, String modelSystemName) {
final IFolder folder = computeXSapFolder(editor);
final IFolder tempFolder = folder.getFolder(TEMP_FOLD);
final String tempFiles = tempFolder.getLocation().toString();
final String fileName = tempFiles + "/" + "extended_" + modelSystemName + SMV_EXT;
return fileName;
}
/**
* Computes the absolute file name for the expanded FEI.
*
* @param editor
* the active editor
* @param modelSystemName
* the model name
* @return
*/
public String computeExpandedFeiFileName(IEditorPart editor, String modelSystemName) {
final IFolder folder = computeXSapFolder(editor);
final IFolder tempFolder = folder.getFolder(TEMP_FOLD);
final String tempFiles = tempFolder.getLocation().toString();
final String fileName = tempFiles + "/" + "expanded_" + modelSystemName + XML_EXT;
return fileName;
}
/**
* Computes the absolute file name for the fms.
*
* @param editor
* the active editor
* @param modelSystemName
* the model name
* @return
*/
public String computeFmsFileName(IEditorPart editor, String modelSystemName) {
final IFolder folder = computeXSapFolder(editor);
final IFolder tempFolder = folder.getFolder(TEMP_FOLD);
final String tempFiles = tempFolder.getLocation().toString();
final String fileName = tempFiles + "/" + "fms_" + modelSystemName + XML_EXT;
return fileName;
}
/**
* Computes the target folder for files.
*
* @param editor
* the active editor
* @return
*/
public String computeFileTargetFolder(IEditorPart editor) {
final IFolder folder = computeXSapFolder(editor);
final IFolder files = folder.getFolder(FILES_FOLD);
final File target = files.getLocation().toFile();
return target.toString();
}
/**
* Computes the absolute file name of the SMV.
*
* @param editor
* the active editor
* @param modelSystemName
* the model name
* @return
*/
public String computeSmvFileName(IEditorPart editor, String modelSystemName) {
return computeFileTargetFolder(editor) + "/" + modelSystemName + SMV_EXT;
}
/**
* Computes the absolute file name of the FEI.
*
* @param editor
* the active editor
* @param modelSystemName
* the model name
* @return
*/
public String computeFeiFileName(IEditorPart editor, String modelSystemName) {
return computeFileTargetFolder(editor) + "/" + modelSystemName + FEI_EXT;
}
/**
* Returns the qualified name of the given component, as string.
*
* @param component
* the component
* @return the qualified name with replaced colons
*/
private String computeQualifiedName(Class component) {
String name = component.getQualifiedName();
return name.replace("::", "_");
}
/**
* Computes the file name for the Contract-based fault tree analysis.
*
* @param systemComponent
* the root component of the analysis
* @return
*/
public String computeContractFaultTreeFileName(Class systemComponent) {
final String resPath = analysisResultUtil.getResultDir();
return resPath + File.separator + computeQualifiedName(systemComponent) + "_"
+ Analysis.CONTRACT_BASED_FTA_ANALYSIS + "_" + getDate() + XML_EXT;
}
/**
* Computes the file name for the Contract refinement analysis.
*
* @param systemComponent
* the root component of the analysis
* @return
*/
public String computeContractRefinementFileName(Class systemComponent) {
final String resPath = analysisResultUtil.getResultDir();
return resPath + File.separator + computeQualifiedName(systemComponent) + "_"
+ Analysis.CONTRACT_REFINEMENT_ANALYSIS + "_" + getDate() + XML_EXT;
}
/**
* Computes the file name for the Composite Contract Implementation
* analysis.
*
* @param systemComponent
* the root component of the analysis
* @return
*/
public String computeContractCompositeImplementationFileName(Class systemComponent) {
final String resPath = analysisResultUtil.getResultDir();
return resPath + File.separator + computeQualifiedName(systemComponent) + "_"
+ Analysis.CONTRACT_COMPOSITE_IMPLEMENTATION_ANALYSIS + "_" + getDate() + XML_EXT;
}
/**
* Computes the file name for the Property Validation analysis.
*
* @param systemComponent
* the root component of the analysis
* @return
*/
public String computePropertyValidationFileName(Class systemComponent) {
final String resPath = analysisResultUtil.getResultDir();
return resPath + File.separator + computeQualifiedName(systemComponent) + "_"
+ Analysis.PROPERTY_VALIDATION_ANALYSIS + "_" + getDate() + XML_EXT;
}
/**
* Computes the file name for the Contract Property Validation analysis.
*
* @param systemComponent
* the root component of the analysis
* @return
*/
public String computeContractPropertyValidationFileName(Class systemComponent) {
final String resPath = analysisResultUtil.getResultDir();
return resPath + File.separator + computeQualifiedName(systemComponent) + "_"
+ Analysis.CONTRACT_PROPERTY_VALIDATION_ANALYSIS + "_" + getDate() + XML_EXT;
}
/**
* Computes the file name for the Model Checking analysis.
*
* @param systemComponent
* the root component of the analysis
* @return
*/
public String computeModelCheckingFileName(Class systemComponent) {
final String resPath = analysisResultUtil.getResultDir();
return resPath + File.separator + computeQualifiedName(systemComponent) + "_"
+ Analysis.MODEL_CHECKING_ANALYSIS + "_" + getDate() + XML_EXT;
}
}