1 8 package org.codehaus.loom.components.deployer; 9 10 import java.util.ArrayList ; 11 import java.util.Map ; 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 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 parameters ) 39 throws Exception 40 { 41 final PartitionTemplate metaData = m_assembler.buildAssembly( parameters ); 42 final ClassLoader classLoader = 43 (ClassLoader )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 classLoader ) 52 throws Exception 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 classLoader ) 73 throws Exception 74 { 75 final ArrayList componentSet = new ArrayList (); 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 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 97 { 98 final ArrayList partitionSet = new ArrayList (); 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 componentSet = new ArrayList (); 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 136 private static ComponentInfo createListenerInfo( final Class type ) 137 { 138 return new ComponentInfo( type, 139 ServiceDescriptor.EMPTY_SET, 140 DependencyDescriptor.EMPTY_SET, 141 null ); 142 } 143 } 144 | Popular Tags |