1 87 package org.codehaus.loom.components.extensions.pkgmgr; 88 89 import java.util.HashSet ; 90 import java.util.Iterator ; 91 import java.util.Set ; 92 93 import org.codehaus.loom.extension.Extension; 94 95 107 public class PackageManager 108 { 109 private ExtensionManager m_repository; 111 112 117 public PackageManager( final ExtensionManager repository ) 118 { 119 if( null == repository ) 120 { 121 throw new NullPointerException ( "repository" ); 122 } 123 124 m_repository = repository; 125 } 126 127 144 public OptionalPackage getOptionalPackage( final Extension extension ) 145 { 146 final OptionalPackage[] packages = m_repository.getOptionalPackages( 147 extension ); 148 if( null == packages || 0 == packages.length ) 149 { 150 return null; 151 } 152 153 return packages[ 0 ]; 156 } 157 158 176 public OptionalPackage[] scanDependencies( final Extension required, 177 final Extension[] available ) 178 throws UnsatisfiedExtensionException 179 { 180 return scanDependencies( new Extension[]{required}, available ); 181 } 182 183 201 public OptionalPackage[] scanDependencies( final Extension[] required, 202 final Extension[] available ) 203 throws UnsatisfiedExtensionException 204 { 205 final Set dependencies = new HashSet (); 206 final Set unsatisfied = new HashSet (); 207 208 scanDependencies( required, available, dependencies, unsatisfied ); 209 210 if( 0 != unsatisfied.size() ) 211 { 212 final Extension extension = 213 (Extension)unsatisfied.iterator().next(); 214 throw new UnsatisfiedExtensionException( extension ); 215 } 216 217 return (OptionalPackage[])dependencies.toArray( 218 new OptionalPackage[ 0 ] ); 219 } 220 221 239 public void scanDependencies( final Extension[] required, 240 final Extension[] available, 241 final Set dependencies, 242 final Set unsatisfied ) 243 { 244 for( int i = 0; i < required.length; i++ ) 245 { 246 scanDependencies( required[ i ], 247 available, 248 dependencies, 249 unsatisfied ); 250 } 251 } 252 253 272 public void scanDependencies( final Extension required, 273 final Extension[] available, 274 final Set dependencies, 275 final Set unsatisfied ) 276 { 277 for( int i = 0; i < available.length; i++ ) 280 { 281 final Extension other = available[ i ]; 282 if( other.isCompatibleWith( required ) ) 283 { 284 return; 285 } 286 } 287 288 final Iterator iterator = dependencies.iterator(); 291 while( iterator.hasNext() ) 292 { 293 final OptionalPackage optionalPackage = (OptionalPackage)iterator.next(); 294 if( optionalPackage.isCompatible( required ) ) 295 { 296 return; 297 } 298 } 299 300 final OptionalPackage optionalPackage = getOptionalPackage( required ); 301 if( null == optionalPackage ) 302 { 303 if( !unsatisfied.contains( required ) ) 304 { 305 unsatisfied.add( required ); 306 } 307 } 308 else 309 { 310 if( !dependencies.contains( optionalPackage ) ) 311 { 312 dependencies.add( optionalPackage ); 313 } 314 315 scanDependencies( optionalPackage.getRequiredExtensions(), 316 available, 317 dependencies, 318 unsatisfied ); 319 } 320 } 321 } 322 | Popular Tags |