KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > avalon > extension > manager > impl > DelegatingExtensionManager


1 /*
2  * Copyright 2004 Apache Software Foundation
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12  * implied.
13  *
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 package org.apache.avalon.extension.manager.impl;
19
20 import java.util.ArrayList JavaDoc;
21 import java.util.Collections JavaDoc;
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 /**
28  * A {@link ExtensionManager} that can delegate to multiple
29  * different package repositories.
30  *
31  * @author <a HREF="mailto:dev@avalon.apache.org">Avalon Development Team</a>
32  * @version $Revision: 1.2 $ $Date: 2004/02/24 22:39:31 $
33  */

34 public class DelegatingExtensionManager
35     implements ExtensionManager
36 {
37     /**
38      * The list containing the {@link ExtensionManager} objects.
39      */

40     private final ArrayList JavaDoc m_extensionManagers = new ArrayList JavaDoc();
41
42     /**
43      * Default constructor that does not add any repositories.
44      */

45     public DelegatingExtensionManager()
46     {
47     }
48
49     /**
50      * Default constructor that delegates to specified extensionManagers.
51      */

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     /**
61      * Add a extensionManager to list of repositories delegated to
62      * to find Optional Packages.
63      *
64      * @param extensionManager the extensionManager to add
65      */

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     /**
75      * Add a extensionManager to list of repositories delegated to
76      * to find Optional Packages.
77      *
78      * @param extensionManager the extensionManager to add
79      * @deprecated Use addExtensionManager instead
80      */

81     protected void addPackageRepository( final ExtensionManager extensionManager )
82     {
83         addExtensionManager( extensionManager );
84     }
85
86     /**
87      * Remove a repository from list of repositories delegated to
88      * to find Optional Packages.
89      *
90      * @param repository the repository to remove
91      */

92     protected synchronized void removeExtensionManager( final ExtensionManager repository )
93     {
94         m_extensionManagers.remove( repository );
95     }
96
97     /**
98      * Remove a extensionManager from list of repositories delegated to
99      * to find Optional Packages.
100      *
101      * @param extensionManager the extensionManager to remove
102      * @deprecated Use removeExtensionManager instead.
103      */

104     protected void removePackageRepository( final ExtensionManager extensionManager )
105     {
106         removeExtensionManager( extensionManager );
107     }
108
109     /**
110      * Scan through list of respositories and return all the matching {@link OptionalPackage}
111      * objects that match in any repository.
112      *
113      * @param extension the extension to search for
114      * @return the matching {@link OptionalPackage} objects.
115      */

116     public synchronized OptionalPackage[] getOptionalPackages( final Extension extension )
117     {
118         final ArrayList JavaDoc resultPackages = new ArrayList JavaDoc();
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