blob: b7b9aff6e33032d3d6610828307a33ef594c3fc5 [file] [log] [blame]
/*******************************************************************************
* CHESS core plugin
*
* Copyright (C) 2011-2015
* Mälardalen University, Sweden
*
*
* 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-v20.html
*******************************************************************************/
package org.polarsys.chess.fla.launch;
import java.util.List;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.model.BaseWorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.polarsys.chess.fla.impl.FlaAnalysisRunnerXml;
import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor;
import org.eclipse.papyrus.uml.diagram.clazz.part.UMLDiagramEditor;
public class FlaAnalysisCommandXml extends AbstractHandler {
protected IFile sourceFile;
List<? extends Object> arguments;
private IContainer targetFolder;
protected UMLDiagramEditor diagramEditor=null;
protected DiagramEditPart clazzdiagrameditPart;
protected PapyrusMultiDiagramEditor papyrusEditor;
private static JFrame frame = new JFrame();
public static final String COMMAND_ID = "org.polarsys.chess.fla.analysis.command";
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
sourceFile = handleBrowseFile("Concerto-FLA Analysis from XML", "Please choose source XML file");
if(sourceFile==null)
return null;
if(!sourceFile.getLocation().getFileExtension().equals("xml") && !sourceFile.getLocation().getFileExtension().equals("fla")){
JOptionPane.showMessageDialog(frame, "Chosen file is not XML file. To perform Concerto-FLA Analysis please choose XML file. " ,"Concerto-FLA Analysis has failed", JOptionPane.ERROR_MESSAGE);
return null;
}
targetFolder = sourceFile.getParent();
Shell shell = new Shell();
try {
ProgressMonitorDialog pmDialog = new ProgressMonitorDialog(shell);
FlaAnalysisRunnerXml analysisRunner = new FlaAnalysisRunnerXml();
analysisRunner.setSelectedXmlFile(sourceFile);
analysisRunner.setTargetFolder(targetFolder);
pmDialog.run(true, true, analysisRunner);
} catch (InvocationTargetException e) {
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
Activator.getDefault().getLog().log(status);
throw new ExecutionException("Error during FLA analysis", e);
} catch (InterruptedException e) {
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
Activator.getDefault().getLog().log(status);
}
return null;
}
private IFile handleBrowseFile(String title, String message) {
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(new Shell(), new WorkbenchLabelProvider(), new BaseWorkbenchContentProvider());
dialog.setTitle(title);
dialog.setMessage(message);
dialog.setAllowMultiple(false);
dialog.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement,
Object element) {
boolean ret = false;
String[] extensions = null;
extensions = new String[] { "xml" };
try {
ret = isXMLResource((IResource) element, extensions);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ret;
}
});
dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
dialog.open();
if(dialog.getReturnCode() == ElementTreeSelectionDialog.CANCEL){
return null;
}
Object results = dialog.getFirstResult();
if ((results != null) && (results instanceof IFile)) {
IFile currentFile = (IFile)results;
return currentFile;
}
else if ((results != null) && ((results instanceof IFolder) || (results instanceof IProject))) {
JOptionPane.showMessageDialog(frame, "CHESS-FPTC Analysis failed. XML file was not chosed. ","CHESS-FPTC Analysis - Wrong input file", JOptionPane.ERROR_MESSAGE);
return null;
}
return null;
}
private static boolean isXMLResource(IResource resource, String[] extensions)
throws CoreException {
if (resource instanceof IContainer) {
if (((IContainer) resource).isAccessible()) {
IResource[] members = ((IContainer) resource).members();
for (IResource member : members) {
if (isXMLResource(member, extensions)) {
return true;
}
}
}
} else if (resource instanceof IFile) {
IFile currentFile = (IFile) resource;
if (extensions == null) {
return true;
} else if (currentFile.getFileExtension() != null) {
for (int i = 0; i < extensions.length; i++) {
String extension = extensions[i];
if (currentFile.getFileExtension().toUpperCase().equals(
extension.toUpperCase())) {
return true;
}
}
}
}
return false;
}
}