Просмотр исходного кода

re-enable New SGen Project Wizard

holger.willebrandt@gmail.com 14 лет назад
Родитель
Сommit
7217085ff5

+ 0 - 2
plugins/org.yakindu.sct.generator.genmodel.ui/plugin.xml

@@ -213,7 +213,6 @@
       </menuContribution>
    </extension>
    <!-- New File Wizard -->
-   <!--
     <extension
          point="org.eclipse.ui.newWizards">
       <wizard
@@ -224,7 +223,6 @@
             project="false">
       </wizard>
    </extension>
-   -->
 
   <extension point="org.eclipse.compare.contentViewers">
     <viewer id="org.yakindu.sct.generator.genmodel.SGen.compare.contentViewers"

+ 11 - 8
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenNewFileWizard.java

@@ -47,11 +47,12 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 
 	private IStructuredSelection selection;
 
-	private SGenWizardPage2 generatorConfigPage;
+	protected SGenWizardPage2 generatorConfigPage;
 
 	@Inject
 	private IResourceDescriptions resourceDescriptions;
 
+	@Override
 	public void init(IWorkbench workbench, IStructuredSelection selection) {
 		this.selection = selection;
 		setWindowTitle("New Yakindu SGen Model");
@@ -59,20 +60,21 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 
 	}
 
+	@Override
 	public void addPages() {
-		modelFilePage = new SGenWizardPage1("fileName", selection,
-				"sgen");
+		modelFilePage = new SGenWizardPage1("fileName", selection, "sgen");
 		modelFilePage.setTitle("YAKINDU SCT Diagram");
 		modelFilePage.setDescription("Create a new YAKINDU SCT Diagram File");
 		addPage(modelFilePage);
 		generatorConfigPage = new SGenWizardPage2("Statecharts",
-				resourceDescriptions);
+				resourceDescriptions, modelFilePage);
 		generatorConfigPage.setTitle("Generator Configuration");
 		generatorConfigPage
 				.setDescription("Select the Statecharts and the Generator type");
 		addPage(generatorConfigPage);
 	}
-	
+
+	@Override
 	public boolean performFinish() {
 		IRunnableWithProgress op = new WorkspaceModifyOperation(null) {
 			@Override
@@ -85,7 +87,8 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 				location = location.append(containerFullPath);
 				String osString = location.toOSString();
 				System.out.println(osString);
-				createDefaultModel(osString);
+				String generatorId = generatorConfigPage.getGeneratorId();
+				createDefaultModel(osString, generatorId);
 			}
 		};
 		try {
@@ -96,9 +99,9 @@ public class SGenNewFileWizard extends Wizard implements INewWizard {
 		return true;
 	}
 
-	private void createDefaultModel(String target) {
+	private void createDefaultModel(String target, String generatorId) {
 		ArrayList<Statechart> statecharts = Lists.newArrayList();
-		ModelCreator creator = new ModelCreator("yakindu::java", statecharts);
+		ModelCreator creator = new ModelCreator(generatorId, statecharts);
 		GeneratorModel model = creator.create();
 		Injector injector = SGenActivator.getInstance().getInjector(
 				"org.yakindu.sct.generator.genmodel.SGen");

+ 152 - 3
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenWizardPage2.java

@@ -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();