static IList <InterfaceSliceType> createApplicationComponentAbstractInterfaceSlices(IList <Tuple <string, string, EnvironmentPortType> > bindings_application) { int port_counter = 0; IList <InterfaceSliceType> slices_list = new List <InterfaceSliceType> (); foreach (Tuple <string, string, EnvironmentPortType> binding in bindings_application) { string port_name = binding.Item2 + (port_counter++); string slice_unit_name = Constants.envUnitName[binding.Item3]; InterfaceSliceType s = new InterfaceSliceType(); s.isRef = port_name; s.originRef = new InterfaceRefType(); s.originRef.cRef = port_name; s.originRef.iRef = Constants.envInterfaceName[binding.Item3]; s.visualDescription = null; slices_list.Add(s); } return(slices_list); }
static void createSystemComponentAbstractUnit(IList <object> body_items, IDictionary <string, InstanceType> component_refs, IDictionary <ProxyComponentAttribute, string> application_attributes, IDictionary <ProxyComponentAttribute, string> workflow_attributes, IList <Tuple <string, string, EnvironmentPortType> > bindings_application, IList <Tuple <string, string, EnvironmentPortType> > bindings_workflow) { IDictionary <int, SliceList> unit_mapping = new Dictionary <int, SliceList> (); foreach (InstanceType c in component_refs.Values) { string cRef = c.contextual_type.component_ref; foreach (UnitMappingType u in c.unit_mapping) { string uRef = u.unit_id; foreach (int n in u.node) { AbstractComponentFunctor acf = backend.DGAC.BackEnd.acfdao.retrieve_libraryPath(cRef); string qualified_class_name = backend.DGAC.BackEnd.idao.retrieve(acf.Id_abstract, uRef, 0).Class_name; string[] parts_class_name = qualified_class_name.Split(new char[] { '.' }); string iRef = parts_class_name[parts_class_name.Length - 1]; bool hasNode = unit_mapping.ContainsKey(n); SliceList units_at_node = hasNode ? unit_mapping[n] : new SliceList(); units_at_node.Value.Add(new Tuple <string, string, string>(cRef, uRef, iRef)); if (!hasNode) { unit_mapping.Add(n, units_at_node); } } } } IDictionary <SliceList, IList <int> > slice_mapping = new Dictionary <SliceList, IList <int> > (); foreach (KeyValuePair <int, SliceList> r in unit_mapping) { bool hasSlice = slice_mapping.ContainsKey(r.Value); IList <int> node_list = hasSlice ? slice_mapping [r.Value] : new List <int> (); node_list.Add(r.Key); if (!hasSlice) { slice_mapping.Add(r.Value, node_list); } } // PEER UNITS int unit_counter = 0; foreach (KeyValuePair <SliceList, IList <int> > r in slice_mapping) { string uname = "peer" + (unit_counter++); string iname = "IPeer" + (unit_counter++); UnitType cu = new UnitType(); cu.facet = 0; cu.iRef = iname; cu.multiple = true; cu.@private = false; cu.replica = 0; cu.uRef = uname; cu.visibleInterface = true; InterfaceType ct = new InterfaceType(); ct.iRef = iname; ct.nArgs = 0; ct.sources = null; //? IDictionary <Tuple <string, string, string>, int> slice_counter = new Dictionary <Tuple <string, string, string>, int> (); IList <UnitSliceType> uslices_list = new List <UnitSliceType> (); IList <InterfaceSliceType> islices_list = new List <InterfaceSliceType> (); foreach (Tuple <string, string, string> slice in r.Key.Value) { string cRef = component_refs [slice.Item1].instance_ref; bool hasSlice = slice_counter.ContainsKey(slice); int slice_replica = hasSlice ? slice_counter [slice] : 0; if (hasSlice) { slice_counter.Remove(slice); } slice_counter.Add(slice, slice_replica + 1); UnitSliceType us = new UnitSliceType(); us.cRef = cRef; us.uRef = slice.Item2; us.sliceName = cRef; us.slice_replica = slice_replica; us.transitive = false; uslices_list.Add(us); InterfaceSliceType fs = new InterfaceSliceType(); fs.isRef = cRef; fs.originRef = new InterfaceRefType(); fs.originRef.cRef = cRef; fs.originRef.iRef = slice.Item3; islices_list.Add(fs); } cu.slices = new UnitSliceType[uslices_list.Count]; uslices_list.CopyTo(cu.slices, 0); ct.slice = new InterfaceSliceType[islices_list.Count]; islices_list.CopyTo(ct.slice, 0); body_items.Add(ct); body_items.Add(cu); } IList <UnitSliceType> uslices_root_list = new List <UnitSliceType> (); IList <InterfaceSliceType> islices_root_list = new List <InterfaceSliceType> (); // ROOT UNIT UnitType ru = new UnitType(); ru.facet = 0; ru.iRef = "IRoot"; ru.multiple = false; ru.@private = false; ru.replica = 0; ru.uRef = "root"; ru.visibleInterface = true; // APPLICATION UNIT SLICE OF THE ROOT UNIT UnitSliceType u_slice_app = new UnitSliceType(); u_slice_app.cRef = application_attributes[ProxyComponentAttribute.INNER_COMPONENT_NAME]; u_slice_app.uRef = application_attributes[ProxyComponentAttribute.UNIT_NAME_ABSTRACT]; u_slice_app.sliceName = u_slice_app.cRef; u_slice_app.slice_replica = 0; u_slice_app.transitive = false; uslices_root_list.Add(u_slice_app); // WORKFLOW UNIT SLICE OF THE ROOT UNIT UnitSliceType u_slice_wrf = new UnitSliceType(); u_slice_wrf.cRef = workflow_attributes[ProxyComponentAttribute.INNER_COMPONENT_NAME]; u_slice_wrf.uRef = workflow_attributes[ProxyComponentAttribute.UNIT_NAME_ABSTRACT]; u_slice_wrf.sliceName = u_slice_wrf.cRef; u_slice_wrf.slice_replica = 0; u_slice_wrf.transitive = false; uslices_root_list.Add(u_slice_wrf); // ROOT UNIT INTERFACE InterfaceType rt = new InterfaceType(); rt.iRef = "IRoot"; rt.nArgs = 0; rt.sources = null; //?? // APPLICATION INTERFACE SLICE OF THE ROOT UNIT InterfaceSliceType i_slice_app = new InterfaceSliceType(); i_slice_app.isRef = u_slice_app.cRef; i_slice_app.originRef = new InterfaceRefType(); i_slice_app.originRef.cRef = u_slice_app.cRef; i_slice_app.originRef.iRef = application_attributes[ProxyComponentAttribute.INTERFACE_NAME_ABSTRACT]; islices_root_list.Add(i_slice_app); // WORKFLOW INTERFACE SLICE OF THE ROOT UNIT InterfaceSliceType i_slice_wrf = new InterfaceSliceType(); i_slice_wrf.isRef = u_slice_wrf.cRef; i_slice_wrf.originRef = new InterfaceRefType(); i_slice_wrf.originRef.cRef = u_slice_wrf.cRef; i_slice_wrf.originRef.iRef = workflow_attributes[ProxyComponentAttribute.INTERFACE_NAME_ABSTRACT]; islices_root_list.Add(i_slice_wrf); IList <InterfacePortType> iports_root_list = new List <InterfacePortType> (); int counter = 0; // TRANSITIVE SLICES (environment ports) OF THE APPLICATION SLICE foreach (Tuple <string, string, EnvironmentPortType> slice in bindings_application) { string port_name = slice.Item2 + (counter++); // UNIT SLICES UnitSliceType us = new UnitSliceType(); us.cRef = port_name; us.uRef = Constants.envUnitName[slice.Item3]; us.sliceName = port_name; us.slice_replica = 0; us.transitive = true; uslices_root_list.Add(us); // INTERFACE PORTS (TRANSITIVE SLICES) InterfacePortType fs = new InterfacePortType(); fs.name = port_name; fs.slice = new PortSliceType[1]; fs.slice[0].pRef = application_attributes[ProxyComponentAttribute.INNER_COMPONENT_NAME]; fs.slice[0].sRef = port_name; iports_root_list.Add(fs); } counter = 0; // TRANSITIVE SLICES (environment ports) OF THE WORKFLOW SLICE foreach (Tuple <string, string, EnvironmentPortType> slice in bindings_workflow) { string port_name = slice.Item2 + (counter++); // UNIT SLICES UnitSliceType us = new UnitSliceType(); us.cRef = port_name; us.uRef = Constants.envUnitName[slice.Item3]; us.sliceName = port_name; us.slice_replica = 0; us.transitive = true; uslices_root_list.Add(us); // INTERFACE PORTS (TRANSITIVE SLICES) InterfacePortType fs = new InterfacePortType(); fs.name = port_name; fs.slice = new PortSliceType[1]; fs.slice[0].pRef = workflow_attributes[ProxyComponentAttribute.INNER_COMPONENT_NAME]; fs.slice[0].sRef = port_name; iports_root_list.Add(fs); } ru.slices = new UnitSliceType[uslices_root_list.Count]; uslices_root_list.CopyTo(ru.slices, 0); rt.slice = new InterfaceSliceType[islices_root_list.Count]; islices_root_list.CopyTo(rt.slice, 0); rt.port = new InterfacePortType[iports_root_list.Count]; iports_root_list.CopyTo(rt.port, 0); }