/**
   * gets the redirect URL as workaround for opening a new window or refreshing a window (Noscript
   * version)
   */
  private String getWindowOpener() {
    String result = "";
    IServiceStateInfo stateInfo = ContextProvider.getStateInfo();
    WebForm activeForm = FormManager.getActive();

    WebForm[] allForms = FormManager.getAll();
    boolean finished = false;
    for (int i = 0; !finished && i < allForms.length; i++) {
      WebForm form = allForms[i];
      IFormAdapter formAdapter = WebFormUtil.getFormAdapter(form);
      if (stateInfo.isExpired()) {
        if (!formAdapter.getWindowOpenerBuffer().equals("")) {
          result = formAdapter.getWindowOpenerBuffer();
          finished = true;
        }
      } else {
        if (WebComponentControl.openInNewWindow(form) || WebComponentControl.refreshWindow(form)) {
          result =
              "<meta http-equiv=\"refresh\" content=\"0; url="
                  + RenderUtil.createEncodedFormGetURL(form)
                  + "\">";
          formAdapter.addWindowOpenerBuffer(result);
          NoscriptFormStack.getInstance().push(activeForm);
          finished = true;
        } else {
          formAdapter.addWindowOpenerBuffer("");
        }
      }
    }
    return result;
  }
 private String getWindowCloser() {
   String result = "";
   boolean isActiveForm = false;
   WebForm[] allForms = FormManager.getAll();
   // remove all closed windows except the active window
   for (int i = 0; i < allForms.length; i++) {
     WebForm form = allForms[i];
     if (form != FormManager.getActive()) {
       IWindow window = W4TContext.getWindowManager().findWindow(form);
       if (window != null && WindowManager.isClosing(window)) {
         NoscriptFormStack.getInstance().remove(form);
       }
     }
   }
   // 'close' active window
   IWindow activeWindow = WindowManager.getActive();
   if (WindowManager.isClosing(activeWindow) && !WindowManager.isClosed(activeWindow)) {
     isActiveForm = true;
     NoscriptFormStack.getInstance().remove(FormManager.getActive());
     WindowManager.setClosed(activeWindow, true);
   }
   // create meta tag to redirect to previous form
   if (isActiveForm && !NoscriptFormStack.getInstance().isEmpty()) {
     WebForm newForm = NoscriptFormStack.getInstance().pop();
     result =
         "<meta http-equiv=\"refresh\" content=\"0; url="
             + RenderUtil.createEncodedFormGetURL(newForm)
             + "\">";
   }
   return result;
 }
 /** builds the String containing attributes for the <body> tag */
 StringBuffer getBodyAttributes() {
   StringBuffer result = new StringBuffer();
   WebForm form = FormManager.getActive();
   if (form != null) {
     HTMLUtil.attribute(result, HTML.BGCOLOR, form.getBgColor().toString());
     HTMLUtil.attribute(result, HTML.TEXT, form.getTextColor().toString());
     HTMLUtil.attribute(result, HTML.LEFTMARGIN, form.getLeftmargin());
     HTMLUtil.attribute(result, HTML.TOPMARGIN, form.getTopmargin());
     HTMLUtil.attribute(result, HTML.MARGINHEIGHT, form.getMarginheight());
     HTMLUtil.attribute(result, HTML.MARGINWIDTH, form.getMarginwidth());
     result.append(" ");
     result.append(WebComponentControl.getUniversalAttributes(form));
     result.append(" ");
   }
   return result;
 }
  public Form deserializeForm(Node nodeForm, String path, Map<String, Properties> resources)
      throws Exception {
    if (!nodeForm.getNodeName().equals(NODE_FORM)) return null;

    Form form = formManager.createForm("");
    form.setId(
        Long.valueOf(
            StringEscapeUtils.unescapeXml(
                nodeForm.getAttributes().getNamedItem(ATTR_ID).getNodeValue())));

    Set<Field> fields = new TreeSet<Field>();
    NodeList childNodes = nodeForm.getChildNodes();
    for (int i = 0; i < childNodes.getLength(); i++) {
      Node node = childNodes.item(i);
      if (node.getNodeName().equals(NODE_PROPERTY)) {
        String propName = node.getAttributes().getNamedItem(ATTR_NAME).getNodeValue();
        String value =
            StringEscapeUtils.unescapeXml(
                node.getAttributes().getNamedItem(ATTR_VALUE).getNodeValue());
        if ("subject".equals(propName)) {
          form.setSubject(value);
        } else if ("name".equals(propName)) {
          form.setName(value);
        } else if ("displayMode".equals(propName)) {
          form.setDisplayMode(value);
        } else if ("labelMode".equals(propName)) {
          form.setLabelMode(value);
        } else if ("showMode".equals(propName)) {
          form.setShowMode(value);
        } else if ("status".equals(propName)) {
          form.setStatus(Long.valueOf(value));
        } else if ("formTemplate".equals(propName)) {
          form.setFormTemplate(value);
        }
      } else if (node.getNodeName().equals(NODE_FIELD)) {
        Field field = deserializeField(form, node, resources);
        field.setForm(form);
        fields.add(field);
      } else if (node.getNodeName().equals(NODE_DATA_HOLDER)) {
        String holderId = getNodeAttributeValue(node, ATTR_ID);
        String holderInputId = getNodeAttributeValue(node, ATTR_INPUT_ID);
        String holderOutId = getNodeAttributeValue(node, ATTR_OUT_ID);
        String holderType = getNodeAttributeValue(node, ATTR_TYPE);
        String holderValue = getNodeAttributeValue(node, ATTR_VALUE);
        String holderRenderColor = getNodeAttributeValue(node, ATTR_NAME);
        String holderSupportedType = getNodeAttributeValue(node, ATTR_SUPPORTED_TYPE);

        if (!StringUtils.isEmpty(holderId)
            && !StringUtils.isEmpty(holderType)
            && !StringUtils.isEmpty(holderValue)) {

          DataHolderBuildConfig config =
              new DataHolderBuildConfig(
                  holderId, holderInputId, holderOutId, holderRenderColor, holderValue);
          config.addAttribute("path", path);
          if (!StringUtils.isEmpty(holderSupportedType))
            config.addAttribute(ATTR_SUPPORTED_TYPE, holderSupportedType);

          DataHolder holder = dataHolderManager.createDataHolderByType(holderType, config);

          if (!StringUtils.isEmpty(holderId)) form.setDataHolder(holder);
        }
      }
    }
    if (fields != null) form.setFormFields(fields);
    return form;
  }
 protected void recreateViews() {
   formManager.recreateViews();
 }
 public FormController getFormController() {
   return formManager.getFormController();
 }