You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ob...@apache.org on 2004/08/31 06:42:08 UTC

svn commit: rev 37234 - in avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse: core/environment core/nature core/templateengine ui

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:dev@avalon.apache.org">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:dev@avalon.apache.org">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:dev@avalon.apache.org">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:dev@avalon.apache.org">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:dev@avalon.apache.org">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: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org