KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > loom > components > deployer > PhoenixProfileBuilder


1 /*
2  * Copyright (C) The Loom Group. All rights reserved.
3  *
4  * This software is published under the terms of the Loom
5  * Software License version 1.1, a copy of which has been included
6  * with this distribution in the LICENSE.txt file.
7  */

8 package org.codehaus.loom.components.deployer;
9
10 import java.util.ArrayList JavaDoc;
11 import java.util.Map JavaDoc;
12
13 import org.codehaus.dna.AbstractLogEnabled;
14 import org.codehaus.dna.Logger;
15 import org.codehaus.loom.components.assembler.Assembler;
16 import org.codehaus.loom.components.util.factory.ComponentFactory;
17 import org.codehaus.loom.components.util.factory.DefaultComponentFactory;
18 import org.codehaus.loom.components.util.info.ComponentInfo;
19 import org.codehaus.loom.components.util.info.DependencyDescriptor;
20 import org.codehaus.loom.components.util.info.ServiceDescriptor;
21 import org.codehaus.loom.components.util.metadata.ComponentTemplate;
22 import org.codehaus.loom.components.util.metadata.PartitionTemplate;
23 import org.codehaus.loom.components.util.profile.ComponentProfile;
24 import org.codehaus.loom.components.util.profile.PartitionProfile;
25 import org.codehaus.loom.components.util.profile.ProfileBuilder;
26 import org.codehaus.loom.interfaces.ContainerConstants;
27
28 /**
29  * @author Peter Donald
30  * @version $Revision: 1.2 $ $Date: 2004/05/01 12:48:35 $
31  */

32 public class PhoenixProfileBuilder extends AbstractLogEnabled
33     implements ProfileBuilder
34 {
35     private final Assembler m_assembler = new Assembler();
36     private Logger m_logger;
37
38     public PartitionProfile buildProfile( final Map JavaDoc parameters )
39         throws Exception JavaDoc
40     {
41         final PartitionTemplate metaData = m_assembler.buildAssembly( parameters );
42         final ClassLoader JavaDoc classLoader =
43             (ClassLoader JavaDoc)parameters.get( ContainerConstants.ASSEMBLY_CLASSLOADER );
44         final ComponentFactory factory = new DefaultComponentFactory( classLoader, getLogger() );
45
46         return assembleSarProfile( metaData, factory, classLoader );
47     }
48
49     private PartitionProfile assembleSarProfile( final PartitionTemplate metaData,
50                                                  final ComponentFactory factory,
51                                                  final ClassLoader JavaDoc classLoader )
52         throws Exception JavaDoc
53     {
54         final PartitionTemplate blockPartition =
55             metaData.getPartition( ContainerConstants.BLOCK_PARTITION );
56         final PartitionTemplate listenerPartition =
57             metaData.getPartition( ContainerConstants.LISTENER_PARTITION );
58
59         final PartitionProfile blockProfile = assembleProfile( blockPartition,
60                                                                factory );
61         final PartitionProfile listenerProfile =
62             assembleListenerProfile( listenerPartition, classLoader );
63
64         final PartitionProfile[] profiles = new PartitionProfile[]{
65             blockProfile, listenerProfile};
66         return new PartitionProfile( metaData,
67                                      profiles,
68                                      ComponentProfile.EMPTY_SET );
69     }
70
71     private PartitionProfile assembleListenerProfile( final PartitionTemplate metaData,
72                                                       final ClassLoader JavaDoc classLoader )
73         throws Exception JavaDoc
74     {
75         final ArrayList JavaDoc componentSet = new ArrayList JavaDoc();
76         final ComponentTemplate[] components = metaData.getComponents();
77         for( int i = 0; i < components.length; i++ )
78         {
79             final ComponentTemplate component = components[i];
80             final Class JavaDoc type = classLoader.loadClass( component.getImplementationKey() );
81             final ComponentInfo info = createListenerInfo( type );
82             final ComponentProfile profile = new ComponentProfile( info,
83                                                                    component );
84             componentSet.add( profile );
85         }
86
87         final ComponentProfile[] profiles =
88             (ComponentProfile[])componentSet.toArray( new ComponentProfile[componentSet.size()] );
89         return new PartitionProfile( metaData,
90                                      PartitionProfile.EMPTY_SET,
91                                      profiles );
92     }
93
94     private PartitionProfile assembleProfile( final PartitionTemplate metaData,
95                                               final ComponentFactory factory )
96         throws Exception JavaDoc
97     {
98         final ArrayList JavaDoc partitionSet = new ArrayList JavaDoc();
99         final PartitionTemplate[] partitions = metaData.getPartitions();
100         for( int i = 0; i < partitions.length; i++ )
101         {
102             final PartitionTemplate partition = partitions[i];
103             final PartitionProfile profile = assembleProfile( partition,
104                                                               factory );
105             partitionSet.add( profile );
106         }
107
108         final ArrayList JavaDoc componentSet = new ArrayList JavaDoc();
109         final ComponentTemplate[] components = metaData.getComponents();
110         for( int i = 0; i < components.length; i++ )
111         {
112             final ComponentTemplate component = components[i];
113             final ComponentInfo info =
114                 factory.createInfo( component.getImplementationKey() );
115             final ComponentProfile profile = new ComponentProfile( info,
116                                                                    component );
117             componentSet.add( profile );
118         }
119
120         final PartitionProfile[] partitionProfiles =
121             (PartitionProfile[])partitionSet.toArray( new PartitionProfile[partitionSet.size()] );
122         final ComponentProfile[] componentProfiles =
123             (ComponentProfile[])componentSet.toArray( new ComponentProfile[componentSet.size()] );
124         return new PartitionProfile( metaData,
125                                      partitionProfiles,
126                                      componentProfiles );
127     }
128
129     /**
130      * Create a {@link org.codehaus.loom.components.util.info.ComponentInfo} for a Listener with specified classname.
131      *
132      * @param type the listener type
133      *
134      * @return the ComponentInfo for listener
135      */

136     private static ComponentInfo createListenerInfo( final Class JavaDoc type )
137     {
138         return new ComponentInfo( type,
139                                   ServiceDescriptor.EMPTY_SET,
140                                   DependencyDescriptor.EMPTY_SET,
141                                   null );
142     }
143 }
144
Popular Tags