private void setPostProcessingScript() throws ValidationException {

    Form form = getForm();
    DeploymentModule module = castToModule();
    Set<String> formitems = getForm().getNames();

    // Look for the post-processing entry
    for (String item : formitems.toArray(new String[0])) {
      if (item.equals("post-processing")) {
        ModuleParameter parameter =
            new ModuleParameter(item, form.getFirstValue(item), "Post-Processing script");
        module.setParameter(parameter);
      }
    }
  }
  private void parseNodeMapping() throws ValidationException {

    DeploymentModule module = castToModule();
    module.getNodes().clear();

    Set<String> formitems = getForm().getNames();

    // will contain the mapping between nodeindex and mappings
    // (parameter mapping)
    HashMap<String, List<String>> nodeMappingList = new HashMap<String, List<String>>();
    // will contain the mapping between nodeindex and node shortname
    HashMap<String, String> indexToNode = new HashMap<String, String>();

    // items should be encoded as:
    // node--[nodeindex]--mappingstable--[mappingindex]--[value]
    // Or node--[index]--shortname
    // We start by extracting the node indices and the mappings
    for (String item : formitems.toArray(new String[0])) {
      if (item.startsWith("node--")) {
        String nodeindex = item.split("--")[1]; // get the nodeindex
        // Extract the node indexes
        if (item.endsWith("--shortname")) {
          String shortName = getForm().getFirstValue(item);
          indexToNode.put(nodeindex, shortName);
          List<String> mapping = nodeMappingList.get(nodeindex);
          if (mapping == null) {
            mapping = new ArrayList<String>();
          }
          nodeMappingList.put(nodeindex, mapping);
          continue;
        }
        if (item.contains("--mappingtable--")) {
          List<String> mapping = nodeMappingList.get(nodeindex);
          if (mapping == null) {
            mapping = new ArrayList<String>();
          }
          String mappingIndex = item.split("--")[3];
          mapping.add(mappingIndex);
          nodeMappingList.put(nodeindex, mapping);
        }
      }
    }

    // Iterate over the local structure and extract the corresponding
    // data from the form
    for (Entry<String, List<String>> nodeentry : nodeMappingList.entrySet()) {
      String nodeindex = nodeentry.getKey();
      String shortname = getForm().getFirstValue("node--" + nodeindex + "--shortname");

      if (shortname == null) {
        throw (new ValidationException("Missing node shortname"));
      }

      Node node = createNode(nodeindex, shortname);

      if (module.parametersContainKey(shortname)) {
        throw (new ValidationException(
            "Node short names must be unique. '"
                + shortname.replace("<", "&lt;")
                + "' is already defined"));
      }

      for (String mappingindex : nodeentry.getValue()) {
        String input =
            getForm()
                .getFirstValue(
                    "node--" + nodeindex + "--mappingtable--" + mappingindex + "--input");
        if (input == null) {
          throw (new ValidationException(
              "Node " + node.getName() + " contains an empty input parameter"));
        }
        String output =
            getForm()
                .getFirstValue(
                    "node--" + nodeindex + "--mappingtable--" + mappingindex + "--output");
        if (output == null) {
          throw (new ValidationException(
              "Node " + node.getName() + " is missing a linked parameter for " + input));
        }
        if (output.startsWith(shortname + RuntimeParameter.NODE_PROPERTY_SEPARATOR)) {
          throw (new ValidationException("Output parameters cannot refer to their own node"));
        }
        node.setParameterMapping(new NodeParameter(input, output, ""));
      }

      setMultiplicity(getForm(), nodeindex, node);

      setCloudService(getForm(), nodeindex, node);

      setMaxProvisioningFailures(getForm(), nodeindex, node);

      module.setNode(node);
    }
  }