protected CallMediator getCallMediator(SequenceMediator sequence) {
   CallMediator callMediator = null;
   int size = sequence.getList().size();
   if (size > 0 && sequence.getList().get(size - 1) instanceof CallMediator) {
     callMediator = (CallMediator) sequence.getList().get(size - 1);
   } else {
     callMediator = new CallMediator();
     sequence.addChild(callMediator);
   }
   return callMediator;
 }
 protected SendMediator getSendMediator(SequenceMediator sequence) {
   SendMediator sendMediator = null;
   int size = sequence.getList().size();
   if (size > 0 && sequence.getList().get(size - 1) instanceof SendMediator) {
     sendMediator = (SendMediator) sequence.getList().get(size - 1);
   } else {
     sendMediator = new SendMediator();
     sequence.addChild(sendMediator);
   }
   return sendMediator;
 }
 protected void setEndpointToSendOrCallMediator(SequenceMediator sequence, Endpoint synapseEP) {
   int size = sequence.getList().size();
   Object mediator = null;
   if (size > 0) {
     mediator = sequence.getList().get(size - 1);
   }
   if (mediator instanceof SendMediator) {
     SendMediator sendMediator = getSendMediator(sequence);
     sendMediator.setEndpoint(synapseEP);
   } else if (mediator instanceof CallMediator) {
     CallMediator callMediator = getCallMediator(sequence);
     callMediator.setEndpoint(synapseEP);
   }
 }
  /**
   * Deserialize a sequence
   *
   * @param mediatorFlow
   * @param sequence
   * @param connector
   * @param reversed
   * @throws DeserializerException
   */
  protected void deserializeSequence(
      IGraphicalEditPart part,
      SequenceMediator sequenceMediator,
      EsbConnector connector,
      boolean reversed)
      throws DeserializerException {
    LinkedList<EsbNode> nodeList = new LinkedList<>();
    LinkedList<CommentMediator> commentMediatorList = new LinkedList<>();
    SequenceMediator sequence = EditorUtils.stripUnsupportedMediators(sequenceMediator);

    TransactionalEditingDomain domain = part.getEditingDomain();

    if (connector instanceof OutputConnector) {
      int mediatorsCount = sequence.getList().size();
      boolean lastMediator = false;
      for (int i = 0; i < mediatorsCount; ++i) {
        AbstractMediator mediator = (AbstractMediator) sequence.getList().get(i);
        if (mediatorsCount == (i + 1)) {
          lastMediator = true;
        }
        if (reversedNodes.contains(connector.eContainer())) {
          executeMediatorDeserializer(
              part, nodeList, domain, mediator, true, commentMediatorList, lastMediator);
          reversedNodes.addAll(nodeList);
        } else {
          executeMediatorDeserializer(
              part, nodeList, domain, mediator, reversed, commentMediatorList, lastMediator);
          if (reversed) {
            reversedNodes.addAll(nodeList);
          }
        }
      }
      connectionFlowMap.put(connector, nodeList);
    } else if (connector instanceof InputConnector) {
      int mediatorsCount = sequence.getList().size();
      boolean lastMediator = false;
      for (int i = mediatorsCount - 1; i >= 0; --i) {
        if (i == 0) {
          lastMediator = true;
        }
        AbstractMediator mediator = (AbstractMediator) sequence.getList().get(i);
        executeMediatorDeserializer(
            part, nodeList, domain, mediator, true, commentMediatorList, lastMediator);
      }
      connectionFlowMap.put(connector, nodeList);
      reversedNodes.addAll(nodeList);
    }
  }
  private org.apache.synapse.mediators.builtin.ValidateMediator createValidateMediator(
      EsbNode subject, TransformationInfo information) throws TransformerException, JaxenException {

    /*
     * Check subject.
     */
    Assert.isTrue(subject instanceof ValidateMediator, "Invalid subject.");
    ValidateMediator visualValidateMediator = (ValidateMediator) subject;
    /*
     * Configure Validate mediator.
     */

    org.apache.synapse.mediators.builtin.ValidateMediator validateMediator =
        new org.apache.synapse.mediators.builtin.ValidateMediator();
    setCommonProperties(validateMediator, visualValidateMediator);

    NamespacedProperty sourceXPath = visualValidateMediator.getSourceXpath();
    if (sourceXPath.getPropertyValue() != null && !sourceXPath.getPropertyValue().equals("")) {
      SynapseXPath synapseXPath = new SynapseXPath(sourceXPath.getPropertyValue());
      for (Entry<String, String> entry : sourceXPath.getNamespaces().entrySet()) {
        synapseXPath.addNamespace(entry.getKey(), entry.getValue());
      }
      validateMediator.setSource(synapseXPath);
    }

    List<Value> valueList = new ArrayList<Value>();
    for (ValidateSchema schema : visualValidateMediator.getSchemas()) {

      if (schema.getValidateSchemaKeyType().getLiteral().equals(KeyType.STATIC.getLiteral())) {

        if (schema.getValidateStaticSchemaKey() != null
            && schema.getValidateStaticSchemaKey().getKeyValue() != null) {
          Value val = new Value(schema.getValidateStaticSchemaKey().getKeyValue());
          valueList.add(val);
        }

      } else {

        NamespacedProperty dynamicSchemaKey = schema.getValidateDynamicSchemaKey();
        if (dynamicSchemaKey != null && dynamicSchemaKey.getPropertyValue() != null) {
          SynapseXPath xpath = new SynapseXPath(dynamicSchemaKey.getPropertyValue());
          for (Entry<String, String> entry : dynamicSchemaKey.getNamespaces().entrySet()) {
            xpath.addNamespace(entry.getKey(), entry.getValue());
          }
          Value val = new Value(xpath);
          valueList.add(val);
        }
      }
    }
    validateMediator.setSchemaKeys(valueList);

    // ListMediator onFailMediatorList = new AnonymousListMediator();
    SequenceMediator onFailMediatorList = new SequenceMediator();
    TransformationInfo newOnFailInfo = new TransformationInfo();
    newOnFailInfo.setTraversalDirection(information.getTraversalDirection());
    newOnFailInfo.setSynapseConfiguration(information.getSynapseConfiguration());
    newOnFailInfo.setOriginInSequence(information.getOriginInSequence());
    newOnFailInfo.setOriginOutSequence(information.getOriginOutSequence());
    newOnFailInfo.setCurrentProxy(information.getCurrentProxy());
    newOnFailInfo.setParentSequence(onFailMediatorList);
    doTransform(newOnFailInfo, visualValidateMediator.getOnFailOutputConnector());
    validateMediator.addAll(onFailMediatorList.getList());

    for (ValidateFeature feature : visualValidateMediator.getFeatures()) {
      try {
        validateMediator.addFeature(feature.getFeatureName(), feature.isFeatureEnabled());
      } catch (Exception e) {
        log.error(e);
      }
    }

    if (!visualValidateMediator.getResources().isEmpty()) {

      ResourceMap rMap = new ResourceMap();

      for (ValidateResource resource : visualValidateMediator.getResources()) {

        if (resource.getLocation() != null && resource.getKey() != null) {

          rMap.addResource(resource.getLocation(), resource.getKey().getKeyValue());
        }
      }

      validateMediator.setResourceMap(rMap);
    }

    return validateMediator;
  }