package de.devboost.emfcustomize.handlers; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.codegen.ecore.genmodel.GenClass; import org.eclipse.emf.common.util.URI; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; import org.emftext.language.java.classifiers.ConcreteClassifier; import org.emftext.language.java.containers.CompilationUnit; import de.devboost.emfcustomize.GeneratedFactoryRefactorer; public class CustomizeHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { ISelection currentSelection = HandlerUtil.getCurrentSelection(event); if(currentSelection instanceof IStructuredSelection){ Object firstElement = ((IStructuredSelection) currentSelection).getFirstElement(); if(firstElement instanceof GenClass){ process((GenClass) firstElement); } } return null; } private void process(GenClass genClass){ ConcreteClassifier customClass = new GeneratedFactoryRefactorer().createInitialCustomClass(genClass); URI uri = customClass.eResource().getURI(); CompilationUnit compilationUnit = customClass.getContainingCompilationUnit(); List<String> namespaces = compilationUnit.getNamespaces(); URI srcFolderUri = uri.trimSegments(1 + namespaces.size()); String platformString = srcFolderUri.toPlatformString(true); IResource member = ResourcesPlugin.getWorkspace().getRoot().findMember(platformString); IProject project = member.getProject(); IJavaProject javaProject = JavaCore.create(project); IFolder folder = (IFolder) member; try { IClasspathEntry classPath = JavaCore.newSourceEntry(folder.getFullPath()); IClasspathEntry[] classpathEntries = javaProject.getRawClasspath(); boolean found = false; for (IClasspathEntry entry : classpathEntries) { if(entry.equals(classPath)){ found = true; break; } } if(!found){ List<IClasspathEntry> list = new ArrayList<IClasspathEntry>(); list.addAll(Arrays.asList(classpathEntries)); list.add(classPath); javaProject.setRawClasspath(list.toArray(new IClasspathEntry[0]), new NullProgressMonitor()); } } catch (JavaModelException e) { e.printStackTrace(); } } }