1 /* 2 * Copyright 2012 smartics, Kronseder & Reiner GmbH 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package de.smartics.ci.config.load; 17 18 import java.util.ArrayList; 19 import java.util.Iterator; 20 import java.util.List; 21 22 import de.smartics.ci.config.maven.MavenConfig; 23 import de.smartics.util.lang.Arguments; 24 import de.smartics.util.lang.BlankArgumentException; 25 import de.smartics.util.lang.NullArgumentException; 26 27 /** 28 * Allows to iterate over configurations. 29 */ 30 public final class LoaderPlan implements Iterable<String> 31 { 32 // ********************************* Fields ********************************* 33 34 // --- constants ------------------------------------------------------------ 35 36 // --- members -------------------------------------------------------------- 37 38 /** 39 * The information from the Maven project configuration. The Maven information 40 * is applied first and may be overridden by the configuration list. 41 */ 42 private final MavenConfig mavenConfig; 43 44 /** 45 * The identifier of the loader plan. 46 */ 47 private final String id; 48 49 /** 50 * The names of configurations to find at a location managed by a location 51 * manager. 52 */ 53 private final List<String> configurationNames = new ArrayList<String>(); 54 55 // ****************************** Initializer ******************************* 56 57 // ****************************** Constructors ****************************** 58 59 /** 60 * Default constructor. 61 * 62 * @param id the identifier of the loader plan. 63 * @param mavenConfig the information from the Maven project configuration. 64 * @throws BlankArgumentException if {@code id} is blank. 65 * @throws NullArgumentException if {@code mavenConfig} is <code>null</code>. 66 */ 67 public LoaderPlan(final String id, final MavenConfig mavenConfig) 68 throws BlankArgumentException, NullArgumentException 69 { 70 Arguments.checkNotBlank("id", id); 71 Arguments.checkNotNull("mavenConfig", mavenConfig); 72 73 this.id = id; 74 this.mavenConfig = mavenConfig; 75 } 76 77 // ****************************** Inner Classes ***************************** 78 79 // ********************************* Methods ******************************** 80 81 // --- init ----------------------------------------------------------------- 82 83 // --- get&set -------------------------------------------------------------- 84 85 /** 86 * Returns the identifier of the loader plan. 87 * 88 * @return the identifier of the loader plan. 89 */ 90 public String getId() 91 { 92 return id; 93 } 94 95 /** 96 * Returns the information from the Maven project configuration. 97 * 98 * @return the information from the Maven project configuration. 99 */ 100 public MavenConfig getMavenConfig() 101 { 102 return mavenConfig; 103 } 104 105 // --- business ------------------------------------------------------------- 106 107 /** 108 * Adds a configuration name to the loader plan. 109 * 110 * @param configurationName the name to add. 111 * @throws BlankArgumentException if {@code configurationName} is blank. 112 */ 113 public void addConfigurationName(final String configurationName) 114 throws BlankArgumentException 115 { 116 Arguments.checkNotBlank("configurationName", configurationName); 117 118 configurationNames.add(configurationName); 119 } 120 121 /** 122 * {@inheritDoc} 123 * 124 * @see java.lang.Iterable#iterator() 125 */ 126 @Override 127 public Iterator<String> iterator() 128 { 129 return configurationNames.iterator(); 130 } 131 132 /** 133 * Checks if the loader plan contains at least on name. 134 * 135 * @return <code>false</code> if the loader plan contains at least one name, 136 * <code>true</code> if it is empty. 137 */ 138 public boolean isEmpty() 139 { 140 return configurationNames.isEmpty(); 141 } 142 143 // --- object basics -------------------------------------------------------- 144 145 /** 146 * Returns the hash code of the object. 147 * 148 * @return the hash code. 149 */ 150 @Override 151 public int hashCode() 152 { 153 return id.hashCode(); 154 } 155 156 /** 157 * Returns <code>true</code> if the given object is semantically equal to the 158 * given object, <code>false</code> otherwise. 159 * <p> 160 * The Maven configuration is not a part of the check. 161 * </p> 162 * 163 * @param object the instance to compare to. 164 * @return <code>true</code> if the given object is semantically equal to the 165 * given object, <code>false</code> otherwise. 166 */ 167 @Override 168 public boolean equals(final Object object) 169 { 170 if (this == object) 171 { 172 return true; 173 } 174 else if (object == null || getClass() != object.getClass()) 175 { 176 return false; 177 } 178 179 final LoaderPlan other = (LoaderPlan) object; 180 181 return (id.equals(other.id) && configurationNames 182 .equals(other.configurationNames)); 183 } 184 185 /** 186 * {@inheritDoc} 187 * 188 * @see java.lang.Object#toString() 189 */ 190 @Override 191 public String toString() 192 { 193 final StringBuilder buffer = new StringBuilder(64); 194 195 buffer.append(id).append(": "); 196 for (final String configurationName : configurationNames) 197 { 198 buffer.append(configurationName).append(' '); 199 } 200 201 buffer.append(mavenConfig); 202 203 return buffer.toString(); 204 } 205 }