1 17 18 package org.apache.avalon.extension.manager.impl; 19 20 import java.util.ArrayList ; 21 import java.util.Collections ; 22 23 import org.apache.avalon.extension.Extension; 24 import org.apache.avalon.extension.manager.ExtensionManager; 25 import org.apache.avalon.extension.manager.OptionalPackage; 26 27 34 public class DelegatingExtensionManager 35 implements ExtensionManager 36 { 37 40 private final ArrayList m_extensionManagers = new ArrayList (); 41 42 45 public DelegatingExtensionManager() 46 { 47 } 48 49 52 public DelegatingExtensionManager( final ExtensionManager[] extensionManagers ) 53 { 54 for( int i = 0; i < extensionManagers.length; i++ ) 55 { 56 addExtensionManager( extensionManagers[ i ] ); 57 } 58 } 59 60 66 protected synchronized void addExtensionManager( final ExtensionManager extensionManager ) 67 { 68 if( !m_extensionManagers.contains( extensionManager ) ) 69 { 70 m_extensionManagers.add( extensionManager ); 71 } 72 } 73 74 81 protected void addPackageRepository( final ExtensionManager extensionManager ) 82 { 83 addExtensionManager( extensionManager ); 84 } 85 86 92 protected synchronized void removeExtensionManager( final ExtensionManager repository ) 93 { 94 m_extensionManagers.remove( repository ); 95 } 96 97 104 protected void removePackageRepository( final ExtensionManager extensionManager ) 105 { 106 removeExtensionManager( extensionManager ); 107 } 108 109 116 public synchronized OptionalPackage[] getOptionalPackages( final Extension extension ) 117 { 118 final ArrayList resultPackages = new ArrayList (); 119 120 final int size = m_extensionManagers.size(); 121 for( int i = 0; i < size; i++ ) 122 { 123 final ExtensionManager repository = 124 (ExtensionManager)m_extensionManagers.get( i ); 125 final OptionalPackage[] packages = 126 repository.getOptionalPackages( extension ); 127 if( null == packages || 0 == packages.length ) 128 { 129 continue; 130 } 131 132 for( int j = 0; j < packages.length; j++ ) 133 { 134 resultPackages.add( packages[ j ] ); 135 } 136 } 137 138 final OptionalPackageComparator comparator = 139 new OptionalPackageComparator( extension.getExtensionName() ); 140 Collections.sort( resultPackages, comparator ); 141 final OptionalPackage[] resultData = 142 new OptionalPackage[ resultPackages.size() ]; 143 return (OptionalPackage[])resultPackages.toArray( resultData ); 144 } 145 } 146 | Popular Tags |