1 26 27 package org.objectweb.corba.generator.cif_idl.lib; 28 29 import org.objectweb.openccm.ast.api.ExecutorDecl; 31 import org.objectweb.openccm.ast.api.ComponentDecl; 32 import org.objectweb.openccm.ast.api.InterfacePortDecl; 33 import org.objectweb.openccm.ast.api.SegmentDecl; 34 import org.objectweb.openccm.ast.api.EventPortDecl; 35 import org.objectweb.openccm.ast.api.InterfaceList; 36 import org.objectweb.openccm.ast.api.NativeDecl; 37 import org.objectweb.openccm.ast.api.OperationDecl; 38 import org.objectweb.openccm.ast.api.InterfaceDecl; 39 import org.objectweb.openccm.ast.api.ModuleDecl; 40 import org.objectweb.openccm.ast.api.Declaration; 41 import org.objectweb.openccm.ast.api.CategoryKind; 42 import org.objectweb.openccm.ast.utils.api.CompositionInfo; 43 import org.objectweb.openccm.ast.utils.api.ExecutorInfo; 44 import org.objectweb.corba.generator.cif_idl.api.SegmentMapping; 45 import java.util.Set ; 46 47 48 55 56 public class ExecutorMapping 57 implements org.objectweb.corba.generator.cif_idl.api.ExecutorMapping 58 { 59 65 66 private ExecutorDecl exec_; 67 68 74 79 public ExecutorMapping(ExecutorDecl exec) 80 { 81 exec_ = exec; 83 } 84 85 91 97 protected void 98 addInterfacePortMapping(CompositionInfo composition, 99 InterfaceList list) 100 { 101 ExecutorInfo exec_info = null; 102 Declaration[] implemented_facets = null; 103 Set itf_set = null; 104 105 itf_set = new java.util.HashSet (); 106 exec_info = new org.objectweb.openccm.ast.utils.lib.ExecutorInfo(exec_); 107 implemented_facets = exec_info.getMainSegmentFacets(); 108 109 for (int i=0; i<implemented_facets.length; i++) 111 { 112 try { 113 InterfacePortDecl itf_port = null; 114 115 itf_port = (InterfacePortDecl) implemented_facets[i]; 116 itf_set.add( itf_port.getLocalMapping() ); 117 }catch(ClassCastException e){ 118 EventPortDecl event_port = null; 119 120 event_port = (EventPortDecl) implemented_facets[i]; 121 itf_set.add( event_port.getEvent().getLocalConsumerMapping() ); 122 } 123 } 124 125 java.util.Iterator it = itf_set.iterator(); 127 while ( it.hasNext() ) 128 { 129 list.add((InterfaceDecl) it.next()); 130 } 131 } 132 133 142 protected InterfaceDecl 143 create_executor_mapping(CompositionInfo composition, 144 ModuleDecl module, 145 InterfaceDecl seg_base_mapping) 146 { 147 InterfaceDecl mapping = null, 148 tmp = null; 149 InterfaceList list = null; 150 CategoryKind kind = null; 151 152 153 mapping = module.declareLocalInterface( "CIF_" + exec_.getName() ); 154 155 list = mapping.getInheritedInterfaceList(); 157 158 list.add(seg_base_mapping); 160 161 tmp = (InterfaceDecl) exec_.getAST().lookup("::Components::ExecutorLocator"); 163 list.add(tmp); 164 165 kind = exec_.getCompositionKind(); 167 if ( (kind == CategoryKind.ck_entity) 168 || (kind == CategoryKind.ck_process) ) 169 { 170 tmp = (InterfaceDecl) exec_.getAST().lookup("::Components::EntityComponent"); 171 } 172 else 173 { 174 tmp = (InterfaceDecl) exec_.getAST().lookup("::Components::SessionComponent"); 175 } 176 list.add(tmp); 177 178 tmp = composition.getComponent().getLocalMainMapping(); 180 list.add(tmp); 181 182 addInterfacePortMapping(composition, list); 184 185 mapping.create(); 187 188 return mapping; 189 } 190 191 198 protected void 199 add_executor_mapping_contents(InterfaceDecl mapping, 200 NativeDecl ast) 201 { 202 if (ast != null) 203 { 204 OperationDecl op = null; 205 206 op = mapping.startOperation("get_state"); 208 op.setType(ast); 209 op.create(); 210 } 211 212 } 213 214 221 protected InterfaceDecl 222 create_seg_base_mapping(ModuleDecl module) 223 { 224 InterfaceDecl seg_base_mapping = null; 225 226 seg_base_mapping = module.declareLocalInterface("CIF_SegmentBase"); 227 seg_base_mapping.create(); 228 229 return seg_base_mapping; 230 } 231 232 239 protected void 240 add_seg_base_mapping_contents(InterfaceDecl seg_base_mapping, 241 InterfaceDecl exec_mapping, 242 CompositionInfo composition) 243 { 244 OperationDecl op = null; 245 246 op = seg_base_mapping.startOperation("get_context"); 247 op.setType(composition.getComponent().getLocalContextMapping()); 249 op.create(); 250 251 op = seg_base_mapping.startOperation("get_main_segment"); 252 op.setType(exec_mapping); 253 op.create(); 254 } 255 256 262 269 public void 270 declareCIF( CompositionInfo composition, 271 ModuleDecl module, 272 NativeDecl ast) 273 { 274 ComponentDecl comp = null; 275 SegmentDecl[] segments = null; 276 InterfaceDecl seg_base_mapping = null, 277 exec_mapping = null; 278 SegmentMapping seg_mapping = null; 279 280 comp = composition.getComponent(); 282 283 284 seg_base_mapping = create_seg_base_mapping(module); 285 286 287 exec_mapping = create_executor_mapping(composition, 288 module, 289 seg_base_mapping); 290 add_executor_mapping_contents(exec_mapping, ast); 291 292 293 add_seg_base_mapping_contents(seg_base_mapping, 294 exec_mapping, 295 composition); 296 297 298 segments = composition.getSegments(); 299 for (int i=0; i<segments.length; i++) 300 { 301 seg_mapping = new org.objectweb.corba.generator.cif_idl.lib.SegmentMapping(segments[i]); 302 seg_mapping.declareCIF( module, 303 seg_base_mapping, 304 comp ); 305 } 306 } 307 308 314 } 315 | Popular Tags |