Author: mickael_istria
Date: 2012-10-05 05:44:49 -0400 (Fri, 05 Oct 2012)
New Revision: 44335
Added:
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/MergeTargetsMojo.java
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/TargetToRepoMojo.java
trunk/build/tycho-plugins/target-platform-utils/src/test/
trunk/build/tycho-plugins/target-platform-utils/src/test/java/
trunk/build/tycho-plugins/target-platform-utils/src/test/java/org/
trunk/build/tycho-plugins/target-platform-utils/src/test/java/org/jboss/
trunk/build/tycho-plugins/target-platform-utils/src/test/java/org/jboss/tools/
trunk/build/tycho-plugins/target-platform-utils/src/test/java/org/jboss/tools/tycho/
trunk/build/tycho-plugins/target-platform-utils/src/test/java/org/jboss/tools/tycho/targets/
Modified:
trunk/build/tycho-plugins/pom.xml
trunk/build/tycho-plugins/target-platform-utils/pom.xml
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/FlattenTargetMojo.java
Log:
New Cool mojos for target-platform manipulation:
* merge target files
* mirror target file as p2 repo (buggy)
Modified: trunk/build/tycho-plugins/pom.xml
===================================================================
--- trunk/build/tycho-plugins/pom.xml 2012-10-05 09:10:07 UTC (rev 44334)
+++ trunk/build/tycho-plugins/pom.xml 2012-10-05 09:44:49 UTC (rev 44335)
@@ -26,12 +26,26 @@
<compilerVersion>1.5</compilerVersion>
<target>1.5</target>
<source>1.5</source>
- </configuration>
+ </configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
+ <repositories>
+ <repository>
+ <id>tycho-snapshots</id>
+ <
url>https://oss.sonatype.org/content/groups/public/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+
<!-- To deploy to Nexus -->
<!-- Don't change "id" since it should match credentials entry in
$M2_REPO/settings.xml -->
<distributionManagement>
Modified: trunk/build/tycho-plugins/target-platform-utils/pom.xml
===================================================================
--- trunk/build/tycho-plugins/target-platform-utils/pom.xml 2012-10-05 09:10:07 UTC (rev
44334)
+++ trunk/build/tycho-plugins/target-platform-utils/pom.xml 2012-10-05 09:44:49 UTC (rev
44335)
@@ -6,6 +6,7 @@
<groupId>org.jboss.tools</groupId>
<artifactId>tycho-plugins</artifactId>
<version>0.0.1-SNAPSHOT</version>
+ <relativePath>..</relativePath>
</parent>
<groupId>org.jboss.tools.tycho-plugins</groupId>
<artifactId>target-platform-utils</artifactId>
@@ -32,13 +33,24 @@
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-facade</artifactId>
- <version>0.15.0</version>
+ <version>0.16.0-SNAPSHOT</version>
</dependency>
<dependency>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-p2-publisher-plugin</artifactId>
+ <version>0.16.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>3.8.1</version>
+ <version>4.7</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-testing</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified:
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/FlattenTargetMojo.java
===================================================================
---
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/FlattenTargetMojo.java 2012-10-05
09:10:07 UTC (rev 44334)
+++
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/FlattenTargetMojo.java 2012-10-05
09:44:49 UTC (rev 44335)
@@ -95,7 +95,7 @@
if (!this.sourceTargetArtifact.isCorrectlySet()) {
throw new MojoExecutionException("'sourceTargetArtifact' must
define groupId, artifactId and version");
}
- getLog().info("Downloading " + sourceTargetArtifact.toString());
+ getLog().debug("Downloading " + sourceTargetArtifact.toString());
Artifact artifact =
this.repositorySystem.createArtifactWithClassifier(this.sourceTargetArtifact.getGroupId(),
this.sourceTargetArtifact.getArtifactId(), this.sourceTargetArtifact.getVersion(),
"target",
this.sourceTargetArtifact.getArtifactId());
ArtifactResolutionRequest request = new ArtifactResolutionRequest();
Added:
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/MergeTargetsMojo.java
===================================================================
---
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/MergeTargetsMojo.java
(rev 0)
+++
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/MergeTargetsMojo.java 2012-10-05
09:44:49 UTC (rev 44335)
@@ -0,0 +1,129 @@
+package org.jboss.tools.tycho.targets;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+/**
+ * Creates a single platform which merges locations from all platforms
+ *
+ * @author mistria
+ * @goal merge-targets
+ */
+public class MergeTargetsMojo extends AbstractMojo {
+
+
+ /**
+ * @parameter default-value="${project}"
+ * @readonly
+ */
+ private MavenProject project;
+ /**
+ * @parameter expression="${session}"
+ * @readonly
+ */
+ private MavenSession session;
+
+ /**
+ * @component
+ */
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ /**
+ * Location of the output file.
+ * @parameter
expression="${project.build.directory}/${project.artifactId}.target"
+ * @required
+ */
+ private File outputFile;
+
+ /**
+ * Target to transform (as a file)
+ * @parameter
+ */
+ private List<File> sourceTargetFiles;
+
+ /**
+ * @parameter
+ */
+ private List<TargetArtifact> sourceTargetArtifacts;
+
+ public void execute() throws MojoExecutionException {
+ if (this.sourceTargetFiles == null) {
+ this.sourceTargetFiles = new ArrayList<File>();
+ }
+ if (!this.outputFile.getParentFile().isDirectory()) {
+ this.outputFile.getParentFile().mkdirs();
+ }
+
+ if (this.sourceTargetArtifacts != null) {
+ for (TargetArtifact sourceTargetArtifact : sourceTargetArtifacts) {
+ if (!sourceTargetArtifact.isCorrectlySet()) {
+ throw new MojoExecutionException("'sourceTargetArtifact' must
define groupId, artifactId and version");
+ }
+ getLog().debug("Downloading " + sourceTargetArtifact.toString());
+ Artifact artifact =
this.repositorySystem.createArtifactWithClassifier(sourceTargetArtifact.getGroupId(),
sourceTargetArtifact.getArtifactId(), sourceTargetArtifact.getVersion(),
"target",
+ sourceTargetArtifact.getArtifactId());
+ ArtifactResolutionRequest request = new ArtifactResolutionRequest();
+ request.setArtifact(artifact);
+ request.setLocalRepository(this.session.getLocalRepository());
+
request.setRemoteRepositories(this.project.getRemoteArtifactRepositories());
+ this.repositorySystem.resolve(request);
+
+ if (!artifact.isResolved()) {
+ throw new RuntimeException("Could not resolve target platform
specification artifact " + artifact);
+ }
+
+ this.sourceTargetFiles.add(artifact.getFile());
+ }
+ }
+
+ if (this.sourceTargetFiles.size() <= 1) {
+ throw new MojoExecutionException("Please provide at least 2 files to
merge");
+ }
+
+ try {
+ DocumentBuilder docBuilder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document targetDoc = docBuilder.parse(this.sourceTargetFiles.get(0));
+ Element targetElement = (Element)
((Element)targetDoc.getElementsByTagName("target").item(0)).getElementsByTagName("locations").item(0);
+
+ for (int i = 1; i < this.sourceTargetFiles.size(); i++) {
+ Document otherTargetDoc = docBuilder.parse(this.sourceTargetFiles.get(i));
+ Element otherLocations = (Element)
((Element)otherTargetDoc.getElementsByTagName("target").item(0)).getElementsByTagName("locations").item(0);
+ NodeList children = otherLocations.getChildNodes();
+ for (int j = 0; j < children.getLength(); j++) {
+ targetElement.appendChild(targetDoc.importNode(children.item(j), true));
+ }
+ }
+
+ //write the content into xml file
+ Transformer transformer = TransformerFactory.newInstance().newTransformer();
+ transformer.setOutputProperty(OutputKeys.INDENT, Boolean.TRUE.toString());
+ DOMSource source = new DOMSource(targetDoc);
+ StreamResult result = new StreamResult(this.outputFile);
+ transformer.transform(source, result);
+ } catch (Exception ex) {
+ throw new MojoExecutionException("An error happened while dealing with some
XML...", ex);
+ }
+ }
+}
Property changes on:
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/MergeTargetsMojo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/TargetToRepoMojo.java
===================================================================
---
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/TargetToRepoMojo.java
(rev 0)
+++
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/TargetToRepoMojo.java 2012-10-05
09:44:49 UTC (rev 44335)
@@ -0,0 +1,119 @@
+/**
+ * Copyright (c) 2012, Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributor:
+ * Mickael Istria (Red Hat, Inc.) - initial API and implementation
+ */
+package org.jboss.tools.tycho.targets;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.eclipse.sisu.equinox.EquinoxServiceFactory;
+import org.eclipse.tycho.BuildOutputDirectory;
+import org.eclipse.tycho.p2.resolver.TargetDefinitionFile;
+import org.eclipse.tycho.p2.target.facade.TargetDefinition.InstallableUnitLocation;
+import org.eclipse.tycho.p2.target.facade.TargetDefinition.Location;
+import org.eclipse.tycho.p2.target.facade.TargetDefinition.Repository;
+import org.eclipse.tycho.p2.target.facade.TargetDefinition.Unit;
+import org.eclipse.tycho.p2.tools.DestinationRepositoryDescriptor;
+import org.eclipse.tycho.p2.tools.RepositoryReferences;
+import org.eclipse.tycho.p2.tools.mirroring.facade.IUDescription;
+import org.eclipse.tycho.p2.tools.mirroring.facade.MirrorApplicationService;
+import org.eclipse.tycho.p2.tools.mirroring.facade.MirrorOptions;
+
+/**
+ * Mirrors a target file as a p2 repo. Suitable for sharing/caching target/dependency
sites.
+ *
+ * @author mistria
+ * @goal mirror-target-to-repo
+ */
+public class TargetToRepoMojo extends AbstractMojo {
+
+ /**
+ * @parameter default-value="${project}"
+ * @readonly
+ */
+ private MavenProject project;
+ /**
+ * @parameter expression="${session}"
+ * @readonly
+ */
+ private MavenSession session;
+
+ /**
+ * @parameter expression="${project.artifactId}.target"
+ */
+ private File targetFile;
+
+ /**
+ * @parameter
expression="${project.build.directory}/${project.artifactId}.target.repo"
+ */
+ private File targetRepository;
+
+ /** @component */
+ private EquinoxServiceFactory p2;
+
+ public void execute() throws MojoExecutionException, MojoFailureException {
+ try {
+ if (!this.targetFile.isFile()) {
+ throw new MojoExecutionException("Specified 'targetFile' (value: "
+ targetFile + ") is not a valid file");
+ }
+ this.targetRepository.mkdirs();
+
+ final MirrorApplicationService mirrorService =
p2.getService(MirrorApplicationService.class);
+
+ TargetDefinitionFile target = TargetDefinitionFile.read(targetFile);
+ final RepositoryReferences sourceDescriptor = new RepositoryReferences();
+ for (final Location loc : target.getLocations()) {
+ if (loc instanceof InstallableUnitLocation) {
+ for (Repository repo : ((InstallableUnitLocation)loc).getRepositories()) {
+ sourceDescriptor.addMetadataRepository(repo.getLocation());
+ sourceDescriptor.addArtifactRepository(repo.getLocation());
+ }
+ }
+ }
+
+ final DestinationRepositoryDescriptor destinationDescriptor = new
DestinationRepositoryDescriptor(this.targetRepository, this.targetFile.getName(), true,
false, true);
+
+ mirrorService.mirrorStandalone(sourceDescriptor, destinationDescriptor,
createIUDescriptions(target), createMirrorOptions(), new
BuildOutputDirectory(this.project.getBuild().getOutputDirectory()));
+ } catch (Exception ex) {
+ throw new MojoExecutionException("Internal error", ex);
+ }
+ }
+
+ private static Collection<IUDescription>
createIUDescriptions(TargetDefinitionFile target) {
+ List<IUDescription> result = new ArrayList<IUDescription>();
+ for (final Location loc : target.getLocations()) {
+ if (loc instanceof InstallableUnitLocation) {
+ for (Unit unit : ((InstallableUnitLocation)loc).getUnits()) {
+ result.add(new IUDescription(unit.getId(), unit.getVersion()));
+ }
+ }
+ }
+ return result;
+ }
+
+ private static MirrorOptions createMirrorOptions() {
+ MirrorOptions options = new MirrorOptions();
+ options.setFollowOnlyFilteredRequirements(false);
+ options.setFollowStrictOnly(true);
+ options.setIncludeFeatures(true);
+ options.setIncludeNonGreedy(true);
+ options.setIncludeOptional(true);
+ options.setLatestVersionOnly(false);
+ return options;
+ }
+
+}
Property changes on:
trunk/build/tycho-plugins/target-platform-utils/src/main/java/org/jboss/tools/tycho/targets/TargetToRepoMojo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain