Author: oberhack Date: Mon Aug 30 21:42:07 2004 New Revision: 37234 Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/KernelManager.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/ModelObject.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/BlockProjectManager.java - copied, changed from rev 36643, avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ProjectManager.java Removed: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ProjectManager.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/ui/ Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/MetroEnvironment.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/ServerEnvironment.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/nature/MetroBlockNature.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Directory.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplate.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplateManager.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Library.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Resource.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplate.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplateManager.java Log:
Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/KernelManager.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/KernelManager.java Mon Aug 30 21:42:07 2004 @@ -0,0 +1,419 @@ +/* + * Copyright 2004 Apache Software Foundation + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.metro.studio.eclipse.core.environment; + +import java.io.File; +import java.io.FileInputStream; +import java.util.Map; +import java.util.Properties; + +import org.apache.avalon.repository.Artifact; +import org.apache.avalon.repository.main.DefaultBuilder; +import org.apache.avalon.repository.main.DefaultInitialContextFactory; +import org.apache.avalon.repository.provider.Builder; +import org.apache.avalon.repository.provider.Factory; +import org.apache.avalon.repository.provider.InitialContext; +import org.apache.avalon.repository.provider.InitialContextFactory; +import org.apache.avalon.util.env.Env; +import org.apache.avalon.util.exception.ExceptionHelper; +import org.apache.avalon.util.i18n.ResourceManager; +import org.apache.avalon.util.i18n.Resources; + +/** + * Merlin command line handler. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team </a> + * @version $Id: Main.java 30977 2004-07-30 08:57:54Z niclas $ + */ +public class KernelManager +{ + //---------------------------------------------------------- + // static + //---------------------------------------------------------- + + private static Resources REZ = ResourceManager + .getPackageResources(KernelManager.class); + + private static final File USER_HOME = new File(System + .getProperty("user.home")); + + private static final String MERLIN_PROPERTIES = "merlin.properties"; + + private static final String IMPLEMENTATION_KEY = "merlin.implementation"; + + private static KernelManager MAIN = null; + + /** + * Main command line enty point. + * + * @param args + * the command line arguments + */ + public static void main(String[] args) + { + boolean debug = false; + try + { + + ModelObject line = new ModelObject(); + line.put("impl", "merlin-cli-3.3.0.jar"); + + File dir = getWorkingDirectory(line); + File cache = getMerlinSystemRepository(line); + Artifact artifact = getDefaultImplementation(dir, line); + + InitialContextFactory factory = new DefaultInitialContextFactory( + "merlin", dir); + factory.setCacheDirectory(cache); + factory.setOnlineMode(!line.hasOption("offline")); + InitialContext context = factory.createInitialContext(); + + KernelManager kernel = new KernelManager( context, artifact, line ); + + } catch (Exception exception) + { + String msg = ExceptionHelper.packException(exception, debug); + System.err.println(msg); + System.exit(-1); + } catch (Throwable throwable) + { + String msg = ExceptionHelper.packException(throwable, true); + System.err.println(msg); + System.exit(-1); + } + } + + //---------------------------------------------------------- + // constructor + //---------------------------------------------------------- + + /** + * Creation of a new kernel cli handler. + * + * @param context + * the repository inital context + * @param artifact + * the merlin implementation artifact + * @param line + * the command line construct + * @exception Exception + * if an error occurs + */ + public KernelManager(InitialContext context, Artifact artifact, + ModelObject line) throws Exception + { + Builder builder = context.newBuilder(artifact); + Factory factory = builder.getFactory(); + Map criteria = factory.createDefaultCriteria(); + + // + // update the criteria using the command line information + // + + handleCommandLine(criteria, line); + + } + + //---------------------------------------------------------- + // implementation + //---------------------------------------------------------- + + private void handleCommandLine(Map criteria, ModelObject line) + { + setLanguage(criteria, line); + setInfoPolicy(criteria, line); + setDebugPolicy(criteria, line); + setAuditPolicy(criteria, line); + setProxyPolicy(criteria, line); + setServerPolicy(criteria, line); + setSecurityPolicy(criteria, line); + setAnchorDirectory(criteria, line); + setContextDirectory(criteria, line); + setRepositoryDirectory(criteria, line); + setKernelURL(criteria, line); + setOverridePath(criteria, line); + setDeploymentPath(criteria, line); + } + + private void setLanguage(Map criteria, ModelObject line) + { + if (line.hasOption("lang")) + { + String language = line.getOptionValue("lang"); + criteria.put("merlin.lang", language); + } + } + + private void setKernelURL(Map criteria, ModelObject line) + { + if (line.hasOption("kernel")) + { + String kernel = line.getOptionValue("kernel"); + criteria.put("merlin.kernel", kernel); + } + } + + private void setOverridePath(Map criteria, ModelObject line) + { + if (line.hasOption("config")) + { + String config = line.getOptionValue("config"); + criteria.put("merlin.override", config); + } + } + + private void setWorkingDirectory(Map criteria, ModelObject line) + { + if (line.hasOption("home")) + { + String home = line.getOptionValue("home"); + criteria.put("merlin.dir", home); + } + } + + private void setAnchorDirectory(Map criteria, ModelObject line) + { + if (line.hasOption("anchor")) + { + String anchor = line.getOptionValue("anchor"); + criteria.put("merlin.anchor", anchor); + } + } + + private void setContextDirectory(Map criteria, ModelObject line) + { + if (line.hasOption("context")) + { + String context = line.getOptionValue("context"); + criteria.put("merlin.context", context); + } + } + + private void setRepositoryDirectory(Map criteria, ModelObject line) + { + if (line.hasOption("repository")) + { + String repository = line.getOptionValue("repository"); + criteria.put("merlin.repository", repository); + } + } + + private void setDebugPolicy(Map criteria, ModelObject line) + { + if (line.hasOption("debug")) + { + criteria.put("merlin.debug", new Boolean(true)); + } + } + + private void setAuditPolicy(Map criteria, ModelObject line) + { + if (line.hasOption("audit")) + { + criteria.put("merlin.audit", new Boolean(true)); + } + } + + private void setProxyPolicy(Map criteria, ModelObject line) + { + if (line.hasOption("noproxy")) + { + criteria.put("merlin.proxy", new Boolean(false)); + } + } + + private void setInfoPolicy(Map criteria, ModelObject line) + { + if (line.hasOption("info")) + { + criteria.put("merlin.info", new Boolean(true)); + } + } + + private void setServerPolicy(Map criteria, ModelObject line) + { + if (line.hasOption("execute")) + { + criteria.put("merlin.server", new Boolean(false)); + } + } + + private void setSecurityPolicy(Map criteria, ModelObject line) + { + if (line.hasOption("secure")) + { + criteria.put("merlin.code.security.enabled", new Boolean(true)); + } + } + + private void setDeploymentPath(Map criteria, ModelObject line) + { + String[] arguments = line.getArgs(); + if (arguments.length > 0) + { + criteria.put("merlin.deployment", arguments); + } + } + + /** + * Resolve the merlin.dir value. + * + * @param line + * the command line construct + * @return the working directory + */ + private static File getWorkingDirectory(ModelObject line) throws Exception + { + if (line.hasOption("home")) + { + String dir = line.getOptionValue("home"); + return new File(dir).getCanonicalFile(); + } else + { + return getBaseDirectory(); + } + } + + /** + * Resolve the default implementation taking into account command line + * arguments, local and hom properties, and application defaults. + * + * @param line + * the command line construct + * @return the artifact reference + */ + private static Artifact getDefaultImplementation(File base, ModelObject line) + throws Exception + { + if (line.hasOption("impl")) + { + String spec = line.getOptionValue("impl"); + return Artifact.createArtifact(spec); + } else + { + return DefaultBuilder.createImplementationArtifact( + KernelManager.class.getClassLoader(), getMerlinHome(), + getBaseDirectory(), MERLIN_PROPERTIES, IMPLEMENTATION_KEY); + } + } + + /** + * Return the merlin system repository root directory taking into account + * the supplied command-line, and merlin.properties files in the current and + * home directories. + * + * @param line + * the command line construct + * @return the merlin system root repository directory + */ + private static File getMerlinSystemRepository(ModelObject line) + { + if (line.hasOption("system")) + { + String system = line.getOptionValue("system"); + return new File(system); + } else + { + return new File(getMerlinHome(), "system"); + } + } + + /** + * Return the merlin home directory. + * + * @return the merlin installation directory + */ + private static File getMerlinHome() + { + return new File(getMerlinHomePath()); + } + + /** + * Return the merlin home directory path. + * + * @return the merlin installation directory path + */ + private static String getMerlinHomePath() + { + try + { + String merlin = System.getProperty("merlin.home", Env + .getEnvVariable("MERLIN_HOME")); + if (null != merlin) + return merlin; + return System.getProperty("user.home") + File.separator + ".merlin"; + } catch (Throwable e) + { + final String error = "Internal error while attempting to access MERLIN_HOME environment."; + final String message = ExceptionHelper + .packException(error, e, true); + throw new RuntimeException(message); + } + } + + /** + * Return the functional base directory. The implementation looks for the + * ${merlin.dir} system property and if not found, looks for the ${basedir} + * system property, and as a last resort, returns the JVM ${user.dir} value. + * + * @return the base directory + */ + private static File getBaseDirectory() + { + final String merlin = System.getProperty("merlin.dir"); + if (null != merlin) + { + return new File(merlin); + } + final String base = System.getProperty("basedir"); + if (null != base) + { + return new File(base); + } + return new File(System.getProperty("user.dir")); + } + + /** + * Return a property file from a fir with a supplied filename. + * + * @param dir + * the directory + * @param filename + * the filename + * @return a possibly empty properties instance + */ + private static Properties getLocalProperties(File dir, String filename) + { + Properties properties = new Properties(); + if (null == dir) + return properties; + File file = new File(dir, filename); + if (!file.exists()) + return properties; + try + { + properties.load(new FileInputStream(file)); + return properties; + } catch (Throwable e) + { + final String error = "Unexpected exception while attempting to read properties from: " + + file + ". Cause: " + e.toString(); + throw new IllegalStateException(error); + } + } +} \ No newline at end of file Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/MetroEnvironment.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/MetroEnvironment.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/MetroEnvironment.java Mon Aug 30 21:42:07 2004 @@ -18,7 +18,6 @@ package org.apache.metro.studio.eclipse.core.environment; import java.io.IOException; -import java.util.Properties; import org.apache.avalon.util.defaults.DefaultsBuilder; import org.apache.metro.studio.eclipse.core.MetroStudioCore; @@ -60,10 +59,6 @@ String path; try { - Properties prop = merlinBuilder.getUserProperties(); - prop = merlinBuilder.getDirProperties(); - prop = merlinBuilder.getHomeProperties(); - path = merlinBuilder.getHomeDirectory().getCanonicalPath(); } catch (IOException e) { Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/ModelObject.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/ModelObject.java Mon Aug 30 21:42:07 2004 @@ -0,0 +1,60 @@ +/* + + Copyright 2004. The Apache Software Foundation. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*/ +package org.apache.metro.studio.eclipse.core.environment; + +import java.util.Hashtable; + + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Metro Development Team</a> + * 20.08.2004 + * last change: + * + */ +public class ModelObject +{ + + Hashtable table = new Hashtable(); + /** + * + */ + public ModelObject() + { + super(); + } + + public void put(Object key, Object value) + { + table.put(key, value); + } + public boolean hasOption(String option) + { + return table.containsKey(option); + } + + public String getOptionValue(String option) + { + return (String)table.get(option); + } + + public String[] getArgs() + { + return null; + } + +} Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/ServerEnvironment.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/ServerEnvironment.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/environment/ServerEnvironment.java Mon Aug 30 21:42:07 2004 @@ -26,6 +26,12 @@ public class ServerEnvironment { + public static final String DEFAULT_LANG = "de"; + public static final boolean DEFAULT_DEBUG = true; + public static final boolean DEFAULT_DEPLOY = false; + public static final boolean DEFAULT_SERVER = false; + public static final boolean DEFAULT_SECURITY = true; + /** * */ Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/nature/MetroBlockNature.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/nature/MetroBlockNature.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/nature/MetroBlockNature.java Mon Aug 30 21:42:07 2004 @@ -17,7 +17,10 @@ */ package org.apache.metro.studio.eclipse.core.nature; +import org.apache.metro.studio.eclipse.core.MetroStudioCore; +import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IProjectNature; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaProject; @@ -41,6 +44,41 @@ */ public void configure() throws CoreException { + addBuilder("org.apache.metro.studio.launch.merlinBuilder"); + } + /** + * @param pString + */ + public void addBuilder(String builderID) + { + try + { + IProjectDescription desc = getProject().getDescription(); + ICommand[] commands = desc.getBuildSpec(); + boolean found = false; + + for (int i = 0; i < commands.length; ++i) { + if (commands[i].getBuilderName().equals(builderID)) { + found = true; + break; + } + } + if (!found) { + //add builder to project + ICommand command = desc.newCommand(); + command.setBuilderName(builderID); + ICommand[] newCommands = new ICommand[commands.length + 1]; + + // Add it before other builders. + System.arraycopy(commands, 0, newCommands, 1, commands.length); + newCommands[0] = command; + desc.setBuildSpec(newCommands); + getProject().setDescription(desc, null); + } + } catch (CoreException e) + { + MetroStudioCore.log(e, "Error while setting the builder commands"); + } } Copied: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/BlockProjectManager.java (from rev 36643, avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ProjectManager.java) ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ProjectManager.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/BlockProjectManager.java Mon Aug 30 21:42:07 2004 @@ -19,6 +19,7 @@ import java.util.List; +import org.apache.metro.facility.presentationservice.impl.ChannelEvent; import org.apache.metro.studio.eclipse.core.MetroStudioCore; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; @@ -32,7 +33,7 @@ * 11.08.2004 last change: * */ -public class ProjectManager +public class BlockProjectManager { final public static String BASE = "org.apache.metro.studio.core"; @@ -41,13 +42,31 @@ final public static String FACILITY_NATURE_ID = BASE + ".facilityNature"; final public static String KERNEL_NATURE_ID = BASE + ".kernelNature"; + + private static ResourceTemplateManager resourceTemplateManager = null; /** * */ - public ProjectManager() + public BlockProjectManager() { super(); + + } + + /** + * get a list of wizard pages, which are needed for a specific + * ResourceTemplate. + * + * @param resourceTemplateName + * @return + */ + public static String getResourceHelp(String resourceTemplateName) + { + + ResourceTemplate template = resourceTemplateManager.getTemplate(resourceTemplateName); + if(template==null) return ""; + return template.getDescription(); } /** @@ -70,7 +89,7 @@ * @param valueObject * @return */ - public static IProject createBlockProject(Object valueObject) + public static IProject create(ChannelEvent event) { return null; @@ -80,9 +99,10 @@ * This method is called to show all available template in the wizard so * that the user can choose one of them. */ - public List getResourceTemplateNames() + public static String[] listTemplateNames() { - return null; + initialize(); + return resourceTemplateManager.listTemplateNames(); } /** @@ -91,22 +111,31 @@ * @param name * @return */ - public static IProject createBlockProject(String name) + public static IProject create(String projectName, String templateName) { - return createProject(name, BLOCK_NATURE_ID); + initialize(); + IProject project = createProject(projectName, BLOCK_NATURE_ID); + //if no template name is given, create the project only + if(templateName==null) + { + return project; + } + // create the resources of a given templateName + resourceTemplateManager.create(project, templateName, null); + return project; } /** - * Create a facility project * - * @param name - * @return */ - public static IProject createFacilityProject(String name) + private static void initialize() { - return createProject(name, FACILITY_NATURE_ID); + if(resourceTemplateManager==null) + { + resourceTemplateManager = ResourceTemplateManager.load(null); + } + } - private static IProject createProject(String name, String nature) { IProject project = null; @@ -160,7 +189,7 @@ IProjectNature nature = null; try { - nature = project.getNature(ProjectManager.BLOCK_NATURE_ID); + nature = project.getNature(BlockProjectManager.BLOCK_NATURE_ID); // TODO: check for other valid Metro natures } catch (CoreException e) @@ -173,4 +202,15 @@ } return nature; } + + /** + * Only used for testing purpose + * @param name + * @return + */ + public static IProject testCreateProject(String name) + { + return createProject(name, BLOCK_NATURE_ID); + } + } Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Directory.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Directory.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Directory.java Mon Aug 30 21:42:07 2004 @@ -17,15 +17,18 @@ */ package org.apache.metro.studio.eclipse.core.templateengine; -import java.util.ArrayList; import java.util.Iterator; -import java.util.List; import java.util.Vector; +import org.apache.metro.studio.eclipse.core.MetroStudioCore; import org.apache.metro.studio.eclipse.core.tools.ClassNameAnalyzer; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.IClasspathEntry; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; /** * @author <a href="mailto:[EMAIL PROTECTED]">Metro Development Team </a> @@ -37,7 +40,6 @@ private String name; private boolean isSource = false; - private List libraries = new ArrayList(); private transient IFolder eclipseFolder; /** @@ -82,40 +84,6 @@ this.name = name; } - public void addLibrary(Library library) - { - - libraries.add(library); - } - - public List getLibraries() - { - - return libraries; - } - - /** - * Collect all library names - * @return - */ - public Vector getLibraryNames() - { - - Vector libraries = new Vector(); - Iterator it = getLibraries().iterator(); - while (it.hasNext()) - { - Library lib = (Library)it.next(); - String name; - name = lib.getName(); - if(lib.getVersion() != null){ - name = name + "-"+lib.getVersion(); - } - libraries.add(name+".jar"); - } - return libraries; - } - /** * Create a directory under the given project. * @@ -153,6 +121,11 @@ folder.create(false, true, null); eclipseFolder = folder; } + if(isSource()) + { + IClasspathEntry entry = JavaCore.newSourceEntry(project.getFullPath().append(folder.getName())); + addClasspath(project, entry); + } } } catch (CoreException e) @@ -162,6 +135,39 @@ } + + /** + * @param project + */ + private void addClasspath(IProject project, IClasspathEntry entry) + { + try + { + Vector libraries = new Vector(); + + IJavaProject javaProject = JavaCore.create(project); + IClasspathEntry[] current = javaProject.getResolvedClasspath(true); + + for(int i=0; i<current.length; i++) + { + // don't add the project to the classpath! + if( ! current[i].getPath().toString().equals(project.getFullPath().toString())) + { + libraries.add(current[i]); + } + } + libraries.add(entry); + + javaProject.setRawClasspath((IClasspathEntry[]) libraries + .toArray(new IClasspathEntry[libraries.size()]), + javaProject.getOutputLocation(), null); + + + } catch (JavaModelException e) + { + MetroStudioCore.log(e, "could not add libraries to project"); + } + } /** * append a directory. Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplate.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplate.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplate.java Mon Aug 30 21:42:07 2004 @@ -45,19 +45,6 @@ } /** - * Collect all LibraryNames - * @return - */ - public Vector getLibraryNames(){ - - Vector libraries = new Vector(); - Iterator it = directories.iterator(); - while(it.hasNext()){ - libraries.addAll(((Directory)it.next()).getLibraryNames()); - } - return libraries; - } - /** * Create all directories in Project * @param project */ Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplateManager.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplateManager.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplateManager.java Mon Aug 30 21:42:07 2004 @@ -17,23 +17,14 @@ */ package org.apache.metro.studio.eclipse.core.templateengine; -import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Hashtable; -import java.util.Iterator; import java.util.Set; -import java.util.Vector; import org.apache.metro.studio.eclipse.core.MetroStudioCore; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -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.jdt.launching.JavaRuntime; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; @@ -75,37 +66,6 @@ } /** - * Add standard libraries to the project. - * - * @param template - * @param project - */ - public void addLibraries(DirectoryTemplate template, IProject project) - { - Vector libraries = new Vector(); - Vector libraryNames; - - IPath repositoryPath = getRepositoryPath(); - - libraries.addAll(collectLibraries(template, repositoryPath)); - libraries.addAll(collectSourceFolders(template, project)); - - // add all Libraries to project. - try - { - IJavaProject javaProject = JavaCore.create(project); - javaProject.setRawClasspath((IClasspathEntry[]) libraries - .toArray(new IClasspathEntry[libraries.size()]), - javaProject.getOutputLocation(), null); - - } catch (JavaModelException e) - { - MetroStudioCore.log(e, "could not add libraries to project"); - } - - } - - /** * @return */ public IPath getRepositoryPath() @@ -117,66 +77,13 @@ } /** - * @param template - * @param libraries - * @param repositoryPath - */ - public Vector collectLibraries(DirectoryTemplate template, - IPath repositoryPath) - { - Vector libraryNames; - Vector libraries = new Vector(); - - // first add the java standard library - libraries.add(JavaRuntime.getJREVariableEntry()); - - // Now collect libraries from template. - libraryNames = template.getLibraryNames(); - Iterator it = libraryNames.iterator(); - - while (it.hasNext()) - { - String lib = (String) it.next(); - if (new File(lib).exists()) - { - libraries.add(JavaCore.newLibraryEntry(repositoryPath - .append(lib), null, null)); - } - } - return libraries; - } - - /** - * @param template - * @param libraries - * @param repositoryPath - */ - public Vector collectSourceFolders(DirectoryTemplate template, - IProject project) - { - Vector folderNames; - Vector libraries = new Vector(); - - // Now collect libraries from template. - folderNames = template.getSourceFolderNames(); - Iterator it = folderNames.iterator(); - - while (it.hasNext()) - { - IPath folder = new Path((String)it.next()); - libraries.add(JavaCore.newSourceEntry(project.getFullPath().append(folder))); - } - return libraries; - } - - /** * Create a directory structure under a given project. Use the template with * id 'templateId' Add all requiered Libraries. * * @param templateId * @param project */ - public void create(String templateId, IProject project) + public DirectoryTemplate create(String templateId, IProject project) { DirectoryTemplate template = (DirectoryTemplate) directoryTemplates @@ -184,8 +91,9 @@ if (template != null) { template.create(project); - addLibraries(template, project); + } + return template; } /** Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Library.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Library.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Library.java Mon Aug 30 21:42:07 2004 @@ -17,6 +17,9 @@ */ package org.apache.metro.studio.eclipse.core.templateengine; +import org.apache.metro.studio.eclipse.core.MetroStudioCore; +import org.eclipse.core.runtime.IPath; + /** * @author <a href="mailto:[EMAIL PROTECTED]">Metro Development Team</a> * 11.08.2004 @@ -25,8 +28,25 @@ */ public class Library { + private String name; + private String version; + private String repositoryPath; /** + * @return Returns the repositoryPath. + */ + public String getRepositoryPath() + { + return "lib/avalon-framework"; + } + /** + * @param repositoryPath The repositoryPath to set. + */ + public void setRepositoryPath(String repositoryPath) + { + this.repositoryPath = repositoryPath; + } + /** * @return Returns the name. */ public String getName() @@ -54,14 +74,35 @@ { this.version = version; } - private String name; - private String version; /** * */ public Library() { super(); + } + /** + * @return + */ + public IPath getPath() + { + // TODO: has to be changed to metro repository + IPath pluginPath = MetroStudioCore.getDefault().getPluginLocation(); + + pluginPath = pluginPath.append(getRepositoryPath()); + return pluginPath.append(getFullName()); + } + /** + * @return + */ + private String getFullName() + { + + StringBuffer buf = new StringBuffer(name); + buf.append("-"); + buf.append(version); + buf.append(".jar"); + return buf.toString(); } } Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Resource.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Resource.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Resource.java Mon Aug 30 21:42:07 2004 @@ -114,6 +114,10 @@ try { + if(map==null) + { + map = new DynProjectParam(); + } InputStream input = new FileInputStream(new File(templateName)); InputStreamReader file = new InputStreamReader(input); BufferedReader reader = new BufferedReader(file); @@ -159,7 +163,7 @@ private String replaceParam(String line, DynProjectParam map) { - + if(map==null)return line; Iterator it = map.keySet().iterator(); String key; Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplate.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplate.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplate.java Mon Aug 30 21:42:07 2004 @@ -20,10 +20,15 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Vector; -import org.apache.metro.studio.eclipse.core.MetroStudioCore; import org.apache.metro.studio.eclipse.core.tools.DynProjectParam; import org.eclipse.core.resources.IProject; +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.jdt.launching.JavaRuntime; /** * @author <a href="mailto:[EMAIL PROTECTED]">Metro Development Team</a> @@ -39,7 +44,7 @@ private String description; private List wizardPages = new ArrayList(); private List resources = new ArrayList(); - private List libraries = new ArrayList(); + private Vector libraries = new Vector(); /** * Constructor @@ -58,25 +63,80 @@ public void create(IProject project, DirectoryTemplateManager manager, DynProjectParam param) { // load directoryType and create the directory structure - DirectoryTemplate template = manager.getTemplate(directoryType); - if(template == null) - { - MetroStudioCore.log(null, "unknown directory type in resource " + getTemplateId()); - return; - } - template.create(project); + DirectoryTemplate template = manager.create(directoryType, project); // add all needed resources to created directory structure Iterator it = getResources().iterator(); + while(it.hasNext()) { ((Resource)it.next()).create(template, param); } - + // add all needed libraries + addLibraries(project); } + /** + * @param project + */ + private void addLibraries(IProject project) + { + + try + { + Vector libs = new Vector(); + + IJavaProject javaProject = JavaCore.create(project); + + // first retain already created libs + IClasspathEntry[] entries = javaProject.getResolvedClasspath(true); + for(int i=0; i<entries.length; i++) + { + libs.add(entries[i]); + } + + // allways add the java library + libs.add(JavaRuntime.getJREVariableEntry()); + + // now add custom libraries + libs.addAll(getLibraryEntries()); + javaProject.setRawClasspath( + (IClasspathEntry[]) libs.toArray( + new IClasspathEntry[libraries.size()]), + javaProject.getOutputLocation(), + null); + } catch (JavaModelException e) + { + e.printStackTrace(); + } + + } + /** + * @return + */ + public void addLibrary(Library library) + { + libraries.add(library); + } + + private Vector getLibraryEntries() + { + Vector libs = new Vector(); + + Iterator it = libraries.iterator(); + + while(it.hasNext()) + { + Library library = (Library)it.next(); + libs.add(JavaCore.newLibraryEntry( + library.getPath(), + null, + null)); + } + return libs; + } /** * @return Returns the directoryType. */ Modified: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplateManager.java ============================================================================== --- avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplateManager.java (original) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplateManager.java Mon Aug 30 21:42:07 2004 @@ -20,6 +20,8 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Hashtable; +import java.util.Iterator; +import java.util.Set; import org.apache.metro.studio.eclipse.core.MetroStudioCore; import org.apache.metro.studio.eclipse.core.tools.DynProjectParam; @@ -39,6 +41,11 @@ private Hashtable resourceTemplates = new Hashtable(); private DirectoryTemplateManager directoryManager; + + final static String baseDir = MetroStudioCore.getDefault() + .getPluginLocation().toString(); + public static final String DEFAULT_CONFIG_PATH = baseDir + "config/resources.test_cfg"; + /** * */ @@ -49,6 +56,11 @@ public static ResourceTemplateManager load(String resourceFilePathName) { + if(resourceFilePathName == null) + { + resourceFilePathName = getDefaultFilePathName(); + } + XStream xstream = new XStream(new DomDriver()); initXStream(xstream); @@ -70,6 +82,15 @@ } /** + * @return + */ + private static String getDefaultFilePathName() + { + + return ResourceTemplateManager.DEFAULT_CONFIG_PATH; + } + + /** * @param xstream */ public static void initXStream(XStream xstream) @@ -77,12 +98,29 @@ xstream.alias("ResourceTemplates", ResourceTemplateManager.class); xstream.alias("ResourceTemplate", ResourceTemplate.class); xstream.alias("Resource", Resource.class); + xstream.alias("Library", Library.class); } public void addResourceTemplate(ResourceTemplate resource) { resourceTemplates.put(resource.getTemplateId(), resource); } + + /** + * @return String[]. An array of all keys + */ + public String[] listTemplateNames() + { + Set set = resourceTemplates.keySet(); + String[] keyList = new String[set.size()]; + Iterator it = set.iterator(); + for (int i=0; i<set.size(); i++) + { + keyList[i] = (String)it.next(); + } + return keyList; + } + /** * @param string * @return @@ -112,6 +150,14 @@ return; } template.create(project, directoryManager, param); + } + + /** + * + */ + public Hashtable getResourceTemplates() + { + return resourceTemplates; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]