Java tutorial
/******************************************************************************* * Copyright (c) 2012 BestSolution.at and others. * 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-v10.html * * Contributors: * Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation *******************************************************************************/ package at.bestsolution.efxclipse.tooling.rrobot.impl; import java.util.Map; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.EClass; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import at.bestsolution.efxclipse.tooling.rrobot.model.task.CompilationUnit; import at.bestsolution.efxclipse.tooling.rrobot.model.task.Folder; import at.bestsolution.efxclipse.tooling.rrobot.model.task.JDTProject; import at.bestsolution.efxclipse.tooling.rrobot.model.task.SourceFragment; import at.bestsolution.efxclipse.tooling.rrobot.model.task.TaskPackage; public class JDTProjectHandler<P extends JDTProject> extends DefaultProjectHandler<P> { @Override public boolean isHandled(EClass eClass) { return eClass == TaskPackage.Literals.JDT_PROJECT; } protected IStatus customizeProject(IProgressMonitor monitor, IProject project, P model) { try { addNatureToProject(project, JavaCore.NATURE_ID, monitor); IJavaProject javaProject = JavaCore.create(project); javaProject.setOutputLocation(project.getFullPath().append("bin"), monitor); //FIXME has to come from model IClasspathEntry[] tmpEntries = createClasspathEntries(model); IClasspathEntry[] entries = new IClasspathEntry[tmpEntries.length + model.getSourceFragments().size()]; int i = 0; for (SourceFragment f : model.getSourceFragments()) { StringBuilder b = new StringBuilder(); Folder folder = f.getFolder(); while (folder != null) { if (b.length() > 0) { b.insert(0, "/"); } b.insert(0, folder.getName()); if (folder.eContainer() instanceof Folder) { folder = (Folder) folder.eContainer(); } else { break; } } entries[i] = JavaCore.newSourceEntry(project.getProject().getFullPath().append(b.toString())); } System.arraycopy(tmpEntries, 0, entries, model.getSourceFragments().size(), tmpEntries.length); javaProject.setRawClasspath(entries, monitor); } catch (CoreException e) { return new Status(IStatus.ERROR, PLUGIN_ID, "Unable to add nature", e); } return super.customizeProject(monitor, project, model); } protected IStatus createResources(IProgressMonitor monitor, IProject p, P model, Map<String, Object> additionalData) { IStatus s = super.createResources(monitor, p, model, additionalData); if (!s.isOK()) { return s; } for (CompilationUnit c : model.getCompilationUnits()) { if (c.getExcludeExpression() != null) { if (c.getExcludeExpression().execute(additionalData)) { continue; } } Folder mFolder = c.getSourcefragment().getFolder(); IFolder folder = getProjectFolder(p, mFolder); if (c.getPackagename().trim().length() == 0) { createFile(monitor, folder.getFile(c.getFile().getName()), c.getFile(), additionalData); } else { String[] packs = c.getPackagename().split("\\."); for (String pack : packs) { folder = folder.getFolder(pack); try { if (!folder.exists()) { folder.create(true, true, monitor); } } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } createFile(monitor, folder.getFile(c.getFile().getName()), c.getFile(), additionalData); } } // if( ! p.getFolder("src").exists() ) { // try { // p.getFolder("src").create(true, true, monitor); // } catch (CoreException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } if (!p.getFolder("bin").exists()) { try { p.getFolder("bin").create(true, true, monitor); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return s; } protected IClasspathEntry[] createClasspathEntries(P model) { return new IClasspathEntry[0]; } }