/* * @(#) Plan_Order_Component_Content 0_97_0 08/07/2009 * * see Annex C of the SOPES IEDM Specification * Plan_Order_Component_Content oclConstructionSequence for the key mapping across steps * for this Transactional Artifact */ package org.omg.sopes0_97_0.PSM.Transactional; import org.omg.sopes0_97_0.PSM.Tuple; import org.omg.sopes0_97_0.PSM.Data; import org.omg.sopes0_97_0.PSM.Multiplicity; import org.omg.sopes0_97_0.PSM.Wrapper.*; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * * Plan_Order_Component_Content * @author ASMG * @version 0_97_0 08/07/2009 */ public class Plan_Order_Component_Content { public Plan_Order_Component_Content ( String identifier, Data data ) { m_data = data; Collection nextIdentifiers = new ArrayList(); nextIdentifiers.add(identifier); Collection col; Collection startPointCol = buildPlanOrderComponentContent( nextIdentifiers ); // Identifier always mandatory if ( startPointCol.isEmpty() ) { throw new IllegalArgumentException(); } m_step0.addAll( startPointCol ); includeTargetIdentifiers(nextIdentifiers); PlanOrderComponentContent planOrderComponentContent = (PlanOrderComponentContent)startPointCol.iterator().next(); nextIdentifiers = m_data.getTargetIdentifiers( getSourceIdentifiers(), PlanOrderComponent.getEntityIdentifier() ); col = buildPlanOrderComponent( nextIdentifiers ); if ( col.size() < m_multiplicity1.getMin() || col.size() > m_multiplicity1.getMax() ) { throw new IllegalArgumentException(); } m_step1.addAll( col ); includeTargetIdentifiers(nextIdentifiers); nextIdentifiers = m_data.getTargetIdentifiers( getSourceIdentifiers(), PlanOrder.getEntityIdentifier() ); col = buildPlanOrder( nextIdentifiers ); if ( col.size() < m_multiplicity2.getMin() || col.size() > m_multiplicity2.getMax() ) { throw new IllegalArgumentException(); } m_step2.addAll( col ); includeTargetIdentifiers(nextIdentifiers); nextIdentifiers = m_data.getTargetIdentifiers( getSourceIdentifiers(), ComponentTextContent.getEntityIdentifier() ); col = buildComponentTextContent( nextIdentifiers ); if ( col.size() < m_multiplicity3.getMin() || col.size() > m_multiplicity3.getMax() ) { throw new IllegalArgumentException(); } m_step3.addAll( col ); includeTargetIdentifiers(nextIdentifiers); nextIdentifiers = m_data.getTargetIdentifiers( getSourceIdentifiers(), Context.getEntityIdentifier() ); col = buildContext( nextIdentifiers ); if ( col.size() < m_multiplicity4.getMin() || col.size() > m_multiplicity4.getMax() ) { throw new IllegalArgumentException(); } m_step4.addAll( col ); includeTargetIdentifiers(nextIdentifiers); nextIdentifiers = m_data.getTargetIdentifiers( getSourceIdentifiers(), PlanOrderComponentContentReference.getEntityIdentifier() ); col = buildPlan_Order_Component_Content_Reference( nextIdentifiers ); if ( col.size() < m_multiplicity5.getMin() || col.size() > m_multiplicity5.getMax() ) { throw new IllegalArgumentException(); } m_step5.addAll( col ); includeTargetIdentifiers(nextIdentifiers); nextIdentifiers = m_data.getTargetIdentifiers( getSourceIdentifiers(), ComponentHeaderContent.getEntityIdentifier() ); col = buildPlan_Order_Component_Header_Content( nextIdentifiers ); if ( col.size() < m_multiplicity6.getMin() || col.size() > m_multiplicity6.getMax() ) { throw new IllegalArgumentException(); } m_step6.addAll( col ); includeTargetIdentifiers(nextIdentifiers); } /* * Multiplicity min: 1 max : 1 */ private Collection buildPlanOrderComponentContent( Collection identifiers ) { Collection col = new ArrayList(); Iterator sit = identifiers.iterator(); String identifier; Collection rows = new ArrayList(); while( sit.hasNext() ) { identifier = sit.next(); rows.addAll(m_data.extractRows( PlanOrderComponentContent.getEntityIdentifier(), identifier ) ); } Iterator it = rows.iterator(); while(it.hasNext()) { col.add(new PlanOrderComponentContent(it.next()) ); } return col; } /* * Multiplicity min: 1 max : 1 */ private Collection buildPlanOrderComponent( Collection identifiers ) { Collection col = new ArrayList(); Iterator sit = identifiers.iterator(); String identifier; Collection rows = new ArrayList(); while( sit.hasNext() ) { identifier = sit.next(); rows.addAll(m_data.extractRows( PlanOrderComponent.getEntityIdentifier(), identifier ) ); } Iterator it = rows.iterator(); while(it.hasNext()) { col.add(new PlanOrderComponent(it.next()) ); } return col; } /* * Multiplicity min: 1 max : 1 */ private Collection buildPlanOrder( Collection identifiers ) { Collection col = new ArrayList(); Iterator sit = identifiers.iterator(); String identifier; Collection rows = new ArrayList(); while( sit.hasNext() ) { identifier = sit.next(); rows.addAll(m_data.extractRows( PlanOrder.getEntityIdentifier(), identifier ) ); } Iterator it = rows.iterator(); while(it.hasNext()) { col.add(new PlanOrder(it.next()) ); } return col; } /* * Multiplicity min: 0 max : 1 */ private Collection buildComponentTextContent( Collection identifiers ) { Collection col = new ArrayList(); Iterator sit = identifiers.iterator(); String identifier; Collection rows = new ArrayList(); while( sit.hasNext() ) { identifier = sit.next(); rows.addAll(m_data.extractRows( ComponentTextContent.getEntityIdentifier(), identifier ) ); } Iterator it = rows.iterator(); while(it.hasNext()) { col.add(new ComponentTextContent(it.next()) ); } return col; } /* * Multiplicity min: 0 max : 1 */ private Collection buildContext( Collection identifiers ) { Collection col = new ArrayList(); Iterator sit = identifiers.iterator(); String identifier; Collection rows = new ArrayList(); while( sit.hasNext() ) { identifier = sit.next(); rows.addAll(m_data.extractRows( Context.getEntityIdentifier(), identifier ) ); } Iterator it = rows.iterator(); while(it.hasNext()) { col.add(new Context(it.next()) ); } return col; } /* * Multiplicity min: 0 max : 2147483647 */ private Collection buildPlan_Order_Component_Content_Reference(Collection identifiers ) { Collection col = new ArrayList(); Iterator sit = identifiers.iterator(); String identifier; Collection rows = new ArrayList(); while( sit.hasNext() ) { identifier = sit.next(); try { Plan_Order_Component_Content_Reference plan_Order_Component_Content_Reference = new Plan_Order_Component_Content_Reference( identifier, m_data ); col.add(plan_Order_Component_Content_Reference); } catch( IllegalArgumentException ie ) { /* implementation based response */ } } return col; } /* * Multiplicity min: 0 max : 1 */ private Collection buildPlan_Order_Component_Header_Content(Collection identifiers ) { Collection col = new ArrayList(); Iterator sit = identifiers.iterator(); String identifier; Collection rows = new ArrayList(); while( sit.hasNext() ) { identifier = sit.next(); try { Plan_Order_Component_Header_Content plan_Order_Component_Header_Content = new Plan_Order_Component_Header_Content( identifier, m_data ); col.add(plan_Order_Component_Header_Content); } catch( IllegalArgumentException ie ) { /* implementation based response */ } } return col; } private Collection getSourceIdentifiers(){ /* no implement see Annex C Plan_Order_Component_Content oclConstructionSequence for further information */ return null; } private void includeTargetIdentifiers(Collection nextIdentifiers){ /* no implement Record the variable for potential use by the method getSourceIdentifiers() */ } public boolean isWatchpoint(){ return m_isWatchpoint; } private Data m_data = null; private final boolean m_isWatchpoint = true; private Multiplicity m_multiplicity0 = new Multiplicity(1, 1); private Multiplicity m_multiplicity1 = new Multiplicity(1, 1); private Multiplicity m_multiplicity2 = new Multiplicity(1, 1); private Multiplicity m_multiplicity3 = new Multiplicity(0, 1); private Multiplicity m_multiplicity4 = new Multiplicity(0, 1); private Multiplicity m_multiplicity5 = new Multiplicity(0, 2147483647); private Multiplicity m_multiplicity6 = new Multiplicity(0, 1); private Set m_step0 = new HashSet(); private Set m_step1 = new HashSet(); private Set m_step2 = new HashSet(); private Set m_step3 = new HashSet(); private Set m_step4 = new HashSet(); private Set m_step5 = new HashSet(); private Set m_step6 = new HashSet(); }