Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 21716 invoked from network); 15 Mar 2007 21:51:23 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 15 Mar 2007 21:51:23 -0000 Received: (qmail 32697 invoked by uid 500); 15 Mar 2007 21:51:19 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 32616 invoked by uid 500); 15 Mar 2007 21:51:19 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 32481 invoked by uid 99); 15 Mar 2007 21:51:19 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 15 Mar 2007 14:51:18 -0700 X-ASF-Spam-Status: No, hits=-98.6 required=10.0 tests=ALL_TRUSTED,INFO_TLD,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 15 Mar 2007 14:51:02 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 891811A984E; Thu, 15 Mar 2007 14:50:42 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r518765 [5/7] - in /directory/sandbox/oersoy/rpm.factory.parent: ./ rpm.factory.archetype/ rpm.factory.archetype/.settings/ rpm.factory.archetype/src/ rpm.factory.archetype/src/main/ rpm.factory.archetype/src/main/resources/ rpm.factory.arc... Date: Thu, 15 Mar 2007 21:50:37 -0000 To: commits@directory.apache.org From: oersoy@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070315215042.891811A984E@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojo.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojo.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojo.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojo.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,501 @@ +package org.apache.maven.plugins.rpm.factory.mojo; + +/* + * Copyright 2001-2005 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. + */ + +import org.apache.commons.io.FileUtils; +import org.apache.commons.vfs.FileObject; +import org.apache.maven.plugin.logging.Log; + +import org.apache.maven.model.emf.metadata.v200.MetaData; +import org.apache.maven.model.emf.metadata.v200.MetadataV200Factory; +import org.apache.maven.model.emf.metadata.v200.Project; +import org.apache.maven.model.emf.pom.v400.Dependency; +import org.apache.maven.model.emf.pom.v400.License; +import org.apache.maven.model.emf.pom.v400.LicensesType; +import org.apache.maven.model.emf.pom.v400.Model; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.build.ArtifactIdToResourceMapBuilder; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.build.MetadataListBuilder; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.filter.DependencyFilter; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.initialize.DependencyInitializer; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.initialize.ProjectInitializer; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.initialize.ResourceSetInitializer; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.load.MetadataResourceLoad; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.load.PomLoad; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.transform.MetadataV1ToMetadataV2Transform; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.transform.Pom2SpecTransform; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.validate.LibrarySpecValidator; +import org.apache.maven.rpm.factory.model.spec.v100.LibrarySpecDescriptor; +import org.apache.maven.rpm.factory.spec.generators.LibrarySpecGenerator; +import org.apache.tuscany.model.emf.ecore2ecore.MappingRoot; +import org.apache.tuscany.model.emf.processor.ecore2ecore.impl.Ecore2EcoreProcessor; +import org.codehaus.plexus.util.cli.CommandLineException; +import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.codehaus.plexus.util.cli.Commandline; +import org.codehaus.plexus.util.cli.StreamConsumer; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * + * Goal that reads a maven-metadata.xml file and generates + * binary rpms for all the library artifacts listed in the file. + * + * @goal generate + * + * @phase generate-sources + * + * TODO - Write the pom that is included with the RPM so that it has the + * parent values set on it. + */ +public class RPMFactoryMojo + extends AbstractMojo + implements RPMFactoryMojoConstants +{ + /** @parameter default-value="${basedir} */ + private File baseDirectory; + + /** @parameter */ + private File repositoryBaseDirectory; + + /** @parameter */ + private File aggregatedMetadataTargetStorageDirectory; + + /** @parameter */ + private Boolean aggregatedMetadataPersisted; + + /** @parameter */ + private Boolean rpmGenerationEnabled; + + /** @parameter */ + private String rpmTopDirectoryPath; + + /** @parameter */ + private String rpmTmpDirectoryPath; + + /** @parameter */ + private String rpmBuildDirectoryPath; + + /** @parameter */ + private String rpmSpecsDirectoryPath; + + /** @parameter */ + private String rpmRpmsDirectoryPath; + + private MetadataV200Factory metadataV200Factory= MetadataV200Factory.eINSTANCE; + + public void execute() + throws MojoExecutionException + { + + //TODO Check that the directories are valid. Input parameter validation. + getLog().info( "========================================================== "); + getLog().info( "Repository Base Directory: " + repositoryBaseDirectory.toString() ); + getLog().info( "========================================================== \n"); + + getLog().info( "========================================================== "); + getLog().info( "Aggregated Metadata Storage Directory: " + + aggregatedMetadataTargetStorageDirectory.toString() ); + getLog().info( "========================================================== \n"); + + getLog().info( "========================================================== "); + getLog().info( "RPM Top Directory: " + rpmTopDirectoryPath ); + getLog().info( "========================================================== \n"); + + + getLog().info( "========================================================== "); + getLog().info( "Is Aggregate Meta Data Persisted: " + aggregatedMetadataPersisted.toString() ); + getLog().info( "========================================================== \n"); + + getLog().info( "========================================================== "); + getLog().info( "Is RPM Generation Enabled: " + rpmGenerationEnabled.toString() ); + getLog().info( "========================================================== \n"); + + + FileObject[] metadataFiles = + MetadataListBuilder.discoverMetadata(repositoryBaseDirectory); + + ResourceSet resourceSetV1 = + ResourceSetInitializer.getInitializedMetadataV100ResourceSet(); + + List resources = MetadataResourceLoad.getMetadataResources( + metadataFiles, + resourceSetV1); + + + + MappingRoot mappingRoot = MetadataV1ToMetadataV2Transform.createMetadataV1ToMetadataV2MappingRoot(); + + MetaData metadataV2 = metadataV200Factory.createMetaData(); + + EList projects = metadataV2.getProjects(); + + Iterator resourceIterator = resources.iterator(); + + while(resourceIterator.hasNext()) + { + Resource resource = resourceIterator.next(); + + EObject metadata = resource.getEObject(METADATA_FRAGMENT_PATH); + + EObject project = Ecore2EcoreProcessor.execute(metadata, mappingRoot); + + projects.add( (Project) project ); + } + + + //TODO Consider removing the whole thing + //We could just use the metadata files directly if we do not want to write the consolidated metadata + if (aggregatedMetadataPersisted) + { + ResourceSet resourceSetV2 = + ResourceSetInitializer. + getInitializedMetadataV200ResourceSet(); + + Resource resourceV2 = + resourceSetV2. + createResource( + URI.createFileURI( + aggregatedMetadataTargetStorageDirectory.getAbsolutePath() + + "/" + + MAVEN_REPOSITORY_METADATA_VERSION_2_FILE_NAME) ); + + resourceV2.getContents().add( metadataV2 ); + + try + { + aggregatedMetadataTargetStorageDirectory.mkdirs(); + resourceV2.save(null); + } + catch ( IOException e ) + { + throw new MojoExecutionException("Could not save aggregated metadata."); + } + } + + if (rpmGenerationEnabled) + { + File rpmBuildContainerDirectory = new File( + baseDirectory.getAbsolutePath(), + rpmTopDirectoryPath); + + File tmpDirectory = new File( + rpmBuildContainerDirectory.getAbsolutePath(), rpmTmpDirectoryPath); + + File buildDirectory = new File( + rpmBuildContainerDirectory.getAbsolutePath(), rpmBuildDirectoryPath); + + File specsDirectory = new File( + rpmBuildContainerDirectory.getAbsolutePath(), rpmSpecsDirectoryPath); + + File rpmsDirectory = new File( + rpmBuildContainerDirectory.getAbsolutePath(), rpmRpmsDirectoryPath); + + try { + FileUtils.deleteDirectory(rpmBuildContainerDirectory); + } catch (IOException e) + { + getLog().error("-----------------------------------------------------------\n"); + getLog().error("The root rpm build directory: " + rpmBuildContainerDirectory.getAbsolutePath() + " could not be deleted."); + getLog().error("-----------------------------------------------------------\n"); + throw new MojoExecutionException( + "The root rpm build directory: " + rpmBuildContainerDirectory.getAbsolutePath() + " could not be deleted."); + } + + rpmBuildContainerDirectory.mkdirs(); + tmpDirectory.mkdirs(); + buildDirectory.mkdirs(); + specsDirectory.mkdirs(); + rpmsDirectory.mkdirs(); + + Iterator projectIterator = projects.iterator(); + + MappingRoot model2LibrarySpecDescriptorMappingRoot = + Pom2SpecTransform.createPomV400ToSpecV100MappingRoot(); + + ResourceSet pomResourceSet = + ResourceSetInitializer.getInitializedPomV400ResourceSet(); + + Map artifactIdToPomResourceMap = + new HashMap(); + + while(projectIterator.hasNext()) + { + Project project = projectIterator.next(); + + String artifactId = project.getArtifactId(); + String groupId = project.getGroupId(); + String version = project.getVersion(); + + String pomResourcePath = PomLoad.computePomResourcePath( + repositoryBaseDirectory.getAbsolutePath(), + groupId, + artifactId, + version ); + + Resource pomResource = pomResourceSet.getResource( + URI.createFileURI(pomResourcePath), true); + + Model model = + ( Model ) pomResource.getEObject(POM_PROJECT_FRAGMENT_PATH); + + if (model.getParent() != null) + { + ArtifactIdToResourceMapBuilder.loadAncestors( + pomResourceSet, + pomResource, + artifactIdToPomResourceMap, + repositoryBaseDirectory ); + + ProjectInitializer.initializeProject( + model, + artifactIdToPomResourceMap ); + + + EList dependencies = DependencyInitializer.initializeDependencies( + pomResource, + artifactIdToPomResourceMap ); + + if ( dependencies != null ) + { + DependencyFilter.filterRequiredDependencies( dependencies ); + } + } + + LicensesType licensesType = model.getLicenses(); + + boolean licenseInPom = ( licensesType != null ); + + //If the pom does not have a license we don't rpm + if ( licenseInPom ) + { + EList licenses = licensesType.getLicense(); + License license = licenses.get(0); + String licenseName = license.getName(); + + LibrarySpecDescriptor librarySpecDescriptor = (LibrarySpecDescriptor) + Pom2SpecTransform.transform( + model, model2LibrarySpecDescriptorMappingRoot); + + String artifactContainerDirectoryPath = + PomLoad.computePomContainerDirectoryPath( + repositoryBaseDirectory.getAbsolutePath(), + groupId, + artifactId, + version ); + + librarySpecDescriptor.setLibraryDirectory( + artifactContainerDirectoryPath ); + + //TODO Update when ecore2ecoreprocessor is fixed. + librarySpecDescriptor.setLicense( licenseName ); + + /* + * Note that this also inserts values if the pom was missing values. + * + * TODO - Check the pom description to make sure it contains a value. + * I could just point users to the corresponding maven pom. + * + * TODO Also use the description for description and a brief summary + * generated summary for the summary + */ + boolean librarySpecDescriptorValid = LibrarySpecValidator.validate(librarySpecDescriptor); + + if (librarySpecDescriptorValid) + { + LibrarySpecGenerator librarySpecGenerator = + new LibrarySpecGenerator(); + + String result = + librarySpecGenerator.generate(librarySpecDescriptor); + + String specFileName = + model.getArtifactId() + + "-" + + model.getVersion() + + "." + + SPEC_RESOURCE_EXTENSION; + + File specFile = new File(specsDirectory.getAbsolutePath(), specFileName); + specFile.delete(); + + try { + FileWriter fileWriter = new FileWriter(specFile); + fileWriter.write(result); + fileWriter.close(); + } catch (IOException e) { + throw new MojoExecutionException("Could not write spec file to: "+ specFile.getAbsolutePath()); + } + + getLog().info("-----------------------------------------------------------\n"); + getLog().info("Spec File Written to: " + specFile.getAbsolutePath()); + getLog().info("-----------------------------------------------------------\n"); + + getLog().info("-----------------------------------------------------------\n"); + getLog().info("Starting rpmbuild."); + getLog().info("-----------------------------------------------------------\n"); + + Commandline commandLine = new Commandline(); + StreamConsumer stdout = new StdoutConsumer( getLog() ); + StreamConsumer stderr = new StderrConsumer( getLog() ); + + commandLine.setExecutable(RPMBUILD_COMMAND_STRING); + + commandLine.createArgument().setValue( "-bb"); + + commandLine.createArgument().setValue(RPMBUILD_ARGUMENT_TARGET_STRING); + commandLine.createArgument().setValue(librarySpecDescriptor.getBuildArchitecture()); + + commandLine.createArgument().setValue( RPMBUILD_ARGUMENT_DEFINE_STRING ); + commandLine.createArgument().setValue( RPMBUILD_ARGUMENT_TOP_DIR + rpmBuildContainerDirectory.getAbsolutePath() ); + + commandLine.createArgument().setValue( RPMBUILD_ARGUMENT_DEFINE_STRING ); + commandLine.createArgument().setValue( RPMBUILD_ARGUMENT_TMP_DIR + tmpDirectory.getAbsolutePath() ); + + commandLine.createArgument().setValue( RPMBUILD_ARGUMENT_DEFINE_STRING ); + commandLine.createArgument().setValue( RPMBUILD_ARGUMENT_RPMS_DIR + rpmsDirectory.getAbsolutePath() ); + + commandLine.createArgument().setValue( specFile.getAbsolutePath() ); + + try + { + int rpmBuildResult = CommandLineUtils.executeCommandLine( commandLine, stdout, stderr ); + if ( rpmBuildResult != 0 ) + { + throw new MojoExecutionException( "RPM build execution returned: \'" + result + "\'." ); + } + } + catch ( CommandLineException e ) + { + throw new MojoExecutionException( "Unable to build the RPM", e ); + } + } + + } + + } + + getLog().info("-----------------------------------------------------------\n"); + getLog().info("RPM Packaging Complete"); + getLog().info("-----------------------------------------------------------\n"); + + } + } + + //TODO Update these inner classes when switching to CommonsExec + /** + * Consumer to receive lines sent to stdout. The lines are logged + * as info. + */ + private class StdoutConsumer implements StreamConsumer + { + /** Logger to receive the lines. */ + private Log logger; + + /** + * Constructor. + * @param log The logger to receive the lines + */ + public StdoutConsumer( Log log ) + { + logger = log; + } + + /** + * Consume a line. + * @param string The line to consume + */ + public void consumeLine( String string ) + { + logger.info( string ); + } + } + + /** + * Consumer to receive lines sent to stderr. The lines are logged + * as warnings. + */ + private class StderrConsumer implements StreamConsumer + { + /** Logger to receive the lines. */ + private Log logger; + + /** + * Constructor. + * @param log The logger to receive the lines + */ + public StderrConsumer( Log log ) + { + logger = log; + } + + /** + * Consume a line. + * @param string The line to consume + */ + public void consumeLine( String string ) + { + logger.warn( string ); + } + } + + + + /* + public void createRPMDirectories() throws MojoExecutionException + { + File rpmBuildContainerDirectory = new File( + baseDirectory.getAbsolutePath(), + rpmTopDirectoryPath); + + File tmpDirectory = new File( + rpmBuildContainerDirectory.getAbsolutePath(), rpmTmpDirectoryPath); + + File specsDirectory = new File( + rpmBuildContainerDirectory.getAbsolutePath(), rpmSpecsDirectoryPath); + + File rpmsDirectory = new File( + rpmBuildContainerDirectory.getAbsolutePath(), rpmRpmsDirectoryPath); + + try { + FileUtils.deleteDirectory(rpmBuildContainerDirectory); + } catch (IOException e) { + getLog().error("-----------------------------------------------------------\n"); + getLog().error("The root rpm build directory: " + rpmBuildContainerDirectory.getAbsolutePath() + " could not be deleted."); + getLog().error("-----------------------------------------------------------\n"); + throw new MojoExecutionException( + "The root rpm build directory: " + rpmBuildContainerDirectory.getAbsolutePath() + " could not be deleted."); + } + + rpmBuildContainerDirectory.mkdirs(); + tmpDirectory.mkdirs(); + specsDirectory.mkdirs(); + rpmsDirectory.mkdirs(); + }*/ +} \ No newline at end of file Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoConstants.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoConstants.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoConstants.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoConstants.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,49 @@ + +package org.apache.maven.plugins.rpm.factory.mojo; + +/* + * Copyright 2001-2005 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. + */ + +public interface RPMFactoryMojoConstants +{ + String MAVEN_REPOSITORY_METADATA_VERSION_1_FILE_NAME = "maven-metadata.xml"; + String MAVEN_REPOSITORY_METADATA_VERSION_2_FILE_NAME = "maven-metadata-v200.xml"; + + String MAVEN_REPOSITORY_POM_EXTENSION = "pom"; + String XML_RESOURCE_EXTENSION = "xml"; + String SPEC_RESOURCE_EXTENSION = "spec"; + + String METADATA_FRAGMENT_PATH = "//@metadata"; + String POM_PROJECT_FRAGMENT_PATH = "//@project"; + String POM_DEPENDENCIES_FRAGMENT_PATH = "//@project/@dependencies"; + String POM_DEPENDENCY_MANAGEMENT_FRAGMENT_PATH = "//@project/@dependencyManagement"; + String POM_PARENT_FRAGMENT_PATH = "//@project/@parent"; + + String DEPENDENCY_SCOPE_TEST = "test"; + + String RPMBUILD_COMMAND_STRING = "rpmbuild"; + String RPMBUILD_ARGUMENT_TARGET_STRING = "--target"; + String RPMBUILD_ARGUMENT_DEFINE_STRING = "--define"; + String RPMBUILD_ARGUMENT_TOP_DIR = "_topdir"; + String RPMBUILD_ARGUMENT_TMP_DIR = "_tmpdir"; + String RPMBUILD_ARGUMENT_SOURCES_DIR = "_sourcedir"; + String RPMBUILD_ARGUMENT_BUILD_DIR = "_builddir"; + String RPMBUILD_ARGUMENT_RPMS_DIR = "_rpmdir"; + String RPMBUILD_ARGUMENT_SRPMS_DIR = "_srcrpmdir"; + + + +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoHelper.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoHelper.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoHelper.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/RPMFactoryMojoHelper.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,160 @@ + +package org.apache.maven.plugins.rpm.factory.mojo; + +/* + * Copyright 2001-2005 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. + */ + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.apache.commons.io.FileUtils; +import org.apache.maven.model.emf.metadata.v100.MetaData; +import org.apache.maven.model.emf.metadata.v100.MetadataV100Package; +import org.apache.maven.model.emf.metadata.v100.Versions; +import org.apache.maven.model.emf.metadata.v100.util.MetadataV100ResourceFactoryImpl; +import org.apache.maven.model.emf.metadata.v200.MetadataV200Package; +import org.apache.maven.model.emf.metadata.v200.util.MetadataV200ResourceFactoryImpl; +import org.apache.maven.plugin.MojoExecutionException; + + +public class RPMFactoryMojoHelper +implements RPMFactoryMojoConstants +{ + + + public static void generateRPM(MetaData metadata) + { + String artifactId = metadata.getArtifactId(); + String groupId = metadata.getGroupId(); + EList versions = metadata.getVersioning().getVersions().getVersion(); + + //Load the pom for the thing used to generate the spec file + + + + //generate the spec + + //run rpm on the spec + + //move the thing to the target directory + + + } + + +/* + public static void generateRecipes( + File recipeRootDirectory, + Recipes recipes) + throws MojoExecutionException + { + EList checkGroups = recipes.getRecipeGroups(); + + Iterator iterator = checkGroups.iterator(); + + while(iterator.hasNext()) + { + RecipeGroup recipeGroup = ( RecipeGroup ) iterator.next(); + + File recipeDirectory = new File(recipeRootDirectory, recipeGroup.getId()); + + try + { + FileUtils.deleteDirectory( recipeDirectory ); + } + catch ( IOException e ) + { + e.printStackTrace(); + throw new MojoExecutionException("TODO -Sexy Message"); + } + + recipeDirectory.mkdirs(); + + RecipeHTMLGenerator recipeHTMLGenerator + = new RecipeHTMLGenerator(); + + EList recipeEList = recipeGroup.getRecipes(); + Iterator recipeIterator = recipeEList.iterator(); + Recipe recipe = null; + + while (recipeIterator.hasNext()) + { + recipe = recipeIterator.next(); + generateRecipe( + recipe, + recipeHTMLGenerator, + recipeDirectory); + } + } + } +*/ + + /* + * TODO Consider catching NPE's from trying to access recipes that are non existant on the recipeMap + * This can occur when there's an invalid recipeReferenceId on a CheckItem. + * Also, I have to get the recipe both here and in the template. + * It would be sexier if I just had to get it in one place. + */ + /* + public static void generateRecipe( + Recipe recipe, + RecipeHTMLGenerator recipeHTMLGenerator, + File recipeDirectory) throws MojoExecutionException + { + String recipeString = recipeHTMLGenerator.generate( recipe ); + + File recipeFile = new File(recipeDirectory, recipe.getFileName()); + + recipeFile.delete(); + + try + { + FileWriter fileWriter = new FileWriter(recipeFile); + fileWriter.write(recipeString); + fileWriter.close(); + } catch (IOException e) + { + throw new MojoExecutionException("Could not write recipe file to: "+ recipeFile.getAbsolutePath()); + } + } + + public static void generateTOC( + Recipes recipes) throws MojoExecutionException + { + TOCGenerator tocGenerator = new TOCGenerator(); + String tocString = tocGenerator.generate(recipes); + File tocFile = new File(TOC_FILE_NAME); + tocFile.delete(); + try + { + FileWriter fileWriter = new FileWriter(tocFile); + fileWriter.write(tocString); + fileWriter.close(); + } catch (IOException e) + { + throw new MojoExecutionException("Could not write toc file to: " + tocFile.getAbsolutePath()); + } + }*/ +} \ No newline at end of file Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/AggregateMetadataBuilder.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/AggregateMetadataBuilder.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/AggregateMetadataBuilder.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/AggregateMetadataBuilder.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,52 @@ +package org.apache.maven.plugins.rpm.factory.mojo.helpers.build; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.vfs.FileObject; +import org.apache.commons.vfs.FileSystemException; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +public class AggregateMetadataBuilder { + + /** + * Builds a RepositoryMetadata Version 2 Model from a list of Repository Metadata Version 1 models + * + * @param m Metadata + * @param metadataPath path + * @return RepositoryMetadata if the parameters represent one; null if not + * @todo should we just be using the path information, and loading it later when it is needed? (for reporting, etc) + */ + + public static Resource createAggreatedMetadata( + List metadataResources, + ResourceSet resourceSet) throws FileSystemException + { + Iterator metadataIterator = metadataResources.iterator(); + while(metadataIterator.hasNext()) + { + Resource metadataResource = metadataIterator.next(); + EObject eObject = metadataResource.getEObject("//@metadata"); + eObject.eSet(EcorePackage.eINSTANCE.getENamedElement_Name(), "project"); + + + + //I need an ecore2ecore processor thing here. + + + //Add the project object to the metadata root of the new + //metadata resource. + + + +// resources.add(resource); + } + return null;//resources; + } + +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/ArtifactIdToResourceMapBuilder.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/ArtifactIdToResourceMapBuilder.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/ArtifactIdToResourceMapBuilder.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/ArtifactIdToResourceMapBuilder.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,71 @@ +package org.apache.maven.plugins.rpm.factory.mojo.helpers.build; + +import java.io.File; +import java.util.Map; + +import org.apache.maven.model.emf.pom.v400.Model; +import org.apache.maven.model.emf.pom.v400.Parent; +import org.apache.maven.plugins.rpm.factory.mojo.RPMFactoryMojoConstants; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.load.PomLoad; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +public class ArtifactIdToResourceMapBuilder implements RPMFactoryMojoConstants { + + /** + * Load pom ancestors. + * + * @param resourceSet the resource set used to load pom artifacts + * @param artifactIdToPomResourceMap the artifact id to pom resource map + * @param resource the pom resource + * @param repositoryBaseDirectory the repository base directory + * + * @return the map< string, resource> + */ + public static Map loadAncestors( + ResourceSet resourceSet, + Resource resource, + Map artifactIdToPomResourceMap, + File repositoryBaseDirectory) { + + Model model = (Model) resource.getEObject(POM_PROJECT_FRAGMENT_PATH); + Parent parent = model.getParent(); + + if (parent != null) + { + String artifactId = parent.getArtifactId(); + String groupId = parent.getGroupId(); + String version = parent.getVersion(); + + String parentResourcePath = + PomLoad.computePomResourcePath( + repositoryBaseDirectory.getAbsolutePath(), + groupId, + artifactId, + version); + + resource = resourceSet.getResource( + URI.createFileURI(parentResourcePath), true); + + artifactIdToPomResourceMap.put(artifactId, resource); + + model = (Model) resource.getEObject(POM_PROJECT_FRAGMENT_PATH); + parent = model.getParent(); + + if (parent != null) + { + loadAncestors( + resourceSet, + resource, + artifactIdToPomResourceMap, + repositoryBaseDirectory); + } + else + { + return artifactIdToPomResourceMap; + } + } + return artifactIdToPomResourceMap; + } +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/MetadataListBuilder.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/MetadataListBuilder.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/MetadataListBuilder.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/MetadataListBuilder.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,47 @@ +package org.apache.maven.plugins.rpm.factory.mojo.helpers.build; + +import java.io.File; + +import org.apache.commons.vfs.FileObject; +import org.apache.commons.vfs.FileSelectInfo; +import org.apache.commons.vfs.FileSelector; +import org.apache.commons.vfs.FileSystemException; +import org.apache.commons.vfs.VFS; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.rpm.factory.mojo.RPMFactoryMojoConstants; + +public class MetadataListBuilder implements RPMFactoryMojoConstants { + + /** + * Returns an array of FileObject that have the name "maven-metadata.xml". + * + * @param baseDir File pointing to the base directory. + * @return FileObject[] if maven-metadata.xml files are found. null otherwise. + * @throws MojoExecutionException + */ + + public static FileObject[] discoverMetadata(File baseDirectory) throws MojoExecutionException + { + FileSelector fileSelector = new FileSelector() + { + public boolean includeFile(FileSelectInfo fileInfo) throws Exception + { + FileObject fileObject = fileInfo.getFile(); + return fileObject.getName().getBaseName().contentEquals(MAVEN_REPOSITORY_METADATA_VERSION_1_FILE_NAME); + } + + public boolean traverseDescendents(FileSelectInfo fileInfo) throws Exception + { + return true; + } + }; + + try + { + return VFS.getManager().resolveFile(baseDirectory.getAbsolutePath()).findFiles(fileSelector); + } + catch ( FileSystemException e ) + { + throw new MojoExecutionException("An error ocurred while discovering metadata. TODO - More info as these are debugged + look at the VFS code"); } + } +} \ No newline at end of file Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomFileListBuilder.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomFileListBuilder.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomFileListBuilder.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomFileListBuilder.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,47 @@ + +package org.apache.maven.plugins.rpm.factory.mojo.helpers.build; + +import java.io.File; + +import org.apache.commons.vfs.FileObject; +import org.apache.commons.vfs.FileSelectInfo; +import org.apache.commons.vfs.FileSelector; +import org.apache.commons.vfs.FileSystemException; +import org.apache.commons.vfs.VFS; +import org.apache.maven.plugin.MojoExecutionException; + +public class PomFileListBuilder +{ + /** + * Returns an array of FileObject that have the name "*.pom". + * + * @param baseDir File pointing to the base directory. + * @return FileObject[] if *.pom files are found. null otherwise. + * @throws MojoExecutionException + */ + + public static FileObject[] discoverPomResources(File baseDirectory) throws MojoExecutionException + { + FileSelector fileSelector = new FileSelector() + { + public boolean includeFile(FileSelectInfo fileInfo) throws Exception + { + FileObject fileObject = fileInfo.getFile(); + return fileObject.getName().getBaseName().endsWith(".pom"); + } + + public boolean traverseDescendents(FileSelectInfo fileInfo) throws Exception + { + return true; + } + }; + + try + { + return VFS.getManager().resolveFile(baseDirectory.getAbsolutePath()).findFiles(fileSelector); + } + catch ( FileSystemException e ) + { + throw new MojoExecutionException("An error ocurred while discovering metadata. TODO - More info as these are debugged + look at the VFS code"); } + } +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomName2ResourceMapBuilder.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomName2ResourceMapBuilder.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomName2ResourceMapBuilder.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/build/PomName2ResourceMapBuilder.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,63 @@ +package org.apache.maven.plugins.rpm.factory.mojo.helpers.build; + +import java.io.File; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.maven.model.emf.metadata.v200.MetaData; +import org.apache.maven.model.emf.metadata.v200.Project; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.rpm.factory.mojo.RPMFactoryMojoConstants; +import org.apache.maven.plugins.rpm.factory.mojo.helpers.load.PomLoad; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +public class PomName2ResourceMapBuilder implements RPMFactoryMojoConstants { + + public static Map getPomName2ResourceMap( + File repositoryBaseDirectory, + MetaData metadataV2, + ResourceSet resourceSet) throws MojoExecutionException + { + Map pomName2ResourceMap = new HashMap(); + + EList projectEList = metadataV2.getProjects(); + + Iterator projectIterator = projectEList.iterator(); + + while (projectIterator.hasNext()) + { + Project project = projectIterator.next(); + + String artifactId = project.getArtifactId(); + String groupId = project.getGroupId(); + + EList versionEList = + project.getVersioning().getVersions().getVersion(); + + Iterator versionIterator = versionEList.iterator(); + + while (versionIterator.hasNext()) + { + String version = versionIterator.next(); + String pomResourcePath = PomLoad.computePomResourcePath( + repositoryBaseDirectory.getAbsolutePath(), + groupId, + artifactId, + version ); + + Resource pomResource = + resourceSet.getResource( URI.createFileURI( + pomResourcePath ), true ); + + String pomName = PomLoad.computePomName( artifactId, version ); + + pomName2ResourceMap.put( pomName, pomResource ); + } + } + return pomName2ResourceMap; + } +} \ No newline at end of file Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/DependencyFilter.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/DependencyFilter.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/DependencyFilter.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/DependencyFilter.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,27 @@ + +package org.apache.maven.plugins.rpm.factory.mojo.helpers.filter; + +import java.util.Iterator; + +import org.apache.maven.model.emf.pom.v400.Dependency; +import org.apache.maven.plugins.rpm.factory.mojo.RPMFactoryMojoConstants; +import org.eclipse.emf.common.util.EList; + +public class DependencyFilter implements RPMFactoryMojoConstants +{ + public static void filterRequiredDependencies(EList dependencies) + { + Iterator dependencyIterator = dependencies.iterator(); + while (dependencyIterator.hasNext()) + { + Dependency dependency = (Dependency) dependencyIterator.next(); + String scope = dependency.getScope(); + + if ( scope.equals(DEPENDENCY_SCOPE_TEST) ) + { + dependencies.remove(dependency); + } + } + + } +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/MetadataV1ResourceFilter.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/MetadataV1ResourceFilter.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/MetadataV1ResourceFilter.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/filter/MetadataV1ResourceFilter.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,16 @@ + +package org.apache.maven.plugins.rpm.factory.mojo.helpers.filter; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.resource.Resource; + +public class MetadataV1ResourceFilter +{ + public static void buildArtifactProcessingList(EList resources) + { + + + + } + +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/DependencyInitializer.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/DependencyInitializer.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/DependencyInitializer.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/DependencyInitializer.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,187 @@ + +package org.apache.maven.plugins.rpm.factory.mojo.helpers.initialize; + +import java.util.Iterator; +import java.util.Map; + +import org.apache.maven.model.emf.pom.v400.DependenciesType; +import org.apache.maven.model.emf.pom.v400.Dependency; +import org.apache.maven.model.emf.pom.v400.DependencyManagement; +import org.apache.maven.model.emf.pom.v400.Parent; +import org.apache.maven.plugins.rpm.factory.mojo.RPMFactoryMojoConstants; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.resource.Resource; + +/** + * The POM DependencyInitializer. + */ +public class DependencyInitializer implements RPMFactoryMojoConstants +{ + /** + * Initialize the pom's dependencies when maven dependency management is used. + * + * @param resource the resource + * @param artifactIdToPomResourceMap the artifact id to pom resource map + */ + public static EList initializeDependencies( + Resource resource, + Map artifactIdToPomResourceMap) + { + EList dependencies = null; + DependenciesType dependencyType = + (DependenciesType)resource.getEObject(POM_DEPENDENCIES_FRAGMENT_PATH); + + if (dependencyType != null) + { + dependencies = dependencyType.getDependency(); + + Iterator dependencyIterator = dependencies.iterator(); + + while(dependencyIterator.hasNext()) + { + Dependency dependency = (Dependency) dependencyIterator.next(); + + String dependencyArtifactId = dependency.getArtifactId(); + String dependencyScope = dependency.getScope(); + String dependencyVersion = dependency.getVersion(); + + Parent parent = (Parent) resource.getEObject(POM_PARENT_FRAGMENT_PATH); + + if ((dependencyVersion == null) && (parent != null )) + { + Dependency dependencyParent = findDependencyMatchInPomHiearchy( + parent, + artifactIdToPomResourceMap, + dependencyArtifactId); + + if (dependencyParent != null) + { + dependency.setVersion(dependencyParent.getVersion()); + + if (dependencyScope == null) + { + dependency.setScope(dependencyParent.getScope()); + } + } + } + } + } + return dependencies; + } + + + + /** + * Find dependency match in pom hiearchy. + * + * @param dependencyArtifactId the dependency artifact id + * @param artifactIdToPomResourceMap the artifact id to pom resource map + * @param parent the parent + * + * @return the dependency + */ + public static Dependency findDependencyMatchInPomHiearchy( + Parent parent, + Map artifactIdToPomResourceMap, + String dependencyArtifactId) + { + Resource parentResource = artifactIdToPomResourceMap.get( + parent.getArtifactId()); + + EList parentDependencies = + computeParentDependencies( parentResource, artifactIdToPomResourceMap ); + + Dependency dependency = + matchDependency(parentDependencies, dependencyArtifactId); + + if (dependency != null) + { + return dependency; + } + else + { + parent = (Parent) parentResource.getEObject( POM_PARENT_FRAGMENT_PATH ); + + if ( parent != null) + { + return findDependencyMatchInPomHiearchy( + parent, + artifactIdToPomResourceMap, + dependencyArtifactId); + } + else + { + return null; + } + } + } + + /** + * Finds a dependency management dependency that + * matches a artifactId of a child projects dependency. + * + * This is used when the version of a dependency is specified + * on in a parent project's dependencyManagement section. + * + * @param dependencyArtifactId the dependency artifact id + * @param dependencies the dependencies + * + * @return the dependency + * + * TODO Consider creating an index to speed this up. + * NOTES + * This way we would just use the dependencyArtifactId as a key + * We would thus have to create a dependencyArtifactId to Dependency + * map using all the dependencies in the dependency management section + * for the parent poms. This could save time depending on the fraction + * of projects that use dependency management. + * + * First do the the maven best practices plugins so that the ratio goes up + * then consider it. + */ + public static Dependency matchDependency( + EList dependencies, + String dependencyArtifactId) + { + Iterator dependencyIterator = + dependencies.iterator(); + + boolean versionFound = false; + + while(dependencyIterator.hasNext() && !versionFound) + { + Dependency parentDependency = (Dependency) dependencyIterator.next(); + if (parentDependency.getArtifactId() == dependencyArtifactId) + { + return parentDependency; + } + } + return null; + } + + /** + * Compute parent dependencies. + * + * @param parentResource the parent resource + * @param artifactIdToPomResourceMap the artifact id to pom resource map + * + * @return the list< dependency> of dependencies + */ + public static EList computeParentDependencies( + Resource parentResource, + Map artifactIdToPomResourceMap) + { + DependencyManagement dependencyManagement = + (DependencyManagement) + parentResource.getEObject(POM_DEPENDENCY_MANAGEMENT_FRAGMENT_PATH); + + DependenciesType parentDependencyType = + (DependenciesType) + dependencyManagement.getDependencies(); + + EList parentDependencies = + parentDependencyType.getDependency(); + + return parentDependencies; + } +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ProjectInitializer.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ProjectInitializer.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ProjectInitializer.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ProjectInitializer.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,129 @@ + +package org.apache.maven.plugins.rpm.factory.mojo.helpers.initialize; + +import java.util.Map; + +import org.apache.maven.model.emf.pom.v400.LicensesType; +import org.apache.maven.model.emf.pom.v400.Model; +import org.apache.maven.model.emf.pom.v400.Parent; +import org.apache.maven.model.emf.pom.v400.PomV400Package; +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.resource.Resource; + +// TODO: Auto-generated Javadoc +/** + * The Class ProjectInitializer. + */ +public class ProjectInitializer +{ + /** + * Initialize project. + * This looks for licenses, the project description, and the project url + * on the ancestor poms if they are not already contained in the target pom. + * + * The youngest ancestor is searched first. If the value is not found, then + * it's parent and so on. + * + * @param model the model + * @param artifactIdToPomResourceMap the artifact id to pom resource map + * + * TODO - If the project cannot be initialized properly, we could skip processing this project + * + * TODO - Note that if the project does not have a url we could use the group id. + * + * TODO - Analyze the maven repository and clean it up so that we don't have to hack + */ + public static void initializeProject( + Model model, + Map artifactIdToPomResourceMap) + { + PomV400Package pomV400Package = PomV400Package.eINSTANCE; + EAttribute descriptionEAttribute = pomV400Package.getModel_Description(); + EAttribute urlEAttribute = pomV400Package.getModel_Url(); + EReference licensesEReference = pomV400Package.getModel_Licenses(); + + //EAttribute licenseName = pomV400Package.getLicense_Name(); + + String description = model.getDescription(); + + if (description == null) + { + description = (String) lookupEStructuralFeatureValue( + descriptionEAttribute, + model, + artifactIdToPomResourceMap ); + + model.setDescription( description ); + } + + String url = model.getUrl(); + + if (url == null) + { + url = (String) lookupEStructuralFeatureValue( + urlEAttribute, + model, + artifactIdToPomResourceMap ); + + if (url == null) + { + + } + //TODO note that we are setting url to groupid if it is not set + model.setUrl( model.getGroupId() ); + } + + LicensesType licensesType = model.getLicenses(); + + if (licensesType == null) + { + licensesType = (LicensesType) lookupEStructuralFeatureValue( + licensesEReference, + model, + artifactIdToPomResourceMap ); + + model.setLicenses( licensesType ); + } + } + + /** + * Lookup E structural feature value. + * + * @param model the model + * @param artifactIdToPomResourceMap the artifact id to pom resource map + * @param eAttribute the e attribute + * + * @return the object + */ + public static Object lookupEStructuralFeatureValue( + EStructuralFeature eAttribute, + Model model, + Map artifactIdToPomResourceMap) + { + Parent parent = model.getParent(); + if (parent != null) + { + String artifactId = parent.getArtifactId(); + + Resource parentResource = + artifactIdToPomResourceMap.get( artifactId ); + + Model parentModel = ( Model ) parentResource.getEObject("//@project"); + Object value = model.eGet( eAttribute ); + if (value != null) + { + return value; + } + else if (model.getParent() != null) + { + return lookupEStructuralFeatureValue( + eAttribute, + parentModel, + artifactIdToPomResourceMap); + } + } + return null; + } +} \ No newline at end of file Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ResourceSetInitializer.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ResourceSetInitializer.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ResourceSetInitializer.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/initialize/ResourceSetInitializer.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,67 @@ +package org.apache.maven.plugins.rpm.factory.mojo.helpers.initialize; + +import org.apache.maven.model.emf.metadata.v100.MetadataV100Package; +import org.apache.maven.model.emf.metadata.v100.util.MetadataOptionalNamespaceResourceFactoryImpl; +import org.apache.maven.model.emf.metadata.v200.MetadataV200Package; +import org.apache.maven.model.emf.metadata.v200.util.MetadataV200ResourceFactoryImpl; +import org.apache.maven.model.emf.pom.v400.PomV400Package; +import org.apache.maven.model.emf.pom.v400.util.PomV400OptionalNamespaceResourceFactory; +import org.apache.maven.plugins.rpm.factory.mojo.RPMFactoryMojoConstants; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +public class ResourceSetInitializer implements RPMFactoryMojoConstants { + + public static ResourceSet getInitializedMetadataV100ResourceSet() + { + ResourceSet resourceSet = new ResourceSetImpl(); + + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put + (XML_RESOURCE_EXTENSION, + new MetadataOptionalNamespaceResourceFactoryImpl()); + + resourceSet.getPackageRegistry().put + ( + MetadataV100Package.eNS_URI, + MetadataV100Package.eINSTANCE + ); + return resourceSet; + } + + public static ResourceSet getInitializedMetadataV200ResourceSet() + { + ResourceSet resourceSet = new ResourceSetImpl(); + + + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put + (XML_RESOURCE_EXTENSION, + new MetadataV200ResourceFactoryImpl()); + + resourceSet.getPackageRegistry().put + ( + MetadataV200Package.eNS_URI, + MetadataV200Package.eINSTANCE + ); + + return resourceSet; + } + + public static ResourceSet getInitializedPomV400ResourceSet() + { + ResourceSet resourceSet = new ResourceSetImpl(); + + + resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put + (MAVEN_REPOSITORY_POM_EXTENSION, + new PomV400OptionalNamespaceResourceFactory()); + + resourceSet.getPackageRegistry().put + ( + PomV400Package.eNS_URI, + PomV400Package.eINSTANCE + ); + return resourceSet; + } + + +} Added: directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/load/MetadataResourceLoad.java URL: http://svn.apache.org/viewvc/directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/load/MetadataResourceLoad.java?view=auto&rev=518765 ============================================================================== --- directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/load/MetadataResourceLoad.java (added) +++ directory/sandbox/oersoy/rpm.factory.parent/rpm.factory.mojo/src/main/java/org/apache/maven/plugins/rpm/factory/mojo/helpers/load/MetadataResourceLoad.java Thu Mar 15 14:50:22 2007 @@ -0,0 +1,41 @@ +package org.apache.maven.plugins.rpm.factory.mojo.helpers.load; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.vfs.FileObject; +import org.apache.commons.vfs.FileSystemException; +import org.apache.maven.plugin.MojoExecutionException; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; + +public class MetadataResourceLoad { + + public static List getMetadataResources( + FileObject[] metadataFiles, + ResourceSet resourceSet) throws MojoExecutionException + { + List resources = new ArrayList(); + + for (int i = 0; i loadPomResources( + FileObject[] pomFiles, + ResourceSet resourceSet) throws MojoExecutionException + { + List resources = new ArrayList(); + + for (int i = 0; i + + + + org.apache.maven.lifecycle.mapping.LifecycleMapping + rpm.factory + org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping + + + org.apache.maven:rpm.factory.mojo:generate + org.codehaus.plexus:plexus-maven-plugin:app + org.apache.maven.plugins:maven-install-plugin:install + org.apache.maven.plugins:maven-deploy-plugin:deploy + + + + + \ No newline at end of file