Author: oberhack Date: Sat Aug 14 05:04:11 2004 New Revision: 36385 Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/MetroStudioCore.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/nature/ 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/package.html avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ 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/ProjectManager.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 avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/ClassNameAnalyzer.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/DynProjectParam.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/SystemTool.java avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/ui/ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/ui/controller/ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/ui/controller/CreateNewProjectWizardController.java Log:
Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/MetroStudioCore.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/MetroStudioCore.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,156 @@ +/* + + 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; + +import java.io.IOException; +import java.net.URL; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> + * + * The main plugin class to be used in the desktop. + */ +public class MetroStudioCore extends AbstractUIPlugin +{ + //The shared instance. + private static MetroStudioCore plugin; + //Resource bundle. + private ResourceBundle resourceBundle; + + public static final String PLUGIN_ID = "org.apache.avalon.MerlinDeveloperCore"; + + /** + * The constructor. + */ + public MetroStudioCore() + { + super(); + plugin = this; + try + { + resourceBundle = + ResourceBundle.getBundle( + "org.apache.avalon.ide.eclipse.merlin.core.MerlinDeveloperCoreResources"); + } catch (MissingResourceException x) + { + resourceBundle = null; + } + } + + /** + * Returns the shared instance. + */ + public static MetroStudioCore getDefault() + { + return plugin; + } + + /** + * Returns the workspace instance. + */ + public static IWorkspace getWorkspace() + { + return ResourcesPlugin.getWorkspace(); + } + + /** + * Returns the string from the plugin's resource bundle, or 'key' if not + * found. + */ + public static String getResourceString(String key) + { + ResourceBundle bundle = MetroStudioCore.getDefault().getResourceBundle(); + try + { + return (bundle != null ? bundle.getString(key) : key); + } catch (MissingResourceException e) + { + return key; + } + } + + /** + * Returns the plugin's resource bundle, @uml property=resourceBundle + */ + public ResourceBundle getResourceBundle() + { + return resourceBundle; + } + + public static void log(IStatus status) + { + getDefault().getLog().log(status); + } + + public static void log(Throwable e, String message) + { + boolean isDebugging = true; // change to false for production + IStatus status = + new Status( + IStatus.ERROR, + ResourcesPlugin.getPlugin().getBundle().getSymbolicName(), + IStatus.ERROR, + message, + e); + + log(status); + if (isDebugging) + { + System.out.println(message + ": " + e.getMessage()); //$NON-NLS-1$ + } + } + + /** + * This method is called upon plug-in activation + */ + public void start(BundleContext context) throws Exception { + super.start(context); + } + + /** + * This method is called when the plug-in is stopped + */ + public void stop(BundleContext context) throws Exception { + super.stop(context); + } + + public Path getPluginLocation(){ + + try + { + URL installURL = + getDefault().getBundle().getEntry("/"); + return new Path(Platform.resolve(installURL).getFile()); + } catch (IOException e) + { + log(e, "unable to resulve plugin location"); + } + return null; + } +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/nature/MetroBlockNature.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/nature/MetroBlockNature.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,95 @@ +/* + + 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.nature; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectNature; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.IJavaProject; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> + * + */ +public class MetroBlockNature implements IProjectNature +{ + + private IProject project; + private IJavaProject javaProject; + + /** + * Normaly, the whole initialization stuff (creating directory structure, + * initial files etc. ) is done here. But because we need greater + * flexibility, this is done in the wizards operastions classes. + * + * @see org.eclipse.core.resources.IProjectNature#configure() + */ + public void configure() throws CoreException + { + + } + + public void deconfigure() throws CoreException + { + // Remove the nature-specific information here. + } + + public String getDocumentBase() + { + return this.getProject().getLocation().toString(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.resources.IProjectNature#getProject() + */ + public IProject getProject() + { + return project; + } + + /** + * This method is automatically called by eclipse during project creation + * before the configure() method is called + * + * @see org.eclipse.core.resources.IProjectNature#setProject(org.eclipse.core.resources.IProject) + */ + public void setProject(IProject project) + { + this.project = project; + } + + /** + * @param pJavaProject + */ + private void setJavaProject(IJavaProject pJavaProject) + { + javaProject = pJavaProject; + + } + + /** + * @return Returns the javaProject. + */ + public IJavaProject getJavaProject() + { + return javaProject; + } + +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/package.html ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/package.html Sat Aug 14 05:04:11 2004 @@ -0,0 +1,17 @@ +<html> + +<head> +<meta http-equiv="Content-Language" content="de"> +<meta name="GENERATOR" content="Microsoft FrontPage 5.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<title>Resource package</title> +</head> + +<body> + +<p>core package</p> + +</body> + +</html> Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Directory.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Directory.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,226 @@ +/* + + 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.templateengine; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +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; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team </a> + * 11.08.2004 last change: + * + */ +public class Directory +{ + + private String name; + private boolean isSource = false; + private List libraries = new ArrayList(); + private transient IFolder eclipseFolder; + + /** + * + */ + public Directory() + { + super(); + } + + /** + * @return Returns the isSource. + */ + public boolean isSource() + { + return isSource; + } + + /** + * @param isSource + * The isSource to set. + */ + public void setSource(boolean isSource) + { + this.isSource = isSource; + } + + /** + * @return Returns the name. + */ + public String getName() + { + return name; + } + + /** + * @param name + * The name to set. + */ + public void setName(String name) + { + 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. + * + * @param project + */ + public void create(IProject project) + { + + IFolder folder = null; + + try + { + // if we like to create folder / subfolders, each folder has to be + // created by its own. The ClassNameAnalyzer splits a filePath into + // its segments + ClassNameAnalyzer cna = new ClassNameAnalyzer(); + cna.setPath(name); + Iterator it = cna.getSegments().iterator(); + + while (it.hasNext()) + { + // Now get the folder + if (folder == null) + { + // first segment + folder = project.getFolder((String) it.next()); + } else + { + folder = folder.getFolder((String) it.next()); + } + + // ... and create it + if (!folder.exists()) + { + folder.create(false, true, null); + eclipseFolder = folder; + } + } + + } catch (CoreException e) + { + e.printStackTrace(); + } + + } + + + /** + * append a directory. + * + * @param project + */ + public Directory appendPackage(String packageName) + { + + IFolder folder = null; + + try + { + // if we like to create folder / subfolders, each folder has to be + // created by its own. The ClassNameAnalyzer splits a filePath into + // its segments + ClassNameAnalyzer cna = new ClassNameAnalyzer(); + cna.setPackageName(packageName); + Iterator it = cna.getSegments().iterator(); + + while (it.hasNext()) + { + if(folder == null) + { + folder = getEclipseFolder().getFolder((String) it.next()); + } else + { + folder = folder.getFolder((String) it.next()); + } + // ... and create it + if (!folder.exists()) + { + folder.create(false, true, null); + } + } + + } catch (CoreException e) + { + e.printStackTrace(); + } + Directory dir = new Directory(); + dir.setEclipseFolder(folder); + dir.setName(folder.getLocation().toString()); + return dir; + + } + + /** + * @return Returns the eclipseFolder. + */ + public IFolder getEclipseFolder() + { + return eclipseFolder; + } + /** + * @param eclipseFolder The eclipseFolder to set. + */ + public void setEclipseFolder(IFolder eclipseFolder) + { + this.eclipseFolder = eclipseFolder; + } +} \ No newline at end of file Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplate.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplate.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,130 @@ +/* + + 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.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.eclipse.core.resources.IProject; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team</a> + * 11.08.2004 + * last change: + * + */ +public class DirectoryTemplate +{ + + private String id; + private List directories = new ArrayList(); + /** + * + */ + public DirectoryTemplate() + { + super(); + } + + /** + * 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 + */ + public void create(IProject project){ + + Iterator it = getDirectories().iterator(); + while(it.hasNext()){ + ((Directory)it.next()).create(project); + } + } + + public void addDirectory(Directory directory){ + + directories.add(directory); + } + + public List getDirectories(){ + + return directories; + } + /** + * @return Returns the id. + */ + public String getId() + { + return id; + } + /** + * @param id The id to set. + */ + public void setId(String id) + { + this.id = id; + } + + public Directory getDirectory(String directoryName) + { + + Iterator it = getDirectories().iterator(); + while(it.hasNext()) + { + Directory dir = (Directory)it.next(); + if(directoryName.equals(dir.getName())) + { + return dir; + } + } + MetroStudioCore.log(null, "can't find rootsegment resource " + directoryName); + return null; + + } + /** + * @return + */ + public Vector getSourceFolderNames() + { + + Vector libraries = new Vector(); + Iterator it = directories.iterator(); + while(it.hasNext()){ + Directory dir = (Directory)it.next(); + if(dir.isSource()) + { + libraries.add(dir.getName()); + } + } + return libraries; + } + +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplateManager.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/DirectoryTemplateManager.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,232 @@ +/* + + 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.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; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team </a> + * 11.08.2004 last change: + * + */ +public class DirectoryTemplateManager +{ + + private Hashtable directoryTemplates = new Hashtable(); + + /** + * + */ + public DirectoryTemplateManager() + { + super(); + } + + public void addDirectoryTemplate(DirectoryTemplate template) + { + + directoryTemplates.put(template.getId(), template); + } + + public Set getDirectoryTemplates() + { + + return directoryTemplates.entrySet(); + } + + public DirectoryTemplate getTemplate(String key) + { + + return (DirectoryTemplate)directoryTemplates.get(key); + } + + /** + * 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() + { + IPath repositoryPath = MetroStudioCore.getDefault() + .getPluginLocation(); //$NON-NLS-1$ + repositoryPath = repositoryPath.append("lib/avalon-framework"); + return repositoryPath; + } + + /** + * @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) + { + + DirectoryTemplate template = (DirectoryTemplate) directoryTemplates + .get(templateId); + if (template != null) + { + template.create(project); + addLibraries(template, project); + } + } + + /** + * Load DirectoryStructureTemplates from file + * + * @param filePathName + * @return + */ + public static DirectoryTemplateManager load(String filePathName) + { + + XStream xstream = new XStream(new DomDriver()); + initXStream(xstream); + + FileReader reader = null; + try + { + reader = new FileReader(filePathName); + + } catch (FileNotFoundException e) + { + MetroStudioCore.log(e, + "can't open Directory Template configuration file"); + return null; + } + return (DirectoryTemplateManager) xstream.fromXML(reader); + } + + public static void initXStream(XStream xstream) + { + xstream.alias("DirectoryTemplates", DirectoryTemplateManager.class); + xstream.alias("DirectoryTemplate", DirectoryTemplate.class); + xstream.alias("Directory", Directory.class); + xstream.alias("Library", Library.class); + + } + /** + * @param xstream + */ + public void addXStreamAliases(XStream xstream) + { + initXStream(xstream); + } +} \ No newline at end of file Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Library.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Library.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,67 @@ +/* + + 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.templateengine; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team</a> + * 11.08.2004 + * last change: + * + */ +public class Library +{ + + /** + * @return Returns the name. + */ + public String getName() + { + return name; + } + /** + * @param name The name to set. + */ + public void setName(String name) + { + this.name = name; + } + /** + * @return Returns the version. + */ + public String getVersion() + { + return version; + } + /** + * @param version The version to set. + */ + public void setVersion(String version) + { + this.version = version; + } + private String name; + private String version; + /** + * + */ + public Library() + { + super(); + } + +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ProjectManager.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ProjectManager.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,152 @@ +/* + + 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.templateengine; + +import java.util.List; + +import org.apache.metro.studio.eclipse.core.MetroStudioCore; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.JavaCore; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team </a> + * 11.08.2004 last change: + * + */ +public class ProjectManager +{ + final static String BASE = "org.apache.metro.studio.core"; + + final static String BLOCK_NATURE_ID = BASE + ".blockNature"; + + final static String FACILITY_NATURE_ID = BASE + ".facilityNature"; + + final static String KERNEL_NATURE_ID = BASE + ".kernelNature"; + + /** + * + */ + public ProjectManager() + { + super(); + } + + /** + * get a list of wizard pages, which are needed for a specific + * ResourceTemplate. + * + * @param resourceTemplateName + * @return + */ + public static List getWizards(String resourceTemplateName) + { + + return null; + } + + /** + * This method is called from the "project new wizard" to create a new + * project with all values entered in all wizard pages. + * + * @param valueObject + * @return + */ + public static IProject createBlockProject(Object valueObject) + { + + return null; + } + + /** + * This method is called to show all available template in the wizard so + * that the user can choose one of them. + */ + public List getResourceTemplateNames() + { + return null; + } + + /** + * Create a block project + * + * @param name + * @return + */ + public static IProject createBlockProject(String name) + { + return createProject(name, BLOCK_NATURE_ID); + } + + /** + * Create a facility project + * + * @param name + * @return + */ + public static IProject createFacilityProject(String name) + { + return createProject(name, FACILITY_NATURE_ID); + } + + private static IProject createProject(String name, String nature) + { + IProject project = null; + try + { + IWorkspaceRoot root = MetroStudioCore.getWorkspace().getRoot(); + // create the project in workspace. + project = root.getProject(name); + + if (!project.exists()) + { + project.create(null); + } + + if (!project.isOpen()) + { + project.open(null); + } + IProjectDescription description = project.getDescription(); + + String[] natureIds = new String[] { JavaCore.NATURE_ID, nature }; + description.setLocation(null); + description.setNatureIds(natureIds); + project.setDescription(description, null); + + } catch (CoreException e) + { + MetroStudioCore.log(e, "can't create project"); + } + + return project; + } + + public static void delete(IProject project) + { + try + { + project.delete(true, true, null); + } catch (CoreException e) + { + MetroStudioCore.log(e, "can't delete project"); + } + } +} \ No newline at end of file Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Resource.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/Resource.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,251 @@ +/* + + 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.templateengine; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.Iterator; + +import org.apache.metro.studio.eclipse.core.tools.ClassNameAnalyzer; +import org.apache.metro.studio.eclipse.core.tools.DynProjectParam; +import org.apache.metro.studio.eclipse.core.tools.SystemTool; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team </a> + * 11.08.2004 last change: + * + */ +public class Resource +{ + /** + * This is the name of the root segment (one of the folders directly under + * the projects name) + */ + private String rootSegment; + + /** + * This is the pointer to the templates source + */ + private String sourceFilePathName; + + /** + * The packagename, where the output should be stored + */ + private String packageName; + + /** + * the parameter object which hold all dynamic parameters + */ + private transient DynProjectParam dynParam; + + /** + * + */ + public Resource() + { + super(); + } + + /** + * @return Returns the rootSegment. + */ + public String getRootSegment() + { + return rootSegment; + } + + /** + * @param rootSegment + * The rootSegment to set. + */ + public void setRootSegment(String rootSegment) + { + this.rootSegment = rootSegment; + } + + /** + * @return Returns the sourceFilePathName. + */ + public String getSourceFilePathName() + { + return sourceFilePathName; + } + + /** + * @param sourceFilePathName + * The sourceFilePathName to set. + */ + public void setSourceFilePathName(String sourceFilePathName) + { + this.sourceFilePathName = sourceFilePathName; + } + + /** + * opens the templatefile and replaces all occurencies of the parameters + * contained in the map. Output is writen to <folder> + * + * @param templateName + * @param map + * @param folder + */ + private void createFromTemplate(String templateName, DynProjectParam map, + String destinationPath) + { + + try + { + InputStream input = new FileInputStream(new File(templateName)); + InputStreamReader file = new InputStreamReader(input); + BufferedReader reader = new BufferedReader(file); + + String outPath = destinationPath; + FileOutputStream ostream = new FileOutputStream(outPath); + OutputStreamWriter out = new OutputStreamWriter(ostream); + + String line; + Iterator it = map.keySet().iterator(); + String key; + + while ((line = reader.readLine()) != null) + { + while (it.hasNext()) + { + if ((key = (String) it.next()).startsWith("%")) + { + if ((line.indexOf(key)) != -1) + { + /* + * to retain 1.3.1 compatibiliy (WSAD) dont use + * "replace" line = line.replaceAll(key, (String) + * map.get(key)); + */ + line = SystemTool.replaceAll(line, key, + (String) map.get(key)); + + } + } + } + out.write(line); + out.write("\n"); + it = map.keySet().iterator(); + } + out.close(); + file.close(); + } catch (Exception e) + { + System.out.println(e); + } + } + + private String replaceParam(String line, DynProjectParam map) + { + + Iterator it = map.keySet().iterator(); + String key; + + while (it.hasNext()) + { + if ((key = (String) it.next()).startsWith("%")) + { + if ((line.indexOf(key)) != -1) + { + /* + * to retain 1.3.1 compatibiliy (WSAD) dont use "replace" + * line = line.replaceAll(key, (String) map.get(key)); + */ + line = SystemTool.replaceAll(line, key, (String) map + .get(key)); + + } + } + } + return line; + + } + + private String getFileName() + { + + ClassNameAnalyzer analyzer = new ClassNameAnalyzer(); + analyzer.setPath(sourceFilePathName); + return replaceParam(analyzer.getFileName(), getDynParam()); + + } + + /** + * @param directory. + * Destination directory template + * @param templateName + */ + public void create(DirectoryTemplate directoryTemplate, + DynProjectParam param) + { + setDynParam(param); + String destinationFilePathName = null; + Directory dir = directoryTemplate.getDirectory(rootSegment); + if (dir == null) + return; + dir = dir.appendPackage(getPackageName()); + + destinationFilePathName = dir.getEclipseFolder().getLocation() + .toString(); + destinationFilePathName = destinationFilePathName + "/" + getFileName(); + createFromTemplate(sourceFilePathName, param, destinationFilePathName); + + } + + /** + * @return Returns the packageName. + */ + public String getPackageName() + { + return replaceParam(packageName, getDynParam()); + + } + + /** + * @param packageName + * The packageName to set. + */ + public void setPackageName(String packageName) + { + this.packageName = packageName; + } + + /** + * @return Returns the dynParam. + */ + public DynProjectParam getDynParam() + { + return dynParam; + } + + /** + * @param dynParam + * The dynParam to set. + */ + public void setDynParam(DynProjectParam dynParam) + { + this.dynParam = dynParam; + } +} \ No newline at end of file Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplate.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplate.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,126 @@ +/* + + 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.templateengine; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.metro.studio.eclipse.core.MetroStudioCore; +import org.apache.metro.studio.eclipse.core.tools.DynProjectParam; +import org.eclipse.core.resources.IProject; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team</a> + * 11.08.2004 + * last change: + * + */ +public class ResourceTemplate +{ + + private String directoryType; + private String templateId; + private List wizardPages = new ArrayList(); + private List resources = new ArrayList(); + private List libraries = new ArrayList(); + + /** + * Constructor + */ + public ResourceTemplate() + { + super(); + } + /** + * Creates the directorystructure and all Resources of + * the template project + * + * @param project + * + */ + 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); + + // 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 + + } + + /** + * @return Returns the directoryType. + */ + public String getDirectoryType() + { + return directoryType; + } + /** + * @param directoryType The directoryType to set. + */ + public void setDirectoryType(String directoryType) + { + this.directoryType = directoryType; + } + /** + * @return Returns the resources. + */ + public List getResources() + { + return resources; + } + /** + * @param resources The resources to set. + */ + public void setResources(List resources) + { + this.resources = resources; + } + /** + * @return Returns the templateId. + */ + public String getTemplateId() + { + return templateId; + } + /** + * @param templateId The templateId to set. + */ + public void setTemplateId(String templateId) + { + this.templateId = templateId; + } + + public void addResource(Resource resource) + { + resources.add(resource); + } +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplateManager.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/templateengine/ResourceTemplateManager.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,117 @@ +/* + + 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.templateengine; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.Hashtable; + +import org.apache.metro.studio.eclipse.core.MetroStudioCore; +import org.apache.metro.studio.eclipse.core.tools.DynProjectParam; +import org.eclipse.core.resources.IProject; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team</a> + * 11.08.2004 + * last change: + * + */ +public class ResourceTemplateManager +{ + + private Hashtable resourceTemplates = new Hashtable(); + private DirectoryTemplateManager directoryManager; + /** + * + */ + public ResourceTemplateManager() + { + super(); + } + + public static ResourceTemplateManager load(String resourceFilePathName) + { + XStream xstream = new XStream(new DomDriver()); + initXStream(xstream); + + new DirectoryTemplateManager().addXStreamAliases(xstream); + FileReader reader = null; + try + { + reader = new FileReader(resourceFilePathName); + + } catch (FileNotFoundException e) + { + MetroStudioCore.log(e, + "can't open Resource Template configuration file"); + return null; + } + + ResourceTemplateManager rm = (ResourceTemplateManager) xstream.fromXML(reader); + return rm; + + } + /** + * @param xstream + */ + public static void initXStream(XStream xstream) + { + xstream.alias("ResourceTemplates", ResourceTemplateManager.class); + xstream.alias("ResourceTemplate", ResourceTemplate.class); + xstream.alias("Resource", Resource.class); + } + + public void addResourceTemplate(ResourceTemplate resource) + { + resourceTemplates.put(resource.getTemplateId(), resource); + } + /** + * @param string + * @return + */ + public ResourceTemplate getTemplate(String key) + { + return (ResourceTemplate)resourceTemplates.get(key); + } + + /** + * @param dm + */ + public void importDirectoryTemplates(DirectoryTemplateManager dm) + { + directoryManager = dm; + } + + /** + * Create a directorystrucure and all required resources in a project + */ + public void create(IProject project, String resourceName, DynProjectParam param) + { + ResourceTemplate template = getTemplate(resourceName); + if(template == null) + { + MetroStudioCore.log(null, "cant find resource template <" + resourceName +">"); + return; + } + template.create(project, directoryManager, param); + } + +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/ClassNameAnalyzer.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/ClassNameAnalyzer.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,104 @@ +/* + + 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.tools; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>* + */ +public class ClassNameAnalyzer +{ + + /** + * @uml property=segments associationEnd={multiplicity={(0 -1)} + * elementType=java.lang.String} + * + */ + private List segments = new ArrayList(); + + public void setPackageName(String name) + { + + setFullClassName(name); + } + + public void setFullClassName(String name) + { + + while (name.indexOf(".") != -1) + { + segments.add(name.substring(0, name.indexOf("."))); + name = name.substring(name.indexOf(".") + 1, name.length()); + } + segments.add(name); + } + + public String getPath() + { + + StringBuffer buff = new StringBuffer(); + for (int i = 0; segments.size() > i + 2; i++) + { + buff.append((String) segments.get(i)); + buff.append("/"); + } + return buff.toString(); + } + + /** + * @return + */ + public String getFileName() + { + + StringBuffer buff = new StringBuffer(); + int size = segments.size(); + for (int i = size - 1; size > i; i++) + { + buff.append((String) segments.get(i)); + if (i < size - 1) + buff.append("."); + } + return buff.toString(); + } + + /** + * @param directory + */ + public void setPath(String directory) + { + + while (directory.indexOf("/") != -1) + { + segments.add(directory.substring(0, directory.indexOf("/"))); + directory = directory.substring(directory.indexOf("/") + 1, directory.length()); + } + segments.add(directory); + } + + /** + * @return Returns the segments. @uml property=segments + */ + public List getSegments() + { + return segments; + } + +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/DynProjectParam.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/DynProjectParam.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,158 @@ +/* + + 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.tools; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> + * + */ +public class DynProjectParam +{ + + /** + * @uml property=param associationEnd={multiplicity={(0 1)} + * qualifier=(constant:java.lang.String string:java.lang.String)} + */ + Map param = new HashMap(); + + public void setFullImplementationClassName(String fullClassName) + { + + param.put("%implementationpackage%", extractPackage(fullClassName)); + param.put("%implementationclass%", extractClassName(fullClassName)); + param.put("%full_implementationclass%", fullClassName); + + } + public void setFullServiceClassName(String fullClassName) + { + + param.put("%servicepackage%", extractPackage(fullClassName)); + param.put("%serviceclass%", extractClassName(fullClassName)); + param.put("%full_serviceclass%", fullClassName); + + } + public void setContainerName(String containerName) + { + + param.put("%containername%", containerName); + + } + + /** + * @param fullClassName + * @return the package part of the fully qualified className + */ + private String extractPackage(String fullClassName) + { + if (fullClassName.trim().length() > 0) + { + return fullClassName.substring(0, fullClassName.lastIndexOf('.')); + } else + { + return ""; + } + } + + /** + * @param fullClassName + * @return className part of the fully qualified className + */ + private String extractClassName(String fullClassName) + { + if (fullClassName.trim().length() > 0) + { + return fullClassName.substring(fullClassName.lastIndexOf('.') + 1); + } else + { + return ""; + } + } + /** + * @param string + */ + public void setProjectName(String string) + { + + param.put("%projectname%", string); + } + /** + * + */ + public String getProjectName() + { + + return (String) param.get("%projectname%"); + } + /** + * @param string + */ + public void setVirtualServiceName(String string) + { + + param.put("%virtualservicename%", string); + + } + /** + * @param string + */ + public void setVersion(String string) + { + + param.put("%version%", string); + + } + /** + * @param string + * @return Object + */ + public Object get(String string) + { + + return param.get(string); + } + /** + * @return Set + */ + public Set keySet() + { + return param.keySet(); + } + /** + * @return (String) package of the service + */ + public String getServicePackage() + { + return (String) param.get("%servicepackage%"); + } + public String getImplementationClass() + { + return (String) param.get("%implementationclass%"); + } + /** + * @return (String) package of the implementation class + */ + public String getImplementationPackage() + { + return (String) param.get("%implementationpackage%"); + } + +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/SystemTool.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/core/tools/SystemTool.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,187 @@ +/* + + 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.tools; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; + +import org.apache.metro.studio.eclipse.core.MetroStudioCore; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> + * + */ +public class SystemTool +{ + + /** + * + */ + public SystemTool() + { + super(); + } + /* + * java 1.4 version to retain 1.3.1 compatibility (WSAD!) dont use it now + * + * public static void copyFile(File in, File out) throws Exception { + * FileChannel sourceChannel = new FileInputStream(in).getChannel(); + * FileChannel destinationChannel = new FileOutputStream(out).getChannel(); + * sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel); + * sourceChannel.close(); destinationChannel.close(); } + */ + /* + * This method makes a copy of a file. + * + * java CopyFile source.dat copy.dat + * + * This command will fail if a file named copy.dat already exists. To force + * the command to succede, add the -f command line option: + * + * java CopyFile -f source.dat copy.dat + * + * Either command will fail if the source file does not exist. + */ + + public static void copyFile(File in, File out) throws Exception + { + InputStream source; // Stream for reading from the source file. + OutputStream copy; // Stream for writing the copy. + boolean force = true; // This is set to true if the "-f" option is + // specified. + int byteCount; // The number of bytes copied from the source file. + + /* Create the input stream. If an error occurs, end the program. */ + + try + { + source = new FileInputStream(in); + } catch (FileNotFoundException e) + { + MetroStudioCore.log(e, "Can't find file \"" + in.getName() + "\"."); + return; + } + + /* + * If the output file alrady exists and the -f option was not + * specified, + */ + + File file = out; + if (file.exists() && force == false) + { + MetroStudioCore.log(null, "Output file exists. Use the -f option to replace it."); + return; + } + + /* Create the output stream. If an error occurs, end the program. */ + + try + { + copy = new FileOutputStream(out); + } catch (IOException e) + { + System.out.println("Can't open output file \"" + out.getName() + "\"."); + return; + } + + /* + * Copy one byte at a time from the input stream to the out put stream, + * ending when the read() method returns -1 (which is the signal that + * the end of the stream has been reached. If any error occurs, print + * an error message. Also print a message if the file has bee copied + */ + + byteCount = 0; + + try + { + while (true) + { + int data = source.read(); + if (data < 0) + break; + copy.write(data); + byteCount++; + } + source.close(); + copy.close(); + + } catch (Exception e) + { + MetroStudioCore.log( + e, + "Error occured while copying. " + byteCount + " bytes copied."); + } + + } // end copyFile() + + public static String getFileContents(String fileName) + { + + StringBuffer buf = new StringBuffer(); + try + { + FileInputStream in = new FileInputStream(fileName); + InputStreamReader file = new InputStreamReader(in); + BufferedReader reader = new BufferedReader(file); + + String line; + while ((line = reader.readLine()) != null) + { + buf.append(line); + } + file.close(); + } catch (FileNotFoundException e) + { + MetroStudioCore.log(e, ""); + } catch (IOException e) + { + MetroStudioCore.log(e, ""); + } + return buf.toString(); + } + /** + * @param pLine + * @param pKey + * @param pString + * @return + */ + public static String replaceAll(String source, String pKey, String pReplacement) + { + int start = 0; + int next; + StringBuffer in = new StringBuffer(source); + StringBuffer out = new StringBuffer(); + while((next = in.indexOf(pKey, start)) != -1){ + out.append(source.substring(start, next)); + out.append(pReplacement); + start = next + pKey.length(); + }; + out.append(source.substring(start, source.length())); + + return out.toString(); + } +} Added: avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/ui/controller/CreateNewProjectWizardController.java ============================================================================== --- (empty file) +++ avalon/trunk/central/laboratory/studio/eclipse/core/src/org/apache/metro/studio/eclipse/ui/controller/CreateNewProjectWizardController.java Sat Aug 14 05:04:11 2004 @@ -0,0 +1,102 @@ +/* + + 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.ui.controller; + +import java.rmi.RemoteException; + +import org.apache.metro.facility.presentationservice.api.ControllerEventService; +import org.apache.metro.facility.presentationservice.api.ValueObjectEventListener; +import org.apache.metro.facility.presentationservice.impl.PresentationEvent; +import org.apache.metro.facility.presentationservice.impl.PresentationServiceFactory; +import org.apache.metro.studio.eclipse.core.MetroStudioCore; +import org.apache.metro.studio.eclipse.core.templateengine.ProjectManager; +import org.apache.metro.studio.eclipse.core.templateengine.ResourceTemplateManager; +import org.apache.metro.studio.eclipse.core.tools.DynProjectParam; +import org.eclipse.core.resources.IProject; + +/** + * @author <a href="mailto:dev@avalon.apache.org">Metro Development Team</a> + * 14.08.2004 + * last change: + * + */ +public class CreateNewProjectWizardController +{ + final static String baseDir = MetroStudioCore.getDefault() + .getPluginLocation().toString(); + + final static String resourcesLocation = baseDir + + "config/resources.test_cfg"; + + private String selectedTemplate; + /** + * + */ + public CreateNewProjectWizardController() + { + super(); + initializeListeners(); + } + + public void initializeListeners() + { + ControllerEventService service = null; + + try + { + service = PresentationServiceFactory.getControllerEventService(); + + // create project when apply button is pressed + service.addClickedListener( + "CreateNewProjectWizard.applyButton", + new ValueObjectEventListener() + { + public PresentationEvent notify(PresentationEvent evt) + throws RemoteException + { + String projectName = (String)evt.getData().get("selectedTemplate"); + IProject project = ProjectManager.createBlockProject("HelloWorld Tutorial"); + ResourceTemplateManager rm = ResourceTemplateManager + .load(resourcesLocation); + rm.create(project, selectedTemplate, new DynProjectParam()); + + return evt; + + } + }); + + service.addClickedListener( + "CreateNewProjectWizard.exampleProjectList", + new ValueObjectEventListener() + { + public PresentationEvent notify(PresentationEvent evt) + throws RemoteException + { + selectedTemplate = (String)evt.getData().get("selectedTemplate"); + return evt; + + } + }); + } catch (Exception e) + { + MetroStudioCore.log(e, "Can't initialize PresentationService"); + } + + } + +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]