blob: 136f99fb14027c8028cfdb4c18fcbcc694b40b78 [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:
* Alberto Debiasi - initial API and implementation
******************************************************************************/
package org.polarsys.chess.paramArchConfigurator.ui.wizard;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.wizard.Wizard;
import org.polarsys.chess.paramArchConfigurator.ui.wizard.page.LastPage;
import org.polarsys.chess.chessmlprofile.ParameterizedArchitecture.InstantiatedArchitectureConfiguration;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
import org.polarsys.chess.paramArchConfigurator.ui.wizard.page.AssignValuesPage;
import org.polarsys.chess.service.core.model.ChessSystemModel;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.Property;
import eu.fbk.eclipse.standardtools.ExecOcraCommands.ui.services.OCRAExecService;
import eu.fbk.eclipse.standardtools.utils.ui.utils.DialogUtil;
public class InstantiateArchWizard extends Wizard {
protected AssignValuesPage one;
protected LastPage lastPage;
private static final Logger logger = Logger.getLogger(InstantiateArchWizard.class);
private OCRAExecService ocraExecService = OCRAExecService.getInstance(ChessSystemModel.getInstance());
private File ossFile;
private IProgressMonitor monitor;
private boolean isDiscrete;
private EObject selectedElement;
private Package seletedPackage;
private boolean createNestedPackage;
private boolean importArch;
private String nestedPackageName;
private File finalOssFile;
private File finalParamListFile;
private DialogUtil dialogUtil = DialogUtil.getInstance();
public InstantiateArchWizard(File ossFile, EObject selectedElement, boolean isDiscrete, IProgressMonitor monitor) {
super();
this.ossFile = ossFile;
this.monitor = monitor;
this.isDiscrete = isDiscrete;
this.selectedElement = selectedElement;
setNeedsProgressMonitor(true);
}
@Override
public String getWindowTitle() {
return "Parameterized Architecture Instantiation Wizard";
}
@Override
public void addPages() {
try {
Map<String, String> parametersList = ocraExecService.executeGetParameters(ossFile, isDiscrete, monitor);
if ((parametersList != null) && (!parametersList.isEmpty())) {
Map<String, Map<String, String>> existingParametersLists = getExistingParametersLists(selectedElement);
String currentDate = getCurrentDateAsStr();
String prefixName = FilenameUtils.removeExtension(ossFile.getName())
// TODO uncomment when OCRA commands will be ready
+"_"+currentDate;
one = new AssignValuesPage(true, prefixName, selectedElement, ossFile, null, null,
existingParametersLists, parametersList, new BasicEList<EList<String>>(), 1, isDiscrete,
monitor, this);
addPage(one);
}
lastPage = new LastPage(selectedElement, null, new BasicEList<EList<String>>());
addPage(lastPage);
} catch (Exception e) {
e.printStackTrace();
dialogUtil.showMessage_ExceptionError(e);
performCancel();
}
}
private Map<String, Map<String, String>> getExistingParametersLists(EObject selectedElement) {
EList<Property> instantiatedArchitectureList = EntityUtil.getInstance()
.getInstantiatedArchitecureElementsAsProperties((Class) selectedElement);
Map<String, Map<String, String>> res = new HashMap<String, Map<String, String>>();
if ((instantiatedArchitectureList != null) && (instantiatedArchitectureList.size() != 0)) {
for (Property property : instantiatedArchitectureList) {
InstantiatedArchitectureConfiguration instantiatedArchitecture = EntityUtil.getInstance().getInstantiatedArchitectureConfiguration(property);
Map<String, String> temp = new HashMap<String, String>();
for (String param : instantiatedArchitecture.getParameterList()) {
logger.debug("param: "+param);
String[] paramTerms = param.split("=");
logger.debug("paramTerms[0]: "+paramTerms[0]);
logger.debug("paramTerms[1]: "+paramTerms[1]);
temp.put(paramTerms[0], paramTerms[1]);
}
logger.debug("dependency.getQualifiedName(): "+property.getQualifiedName());
res.put(property.getQualifiedName(),temp);
}
}
return res;
}
private String getCurrentDateAsStr() {
DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
Date date = new Date();
return (dateFormat.format(date));
}
@Override
public boolean canFinish() {
if (getContainer().getCurrentPage() instanceof AssignValuesPage)
return false;
else if (getContainer().getCurrentPage() instanceof LastPage){
return getContainer().getCurrentPage().isPageComplete();
}
return false;
}
public Package getSelectedPackage() {
return seletedPackage;
}
public boolean createNestedPackage() {
return createNestedPackage;
}
public boolean importArch() {
return importArch;
}
public String getNestedPackageName() {
return nestedPackageName;
}
public File getOSSFile() {
return finalOssFile;
}
public File getParamsListFile() {
return finalParamListFile;
}
@Override
public boolean performFinish() {
seletedPackage = ((LastPage) getContainer().getCurrentPage()).getSelectedPackage();
createNestedPackage = ((LastPage) getContainer().getCurrentPage()).createNestedPackage();
nestedPackageName = ((LastPage) getContainer().getCurrentPage()).getNestedPackageName();
importArch = ((LastPage) getContainer().getCurrentPage()).importArchitecture();
finalOssFile = ((LastPage) getContainer().getCurrentPage()).getOSSFile();
finalParamListFile = ((LastPage) getContainer().getCurrentPage()).getParamListFile();
if(!importArch||seletedPackage!=null){
return true;
}else{
return false;
}
}
}