Clover coverage report - bexee - 0.1
Coverage timestamp: Do Dez 16 2004 13:24:06 CET
file stats: LOC: 490   Methods: 20
NCLOC: 196   Classes: 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
BPELElementFactory.java 75% 87.4% 80% 84.9%
coverage coverage
 1   
 /*
 2   
  * $Id: BPELElementFactory.java,v 1.1 2004/12/15 14:18:09 patforna Exp $
 3   
  *
 4   
  * Copyright (c) 2004 Patric Fornasier, Pawel Kowalski
 5   
  * Berne University of Applied Sciences
 6   
  * School of Engineering and Information Technology
 7   
  * All rights reserved.
 8   
  */
 9   
 package bexee.model.xmltobpel;
 10   
 
 11   
 import java.util.Hashtable;
 12   
 import java.util.Map;
 13   
 
 14   
 import javax.xml.namespace.QName;
 15   
 
 16   
 import bexee.model.StandardAttributes;
 17   
 import bexee.model.activity.Assign;
 18   
 import bexee.model.activity.Invoke;
 19   
 import bexee.model.activity.Receive;
 20   
 import bexee.model.activity.Reply;
 21   
 import bexee.model.activity.Sequence;
 22   
 import bexee.model.activity.Switch;
 23   
 import bexee.model.activity.impl.AssignImpl;
 24   
 import bexee.model.activity.impl.InvokeImpl;
 25   
 import bexee.model.activity.impl.ReceiveImpl;
 26   
 import bexee.model.activity.impl.ReplyImpl;
 27   
 import bexee.model.activity.impl.SequenceImpl;
 28   
 import bexee.model.activity.impl.SwitchImpl;
 29   
 import bexee.model.elements.BpelCase;
 30   
 import bexee.model.elements.Correlation;
 31   
 import bexee.model.elements.CorrelationPattern;
 32   
 import bexee.model.elements.From;
 33   
 import bexee.model.elements.PartnerLink;
 34   
 import bexee.model.elements.To;
 35   
 import bexee.model.elements.Variable;
 36   
 import bexee.model.elements.Variables;
 37   
 import bexee.model.elements.impl.BpelCaseImpl;
 38   
 import bexee.model.elements.impl.CorrelationImpl;
 39   
 import bexee.model.elements.impl.CorrelationPatternImpl;
 40   
 import bexee.model.elements.impl.FromImpl;
 41   
 import bexee.model.elements.impl.PartnerLinkImpl;
 42   
 import bexee.model.elements.impl.RolesImpl;
 43   
 import bexee.model.elements.impl.ToImpl;
 44   
 import bexee.model.elements.impl.VariableImpl;
 45   
 import bexee.model.elements.impl.VariablesImpl;
 46   
 import bexee.model.expression.impl.BooleanExpressionImpl;
 47   
 import bexee.model.process.BPELProcess;
 48   
 import bexee.model.process.Process;
 49   
 import bexee.model.process.impl.ProcessImpl;
 50   
 import bexee.util.BooleanUtils;
 51   
 import bexee.util.StringUtils;
 52   
 
 53   
 /**
 54   
  * This is a factory for the creation of BPEL process elements. The
 55   
  * 
 56   
  * @author Pawel Kowalski
 57   
  * @version $Revision: 1.1 $, $Date: 2004/12/15 14:18:09 $
 58   
  */
 59   
 public class BPELElementFactory {
 60   
 
 61   
     //**************************************************/
 62   
     // instances accessor
 63   
     //**************************************************/
 64   
 
 65   
     private static Map instances = new Hashtable();
 66   
 
 67   
     /**
 68   
      * Create a new factory instance or if one already exists for this
 69   
      * BPELProcessm, retrieve the existing one.
 70   
      * 
 71   
      * @param process
 72   
      * @return
 73   
      */
 74  524
     public static BPELElementFactory getInstance(BPELProcess process) {
 75  524
         if (instances.get(process) == null) {
 76  54
             BPELElementFactory elementFactory = new BPELElementFactory();
 77  54
             instances.put(process, elementFactory);
 78   
         }
 79  524
         return (BPELElementFactory) instances.get(process);
 80   
     }
 81   
 
 82   
     //**************************************************/
 83   
     // the element factory
 84   
     //**************************************************/
 85   
 
 86   
     private Map variables;
 87   
 
 88   
     private Map partnerLinks;
 89   
 
 90   
     private Map nameSpaces;
 91   
 
 92   
     //**************************************************/
 93   
     // ctor's
 94   
     //**************************************************/
 95   
 
 96   
     /**
 97   
      * Create a BPELElementFactory object and initialize it.
 98   
      */
 99  54
     public BPELElementFactory() {
 100  54
         variables = new Hashtable();
 101  54
         partnerLinks = new Hashtable();
 102  54
         nameSpaces = new Hashtable();
 103   
     }
 104   
 
 105   
     //**************************************************/
 106   
     // create methods
 107   
     //**************************************************/
 108   
 
 109   
     //**************************************************/
 110   
     // create process
 111   
     //**************************************************/
 112   
 
 113   
     /**
 114   
      * Create a Process instance with all possible attributes. Default values
 115   
      * will be set when an attribute is empty or null.
 116   
      * 
 117   
      * @param name
 118   
      * @param targetNamespace
 119   
      * @param queryLanguage
 120   
      * @param expressionLanguage
 121   
      * @param suppressJoinFailure
 122   
      * @param enableInstanceCompensation
 123   
      * @param abstractProcess
 124   
      * @param xmlns
 125   
      * @param nameSpaces
 126   
      * @return
 127   
      */
 128  32
     public Process createProcess(String name, String targetNamespace,
 129   
             String queryLanguage, String expressionLanguage,
 130   
             String suppressJoinFailure, String enableInstanceCompensation,
 131   
             String abstractProcess, String xmlns, Map nameSpaces) {
 132   
 
 133  32
         Process process = new ProcessImpl(name, targetNamespace, queryLanguage,
 134   
                 expressionLanguage, suppressJoinFailure,
 135   
                 enableInstanceCompensation);
 136   
 
 137  32
         if (nameSpaces != null) {
 138  32
             this.nameSpaces = nameSpaces;
 139   
         }
 140   
 
 141  32
         return process;
 142   
     }
 143   
 
 144   
     //**************************************************/
 145   
     // create process elements
 146   
     //**************************************************/
 147   
 
 148   
     /**
 149   
      * Create a PartnerLink with all possible attributes. Register the created
 150   
      * PartnerLink for retrieval by an Activity using PartnerLinks.
 151   
      * 
 152   
      * @param partnerLinkName
 153   
      * @param partnerLinkType
 154   
      * @param myRole
 155   
      * @param partnerRole
 156   
      * @return
 157   
      */
 158  96
     public PartnerLink createPartnerLink(String partnerLinkName,
 159   
             String partnerLinkType, String myRole, String partnerRole) {
 160   
 
 161  96
         PartnerLink partnerLink = new PartnerLinkImpl();
 162   
 
 163  96
         partnerLink.setName(partnerLinkName);
 164  96
         partnerLink.setPartnerLinkType(expandToQName(partnerLinkType));
 165  96
         partnerLink.setMyRole(myRole);
 166  96
         partnerLink.setPartnerRole(partnerRole);
 167   
 
 168  96
         partnerLinks.put(partnerLinkName, partnerLink);
 169   
 
 170  96
         return partnerLink;
 171   
     }
 172   
 
 173   
     /**
 174   
      * Describe <code>createVariables</code> method here.
 175   
      * 
 176   
      * @return
 177   
      */
 178  0
     public Variables createVariables() {
 179  0
         return new VariablesImpl();
 180   
     }
 181   
 
 182   
     /**
 183   
      * Create a Variable with all possible attributes. Register the created
 184   
      * Variable for retrieval by an invoke or receive element.
 185   
      * 
 186   
      * @param name
 187   
      * @param messageType
 188   
      * @param type
 189   
      * @param element
 190   
      * @return a <code>Variable</code> value
 191   
      */
 192  142
     public Variable createVariable(String name, String messageType,
 193   
             String type, String element) {
 194   
 
 195  142
         Variable variable = new VariableImpl();
 196   
 
 197  142
         variable.setName(name);
 198  142
         variable.setMessageType(expandToQName(messageType));
 199  142
         variable.setType(expandToQName(type));
 200  142
         variable.setElement(expandToQName(element));
 201   
 
 202  142
         variables.put(name, variable);
 203   
 
 204  142
         return variable;
 205   
     }
 206   
 
 207   
     /**
 208   
      * Create a Correlation with all parameters. If the pattern parameter is
 209   
      * null or empty, no CorrelationPattern object will be set.
 210   
      * 
 211   
      * @param set
 212   
      * @param initiate
 213   
      * @param pattern
 214   
      * @return
 215   
      */
 216  0
     public Object createCorrelation(String set, String initiate, String pattern) {
 217  0
         Correlation correlation = new CorrelationImpl();
 218  0
         correlation.setSet(set);
 219  0
         correlation.setInitiate(BooleanUtils.yesNoToBoolean(initiate));
 220  0
         if (StringUtils.isNullOrEmpty(pattern)) {
 221  0
             correlation.setPattern(createCorrelationPattern(pattern));
 222   
         }
 223  0
         return correlation;
 224   
     }
 225   
 
 226   
     /**
 227   
      * Create a CorrelationPattern with a patternString.
 228   
      * 
 229   
      * @param patternString
 230   
      *            a <code>String</code> value
 231   
      * @return a CorrelationPattern object
 232   
      */
 233  0
     public CorrelationPattern createCorrelationPattern(String patternString) {
 234  0
         CorrelationPattern pattern = new CorrelationPatternImpl();
 235  0
         pattern.setCorrelationString(patternString);
 236  0
         return pattern;
 237   
     }
 238   
 
 239   
     //**************************************************/
 240   
     // create activities
 241   
     //**************************************************/
 242   
 
 243   
     /**
 244   
      * Describe <code>createAssign</code> method here.
 245   
      * 
 246   
      * @param standardAttributes
 247   
      * @return assign BPEL activity
 248   
      */
 249  40
     public Assign createAssign(StandardAttributes standardAttributes) {
 250  40
         return new AssignImpl(standardAttributes);
 251   
     }
 252   
 
 253   
     /**
 254   
      * Create a new Sequence BPEL activity.
 255   
      * 
 256   
      * @param standardAttributes
 257   
      *            a <code>StandardAttributes</code> value
 258   
      * @return Sequence activity
 259   
      */
 260  0
     public Sequence createSequence(StandardAttributes standardAttributes) {
 261  0
         return new SequenceImpl(standardAttributes);
 262   
     }
 263   
 
 264   
     /**
 265   
      * Create a Receive Activity with all possible attributes. A Receive created
 266   
      * this way will be linked with an already defined existing Variables.
 267   
      * 
 268   
      * @param standardAttributes
 269   
      *            a <code>StandardAttributes</code> value
 270   
      * @param partnerLinkName
 271   
      *            a <code>String</code> value
 272   
      * @param portTypeString
 273   
      *            a <code>String</code> value
 274   
      * @param operation
 275   
      * @param variableName
 276   
      *            a <code>String</code> value
 277   
      * @param createInstance
 278   
      * @return Receive activity
 279   
      */
 280  38
     public Receive createReceive(StandardAttributes standardAttributes,
 281   
             String partnerLinkName, String portTypeString, String operation,
 282   
             String variableName, String createInstance) {
 283   
 
 284  38
         PartnerLink partnerLink = retrievePartnerLink(partnerLinkName);
 285  38
         QName portType = expandToQName(portTypeString);
 286  38
         Variable variable = retrieveVariable(variableName);
 287   
 
 288  38
         Receive receive = new ReceiveImpl(standardAttributes, partnerLink,
 289   
                 portType, operation, variable, createInstance);
 290   
 
 291  38
         return receive;
 292   
     }
 293   
 
 294   
     /**
 295   
      * Create an Invoke Activity with all possible attributes. An Invoke created
 296   
      * this way will be linked with already defined and existing Variables and
 297   
      * PartnerLinks.
 298   
      * 
 299   
      * @param standardAttributes
 300   
      *            a <code>StandardAttributes</code> value
 301   
      * @param partnerLinkName
 302   
      *            a <code>String</code> value
 303   
      * @param portTypeString
 304   
      *            a <code>String</code> value
 305   
      * @param operation
 306   
      * @param inVariableName
 307   
      *            a <code>String</code> value
 308   
      * @param outVariableName
 309   
      *            a <code>String</code> value
 310   
      * @return
 311   
      */
 312  62
     public Object createInvoke(StandardAttributes standardAttributes,
 313   
             String partnerLinkName, String portTypeString, String operation,
 314   
             String inVariableName, String outVariableName) {
 315   
 
 316  62
         PartnerLink partnerLink = retrievePartnerLink(partnerLinkName);
 317  62
         QName portType = expandToQName(portTypeString);
 318  62
         Variable inVariable = retrieveVariable(inVariableName);
 319  62
         Variable outVariable = retrieveVariable(outVariableName);
 320   
 
 321  62
         Invoke invoke = new InvokeImpl(standardAttributes, partnerLink,
 322   
                 portType, operation, inVariable, outVariable);
 323   
 
 324  62
         return invoke;
 325   
     }
 326   
 
 327   
     /**
 328   
      * Describe <code>createReply</code> method here.
 329   
      * 
 330   
      * @param attributes
 331   
      * @param partnerLink
 332   
      * @param portType
 333   
      * @param operation
 334   
      * @param variable
 335   
      * @param faultName
 336   
      * @return
 337   
      */
 338  16
     public Reply createReply(StandardAttributes attributes, String partnerLink,
 339   
             String portType, String operation, String variable, String faultName) {
 340   
 
 341  16
         Reply reply = new ReplyImpl(attributes);
 342   
 
 343  16
         reply.setPartnerLink(retrievePartnerLink(partnerLink));
 344  16
         reply.setPortType(expandToQName(portType));
 345  16
         reply.setOperation(operation);
 346  16
         reply.setVariable(retrieveVariable(variable));
 347  16
         reply.setFaultName(expandToQName(faultName));
 348   
 
 349  16
         return reply;
 350   
     }
 351   
 
 352   
     /**
 353   
      * Describe <code>createSwitch</code> method here.
 354   
      * 
 355   
      * @param standardAttributes
 356   
      * @return
 357   
      */
 358  4
     public Object createSwitch(StandardAttributes standardAttributes) {
 359  4
         Switch bpelSwitch = new SwitchImpl(standardAttributes);
 360  4
         return bpelSwitch;
 361   
     }
 362   
 
 363   
     //**************************************************/
 364   
     // create elements
 365   
     //**************************************************/
 366   
 
 367   
     /**
 368   
      * Create a From with all possible attributes. Variables and PartnerLinks
 369   
      * will not be created but retrieved from the enclosing process instead.
 370   
      * 
 371   
      * @param variable
 372   
      * @param part
 373   
      * @param property
 374   
      * @param partnerLink
 375   
      * @param endpointReference
 376   
      * @param expression
 377   
      * @param opaque
 378   
      * @return
 379   
      */
 380  40
     public From createFrom(String variable, String part, String property,
 381   
             String partnerLink, String endpointReference, String expression,
 382   
             String opaque) {
 383   
 
 384  40
         From from = new FromImpl();
 385   
 
 386  40
         from.setVariable(retrieveVariable(variable));
 387  40
         from.setPart(part);
 388  40
         from.setProperty(expandToQName(property));
 389  40
         from.setPartnerLink(retrievePartnerLink(partnerLink));
 390  40
         from.setEndpointReference(new RolesImpl(endpointReference));
 391  40
         from.setExpression(expression);
 392  40
         from.setOpaque(BooleanUtils.yesNoToBoolean(opaque));
 393   
 
 394  40
         return from;
 395   
     }
 396   
 
 397   
     /**
 398   
      * Create a To with all possible attributes. Variables and PartnerLinks will
 399   
      * not be created but retrieved from the enclosing process instead.
 400   
      * 
 401   
      * @param variable
 402   
      * @param part
 403   
      * @param property
 404   
      * @param partnerLink
 405   
      * @return
 406   
      */
 407  40
     public To createTo(String variable, String part, String property,
 408   
             String partnerLink) {
 409   
 
 410  40
         To to = new ToImpl();
 411   
 
 412  40
         to.setVariable(retrieveVariable(variable));
 413  40
         to.setPart(part);
 414  40
         to.setProperty(expandToQName(property));
 415  40
         to.setPartnerLink(retrievePartnerLink(partnerLink));
 416   
 
 417  40
         return to;
 418   
     }
 419   
 
 420   
     /**
 421   
      * Create a new BpelCase for the use within a Switch activity. Create this
 422   
      * BpelCase with a boolean condition used for selecting the BpelCase among
 423   
      * all cases within a Switch.
 424   
      * 
 425   
      * @param condition
 426   
      * @return
 427   
      */
 428  4
     public BpelCase createBpelCase(String condition) {
 429  4
         BpelCase bpelCase = new BpelCaseImpl();
 430  4
         bpelCase.setBooleanExpression(new BooleanExpressionImpl(condition));
 431  4
         return bpelCase;
 432   
     }
 433   
 
 434   
     //**************************************************/
 435   
     // retrieve methods
 436   
     //**************************************************/
 437   
 
 438   
     /**
 439   
      * Retrieve an already created PartnerLink for an Activity using
 440   
      * partnerLinks. If the partnerLinkName is null, empty or a PartnerLink with
 441   
      * this name has not been created, this method will return a null value.
 442   
      * 
 443   
      * @param partnerLinkName
 444   
      *            the name of the PartnerLink to be retrieved.
 445   
      * @return a PartnerLink or null.
 446   
      */
 447  202
     public PartnerLink retrievePartnerLink(String partnerLinkName) {
 448  202
         if (StringUtils.isNullOrEmpty(partnerLinkName)) {
 449  80
             return null;
 450   
         }
 451  122
         return (PartnerLink) partnerLinks.get(partnerLinkName);
 452   
     }
 453   
 
 454   
     /**
 455   
      * Retrieve an already created Variable for an Activity using variables. If
 456   
      * the variableName parameter is null, empty or the Variable has not been
 457   
      * created, this method will return null value.
 458   
      * 
 459   
      * @param variableName
 460   
      *            the name of the Variable to be retrieved.
 461   
      * @return a Variable or null if the variableName is null, empty or a
 462   
      *         Variable with this name has not yet been created.
 463   
      */
 464  266
     public Variable retrieveVariable(String variableName) {
 465  266
         if (StringUtils.isNullOrEmpty(variableName)) {
 466  32
             return null;
 467   
         }
 468  234
         return (Variable) variables.get(variableName);
 469   
     }
 470   
 
 471   
     //**************************************************/
 472   
     // helper methods
 473   
     //**************************************************/
 474   
 
 475   
     /**
 476   
      * @param qName
 477   
      * @return
 478   
      */
 479  734
     private QName expandToQName(String qName) {
 480  734
         String[] parts = StringUtils.split(qName);
 481  734
         String namespaceUri;
 482  734
         if (nameSpaces.get(parts[0]) == null) {
 483  422
             namespaceUri = "";
 484   
         } else {
 485  312
             namespaceUri = (String) nameSpaces.get(parts[0]);
 486   
         }
 487  734
         return new QName(namespaceUri, parts[1]);
 488   
     }
 489   
 
 490   
 }