|
|
@@ -10,11 +10,25 @@
|
|
|
*/
|
|
|
package org.yakindu.sct.generator.genmodel.ui.wizard;
|
|
|
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import org.eclipse.core.resources.IFolder;
|
|
|
+import org.eclipse.core.resources.IProject;
|
|
|
+import org.eclipse.core.resources.IResource;
|
|
|
+import org.eclipse.core.resources.IResourceVisitor;
|
|
|
+import org.eclipse.core.resources.ResourcesPlugin;
|
|
|
+import org.eclipse.core.runtime.CoreException;
|
|
|
+import org.eclipse.core.runtime.IPath;
|
|
|
import org.eclipse.jface.viewers.ArrayContentProvider;
|
|
|
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
|
|
|
import org.eclipse.jface.viewers.CheckboxTreeViewer;
|
|
|
import org.eclipse.jface.viewers.ComboViewer;
|
|
|
+import org.eclipse.jface.viewers.ICheckStateListener;
|
|
|
+import org.eclipse.jface.viewers.ITreeContentProvider;
|
|
|
import org.eclipse.jface.viewers.LabelProvider;
|
|
|
import org.eclipse.jface.viewers.StructuredSelection;
|
|
|
+import org.eclipse.jface.viewers.Viewer;
|
|
|
import org.eclipse.jface.wizard.WizardPage;
|
|
|
import org.eclipse.swt.SWT;
|
|
|
import org.eclipse.swt.graphics.Image;
|
|
|
@@ -25,8 +39,10 @@ import org.eclipse.swt.widgets.Label;
|
|
|
import org.eclipse.xtext.resource.IResourceDescriptions;
|
|
|
import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
|
|
|
import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
|
|
|
+import org.yakindu.sct.model.sgraph.Statechart;
|
|
|
|
|
|
import com.google.common.collect.Iterables;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
@@ -34,20 +50,26 @@ import com.google.common.collect.Iterables;
|
|
|
*/
|
|
|
public class SGenWizardPage2 extends WizardPage {
|
|
|
|
|
|
+ protected static final Object STATECHART_FILE_EXTEMSION = "sct";
|
|
|
private ComboViewer generators;
|
|
|
- private CheckboxTreeViewer statecharts;
|
|
|
+ protected CheckboxTreeViewer statecharts;
|
|
|
private final IResourceDescriptions resourceDescriptions;
|
|
|
+ private final SGenWizardPage1 fileSelectionPage;
|
|
|
|
|
|
/**
|
|
|
* @param pageName
|
|
|
* @param resourceDescriptions
|
|
|
+ * @param selection
|
|
|
*/
|
|
|
protected SGenWizardPage2(String pageName,
|
|
|
- IResourceDescriptions resourceDescriptions) {
|
|
|
+ IResourceDescriptions resourceDescriptions,
|
|
|
+ SGenWizardPage1 fileSelectionPage) {
|
|
|
super(pageName);
|
|
|
this.resourceDescriptions = resourceDescriptions;
|
|
|
+ this.fileSelectionPage = fileSelectionPage;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public void createControl(Composite parent) {
|
|
|
Composite container = new Composite(parent, SWT.NULL);
|
|
|
setControl(container);
|
|
|
@@ -61,7 +83,88 @@ public class SGenWizardPage2 extends WizardPage {
|
|
|
statecharts = new CheckboxTreeViewer(container, SWT.BORDER);
|
|
|
statecharts.getTree().setLayoutData(
|
|
|
new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
|
|
|
+ statecharts.setContentProvider(new ITreeContentProvider() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void inputChanged(Viewer viewer, Object oldInput,
|
|
|
+ Object newInput) {
|
|
|
+ // TODO Auto-generated method stub
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void dispose() {
|
|
|
+ // TODO Auto-generated method stub
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean hasChildren(Object element) {
|
|
|
+ return element instanceof IProject;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object getParent(Object element) {
|
|
|
+ // TODO Auto-generated method stub
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object[] getElements(Object inputElement) {
|
|
|
+ if (inputElement instanceof IFolder) {
|
|
|
+ return new Object[] { ((IFolder) inputElement).getProject() };
|
|
|
+ }
|
|
|
+ if (inputElement instanceof IProject) {
|
|
|
+ return findStatecharts((IProject) inputElement).toArray();
|
|
|
+ }
|
|
|
+ return new Object[] {};
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object[] getChildren(Object parentElement) {
|
|
|
+ if (parentElement instanceof IProject) {
|
|
|
+ return findStatecharts((IProject) parentElement).toArray();
|
|
|
+ }
|
|
|
+ return new Object[] {};
|
|
|
+ }
|
|
|
+ });
|
|
|
+ statecharts.setLabelProvider(new LabelProvider() {
|
|
|
|
|
|
+ @Override
|
|
|
+ public String getText(Object element) {
|
|
|
+ if (element instanceof IResource) {
|
|
|
+ return ((IResource) element).getFullPath().toString();
|
|
|
+ }
|
|
|
+ return super.getText(element);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ statecharts.addCheckStateListener(new ICheckStateListener() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void checkStateChanged(CheckStateChangedEvent event) {
|
|
|
+ Object element = event.getElement();
|
|
|
+ if (element instanceof IProject) {
|
|
|
+ statecharts.setSubtreeChecked(element, event.getChecked());
|
|
|
+ }
|
|
|
+ checkComplete();
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // statecharts.addDoubleClickListener(new IDoubleClickListener() {
|
|
|
+ //
|
|
|
+ // @Override
|
|
|
+ // public void doubleClick(DoubleClickEvent event) {
|
|
|
+ // IStructuredSelection selection = (IStructuredSelection)
|
|
|
+ // event.getSelection();
|
|
|
+ // Object firstElement = selection.getFirstElement();
|
|
|
+ // if (firstElement instanceof IProject) {
|
|
|
+ // boolean expanded = statecharts
|
|
|
+ // .getExpandedState(firstElement);
|
|
|
+ // statecharts.setExpandedState(firstElement, !expanded);
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // }
|
|
|
+ // });
|
|
|
Label lblGenerator = new Label(container, SWT.NONE);
|
|
|
lblGenerator.setText("Generator");
|
|
|
|
|
|
@@ -80,12 +183,56 @@ public class SGenWizardPage2 extends WizardPage {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param inputElement
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ protected List<IResource> findStatecharts(IProject project) {
|
|
|
+ final List<IResource> statecharts = Lists.newArrayList();
|
|
|
+ try {
|
|
|
+ project.accept(new IResourceVisitor() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean visit(IResource resource) throws CoreException {
|
|
|
+ if (resource.getType() == IResource.FILE
|
|
|
+ && STATECHART_FILE_EXTEMSION.equals(resource
|
|
|
+ .getFileExtension())) {
|
|
|
+ statecharts.add(resource);
|
|
|
+ }
|
|
|
+ return resource.getType() == IResource.FOLDER
|
|
|
+ || resource.getType() == IResource.PROJECT;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (CoreException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return statecharts;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setVisible(boolean visible) {
|
|
|
+ super.setVisible(visible);
|
|
|
+ if (visible) {
|
|
|
+ IPath containerPath = fileSelectionPage.getFilePath();
|
|
|
+ IFolder folder = ResourcesPlugin.getWorkspace().getRoot()
|
|
|
+ .getFolder(containerPath);
|
|
|
+ statecharts.setInput(folder);
|
|
|
+ checkComplete();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Statechart> getStatechars() {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
protected void checkComplete() {
|
|
|
setPageComplete(validatePage());
|
|
|
}
|
|
|
|
|
|
protected boolean validatePage() {
|
|
|
- return !statecharts.getSelection().isEmpty()
|
|
|
+ return statecharts.getCheckedElements().length > 0
|
|
|
&& !generators.getSelection().isEmpty();
|
|
|
}
|
|
|
|
|
|
@@ -100,6 +247,7 @@ public class SGenWizardPage2 extends WizardPage {
|
|
|
super();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public String getText(Object element) {
|
|
|
if (element instanceof GeneratorDescriptor) {
|
|
|
return ((GeneratorDescriptor) element).getName();
|
|
|
@@ -107,6 +255,7 @@ public class SGenWizardPage2 extends WizardPage {
|
|
|
return super.getText(element);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
public Image getImage(Object element) {
|
|
|
if (element instanceof GeneratorDescriptor) {
|
|
|
return ((GeneratorDescriptor) element).getImage();
|