blob: 5fb0a3f82127634be98385ec7bd70982853bb750 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017, MDH
*
* 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
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Irfan Sljivo <irfan.sljivo@mdh.se || irfan.sljivo@gmail.com>
* Initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.opencert.chess.argumentGenerator.dialogs;
import java.util.ArrayList;
import java.util.HashMap;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.cdo.common.security.CDOPermission;
import org.eclipse.emf.cdo.dawn.preferences.PreferenceConstants;
import org.eclipse.emf.cdo.dawn.util.connection.CDOConnectionUtil;
import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.opencert.chess.argumentGenerator.argumentation.CDOResourceListLabelProvider;
import org.eclipse.opencert.chess.argumentGenerator.argumentation.CHESSContract2OpencertArgumentGenerator;
import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.uml2.uml.Model;
public class ArgumentationGenerationDialog extends Dialog {
private CDOView view;
private ArrayList refList = new ArrayList();
private ArrayList<String> refListDir = new ArrayList();
private ComboViewer comboViewerSelectArgModel;
private static final String ARGUMENTATION_NsPrefix = ".arg";
HashMap<Object, Object> options = new HashMap<Object, Object>();
private static final String UTF_8 = "UTF-8";
private Model model;
private String systemQN;
private Boolean checkWeakContracts;
public ArgumentationGenerationDialog(Shell parentShell,PapyrusMultiDiagramEditor editor,Model inputModel, String systemQN, Boolean weakContracts) {
super(parentShell);
CDOConnectionUtil.instance.init(
PreferenceConstants.getRepositoryName(),
PreferenceConstants.getProtocol(),
PreferenceConstants.getServerName());
CDOSession session = CDOConnectionUtil.instance.getCurrentSession();
view = CDOConnectionUtil.instance.openView(session);
options.put(XMLResource.OPTION_ENCODING, UTF_8);
this.model=inputModel;
this.systemQN=systemQN;
this.checkWeakContracts=weakContracts;
}
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new GridLayout(1, false));
Label lblSelectASystem = new Label(container, SWT.NONE);
lblSelectASystem.setText("Select a system integration argumentation model");
comboViewerSelectArgModel = new ComboViewer(container, SWT.NONE);
Combo combo = comboViewerSelectArgModel.getCombo();
combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
comboViewerSelectArgModel.setContentProvider(new ArrayContentProvider());
comboViewerSelectArgModel.setLabelProvider(new CDOResourceListLabelProvider());
ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
dialog.open();
IProgressMonitor monitor = dialog.getProgressMonitor();
monitor.beginTask("Searching for argumentation folders", 20);
try {
populateArgModels();
} catch (Exception e) {
e.printStackTrace();
}
monitor.worked(1);
dialog.close();
return container;
}
protected void createButtonsForButtonBar(Composite parent) {
Button button = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
MessageDialog dialog = new MessageDialog(ArgumentationGenerationDialog.this.getParentShell(), "Argumentation Generation", null,
"Argument-fragments Generated", MessageDialog.INFORMATION, new String[] { "OK",}, 0);
ProgressMonitorDialog monitorDialog = new ProgressMonitorDialog(getShell());
monitorDialog.open();
IProgressMonitor monitor = monitorDialog.getProgressMonitor();
monitor.beginTask("Beginning argument-fragement generation", 20);
CHESSContract2OpencertArgumentGenerator argumentGenerator= new CHESSContract2OpencertArgumentGenerator(monitor, getDestinationFolder(), model, systemQN,checkWeakContracts);
argumentGenerator.generateArgumentationFragments();
//generateArgumentationFragments(monitor,getDestinationFolder(),model);
int result = dialog.open();
ArgumentationGenerationDialog.this.close();
}
});
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
protected Point getInitialSize() {
return new Point(450, 300);
}
public CDOResourceFolder getDestinationFolder()
{
return (CDOResourceFolder)((IStructuredSelection)comboViewerSelectArgModel.getSelection()).getFirstElement();
}
public void populateArgModels()
{
addFilesOfDir();
setArgModelListInput(refList.toArray());
}
public int addFilesOfDir()
{
int sumStd=0;
CDOResourceNode[] listR= view.getElements();
for (int i=0; i<listR.length; i++){
if(listR[i] instanceof CDOResourceFolder){
//System.out.println(((CDOResourceFolder)listR[i]).getName());
if(((CDOResourceFolder)listR[i]).getName().equalsIgnoreCase("argumentation"))
{
refList.add(listR[i]);
refListDir.add(listR[i].getPath());
sumStd++;
}
else
checkFolderContents((CDOResourceFolder)listR[i],sumStd);
}
}
return sumStd;
}
public static boolean hasWritePermission(CDOResourceNode node) {
// force to get the last revision
node.cdoReload();
CDOPermission permission = node.cdoRevision().getPermission();
return permission.isWritable();
}
private void checkFolderContents(CDOResourceFolder cdoResourceFolder, int sumStd) {
if (hasWritePermission(cdoResourceFolder)) {
EList<CDOResourceNode> listN= cdoResourceFolder.getNodes();
for (int i=0; i<listN.size(); i++){
if(listN.get(i) instanceof CDOResourceFolder){
if(((CDOResourceFolder)listN.get(i)).getName().equalsIgnoreCase("argumentation"))
{
//System.out.println(listN.get(i).getPath());
refList.add(listN.get(i));
refListDir.add(listN.get(i).getPath());
sumStd++;
}
else
checkFolderContents((CDOResourceFolder)listN.get(i),sumStd);
}
}
}
}
public void setArgModelListInput(Object[] cdoResource)
{
comboViewerSelectArgModel.setInput(cdoResource);
comboViewerSelectArgModel.setSorter(new ViewerSorter() {
public int compare(
Viewer viewer, Object c1, Object c2) {
return ((CDOResourceFolder) c1).getPath().compareToIgnoreCase(((CDOResourceFolder) c2).getPath());
}
});
}
}