1 /** 2 * 3 * Copyright 2005 The Apache Software Foundation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.geronimo.deployment; 18 19 import org.apache.geronimo.kernel.repository.Artifact; 20 import org.apache.geronimo.kernel.repository.Version; 21 import org.apache.geronimo.kernel.repository.Environment; 22 23 /** 24 * A utility class to flesh out any incomplete Module IDs (formerly known as 25 * config IDs) encountered during the course of a deployment. For example, 26 * an EAR may have a module ID with only an artifactId, and contain a web 27 * app with no Geronimo plan and an EJB JAR with a module ID with no version. 28 * 29 * @version $Rev: 410741 $ $Date: 2006-05-31 21:35:48 -0700 (Wed, 31 May 2006) $ 30 */ 31 public class ModuleIDBuilder { 32 private Version defaultVersion; 33 private String defaultGroup; 34 35 public ModuleIDBuilder() { 36 defaultVersion = new Version(Long.toString(System.currentTimeMillis())); 37 defaultGroup = Artifact.DEFAULT_GROUP_ID; 38 } 39 40 /** 41 * If an EAR is going to pass this module ID builder to its children, it 42 * can use this to set the default groupId to be its own. 43 */ 44 public void setDefaultGroup(String defaultGroup) { 45 this.defaultGroup = defaultGroup; 46 } 47 48 49 /** 50 * If an EAR is going to pass this module ID builder to its children, it 51 * can use this to set the default version to be its own. 52 */ 53 public void setDefaultVersion(Version defaultVersion) { 54 this.defaultVersion = defaultVersion; 55 } 56 57 /** 58 * Translates the argument Artifact to a fully-resolved Artifact, which is 59 * returned. If the argument was fully-resolved to begin with it is 60 * returned as is. Otherwise, a new Artifact is returned with any missing 61 * values populated. 62 * 63 * @param argument The artifact to review 64 * @param defaultType The type to use if the artifact to review has no 65 * type specified 66 * 67 * @return A fully resolved Artifact 68 * 69 * @throws IllegalArgumentException Occurs when the argument artifact does 70 * not have an artifactId 71 */ 72 public Artifact resolve(Artifact argument, String defaultType) { 73 if(argument.isResolved()) { 74 return argument; 75 } 76 if(argument.getArtifactId() == null || argument.getArtifactId().equals("")) { 77 throw new IllegalArgumentException("Incoming Artifact must have an ArtifactID (not "+argument+")"); 78 } 79 return new Artifact(argument.getGroupId() == null || argument.getGroupId().equals("") ? defaultGroup : argument.getGroupId(), 80 argument.getArtifactId(), 81 argument.getVersion() == null ? defaultVersion : argument.getVersion(), 82 argument.getType() == null || argument.getType().equals("") ? defaultType : argument.getType()); 83 } 84 85 /** 86 * Creates a new artifact using entirely default values. 87 * 88 * @param defaultArtifact The artifactId to use for the new Artifact 89 * @param defaultType The type to use for the new Artifact 90 */ 91 public Artifact createDefaultArtifact(String defaultArtifact, String defaultType) { 92 return new Artifact(defaultGroup, defaultArtifact, defaultVersion, defaultType); 93 } 94 95 /** 96 * Guarantees that the argument Environment will have a present and fully 97 * qualified module ID when this method returns. If the Environment is 98 * missing a module ID, or has a partial module ID (isResolved() == false) 99 * then this method will fill in any missing values. If the module ID is 100 * present and resolved, then this method does nothing. 101 * 102 * @param environment The Environment to check and populate 103 * @param defaultArtifactId The artifactId to use if the Envrionment does 104 * not have a module ID at all 105 * @param defaultType The type to use if the Environment is lacking 106 * a module ID or the module ID is lacking a type 107 */ 108 public void resolve(Environment environment, String defaultArtifactId, String defaultType) { 109 if(environment.getConfigId() == null) { 110 environment.setConfigId(resolve(new Artifact(null, defaultArtifactId, (Version)null, defaultType), defaultType)); 111 } else if(!environment.getConfigId().isResolved()) { 112 environment.setConfigId(resolve(environment.getConfigId(), defaultType)); 113 } 114 } 115 }