1 87 package org.codehaus.loom.components.extensions.pkgmgr.impl; 88 89 import java.util.ArrayList ; 90 import java.util.Collections ; 91 92 import org.codehaus.loom.components.extensions.pkgmgr.ExtensionManager; 93 import org.codehaus.loom.components.extensions.pkgmgr.OptionalPackage; 94 import org.codehaus.loom.extension.Extension; 95 96 103 public class DelegatingExtensionManager 104 implements ExtensionManager 105 { 106 107 private final ArrayList m_extensionManagers = new ArrayList (); 108 109 112 public DelegatingExtensionManager() 113 { 114 } 115 116 119 public DelegatingExtensionManager( 120 final ExtensionManager[] extensionManagers ) 121 { 122 for( int i = 0; i < extensionManagers.length; i++ ) 123 { 124 addExtensionManager( extensionManagers[ i ] ); 125 } 126 } 127 128 134 protected synchronized void addExtensionManager( 135 final ExtensionManager extensionManager ) 136 { 137 if( !m_extensionManagers.contains( extensionManager ) ) 138 { 139 m_extensionManagers.add( extensionManager ); 140 } 141 } 142 143 150 protected void addPackageRepository( 151 final ExtensionManager extensionManager ) 152 { 153 addExtensionManager( extensionManager ); 154 } 155 156 162 protected synchronized void removeExtensionManager( 163 final ExtensionManager repository ) 164 { 165 m_extensionManagers.remove( repository ); 166 } 167 168 175 protected void removePackageRepository( 176 final ExtensionManager extensionManager ) 177 { 178 removeExtensionManager( extensionManager ); 179 } 180 181 188 public synchronized OptionalPackage[] getOptionalPackages( 189 final Extension extension ) 190 { 191 final ArrayList resultPackages = new ArrayList (); 192 193 final int size = m_extensionManagers.size(); 194 for( int i = 0; i < size; i++ ) 195 { 196 final ExtensionManager repository = 197 (ExtensionManager)m_extensionManagers.get( i ); 198 final OptionalPackage[] packages = 199 repository.getOptionalPackages( extension ); 200 if( null == packages || 0 == packages.length ) 201 { 202 continue; 203 } 204 205 for( int j = 0; j < packages.length; j++ ) 206 { 207 resultPackages.add( packages[ j ] ); 208 } 209 } 210 211 final OptionalPackageComparator comparator = 212 new OptionalPackageComparator( extension.getExtensionName() ); 213 Collections.sort( resultPackages, comparator ); 214 final OptionalPackage[] resultData = 215 new OptionalPackage[ resultPackages.size() ]; 216 return (OptionalPackage[])resultPackages.toArray( resultData ); 217 } 218 } 219 | Popular Tags |