Java tutorial
/******************************************************************************* * Copyright (c) 2015 Rapicorp, Inc. and others. * All rights reserved. This program and the accompanying materials * are 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 * * Contributors: * Rapicorp, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.tycho.packaging; import java.util.List; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.Logger; import org.eclipse.tycho.ArtifactKey; import org.eclipse.tycho.ArtifactType; import org.eclipse.tycho.artifacts.IllegalArtifactReferenceException; import org.eclipse.tycho.artifacts.TargetPlatform; import org.eclipse.tycho.model.IU; import de.pdark.decentxml.Element; @Component(role = IUXmlTransformer.class) public class IUXmlTransformer { private static final String MAVEN_ARTIFACT_ID = "maven-artifactId"; private static final String MAVEN_VERSION = "maven-version"; private static final String MAVEN_GROUP_ID = "maven-groupId"; @Requirement private Logger log; public IUXmlTransformer() { } public IUXmlTransformer(Logger log) { this.log = log; } //Replace the qualifier representing the version of the IU public void replaceSelfQualifiers(IU iu, String version, String qualifier) { iu.setVersion(version); replaceSelfVersionInArtifact(iu, version); replaceQualifierInCapabilities(iu.getSelfCapabilities(), qualifier); } private void replaceSelfVersionInArtifact(IU iu, String version) { Element artifact = iu.getSelfArtifact(); if (artifact == null) return; String currentVersion = artifact.getAttributeValue(IU.VERSION); if (hasQualifier(currentVersion) && iu.getId().equals(artifact.getAttributeValue(IU.ID))) artifact.setAttribute(IU.VERSION, version); } //Replace the qualifier found in the capabilities. public void replaceQualifierInCapabilities(List<Element> providedCapabilities, String qualifier) { if (providedCapabilities == null) return; for (Element capability : providedCapabilities) { String currentVersion = capability.getAttributeValue(IU.VERSION); if (hasQualifier(currentVersion)) capability.setAttribute(IU.VERSION, currentVersion.replaceAll("qualifier", qualifier)); } } private boolean hasQualifier(String v) { if (v == null) return false; return v.endsWith(".qualifier"); } public void replaceQualifierInRequirements(IU iu, TargetPlatform targetPlatform) throws MojoFailureException { List<Element> requirements = iu.getRequiredCapabilites(); if (requirements == null) return; for (Element req : requirements) { String range = req.getAttributeValue(IU.RANGE); if (range != null && range.endsWith(".qualifier") && IU.P2_IU_NAMESPACE.equals(req.getAttributeValue(IU.NAMESPACE))) { ArtifactKey artifact = resolveRequirementReference(targetPlatform, req.getAttributeValue(IU.NAME), range, req.toString()); req.setAttribute(IU.RANGE, artifact.getVersion()); } } } public void replaceZerosInRequirements(IU iu, TargetPlatform targetPlatform) throws MojoFailureException { List<Element> requirements = iu.getRequiredCapabilites(); if (requirements == null) return; for (Element req : requirements) { String range = req.getAttributeValue(IU.RANGE); if ("0.0.0".equals(range) && IU.P2_IU_NAMESPACE.equals(req.getAttributeValue(IU.NAMESPACE))) { ArtifactKey artifact = resolveRequirementReference(targetPlatform, req.getAttributeValue(IU.NAME), range, req.toString()); req.setAttribute(IU.RANGE, artifact.getVersion()); } } } private ArtifactKey resolveRequirementReference(TargetPlatform targetPlatform, String name, String version, String xml) throws MojoFailureException { try { return targetPlatform.resolveArtifact(ArtifactType.TYPE_INSTALLABLE_UNIT, name, version); } catch (IllegalArtifactReferenceException e) { throw new MojoFailureException("Can't resolve reference " + xml); } } public void injectMavenProperties(IU iu, MavenProject project) { List<Element> properties = iu.getProperties(); if (properties != null) { for (Element property : properties) { String key = property.getAttributeValue("name"); if (MAVEN_GROUP_ID.equals(key) || MAVEN_ARTIFACT_ID.equals(key) || MAVEN_VERSION.equals(key)) { property.getParent().removeNode(property); } } } iu.addProperty(MAVEN_GROUP_ID, project.getGroupId()); iu.addProperty(MAVEN_ARTIFACT_ID, project.getArtifactId()); iu.addProperty(MAVEN_VERSION, project.getVersion()); } public void addSelfCapability(IU iu) { if (iu.getSelfCapabilities().size() == 0) return; iu.addSelfCapability(); } }