public String getInputType() {
   if (pathArgumentList.size() > 0) {
     Object argument = pathArgumentList.get(0);
     if (argument != null && argument instanceof SynapseXPath) {
       return XML_TYPE;
     } else if (argument != null && argument instanceof SynapseJsonPath) {
       return JSON_TYPE;
     }
   }
   return null;
 }
 public static List<OMElement> getChildsWithName(
     OMElement head, String widgetName, String namespace) {
   String adjustedName = getDataElementName(widgetName);
   if (adjustedName == null) {
     return null;
   }
   List<OMElement> list = new ArrayList<OMElement>();
   Iterator headingList = head.getChildrenWithName(new QName(namespace, adjustedName));
   while (headingList.hasNext()) {
     OMElement subheading = (OMElement) headingList.next();
     list.add(subheading);
   }
   return list;
 }
 private OMElement resolveImports(
     OMElement grammarsElement, String wadlBaseUri, String wadlVersion) throws RegistryException {
   String wadlNamespace = grammarsElement.getNamespace().getNamespaceURI();
   Iterator<OMElement> grammarElements =
       grammarsElement.getChildrenWithName(new QName(wadlNamespace, "include"));
   while (grammarElements.hasNext()) {
     OMElement childElement = grammarElements.next();
     OMAttribute refAttr = childElement.getAttribute(new QName("href"));
     String importUrl = refAttr.getAttributeValue();
     if (importUrl.endsWith(".xsd")) {
       if (!importUrl.startsWith("http")) {
         if (registry.resourceExists(importUrl)) {
           continue;
         } else {
           if (wadlBaseUri != null) {
             importUrl = wadlBaseUri + importUrl;
           }
         }
       }
       String schemaPath = saveSchema(importUrl, wadlVersion);
       importedSchemas.add(schemaPath);
       refAttr.setAttributeValue(schemaPath);
       childElement.addAttribute(refAttr);
     }
   }
   return grammarsElement;
 }
 /**
  * Goes through SynapsePath argument list, evaluating each by calling stringValueOf and returns a
  * HashMap String, String array where each item will contain a hash map with key "evaluated
  * expression" and value "SynapsePath type".
  *
  * @param synCtx
  * @return
  */
 private HashMap<String, String>[] getArgValues(MessageContext synCtx) {
   HashMap<String, String>[] argValues = new HashMap[pathArgumentList.size()];
   HashMap<String, String> valueMap;
   String value = "";
   for (int i = 0; i < pathArgumentList.size(); ++i) {
       /*ToDo use foreach*/
     Argument arg = pathArgumentList.get(i);
     if (arg.getValue() != null) {
       value = arg.getValue();
       if (!isWellFormedXML(value)) {
         value = StringEscapeUtils.escapeXml(value);
       }
       value = Matcher.quoteReplacement(value);
     } else if (arg.getExpression() != null) {
       value = arg.getExpression().stringValueOf(synCtx);
       if (value != null) {
         // XML escape the result of an expression that produces a literal, if the target format
         // of the payload is XML.
         if (!isWellFormedXML(value)
             && !arg.getExpression().getPathType().equals(SynapsePath.JSON_PATH)
             && XML_TYPE.equals(getType())) {
           value = StringEscapeUtils.escapeXml(value);
         }
         value = Matcher.quoteReplacement(value);
       } else {
         value = "";
       }
     } else {
       handleException("Unexpected arg type detected", synCtx);
     }
     // value = value.replace(String.valueOf((char) 160), " ").trim();
     valueMap = new HashMap<String, String>();
     if (null != arg.getExpression()) {
       valueMap.put(value, arg.getExpression().getPathType());
     } else {
       valueMap.put(value, SynapsePath.X_PATH);
     }
     argValues[i] = valueMap;
   }
   return argValues;
 }
 public static SimulationResponse getSimulationResponse() {
   Map<String, List<String[]>> status = simulationService.getSimulationStatus();
   int entryCount = 0;
   Map<Integer, HandlerExecutionStatus> executionStatusMap =
       new HashMap<Integer, HandlerExecutionStatus>();
   if (status != null) {
     for (Map.Entry<String, List<String[]>> e : status.entrySet()) {
       if (e.getKey() != null && e.getValue() != null) {
         if (e.getValue().size() > 0) {
           for (String[] v : e.getValue()) {
             if (v != null && v.length == 2) {
               HandlerExecutionStatus executionStatus = new HandlerExecutionStatus();
               executionStatus.setHandlerName(e.getKey());
               executionStatus.setExecutionStatus(v[0]);
               int order = Integer.parseInt(v[1]);
               executionStatusMap.put(order, executionStatus);
               if (order > entryCount) {
                 entryCount = order;
               }
             }
           }
         }
       }
     }
   }
   List<HandlerExecutionStatus> executionStatusList = new LinkedList<HandlerExecutionStatus>();
   int i = 0;
   while (i < entryCount) {
     i++;
     HandlerExecutionStatus executionStatus = executionStatusMap.get(i);
     if (executionStatus != null) {
       executionStatusList.add(executionStatus);
     }
   }
   SimulationResponse response = new SimulationResponse();
   response.setStatus(
       executionStatusList.toArray(new HandlerExecutionStatus[executionStatusList.size()]));
   return response;
 }
 /**
  * Helper function to remove indentations.
  *
  * @param element
  * @param removables
  */
 private void removeIndentations(OMElement element, List<OMText> removables) {
   Iterator children = element.getChildren();
   while (children.hasNext()) {
     Object next = children.next();
     if (next instanceof OMText) {
       OMText text = (OMText) next;
       if (text.getText().trim().equals("")) {
         removables.add(text);
       }
     } else if (next instanceof OMElement) {
       removeIndentations((OMElement) next, removables);
     }
   }
 }
 public void addPathArgument(Argument arg) {
   pathArgumentList.add(arg);
 }
 public static void buildMenuItems(HttpServletRequest request, String s, String s1, String s2) {
   int menuOrder = 50;
   if (CarbonUIUtil.isUserAuthorized(request, "/permission/admin/manage/resources/ws-api")) {
     HttpSession session = request.getSession();
     String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE);
     try {
       WSRegistryServiceClient registry = new WSRegistryServiceClient(s2, cookie);
       List<GovernanceArtifactConfiguration> configurations =
           GovernanceUtils.findGovernanceArtifactConfigurations(registry);
       Map<String, String> customAddUIMap = new LinkedHashMap<String, String>();
       Map<String, String> customViewUIMap = new LinkedHashMap<String, String>();
       List<Menu> userCustomMenuItemsList = new LinkedList<Menu>();
       for (GovernanceArtifactConfiguration configuration : configurations) {
         Component component = new Component();
         OMElement uiConfigurations = configuration.getUIConfigurations();
         String key = configuration.getKey();
         String configurationPath =
             RegistryConstants.CONFIG_REGISTRY_BASE_PATH
                 + RegistryConstants.GOVERNANCE_COMPONENT_PATH
                 + "/configuration/";
         String layoutStoragePath = configurationPath + key;
         RealmService realmService = registry.getRegistryContext().getRealmService();
         if (realmService
                 .getTenantUserRealm(realmService.getTenantManager().getTenantId(s1))
                 .getAuthorizationManager()
                 .isUserAuthorized(s, configurationPath, ActionConstants.PUT)
             || registry.resourceExists(layoutStoragePath)) {
           List<Menu> menuList = component.getMenusList();
           if (uiConfigurations != null) {
             ComponentBuilder.processMenus("artifactType", uiConfigurations, component);
             ComponentBuilder.processCustomUIs(uiConfigurations, component);
           }
           if (menuList.size() == 0) {
             // if no menu definitions were present, define the default ones.
             menuOrder = buildMenuList(request, configuration, menuList, key, menuOrder);
           }
           userCustomMenuItemsList.addAll(menuList);
           customAddUIMap.putAll(component.getCustomAddUIMap());
           Map<String, String> viewUIMap = component.getCustomViewUIMap();
           if (viewUIMap.isEmpty()) {
             // if no custom UI definitions were present, define the default.
             buildViewUI(configuration, viewUIMap, key);
           }
           customViewUIMap.putAll(viewUIMap);
           OMElement layout = configuration.getContentDefinition();
           if (layout != null && !registry.resourceExists(layoutStoragePath)) {
             Resource resource = registry.newResource();
             resource.setContent(RegistryUtils.encodeString(layout.toString()));
             resource.setMediaType("application/xml");
             registry.put(layoutStoragePath, resource);
           }
         }
       }
       session.setAttribute(
           MenuAdminClient.USER_CUSTOM_MENU_ITEMS,
           userCustomMenuItemsList.toArray(new Menu[userCustomMenuItemsList.size()]));
       session.setAttribute("customAddUI", customAddUIMap);
       session.setAttribute("customViewUI", customViewUIMap);
     } catch (RegistryException e) {
       log.error("unable to create connection to registry");
     } catch (org.wso2.carbon.user.api.UserStoreException e) {
       log.error("unable to realm service");
     }
   }
 }
  private static int buildMenuList(
      HttpServletRequest request,
      GovernanceArtifactConfiguration configuration,
      List<Menu> menuList,
      String key,
      int menuOrder) {
    String singularLabel = configuration.getSingularLabel();
    String pluralLabel = configuration.getPluralLabel();
    boolean hasNamespace = configuration.hasNamespace();
    String lifecycleAttribute = key + "Lifecycle_lifecycleName";

    lifecycleAttribute =
        BuilLifecycleAttribute(
            configuration, DEFAULT_LIFECYCLE_GENERATOR_CLASS, lifecycleAttribute);

    if (singularLabel == null || pluralLabel == null) {
      log.error(
          "The singular label and plural label have not "
              + "been defined for the artifact type: "
              + key);
    } else {
      int iconSet = configuration.getIconSet();
      if (CarbonUIUtil.isUserAuthorized(
              request, "/permission/admin/manage/resources/govern/" + key + "/add")
          && CarbonUIUtil.isUserAuthorized(request, "/permission/admin/manage/resources/browse")
          && CarbonUIUtil.isUserAuthorized(request, "/permission/admin/manage/resources/ws-api")) {
        Menu addMenu = new Menu();
        addMenu.setId("governance_add_" + key + "_menu");
        addMenu.setI18nKey(singularLabel);
        addMenu.setParentMenu("add_sub_menu");
        if (configuration.getExtension() == null) {
          addMenu.setLink("../generic/add_edit.jsp");
          addMenu.setUrlParameters(
              "key="
                  + key
                  + "&lifecycleAttribute="
                  + lifecycleAttribute
                  + "&breadcrumb="
                  + singularLabel);
        } else {
          addMenu.setLink("../generic/add_content.jsp");
          addMenu.setUrlParameters(
              "key="
                  + key
                  + "&lifecycleAttribute="
                  + lifecycleAttribute
                  + "&breadcrumb="
                  + singularLabel
                  + "&mediaType="
                  + configuration.getMediaType()
                  + "&extension="
                  + configuration.getExtension()
                  + "&singularLabel="
                  + singularLabel
                  + "&pluralLabel="
                  + pluralLabel
                  + "&hasNamespace"
                  + hasNamespace);
        }
        addMenu.setRegion("region3");
        addMenu.setOrder(String.valueOf(menuOrder));
        addMenu.setStyleClass("manage");
        if (iconSet > 0) {
          addMenu.setIcon("../generic/images/add" + iconSet + ".png");
        } else {
          addMenu.setIcon("../images/add.gif");
        }
        addMenu.setAllPermissionsRequired(true);
        addMenu.setRequirePermission(
            new String[] {
              "/permission/admin/manage/resources/govern/" + key + "/add",
              "/permission/admin/manage/resources/browse",
              "/permission/admin/manage/resources/ws-api"
            });
        menuList.add(addMenu);
      }

      if (CarbonUIUtil.isUserAuthorized(
              request, "/permission/admin/manage/resources/govern/" + key + "/list")
          && CarbonUIUtil.isUserAuthorized(request, "/permission/admin/manage/resources/ws-api")) {
        Menu listMenu = new Menu();
        listMenu.setId("governance_list_" + key + "_menu");
        listMenu.setI18nKey(pluralLabel);
        listMenu.setParentMenu("list_sub_menu");
        if (configuration.getExtension() == null) {
          listMenu.setLink("../generic/list.jsp");
          listMenu.setUrlParameters(
              "key="
                  + key
                  + "&breadcrumb="
                  + pluralLabel
                  + "&singularLabel="
                  + singularLabel
                  + "&pluralLabel="
                  + pluralLabel);
        } else {
          listMenu.setLink("../generic/list_content.jsp");
          listMenu.setUrlParameters(
              "key="
                  + key
                  + "&lifecycleAttribute="
                  + lifecycleAttribute
                  + "&breadcrumb="
                  + singularLabel
                  + "&mediaType="
                  + configuration.getMediaType()
                  + "&singularLabel="
                  + singularLabel
                  + "&pluralLabel="
                  + pluralLabel
                  + "&hasNamespace="
                  + hasNamespace);
        }
        listMenu.setRegion("region3");
        listMenu.setOrder(String.valueOf(menuOrder));
        listMenu.setStyleClass("manage");
        if (iconSet > 0) {
          listMenu.setIcon("../generic/images/list" + iconSet + ".png");
        } else {
          listMenu.setIcon("../images/list.gif");
        }
        listMenu.setAllPermissionsRequired(true);
        listMenu.setRequirePermission(
            new String[] {
              "/permission/admin/manage/resources/govern/" + key + "/list",
              "/permission/admin/manage/resources/ws-api"
            });
        menuList.add(listMenu);
      }
      /*if (CarbonUIUtil.isUserAuthorized(request,
              "/permission/admin/configure/governance/" + key + "-ui")) {
          Menu configureMenu = new Menu();
          configureMenu.setId("governance_" + key + "_config_menu");
          configureMenu.setI18nKey(pluralLabel);
          configureMenu.setParentMenu("configure_menu");
          configureMenu.setLink("../generic/configure.jsp");
          configureMenu.setUrlParameters("key=" + key + "&breadcrumb=" + pluralLabel +
                  "&add_edit_region=region3&add_edit_item=governance_add_" + key + "_menu" +
                  "&lifecycleAttribute=" + lifecycleAttribute +
                  "&add_edit_breadcrumb=" + singularLabel + "&singularLabel=" + singularLabel +
                  "&pluralLabel=" + pluralLabel);
          configureMenu.setRegion("region1");
          configureMenu.setOrder("40");
          configureMenu.setStyleClass("manage");
          if (iconSet > 0) {
              configureMenu.setIcon("../generic/images/configure" + iconSet + ".png");
          } else {
              configureMenu.setIcon("../generic/images/services1.gif");
          }
          configureMenu.setRequirePermission(
                  new String[]{"/permission/admin/configure/governance/" + key + "-ui"});
          menuList.add(configureMenu);
      }*/
      menuOrder++;
    }
    return menuOrder;
  }
  /*
  * This method is used to capture the lifecycle attribute from the configuration.
  *
  * expected configuration elements are
  *
  * <field type="options">
          <name label="Lifecycle Name" >Lifecycle Name</name>
          <values class="org.wso2.carbon.governance.generic.ui.utils.LifecycleListPopulator"/>
      </field>
  *
  * or
  *
  *  <field type="options">
          <name label="Lifecycle Name" >Lifecycle Name</name>
          <values class="com.foo.bar.LifecycleListPopulator" isLifecycle="true"/>
      </field>
  *  */
  private static String BuilLifecycleAttribute(
      GovernanceArtifactConfiguration configuration,
      String defaultLifecycleGeneratorClass,
      String lifecycleAttribute) {
    try {
      //            This part checks whether the user has given a lifecycle populates.
      //            If not, then we check whether there is an attribute called, "isLifecycle"
      //            This attribute will identify the lifecycle attribute from the configuration.
      OMElement configurationElement = configuration.getContentDefinition();
      String xpathExpression = "//@class";

      AXIOMXPath xpath = new AXIOMXPath(xpathExpression);
      List resultNodes = xpath.selectNodes(configurationElement);

      if (resultNodes != null && resultNodes.size() > 0) {
        String lifecycleParentName = null;
        String lifecycleName = null;

        for (Object resultNode : resultNodes) {
          OMElement parentElement = ((OMAttribute) resultNode).getOwner();
          if (parentElement
              .getAttributeValue(new QName("class"))
              .equals(defaultLifecycleGeneratorClass)) {
            Iterator childrenIterator = parentElement.getParent().getChildrenWithLocalName("name");
            while (childrenIterator.hasNext()) {
              OMElement next = (OMElement) childrenIterator.next();
              lifecycleName = next.getAttributeValue(new QName("label"));
            }
            OMElement rootElement = (OMElement) ((OMElement) parentElement.getParent()).getParent();
            lifecycleParentName = rootElement.getAttributeValue(new QName("name"));
            break;
          } else if (parentElement.getAttributeValue(new QName("isLifecycle")) != null
              && parentElement.getAttributeValue(new QName("isLifecycle")).equals("true")) {
            Iterator childrenIterator = parentElement.getParent().getChildrenWithLocalName("name");
            while (childrenIterator.hasNext()) {
              OMElement next = (OMElement) childrenIterator.next();
              lifecycleName = next.getAttributeValue(new QName("label"));
            }
            OMElement rootElement = (OMElement) ((OMElement) parentElement.getParent()).getParent();
            lifecycleParentName = rootElement.getAttributeValue(new QName("name"));
            break;
          }
        }
        if (lifecycleParentName != null && lifecycleName != null) {
          return convertName(lifecycleParentName.split(" "))
              + "_"
              + convertName(lifecycleName.split(" "));
        }
      }

    } catch (OMException e) {
      log.error(
          "Governance artifact configuration of configuration key:"
              + configuration.getKey()
              + " is invalid",
          e);
    } catch (JaxenException e) {
      log.error("Error in getting the lifecycle attribute", e);
    }
    return null;
  }