You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2007/08/29 04:33:12 UTC
svn commit: r570611 [2/14] - in /maven/sandbox/trunk/archetypeng: ./
archetype-common/ archetype-common/src/ archetype-common/src/main/
archetype-common/src/main/java/ archetype-common/src/main/java/org/
archetype-common/src/main/java/org/apache/ arche...
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeFilesResolver.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import org.apache.maven.archetype.metadata.FileSet;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.util.List;
+
+/**
+ * @author rafale
+ */
+public interface ArchetypeFilesResolver
+{
+ String ROLE = ArchetypeFilesResolver.class.getName ();
+
+ /**
+ */
+ List getFilesWithExtension ( List files, String extension );
+
+ /**
+ */
+ List getFilteredFiles ( List files, String filtered );
+
+ /**
+ */
+ List filterFiles ( FileSet fileSet, List archetypeResources );
+
+ /**
+ */
+ List filterFiles ( String moduleOffset, FileSet fileSet, List archetypeResources );
+
+ /**
+ */
+ List findOtherResources ( int level, List files, String languages );
+
+ /**
+ */
+ List findOtherResources ( int level, List files, List sourcesFiles, String languages );
+
+ /**
+ */
+ List findOtherSources ( int level, List files, String languages );
+
+ /**
+ */
+ List findResourcesMainFiles ( List files, String languages );
+
+ /**
+ */
+ List findResourcesTestFiles ( List files, String languages );
+
+ /**
+ */
+ List findSiteFiles ( List files, String languages );
+
+ /**
+ */
+ List findSourcesMainFiles ( List files, String languages );
+
+ /**
+ */
+ List findSourcesTestFiles ( List files, String languages );
+
+ /**
+ */
+ List getPackagedFiles ( List files, String packageName );
+
+ /**
+ */
+ String resolvePackage ( File file, List languages )
+ throws IOException;
+
+ /**
+ */
+ List getUnfilteredFiles ( List files, String filtered );
+
+ /**
+ */
+ List getUnpackagedFiles ( List files, String packageName );
+
+ /**
+ */
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypePropertiesManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypePropertiesManager.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypePropertiesManager.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypePropertiesManager.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import java.util.Properties;
+
+public interface ArchetypePropertiesManager
+{
+ String ROLE = ArchetypePropertiesManager.class.getName ();
+
+ /**
+ */
+ void readProperties ( Properties properties, File propertyFile )
+ throws FileNotFoundException, IOException;
+
+ /**
+ */
+ void writeProperties ( Properties properties, File propertyFile )
+ throws IOException;
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeRegistryManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeRegistryManager.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeRegistryManager.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/ArchetypeRegistryManager.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import org.apache.maven.archetype.registry.ArchetypeRegistry;
+
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import java.util.List;
+
+public interface ArchetypeRegistryManager
+{
+ String ROLE = ArchetypeRegistryManager.class.getName ();
+
+ public void addGroup ( String group, File archetypeRegistryFile )
+ throws IOException, XmlPullParserException;
+
+ /**
+ */
+ List getArchetypeGroups ( File archetypeRegistryFile );
+
+ /**
+ */
+ List getFilteredExtensions ( String archetypeFilteredExtentions, File archetypeRegistryFile )
+ throws IOException;
+
+ /**
+ */
+ List getLanguages ( String archetypeLanguages, File archetypeRegistryFile )
+ throws IOException;
+
+ /**
+ */
+ ArchetypeRegistry readArchetypeRegistry ( File archetypeRegistryFile )
+ throws IOException, FileNotFoundException, XmlPullParserException;
+
+ /**
+ */
+ List getRepositories (
+ List pomRemoteRepositories,
+ String remoteRepositories,
+ File archetypeRegistryFile
+ )
+ throws IOException, XmlPullParserException;
+
+ /**
+ */
+ void writeArchetypeRegistry ( File archetypeRegistryFile, ArchetypeRegistry archetypeRegistry )
+ throws IOException;
+
+ public ArchetypeRegistry getDefaultArchetypeRegistry();
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/Constants.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import java.util.Arrays;
+import java.util.List;
+
+public interface Constants
+{
+ String ARCHETYPE_ARTIFACT_ID = "archetype.artifactId";
+
+ String ARCHETYPE_DESCRIPTOR = "META-INF/maven/archetype-metadata.xml";
+
+ String ARCHETYPE_GROUP_ID = "archetype.groupId";
+
+ String ARCHETYPE_POM = "pom.xml";
+
+ String ARCHETYPE_RESOURCES = "archetype-resources";
+
+ String ARCHETYPE_SUFFIX = "-archetype";
+
+ String ARCHETYPE_VERSION = "archetype.version";
+
+ String ARTIFACT_ID = "artifactId";
+
+ List DEFAULT_FILTERED_EXTENSIONS =
+ Arrays.asList (
+ new String[]
+ {
+ "java", "xml", "txt", "groovy", "cs", "mdo", "aj", "jsp", "gsp", "vm", "html",
+ "xhtml", "properties", ".classpath", ".project"
+ }
+ );
+
+ List DEFAULT_LANGUAGES =
+ Arrays.asList ( new String[] { "java", "groovy", "csharp", "aspectj" } );
+
+ String GROUP_ID = "groupId";
+
+ String MAIN = "main";
+
+ String OLD_ARCHETYPE_DESCRIPTOR = "META-INF/maven/archetype.xml";
+
+ String OLDER_ARCHETYPE_DESCRIPTOR = "META-INF/archetype.xml";
+
+ String PACKAGE = "package";
+
+ String PACKAGE_NAME = "packageName";
+
+ String PARENT_ARTIFACT_ID = "parentArtifactId";
+
+ String POM_PATH = Constants.ARCHETYPE_RESOURCES + "/" + Constants.ARCHETYPE_POM;
+
+ String RESOURCES = "resources";
+
+ String SITE = "site";
+
+ String SRC = "src";
+
+ String TEST = "test";
+
+ String TMP = ".tmp";
+
+ String VERSION = "version";
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,657 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import org.apache.maven.archetype.descriptor.ArchetypeDescriptorBuilder;
+import org.apache.maven.archetype.exception.UnknownArchetype;
+import org.apache.maven.archetype.exception.UnknownGroup;
+import org.apache.maven.archetype.metadata.ArchetypeDescriptor;
+import org.apache.maven.archetype.metadata.io.xpp3.ArchetypeDescriptorXpp3Reader;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Plugin;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataResolutionException;
+import org.apache.maven.shared.downloader.DownloadException;
+import org.apache.maven.shared.downloader.DownloadNotFoundException;
+import org.apache.maven.shared.downloader.Downloader;
+
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
+import java.util.zip.ZipFile;
+
+/**
+ * @plexus.component
+ */
+public class DefaultArchetypeArtifactManager
+extends AbstractLogEnabled
+implements ArchetypeArtifactManager
+{
+ /**
+ * @plexus.requirement
+ */
+ private Downloader downloader;
+
+ /**
+ * @plexus.requirement
+ */
+ private RepositoryMetadataManager repositoryMetadataManager;
+
+ public File getArchetypeFile (
+ final String groupId,
+ final String artifactId,
+ final String version,
+ final ArtifactRepository localRepository,
+ final List repositories
+ )
+ throws UnknownArchetype
+ {
+ try
+ {
+ return
+ downloader.download ( groupId, artifactId, version, localRepository, repositories );
+ }
+ catch ( DownloadNotFoundException ex )
+ {
+ throw new UnknownArchetype ( ex );
+ }
+ catch ( DownloadException ex )
+ {
+ throw new UnknownArchetype ( ex );
+ }
+ }
+
+ public ClassLoader getArchetypeJarLoader ( File archetypeFile )
+ throws UnknownArchetype
+ {
+ try
+ {
+ URL[] urls = new URL[1];
+
+ urls[0] = archetypeFile.toURI ().toURL ();
+
+ return new URLClassLoader ( urls );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public ClassLoader getArchetypeJarLoader (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownArchetype
+ {
+ try
+ {
+ File archetypeFile =
+ getArchetypeFile ( groupId, artifactId, version, localRepository, repositories );
+ URL[] urls = new URL[1];
+
+ urls[0] = archetypeFile.toURI ().toURL ();
+
+ return new URLClassLoader ( urls );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public List getArchetypes (
+ String groupId,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownGroup
+ {
+ try
+ {
+ List archetypes = new ArrayList ();
+
+ RepositoryMetadata metadata = new GroupRepositoryMetadata ( groupId );
+
+ repositoryMetadataManager.resolve ( metadata, repositories, localRepository );
+
+ for (
+ Iterator iter = metadata.getMetadata ().getPlugins ().iterator ();
+ iter.hasNext ();
+ )
+ {
+ Plugin plugin = (Plugin) iter.next ();
+
+ Archetype archetype = new Archetype ();
+
+ archetype.setGroupId ( groupId );
+ archetype.setArtifactId ( plugin.getArtifactId () );
+ archetype.setName ( plugin.getName () );
+ archetype.setPrefix ( plugin.getPrefix () );
+
+ if ( getLogger ().isDebugEnabled () )
+ {
+ getLogger ().debug ( "plugin=" + groupId + ":" + plugin.getArtifactId () );
+ }
+
+ if ( !archetypes.contains ( archetype ) )
+ {
+ archetypes.add ( archetype );
+ }
+ } // end for
+
+ return archetypes;
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new UnknownGroup ( e );
+ }
+ }
+
+ public ZipFile getArchetypeZipFile ( File archetypeFile )
+ throws UnknownArchetype
+ {
+ try
+ {
+ return new ZipFile ( archetypeFile );
+ }
+ catch ( ZipException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ catch ( IOException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public ZipFile getArchetypeZipFile (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownArchetype
+ {
+ try
+ {
+ File archetypeFile =
+ getArchetypeFile ( groupId, artifactId, version, localRepository, repositories );
+
+ return new ZipFile ( archetypeFile );
+ }
+ catch ( ZipException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ catch ( IOException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public boolean exists (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ {
+ try
+ {
+ File archetypeFile =
+ downloader.download ( groupId, artifactId, version, localRepository, repositories );
+
+ return archetypeFile.exists ();
+ }
+ catch ( DownloadException e )
+ {
+ return false;
+ }
+ catch ( DownloadNotFoundException e )
+ {
+ return false;
+ }
+ }
+
+ public boolean isFileSetArchetype (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ {
+ try
+ {
+ ClassLoader archetypeJarLoader =
+ getArchetypeJarLoader (
+ groupId,
+ artifactId,
+ version,
+ localRepository,
+ repositories
+ );
+
+ org.apache.maven.archetype.metadata.ArchetypeDescriptor descriptor =
+ loadFileSetArchetypeDescriptor ( archetypeJarLoader );
+
+ return descriptor.getId () != null;
+ }
+ catch ( XmlPullParserException e )
+ {
+ return false;
+ }
+ catch ( IOException e )
+ {
+ return false;
+ }
+ catch ( UnknownArchetype e )
+ {
+ return false;
+ }
+ }
+
+ public ArchetypeDescriptor getFileSetArchetypeDescriptor ( File archetypeFile )
+ throws UnknownArchetype
+ {
+ try
+ {
+ ClassLoader archetypeJarLoader = getArchetypeJarLoader ( archetypeFile );
+
+ return loadFileSetArchetypeDescriptor ( archetypeJarLoader );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ catch ( IOException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public org.apache.maven.archetype.metadata.ArchetypeDescriptor getFileSetArchetypeDescriptor (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownArchetype
+ {
+ try
+ {
+ ClassLoader archetypeJarLoader =
+ getArchetypeJarLoader (
+ groupId,
+ artifactId,
+ version,
+ localRepository,
+ repositories
+ );
+
+ return loadFileSetArchetypeDescriptor ( archetypeJarLoader );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ catch ( IOException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public List getFilesetArchetypeResources ( File archetypeFile )
+ throws UnknownArchetype
+ {
+ List archetypeResources = new ArrayList ();
+
+ ZipFile zipFile = getArchetypeZipFile ( archetypeFile );
+
+ Enumeration enumeration = zipFile.entries ();
+ while ( enumeration.hasMoreElements () )
+ {
+ ZipEntry entry = (ZipEntry) enumeration.nextElement ();
+
+ if ( !entry.isDirectory ()
+ && entry.getName ().startsWith ( Constants.ARCHETYPE_RESOURCES )
+ )
+ {
+ // not supposed to be file.seperator
+ String resource =
+ StringUtils.replace (
+ entry.getName (),
+ Constants.ARCHETYPE_RESOURCES + "/",
+ ""
+ );
+ getLogger ().debug ( "Found resource " + resource );
+ // TODO:FIXME
+ archetypeResources.add ( resource );
+ }
+ else
+ {
+ getLogger ().debug ( "Not resource " + entry.getName () );
+ }
+ }
+ return archetypeResources;
+ }
+
+ public List getFilesetArchetypeResources (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownArchetype
+ {
+ List archetypeResources = new ArrayList ();
+
+ ZipFile zipFile =
+ getArchetypeZipFile ( groupId, artifactId, version, localRepository, repositories );
+
+ Enumeration enumeration = zipFile.entries ();
+ while ( enumeration.hasMoreElements () )
+ {
+ ZipEntry entry = (ZipEntry) enumeration.nextElement ();
+
+ if ( !entry.isDirectory ()
+ && entry.getName ().startsWith ( Constants.ARCHETYPE_RESOURCES )
+ )
+ {
+ // not supposed to be file.seperator
+ archetypeResources.add (
+ StringUtils.replace (
+ entry.getName (),
+ Constants.ARCHETYPE_RESOURCES + "/",
+ ""
+ )
+ );
+ }
+ }
+ return archetypeResources;
+ }
+
+ public boolean isOldArchetype (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ {
+ try
+ {
+ ClassLoader archetypeJarLoader =
+ getArchetypeJarLoader (
+ groupId,
+ artifactId,
+ version,
+ localRepository,
+ repositories
+ );
+
+ org.apache.maven.archetype.descriptor.ArchetypeDescriptor descriptor =
+ loadOldArchetypeDescriptor ( archetypeJarLoader );
+
+ return descriptor.getId () != null;
+ }
+ catch ( XmlPullParserException e )
+ {
+ return false;
+ }
+ catch ( IOException e )
+ {
+ return false;
+ }
+ catch ( UnknownArchetype ex )
+ {
+ return false;
+ }
+ }
+
+ public org.apache.maven.archetype.descriptor.ArchetypeDescriptor getOldArchetypeDescriptor (
+ String groupId,
+ String artifactId,
+ String version,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownArchetype
+ {
+ try
+ {
+ ClassLoader archetypeJarLoader =
+ getArchetypeJarLoader (
+ groupId,
+ artifactId,
+ version,
+ localRepository,
+ repositories
+ );
+
+ return loadOldArchetypeDescriptor ( archetypeJarLoader );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ catch ( IOException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public String getReleaseVersion (
+ String groupId,
+ String artifactId,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownArchetype
+ {
+ try
+ {
+ RepositoryMetadata metadata =
+ new GroupRepositoryMetadata ( groupId + "." + artifactId );
+
+ repositoryMetadataManager.resolve ( metadata, repositories, localRepository );
+
+ return metadata.getMetadata ().getVersioning ().getRelease ();
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ public List getVersions (
+ String groupId,
+ String artifactId,
+ ArtifactRepository localRepository,
+ List repositories
+ )
+ throws UnknownArchetype
+ {
+ try
+ {
+ RepositoryMetadata metadata =
+ new GroupRepositoryMetadata ( groupId + "." + artifactId );
+
+ repositoryMetadataManager.resolve ( metadata, repositories, localRepository );
+
+ return metadata.getMetadata ().getVersioning ().getVersions ();
+ }
+ catch ( RepositoryMetadataResolutionException e )
+ {
+ throw new UnknownArchetype ( e );
+ }
+ }
+
+ private Reader getArchetypeDescriptorReader ( ClassLoader archetypeJarLoader )
+ throws IOException
+ {
+ InputStream is = getStream ( Constants.ARCHETYPE_DESCRIPTOR, archetypeJarLoader );
+
+ if ( is == null )
+ {
+ throw new IOException (
+ "The " + Constants.ARCHETYPE_DESCRIPTOR + " descriptor cannot be found."
+ );
+ }
+
+ return new InputStreamReader ( is );
+ }
+
+ private org.apache.maven.archetype.metadata.ArchetypeDescriptor loadFileSetArchetypeDescriptor (
+ ClassLoader archetypeJarLoader
+ )
+ throws XmlPullParserException, IOException
+ {
+ Reader reader = getArchetypeDescriptorReader ( archetypeJarLoader );
+
+ ArchetypeDescriptorXpp3Reader archetypeReader = new ArchetypeDescriptorXpp3Reader ();
+
+ try
+ {
+ return archetypeReader.read ( reader, true );
+ }
+ finally
+ {
+ reader.close ();
+ }
+ }
+
+ private org.apache.maven.archetype.descriptor.ArchetypeDescriptor loadOldArchetypeDescriptor (
+ ClassLoader archetypeJarLoader
+ )
+ throws IOException, XmlPullParserException
+ {
+ ArchetypeDescriptorBuilder builder = new ArchetypeDescriptorBuilder ();
+
+ org.apache.maven.archetype.descriptor.ArchetypeDescriptor descriptor = null;
+
+ Reader reader = null;
+ try
+ {
+ reader = getOldArchetypeDescriptorReader ( archetypeJarLoader );
+
+ descriptor = builder.build ( reader );
+ }
+ catch ( IOException ex )
+ {
+ getLogger ().debug ( "Can not load old archetype", ex );
+ }
+ catch ( XmlPullParserException ex )
+ {
+ getLogger ().debug ( "Can not load old archetype", ex );
+ }
+ finally
+ {
+ if ( reader != null )
+ {
+ reader.close ();
+ }
+ }
+
+ if ( descriptor == null )
+ {
+ try
+ {
+ reader = getOlderArchetypeDescriptorReader ( archetypeJarLoader );
+
+ descriptor = builder.build ( reader );
+ }
+ finally
+ {
+ if ( reader != null )
+ {
+ reader.close ();
+ }
+ }
+ }
+
+ return descriptor;
+ }
+
+ private Reader getOldArchetypeDescriptorReader ( ClassLoader archetypeJarLoader )
+ throws IOException
+ {
+ InputStream is = getStream ( Constants.OLD_ARCHETYPE_DESCRIPTOR, archetypeJarLoader );
+
+ if ( is == null )
+ {
+ throw new IOException (
+ "The " + Constants.OLD_ARCHETYPE_DESCRIPTOR + " descriptor cannot be found."
+ );
+ }
+
+ return new InputStreamReader ( is );
+ }
+
+ private Reader getOlderArchetypeDescriptorReader ( ClassLoader archetypeJarLoader )
+ throws IOException
+ {
+ InputStream is = getStream ( Constants.OLDER_ARCHETYPE_DESCRIPTOR, archetypeJarLoader );
+
+ if ( is == null )
+ {
+ throw new IOException (
+ "The " + Constants.OLDER_ARCHETYPE_DESCRIPTOR + " descriptor cannot be found."
+ );
+ }
+
+ return new InputStreamReader ( is );
+ }
+
+ private InputStream getStream ( String name, ClassLoader loader )
+ {
+ return
+ ( loader == null )
+ ? Thread.currentThread ().getContextClassLoader ().getResourceAsStream ( name )
+ : loader.getResourceAsStream ( name );
+ }
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,404 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import org.apache.maven.project.MavenProject;
+
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+import java.util.Iterator;
+import java.util.Properties;
+
+/**
+ * @plexus.component
+ */
+public class DefaultArchetypeFactory
+extends AbstractLogEnabled
+implements ArchetypeFactory
+{
+ public ArchetypeConfiguration createArchetypeConfiguration (
+ ArchetypeDefinition archetypeDefinition,
+ Properties properties
+ )
+ {
+ ArchetypeConfiguration configuration = new ArchetypeConfiguration ();
+ getLogger ().debug (
+ "Creating ArchetypeConfiguration from ArchetypeDefinition and Properties"
+ );
+
+ configuration.setGroupId ( archetypeDefinition.getGroupId () );
+ configuration.setArtifactId ( archetypeDefinition.getArtifactId () );
+ configuration.setVersion ( archetypeDefinition.getVersion () );
+
+ Iterator propertiesIterator = properties.keySet ().iterator ();
+ while ( propertiesIterator.hasNext () )
+ {
+ String property = (String) propertiesIterator.next ();
+ if ( !Constants.ARCHETYPE_GROUP_ID.equals ( property )
+ && !Constants.ARCHETYPE_ARTIFACT_ID.equals ( property )
+ && !Constants.ARCHETYPE_VERSION.equals ( property )
+ )
+ {
+ configuration.addRequiredProperty ( property );
+
+ getLogger ().debug ( "Adding requiredProperty " + property );
+
+ configuration.setProperty ( property, properties.getProperty ( property ) );
+
+ getLogger ().debug (
+ "Adding property " + property + "=" + properties.getProperty ( property )
+ );
+ }
+ }
+
+ return configuration;
+ }
+
+ public ArchetypeConfiguration createArchetypeConfiguration (
+ org.apache.maven.archetype.descriptor.ArchetypeDescriptor archetypeDescriptor,
+ Properties properties
+ )
+ {
+ ArchetypeConfiguration configuration = new ArchetypeConfiguration ();
+ getLogger ().debug (
+ "Creating ArchetypeConfiguration from legacy descriptor and Properties"
+ );
+
+ configuration.setGroupId ( properties.getProperty ( Constants.ARCHETYPE_GROUP_ID, null ) );
+ configuration.setArtifactId (
+ properties.getProperty ( Constants.ARCHETYPE_ARTIFACT_ID, null )
+ );
+ configuration.setVersion ( properties.getProperty ( Constants.ARCHETYPE_VERSION, null ) );
+
+ configuration.setName ( archetypeDescriptor.getId () );
+
+ configuration.addRequiredProperty ( Constants.GROUP_ID );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.GROUP_ID );
+ if ( null != properties.getProperty ( Constants.GROUP_ID, null ) )
+ {
+ configuration.setProperty (
+ Constants.GROUP_ID,
+ properties.getProperty ( Constants.GROUP_ID )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.GROUP_ID + "="
+ + configuration.getProperty ( Constants.GROUP_ID )
+ );
+ }
+ configuration.addRequiredProperty ( Constants.ARTIFACT_ID );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.ARTIFACT_ID );
+ if ( null != properties.getProperty ( Constants.ARTIFACT_ID, null ) )
+ {
+ configuration.setProperty (
+ Constants.ARTIFACT_ID,
+ properties.getProperty ( Constants.ARTIFACT_ID )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.ARTIFACT_ID + "="
+ + configuration.getProperty ( Constants.ARTIFACT_ID )
+ );
+ }
+ configuration.addRequiredProperty ( Constants.VERSION );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.VERSION );
+ if ( null != properties.getProperty ( Constants.VERSION, null ) )
+ {
+ configuration.setProperty (
+ Constants.VERSION,
+ properties.getProperty ( Constants.VERSION )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.VERSION + "="
+ + configuration.getProperty ( Constants.VERSION )
+ );
+ }
+ configuration.addRequiredProperty ( Constants.PACKAGE );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.PACKAGE );
+ if ( null
+ != properties.getProperty (
+ Constants.PACKAGE,
+ properties.getProperty ( Constants.PACKAGE_NAME, null )
+ )
+ )
+ {
+ configuration.setProperty (
+ Constants.PACKAGE,
+ properties.getProperty (
+ Constants.PACKAGE,
+ properties.getProperty ( Constants.PACKAGE_NAME )
+ )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.PACKAGE_NAME + "="
+ + configuration.getProperty ( Constants.PACKAGE_NAME )
+ );
+ }
+
+ return configuration;
+ }
+
+ public ArchetypeConfiguration createArchetypeConfiguration (
+ org.apache.maven.archetype.metadata.ArchetypeDescriptor archetypeDescriptor,
+ Properties properties
+ )
+ {
+ ArchetypeConfiguration configuration = new ArchetypeConfiguration ();
+ getLogger ().debug (
+ "Creating ArchetypeConfiguration from fileset descriptor and Properties"
+ );
+
+ configuration.setGroupId ( properties.getProperty ( Constants.ARCHETYPE_GROUP_ID, null ) );
+ configuration.setArtifactId (
+ properties.getProperty ( Constants.ARCHETYPE_ARTIFACT_ID, null )
+ );
+ configuration.setVersion ( properties.getProperty ( Constants.ARCHETYPE_VERSION, null ) );
+
+ configuration.setName ( archetypeDescriptor.getId () );
+
+ Iterator requiredProperties = archetypeDescriptor.getRequiredProperties ().iterator ();
+ while ( requiredProperties.hasNext () )
+ {
+ org.apache.maven.archetype.metadata.RequiredProperty requiredProperty =
+ (org.apache.maven.archetype.metadata.RequiredProperty) requiredProperties.next ();
+
+ configuration.addRequiredProperty ( requiredProperty.getKey () );
+ getLogger ().debug ( "Adding requiredProperty " + requiredProperty.getKey () );
+
+ if ( null
+ != properties.getProperty (
+ requiredProperty.getKey (),
+ requiredProperty.getDefaultValue ()
+ )
+ )
+ {
+ configuration.setProperty (
+ requiredProperty.getKey (),
+ properties.getProperty (
+ requiredProperty.getKey (),
+ requiredProperty.getDefaultValue ()
+ )
+ );
+ getLogger ().debug (
+ "Setting property " + requiredProperty.getKey () + "="
+ + configuration.getProperty ( requiredProperty.getKey () )
+ );
+ }
+ if ( null != requiredProperty.getDefaultValue () )
+ {
+ configuration.setDefaultProperty (
+ requiredProperty.getKey (),
+ requiredProperty.getDefaultValue ()
+ );
+ getLogger ().debug (
+ "Setting defaultProperty " + requiredProperty.getKey () + "="
+ + configuration.getDefaultValue ( requiredProperty.getKey () )
+ );
+ }
+ } // end while
+
+ if (!configuration.isConfigured(Constants.GROUP_ID))
+ {
+ configuration.addRequiredProperty ( Constants.GROUP_ID );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.GROUP_ID );
+ if ( null != properties.getProperty ( Constants.GROUP_ID, configuration.getDefaultValue ( Constants.GROUP_ID ) ) )
+ {
+ configuration.setProperty (
+ Constants.GROUP_ID,
+ properties.getProperty ( Constants.GROUP_ID, configuration.getDefaultValue ( Constants.GROUP_ID ) )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.GROUP_ID + "="
+ + configuration.getProperty ( Constants.GROUP_ID )
+ );
+ }
+ }
+ if (!configuration.isConfigured(Constants.ARTIFACT_ID))
+ {
+ configuration.addRequiredProperty ( Constants.ARTIFACT_ID );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.ARTIFACT_ID );
+ if ( null != properties.getProperty ( Constants.ARTIFACT_ID, configuration.getDefaultValue ( Constants.ARTIFACT_ID ) ) )
+ {
+ configuration.setProperty (
+ Constants.ARTIFACT_ID,
+ properties.getProperty ( Constants.ARTIFACT_ID )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.ARTIFACT_ID + "="
+ + configuration.getProperty ( Constants.ARTIFACT_ID )
+ );
+ }
+ }
+ if (!configuration.isConfigured(Constants.VERSION))
+ {
+ configuration.addRequiredProperty ( Constants.VERSION );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.VERSION );
+ if ( null != properties.getProperty ( Constants.VERSION, configuration.getDefaultValue ( Constants.VERSION ) ) )
+ {
+ configuration.setProperty (
+ Constants.VERSION,
+ properties.getProperty ( Constants.VERSION, configuration.getDefaultValue ( Constants.VERSION ) )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.VERSION + "="
+ + configuration.getProperty ( Constants.VERSION )
+ );
+ }
+ }
+ if (!configuration.isConfigured(Constants.PACKAGE))
+ {
+ configuration.addRequiredProperty ( Constants.PACKAGE );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.PACKAGE );
+ if ( null
+ != properties.getProperty (
+ Constants.PACKAGE,
+ properties.getProperty ( Constants.PACKAGE_NAME, configuration.getDefaultValue ( Constants.PACKAGE_NAME ) )
+ )
+ )
+ {
+ configuration.setProperty (
+ Constants.PACKAGE,
+ properties.getProperty (
+ Constants.PACKAGE,
+ properties.getProperty ( Constants.PACKAGE_NAME, configuration.getDefaultValue ( Constants.PACKAGE_NAME ) )
+ )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.PACKAGE + "="
+ + configuration.getProperty ( Constants.PACKAGE )
+ );
+ }
+ }
+
+ return configuration;
+ }
+
+ public ArchetypeConfiguration createArchetypeConfiguration (
+ MavenProject project,
+ ArchetypeDefinition archetypeDefinition,
+ Properties properties
+ )
+ {
+ ArchetypeConfiguration configuration = new ArchetypeConfiguration ();
+ getLogger ().debug (
+ "Creating ArchetypeConfiguration from ArchetypeDefinition, MavenProject and Properties"
+ );
+
+ configuration.setGroupId ( archetypeDefinition.getGroupId () );
+ configuration.setArtifactId ( archetypeDefinition.getArtifactId () );
+ configuration.setVersion ( archetypeDefinition.getVersion () );
+
+ configuration.addRequiredProperty ( Constants.GROUP_ID );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.GROUP_ID );
+ configuration.setDefaultProperty ( Constants.GROUP_ID, project.getGroupId () );
+ if ( null != properties.getProperty ( Constants.GROUP_ID, null ) )
+ {
+ configuration.setProperty (
+ Constants.GROUP_ID,
+ properties.getProperty ( Constants.GROUP_ID )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.GROUP_ID + "="
+ + configuration.getProperty ( Constants.GROUP_ID )
+ );
+ }
+
+ configuration.addRequiredProperty ( Constants.ARTIFACT_ID );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.ARTIFACT_ID );
+ configuration.setDefaultProperty ( Constants.ARTIFACT_ID, project.getArtifactId () );
+ if ( null != properties.getProperty ( Constants.ARTIFACT_ID, null ) )
+ {
+ configuration.setProperty (
+ Constants.ARTIFACT_ID,
+ properties.getProperty ( Constants.ARTIFACT_ID )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.ARTIFACT_ID + "="
+ + configuration.getProperty ( Constants.ARTIFACT_ID )
+ );
+ }
+
+ configuration.addRequiredProperty ( Constants.VERSION );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.VERSION );
+ configuration.setDefaultProperty ( Constants.VERSION, project.getVersion () );
+ if ( null != properties.getProperty ( Constants.VERSION, null ) )
+ {
+ configuration.setProperty (
+ Constants.VERSION,
+ properties.getProperty ( Constants.VERSION )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.VERSION + "="
+ + configuration.getProperty ( Constants.VERSION )
+ );
+ }
+
+ configuration.addRequiredProperty ( Constants.PACKAGE );
+ getLogger ().debug ( "Adding requiredProperty " + Constants.PACKAGE );
+ if ( null
+ != properties.getProperty (
+ Constants.PACKAGE,
+ properties.getProperty ( Constants.PACKAGE_NAME, null )
+ )
+ )
+ {
+ configuration.setProperty (
+ Constants.PACKAGE,
+ properties.getProperty (
+ Constants.PACKAGE,
+ properties.getProperty ( Constants.PACKAGE_NAME )
+ )
+ );
+ getLogger ().debug (
+ "Setting property " + Constants.PACKAGE + "="
+ + configuration.getProperty ( Constants.PACKAGE )
+ );
+ }
+
+ return configuration;
+ }
+
+ public ArchetypeDefinition createArchetypeDefinition ( Properties properties )
+ {
+ ArchetypeDefinition definition = new ArchetypeDefinition ();
+ getLogger ().debug (
+ "Creating ArchetypeDefinition ("
+ + properties.getProperty ( Constants.ARCHETYPE_GROUP_ID, null ) + ":"
+ + properties.getProperty ( Constants.ARCHETYPE_ARTIFACT_ID, null ) + ":"
+ + properties.getProperty ( Constants.ARCHETYPE_VERSION, null ) + ")"
+ );
+
+ definition.setGroupId ( properties.getProperty ( Constants.ARCHETYPE_GROUP_ID, null ) );
+ definition.setArtifactId (
+ properties.getProperty ( Constants.ARCHETYPE_ARTIFACT_ID, null )
+ );
+ definition.setVersion ( properties.getProperty ( Constants.ARCHETYPE_VERSION, null ) );
+
+ return definition;
+ }
+
+ public void updateArchetypeConfiguration (
+ ArchetypeConfiguration archetypeConfiguration,
+ ArchetypeDefinition archetypeDefinition
+ )
+ {
+ archetypeConfiguration.setGroupId ( archetypeDefinition.getGroupId () );
+ archetypeConfiguration.setArtifactId ( archetypeDefinition.getArtifactId () );
+ archetypeConfiguration.setVersion ( archetypeDefinition.getVersion () );
+ }
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFilesResolver.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,465 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import org.apache.maven.archetype.metadata.FileSet;
+
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @plexus.component
+ */
+public class DefaultArchetypeFilesResolver
+extends AbstractLogEnabled
+implements ArchetypeFilesResolver
+{
+ public List getFilesWithExtension ( List files, String extension )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "" );
+
+ scanner.setIncludes ( "**/*." + extension );
+ scanner.setExcludes ( "" );
+
+ return scanner.scan ( files );
+ }
+
+ public List getFilteredFiles ( List files, String filtered )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "" );
+
+ scanner.setIncludes ( filtered );
+ scanner.setExcludes ( "" );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " filtered files in " + files.size () + " files"
+ );
+
+ return result;
+ }
+
+ public List filterFiles ( FileSet fileSet, List archetypeResources )
+ {
+ return filterFiles ( "", fileSet, archetypeResources );
+ }
+
+ public List filterFiles ( String moduleOffset, FileSet fileSet, List archetypeResources )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir (
+ ( StringUtils.isEmpty ( moduleOffset ) ? "" : ( moduleOffset + File.separatorChar ) )
+ + fileSet.getDirectory ()
+ );
+ scanner.setIncludes ( fileSet.getIncludes () );
+ scanner.setExcludes ( fileSet.getExcludes () );
+ scanner.setCaseSensitive ( true );
+
+ return scanner.scan ( archetypeResources );
+ }
+
+ public List findOtherResources ( int level, List files, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+
+ scanner.setBasedir ( "" );
+
+ String includes = "";
+ for ( int i = 0; i < level; i++ )
+ {
+ includes += "*/";
+ }
+
+ scanner.setIncludes ( includes + "**" );
+ scanner.setExcludes ( languages );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " other resources in " + files.size ()
+ + " files at level " + level
+ );
+
+ return result;
+ }
+
+ public List findOtherResources ( int level, List files, List sourcesFiles, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+
+ scanner.setBasedir ( "" );
+
+ Set selectedDirectories = new HashSet ();
+
+ List includes = new ArrayList ();
+
+ Iterator sourcesFilesIterator = sourcesFiles.iterator ();
+ while ( sourcesFilesIterator.hasNext () )
+ {
+ String sourcesFile = (String) sourcesFilesIterator.next ();
+
+ String directory = PathUtils.getDirectory ( sourcesFile, level - 1 );
+ if ( !selectedDirectories.contains ( directory ) )
+ {
+ includes.add ( directory + "/**" );
+ }
+
+ selectedDirectories.add ( directory );
+ }
+
+ scanner.setExcludes ( languages );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " other resources in " + files.size ()
+ + " files at level " + level
+ );
+
+ return result;
+ }
+
+ public List findOtherSources ( int level, List files, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "" );
+
+ String levelDirectory = "";
+ for ( int i = 0; i < ( level - 1 ); i++ )
+ {
+ levelDirectory += "*/";
+ }
+
+ String includes = "";
+ String[] languagesAsArray = StringUtils.split ( languages );
+ for ( int i = 0; i < languagesAsArray.length; i++ )
+ {
+ includes += levelDirectory + languagesAsArray[i];
+ }
+
+ scanner.setIncludes ( includes );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " other sources in " + files.size () + " files at level "
+ + level
+ );
+
+ return result;
+ }
+
+ public List findResourcesMainFiles ( List files, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "src/main" );
+
+ scanner.setIncludes ( "**" );
+ scanner.setExcludes ( languages );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " resources in " + files.size () + " files"
+ );
+
+ return result;
+ }
+
+ public List findResourcesTestFiles ( List files, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "src/test" );
+
+ scanner.setIncludes ( "**" );
+ scanner.setExcludes ( languages );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " test resources in " + files.size () + " files"
+ );
+
+ return result;
+ }
+
+ public List findSiteFiles ( List files, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "src/site" );
+
+ scanner.setIncludes ( "**" );
+ scanner.setExcludes ( languages );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " site resources in " + files.size () + " files"
+ );
+
+ return result;
+ }
+
+ public List findSourcesMainFiles ( List files, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "src/main" );
+
+ scanner.setIncludes ( languages );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " sources in " + files.size () + " files"
+ );
+
+ return result;
+ }
+
+ public List findSourcesTestFiles ( List files, String languages )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "src/test" );
+
+ scanner.setIncludes ( languages );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " test sources in " + files.size () + " files"
+ );
+
+ return result;
+ }
+
+ public List getPackagedFiles ( List files, String packageName )
+ {
+ List packagedFiles = new ArrayList ();
+ Iterator filesIterator = files.iterator ();
+ while ( filesIterator.hasNext () )
+ {
+ String file = (String) filesIterator.next ();
+
+ if ( file.startsWith ( packageName ) )
+ {
+ packagedFiles.add ( file.substring ( packageName.length () + 1 ) );
+ }
+ }
+ getLogger ().debug (
+ "Scanned " + packagedFiles.size () + " packaged files in " + files.size () + " files"
+ );
+ return packagedFiles;
+ }
+
+ public String resolvePackage ( File basedir, List languages )
+ throws IOException
+ {
+ getLogger ().debug ( "Resolving package in " + basedir + " using languages " + languages );
+
+ List files = resolveFiles ( basedir, languages );
+
+ return resolvePackage ( files );
+ }
+
+ public List getUnfilteredFiles ( List files, String filtered )
+ {
+ ListScanner scanner = new ListScanner ();
+ scanner.setBasedir ( "" );
+
+ scanner.setIncludes ( "**" );
+ scanner.setExcludes ( filtered );
+
+ List result = scanner.scan ( files );
+ getLogger ().debug (
+ "Scanned " + result.size () + " unfiltered files in " + files.size () + " files"
+ );
+
+ return result;
+ }
+
+ public List getUnpackagedFiles ( List files, String packageName )
+ {
+ List unpackagedFiles = new ArrayList ();
+ Iterator filesIterator = files.iterator ();
+ while ( filesIterator.hasNext () )
+ {
+ String file = (String) filesIterator.next ();
+
+ if ( !file.startsWith ( packageName ) )
+ {
+ unpackagedFiles.add ( file );
+ }
+ }
+ getLogger ().debug (
+ "Scanned " + unpackagedFiles.size () + " unpackaged files in " + files.size ()
+ + " files"
+ );
+ return unpackagedFiles;
+ }
+
+ private String getCommonPackage ( String packageName, String templatePackage )
+ {
+ String common = "";
+
+ String difference = StringUtils.difference ( packageName, templatePackage );
+ if ( StringUtils.isNotEmpty ( difference ) )
+ {
+ String temporaryCommon =
+ StringUtils.substring (
+ templatePackage,
+ 0,
+ templatePackage.lastIndexOf ( difference )
+ );
+ if ( !difference.startsWith ( "." ) )
+ {
+ common =
+ StringUtils.substring (
+ temporaryCommon,
+ 0,
+ temporaryCommon.lastIndexOf ( "." )
+ );
+ }
+ else
+ {
+ common = temporaryCommon;
+ }
+ }
+ else
+ {
+ common = packageName;
+ }
+
+ return common;
+ }
+
+ private List resolveFiles ( File basedir, List languages )
+ throws IOException
+ {
+ String[] languagesArray = (String[]) languages.toArray ( new String[languages.size ()] );
+ String[] languagesPathesArray = new String[languagesArray.length];
+ for ( int i = 0; i < languagesArray.length; i++ )
+ {
+ languagesPathesArray[i] = "**/src/**/" + languagesArray[i] + "/**";
+ }
+
+ String excludes = "target";
+ Iterator defaultExcludes = Arrays.asList ( ListScanner.DEFAULTEXCLUDES ).iterator ();
+ while ( defaultExcludes.hasNext () )
+ {
+ excludes += "," + (String) defaultExcludes.next () + "/**";
+ }
+
+ List absoluteFiles =
+ FileUtils.getFiles (
+ basedir,
+ StringUtils.join ( languagesPathesArray, "," ),
+ excludes
+ );
+
+ getLogger ().debug ( "Found " + absoluteFiles.size () + " potential archetype files" );
+
+ List files = new ArrayList ( absoluteFiles.size () );
+
+ Iterator filesIterator = absoluteFiles.iterator ();
+ while ( filesIterator.hasNext () )
+ {
+ File file = (File) filesIterator.next ();
+ String filePath =
+ StringUtils.prechomp (
+ file.getAbsolutePath (),
+ basedir.getAbsolutePath () + File.separator
+ );
+
+ String minusSrc = StringUtils.prechomp ( filePath, "src" + File.separator );
+
+ for ( int i = 0; i < languagesArray.length; i++ )
+ {
+ String language = languagesArray[i];
+
+ if ( StringUtils.countMatches (
+ minusSrc,
+ File.separator + language + File.separator
+ )
+ > 0
+ )
+ {
+ String minusLanguage =
+ StringUtils.prechomp ( minusSrc, language + File.separator );
+
+ files.add ( toUnixPath ( minusLanguage ) );
+ }
+ }
+ }
+
+ getLogger ().debug (
+ "Found " + files.size () + " archetype files for package resolution "
+ );
+
+ return files;
+ }
+
+ private String resolvePackage ( List files )
+ {
+ String packageName = null;
+ Iterator minusLanguageIterator = files.iterator ();
+ while ( minusLanguageIterator.hasNext () )
+ {
+ String minusLanguage = (String) minusLanguageIterator.next ();
+
+ String filePackage;
+ if ( minusLanguage.indexOf ( "/" ) >= 0 )
+ {
+ filePackage =
+ StringUtils.replace (
+ minusLanguage.substring ( 0, minusLanguage.lastIndexOf ( "/" ) ),
+ "/",
+ "."
+ );
+ }
+ else
+ {
+ filePackage = "";
+ }
+
+ if ( packageName == null )
+ {
+ packageName = filePackage;
+ }
+ else
+ {
+ packageName = getCommonPackage ( packageName, filePackage );
+ }
+ }
+
+ getLogger ().debug ( "Package resolved to " + packageName );
+
+ return packageName;
+ }
+
+ private String toUnixPath ( String path )
+ {
+ return path.replace ( File.separatorChar, '/' );
+ }
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypePropertiesManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypePropertiesManager.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypePropertiesManager.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypePropertiesManager.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.IOUtil;
+
+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.OutputStream;
+
+import java.util.Iterator;
+import java.util.Properties;
+
+/**
+ * @plexus.component
+ */
+public class DefaultArchetypePropertiesManager
+extends AbstractLogEnabled
+implements ArchetypePropertiesManager
+{
+ public void readProperties ( Properties properties, File propertyFile )
+ throws FileNotFoundException, IOException
+ {
+ getLogger ().debug ( "Reading property file " + propertyFile );
+
+ InputStream is = new FileInputStream ( propertyFile );
+
+ try
+ {
+ properties.load ( is );
+
+ getLogger ().debug ( "Read " + properties.size () + " properties" );
+ }
+ finally
+ {
+ IOUtil.close ( is );
+ }
+ }
+
+ public void writeProperties ( Properties properties, File propertyFile )
+ throws IOException
+ {
+ Properties storedProperties = new Properties ();
+ try
+ {
+ readProperties ( storedProperties, propertyFile );
+ }
+ catch ( FileNotFoundException ex )
+ {
+ getLogger ().debug ( "Property file not found. Creating a new one" );
+ }
+
+ getLogger ().debug ( "Adding " + properties.size () + " properties" );
+
+ Iterator propertiesIterator = properties.keySet ().iterator ();
+ while ( propertiesIterator.hasNext () )
+ {
+ String propertyKey = (String) propertiesIterator.next ();
+ storedProperties.setProperty ( propertyKey, properties.getProperty ( propertyKey ) );
+ }
+
+ OutputStream os = new FileOutputStream ( propertyFile );
+
+ try
+ {
+ storedProperties.store ( os, "" );
+
+ getLogger ().debug ( "Stored " + storedProperties.size () + " properties" );
+ }
+ finally
+ {
+ IOUtil.close ( os );
+ }
+ }
+}
Added: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java?rev=570611&view=auto
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java (added)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeRegistryManager.java Tue Aug 28 19:32:45 2007
@@ -0,0 +1,314 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.maven.archetype.common;
+
+import org.apache.maven.archetype.registry.ArchetypeRegistry;
+import org.apache.maven.archetype.registry.ArchetypeRepository;
+import org.apache.maven.archetype.registry.io.xpp3.ArchetypeRegistryXpp3Reader;
+import org.apache.maven.archetype.registry.io.xpp3.ArchetypeRegistryXpp3Writer;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @plexus.component
+ */
+public class DefaultArchetypeRegistryManager
+extends AbstractLogEnabled
+implements ArchetypeRegistryManager
+{
+ /**
+ * Used to create ArtifactRepository objects given the urls of the remote repositories.
+ *
+ * @plexus.requirement
+ */
+ private ArtifactRepositoryFactory artifactRepositoryFactory;
+
+ /**
+ * Determines whether the layout is legacy or not.
+ *
+ * @plexus.requirement roleHint="default"
+ */
+ private ArtifactRepositoryLayout defaultArtifactRepositoryLayout;
+
+ public List getArchetypeGroups ( File archetypeRegistryFile )
+ {
+ try
+ {
+ ArchetypeRegistry registry = readArchetypeRegistry ( archetypeRegistryFile );
+ return registry.getArchetypeGroups ();
+ }
+ catch ( IOException e )
+ {
+ getLogger ().warn ( "Can not read ~/m2/archetype.xml" );
+ return
+ Arrays.asList (
+ new String[] { "org.apache.maven.archetypes", "org.codehaus.mojo.archetypes" }
+ );
+ }
+ catch ( XmlPullParserException e )
+ {
+ getLogger ().warn ( "Can not read ~/m2/archetype.xml" );
+ return
+ Arrays.asList (
+ new String[] { "org.apache.maven.archetypes", "org.codehaus.mojo.archetypes" }
+ );
+ }
+ }
+
+ public List getFilteredExtensions (
+ String archetypeFilteredExtentions,
+ File archetypeRegistryFile
+ )
+ throws IOException
+ {
+ List filteredExtensions = new ArrayList ();
+
+ if ( StringUtils.isNotEmpty ( archetypeFilteredExtentions ) )
+ {
+ filteredExtensions.addAll (
+ Arrays.asList ( StringUtils.split ( archetypeFilteredExtentions, "," ) )
+ );
+ }
+
+ try
+ {
+ ArchetypeRegistry registry = readArchetypeRegistry ( archetypeRegistryFile );
+
+ filteredExtensions.addAll ( registry.getFilteredExtensions () );
+ }
+ catch ( IOException e )
+ {
+ getLogger ().warn ( "Can not read ~/m2/archetype.xml" );
+ }
+ catch ( XmlPullParserException e )
+ {
+ getLogger ().warn ( "Can not read ~/m2/archetype.xml" );
+ }
+
+ if ( filteredExtensions.isEmpty () )
+ {
+ filteredExtensions.addAll ( Constants.DEFAULT_FILTERED_EXTENSIONS );
+ }
+
+ return filteredExtensions;
+ }
+
+ public List getLanguages ( String archetypeLanguages, File archetypeRegistryFile )
+ throws IOException
+ {
+ List languages = new ArrayList ();
+
+ if ( StringUtils.isNotEmpty ( archetypeLanguages ) )
+ {
+ languages.addAll ( Arrays.asList ( StringUtils.split ( archetypeLanguages, "," ) ) );
+ }
+
+ try
+ {
+ ArchetypeRegistry registry = readArchetypeRegistry ( archetypeRegistryFile );
+
+ languages.addAll ( registry.getLanguages () );
+ }
+ catch ( IOException e )
+ {
+ getLogger ().warn ( "Can not read ~/m2/archetype.xml" );
+ }
+ catch ( XmlPullParserException e )
+ {
+ getLogger ().warn ( "Can not read ~/m2/archetype.xml" );
+ }
+
+ if ( languages.isEmpty () )
+ {
+ languages.addAll ( Constants.DEFAULT_LANGUAGES );
+ }
+
+ return languages;
+ }
+
+ public ArchetypeRegistry readArchetypeRegistry ( File archetypeRegistryFile )
+ throws IOException, FileNotFoundException, XmlPullParserException
+ {
+ ArchetypeRegistryXpp3Reader reader = new ArchetypeRegistryXpp3Reader ();
+ FileReader fileReader = new FileReader ( archetypeRegistryFile );
+
+ try
+ {
+ return reader.read ( fileReader );
+ }
+ finally
+ {
+ IOUtil.close ( fileReader );
+ }
+ }
+
+ public List getRepositories (
+ List pomRemoteRepositories,
+ String remoteRepositories,
+ File archetypeRegistryFile
+ )
+ throws IOException, XmlPullParserException
+ {
+ List archetypeRemoteRepositories = new ArrayList ( pomRemoteRepositories );
+
+ ArchetypeRegistry registry = readArchetypeRegistry ( archetypeRegistryFile );
+ if ( !registry.getArchetypeRepositories ().isEmpty () )
+ {
+ archetypeRemoteRepositories = new ArrayList ();
+
+ Iterator repositories = registry.getArchetypeRepositories ().iterator ();
+ while ( repositories.hasNext () )
+ {
+ ArchetypeRepository repository = (ArchetypeRepository) repositories.next ();
+
+ archetypeRemoteRepositories.add (
+ createRepository ( repository.getUrl (), repository.getId () )
+ );
+ }
+ }
+
+ if ( remoteRepositories != null )
+ {
+ archetypeRemoteRepositories = new ArrayList ();
+
+ String[] s = StringUtils.split ( remoteRepositories, "," );
+
+ for ( int i = 0; i < s.length; i++ )
+ {
+ archetypeRemoteRepositories.add ( createRepository ( s[i], "id" + i ) );
+ }
+ }
+
+ return archetypeRemoteRepositories;
+ }
+
+ public void writeArchetypeRegistry (
+ File archetypeRegistryFile,
+ ArchetypeRegistry archetypeRegistry
+ )
+ throws IOException
+ {
+ ArchetypeRegistryXpp3Writer writer = new ArchetypeRegistryXpp3Writer ();
+ FileWriter fileWriter = new FileWriter ( archetypeRegistryFile );
+
+ try
+ {
+ writer.write ( fileWriter, archetypeRegistry );
+ }
+ finally
+ {
+ IOUtil.close ( fileWriter );
+ }
+ }
+
+ /**
+ * Code stealed from MavenArchetypeMojo
+ * (org.apache.maven.plugins:maven-archetype-plugin:1.0-alpha4).
+ */
+ private ArtifactRepository createRepository ( String url, String repositoryId )
+ {
+ // snapshots vs releases
+ // offline = to turning the update policy off
+
+ // TODO: we'll need to allow finer grained creation of repositories but this will do for now
+
+ String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS;
+
+ String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+
+ ArtifactRepositoryPolicy snapshotsPolicy =
+ new ArtifactRepositoryPolicy ( true, updatePolicyFlag, checksumPolicyFlag );
+
+ ArtifactRepositoryPolicy releasesPolicy =
+ new ArtifactRepositoryPolicy ( true, updatePolicyFlag, checksumPolicyFlag );
+
+ return
+ artifactRepositoryFactory.createArtifactRepository (
+ repositoryId,
+ url,
+ defaultArtifactRepositoryLayout,
+ snapshotsPolicy,
+ releasesPolicy
+ );
+ }
+
+ public void addGroup(String group, File archetypeRegistryFile)
+ throws IOException, XmlPullParserException
+ {
+ ArchetypeRegistry registry;
+ try
+ {
+ registry = readArchetypeRegistry(archetypeRegistryFile);
+ }
+ catch (FileNotFoundException ex)
+ {
+ registry = getDefaultArchetypeRegistry();
+ }
+
+ if (registry.getArchetypeGroups().contains(group))
+ {
+ getLogger().debug("Group " + group + " already exists");
+ }
+ else
+ {
+ registry.addArchetypeGroup(group.trim());
+ getLogger().info("New group " + group + " added to registry");
+ }
+
+ writeArchetypeRegistry(archetypeRegistryFile, registry);
+ }
+
+ public ArchetypeRegistry getDefaultArchetypeRegistry()
+ {
+ ArchetypeRegistry registry = new ArchetypeRegistry ();
+
+ registry.addArchetypeGroup ( "org.apache.maven.archetypes" );
+ registry.addArchetypeGroup ( "org.codehaus.mojo.archetypes" );
+
+ registry.getLanguages ().addAll ( Constants.DEFAULT_LANGUAGES );
+ registry.getFilteredExtensions ().addAll ( Constants.DEFAULT_FILTERED_EXTENSIONS );
+
+ ArchetypeRepository archetypeRepository = new ArchetypeRepository ();
+ archetypeRepository.setId ( "central" );
+ archetypeRepository.setUrl ( "http://repo1.maven.org/maven2" );
+
+ registry.addArchetypeRepository(archetypeRepository);
+
+ return registry;
+ }
+}