001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 package org.apache.geronimo.mavenplugins.car; 021 022 import java.io.File; 023 import java.util.SortedSet; 024 import java.util.TreeSet; 025 import java.util.Iterator; 026 027 import org.apache.geronimo.system.repository.Maven2Repository; 028 import org.apache.geronimo.kernel.repository.Artifact; 029 import org.apache.geronimo.kernel.repository.Version; 030 import org.apache.geronimo.gbean.GBeanInfo; 031 import org.apache.geronimo.gbean.GBeanInfoBuilder; 032 033 import org.codehaus.mojo.pluginsupport.dependency.DependencyTree; 034 035 /** 036 * Helps adapt Geronimo repositories to Maven repositories for packaging building. 037 * 038 * @version $Rev: 524717 $ $Date: 2007-04-01 23:39:19 -0400 (Sun, 01 Apr 2007) $ 039 */ 040 public class Maven2RepositoryAdapter 041 extends Maven2Repository 042 { 043 private ArtifactLookup lookup; 044 045 private DependencyTree dependencyTree; 046 047 public Maven2RepositoryAdapter(DependencyTree dependencyTree, final ArtifactLookup lookup) { 048 super(lookup.getBasedir()); 049 this.dependencyTree = dependencyTree; 050 this.lookup = lookup; 051 } 052 053 public File getLocation(final Artifact artifact) { 054 assert artifact != null; 055 056 return lookup.getLocation(artifact); 057 } 058 059 public SortedSet list() { 060 TreeSet list = new TreeSet(); 061 listInternal(list, dependencyTree.getRootNode(), null, null, null, null); 062 return list; 063 } 064 065 public SortedSet list(Artifact query) { 066 TreeSet list = new TreeSet(); 067 listInternal(list, dependencyTree.getRootNode(), query.getGroupId(), query.getArtifactId(), query.getVersion(), query.getType()); 068 return list; 069 } 070 071 private void listInternal(TreeSet list, DependencyTree.Node node, String groupId, String artifactId, Version version, String type) { 072 if (matches(node.getArtifact(), groupId, artifactId, version, type)) { 073 list.add(mavenToGeronimoArtifact(node.getArtifact())); 074 } 075 for (Iterator iterator = node.getChildren().iterator(); iterator.hasNext();) { 076 DependencyTree.Node childNode = (DependencyTree.Node) iterator.next(); 077 listInternal(list, childNode, groupId, artifactId, version, type); 078 } 079 } 080 081 private boolean matches(org.apache.maven.artifact.Artifact artifact, String groupId, String artifactId, Version version, String type) { 082 return (groupId == null || artifact.getGroupId().equals(groupId)) 083 && (artifactId == null || artifact.getArtifactId().equals(artifactId)) 084 && (version == null || artifact.getVersion().equals(version.toString())) 085 && (type == null || artifact.getType().equals(type)); 086 } 087 088 protected org.apache.geronimo.kernel.repository.Artifact mavenToGeronimoArtifact(final org.apache.maven.artifact.Artifact artifact) { 089 assert artifact != null; 090 091 return new org.apache.geronimo.kernel.repository.Artifact(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType()); 092 } 093 094 // 095 // ArtifactLookup 096 // 097 098 public static interface ArtifactLookup 099 { 100 File getLocation(Artifact artifact); 101 102 File getBasedir(); 103 } 104 105 // 106 // GBean 107 // 108 109 public static final GBeanInfo GBEAN_INFO; 110 111 static { 112 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(Maven2RepositoryAdapter.class, "Repository"); 113 infoFactory.addAttribute("lookup", ArtifactLookup.class, true); 114 infoFactory.addAttribute("dependencies", DependencyTree.class, true); 115 infoFactory.setConstructor(new String[]{"dependencies", "lookup" }); 116 GBEAN_INFO = infoFactory.getBeanInfo(); 117 } 118 119 public static GBeanInfo getGBeanInfo() { 120 return GBEAN_INFO; 121 } 122 }