File maven2-JPackageRepositoryLayout.java of Package maven2
package org.apache.maven.artifact.repository.layout;
/*
* 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.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
/**
* Repository layout for jpackage based repositories.
* This class resolves items for jpp style repos (i.e things located in
* /usr/share/java).
*/
public class JPackageRepositoryLayout
implements ArtifactRepositoryLayout
{
private static Hashtable jppArtifactMap;
private static final char GROUP_SEPARATOR = '.';
private static final char PATH_SEPARATOR = '/';
public String pathOf( Artifact artifact )
{
ArtifactHandler artifactHandler = artifact.getArtifactHandler();
StringBuffer path = new StringBuffer();
String artifactId = artifact.getArtifactId();
String groupId = artifact.getGroupId();
String version = artifact.getVersion();
if (!groupId.startsWith("JPP")) {
MavenJPackageDepmap map = MavenJPackageDepmap.getInstance();
Hashtable newInfo = map.getMappedInfo(groupId, artifactId, version);
groupId = (String) newInfo.get("group");
artifactId = (String) newInfo.get("artifact");
}
if (artifactHandler.getPackaging().equals("pom")) {
path = getPOMPath(groupId, artifactId);
} else if (artifactHandler.getPackaging().equals("signature")) {
path.append( groupId ).append( '/' );
path.append( artifactId ).append( ".signature" );
} else {
path.append( groupId ).append( '/' );
path.append( artifactId ).append( ".jar" );
}
return path.toString();
}
private StringBuffer getPOMPath(String groupId, String artifactId) {
StringBuffer path = new StringBuffer();
String fName = groupId.replace(PATH_SEPARATOR, GROUP_SEPARATOR) + "-" + artifactId + ".pom";
path.append(System.getProperty("maven2.jpp.pom.path", "JPP/maven2/poms")).append("/").append(fName);
java.io.File f;
// NOTE: We are returning default_poms/ as the path for this pom
// even though it may not exist there. This may cause an error,
// but that is fine because if the pom is not there, there is
// a serious problem anyways..
f = new java.io.File(System.getProperty("maven2.jpp.default.repo", "/usr/share/maven2/repository") + "/" + path.toString());
//System.err.println("Checking path " + f.getAbsolutePath() + " for the pom");
if (!f.exists()) {
path = new StringBuffer();
path.append(System.getProperty("maven2.jpp.default.pom.path", "JPP/maven2/default_poms")).append("/").append(fName);
}
return path;
}
public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
{
return pathOfRepositoryMetadata( metadata, metadata.getLocalFilename( repository ) );
}
private String pathOfRepositoryMetadata( ArtifactMetadata metadata, String filename )
{
StringBuffer path = new StringBuffer();
if (filename.substring(filename.length()-4).equals(".pom")) {
path = getPOMPath(metadata.getGroupId(), metadata.getArtifactId());
} else {
// FIXME: If it gets here, something other than a pom was requested.. where are those things located?
path.append(System.getProperty("maven2.jpp.pom.path", "maven2/poms")).append("/").append(filename);
}
return path.toString();
}
public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
{
return pathOfRepositoryMetadata( metadata, metadata.getRemoteFilename() );
}
}