@Override
  public Configuration loadResourceConfiguration() throws Exception {
    Properties properties = new Properties();
    properties.load(new FileInputStream(jvmOptsFile));

    Configuration config = new Configuration();

    String heapDumpOnOOMError = properties.getProperty("heap_dump_on_OOMError");
    String heapDumpDir = properties.getProperty("heap_dump_dir");

    config.put(new PropertySimple("minHeapSize", getHeapMinProp(properties)));
    config.put(new PropertySimple("maxHeapSize", getHeapMaxProp(properties)));
    config.put(new PropertySimple("heapNewSize", getHeapNewProp(properties)));
    config.put(new PropertySimple("threadStackSize", getStackSizeProp(properties)));

    if (!StringUtil.isEmpty(heapDumpOnOOMError)) {
      config.put(new PropertySimple("heapDumpOnOOMError", true));
    } else {
      config.put(new PropertySimple("heapDumpOnOOMError", false));
    }

    if (!StringUtil.isEmpty(heapDumpDir)) {
      config.put(new PropertySimple("heapDumpDir", heapDumpDir));
    } else {
      File basedir = jvmOptsFile.getParentFile().getParentFile();
      config.put(new PropertySimple("heapDumpDir", new File(basedir, "bin").getAbsolutePath()));
    }

    ConfigEditor yamlEditor = new ConfigEditor(cassandraYamlFile);
    yamlEditor.load();
    config.put(new PropertySimple("cqlPort", yamlEditor.getNativeTransportPort()));
    config.put(new PropertySimple("gossipPort", yamlEditor.getStoragePort()));

    return config;
  }
 public String toString() {
   StringBuffer s = new StringBuffer(super.toString());
   s.append(" filterSubmit=").append(filterSubmit);
   s.append(" filter=").append(StringUtil.arrayToString(filter));
   s.append(" keyword=").append(keyword);
   return s.toString();
 }
  private void setTitle(HttpServletRequest request, Portal portal, String titleName)
      throws Exception {
    Resource resource = RequestUtils.getResource(request);
    ResourceGroup group = RequestUtils.getResourceGroupIfExists(request);
    ResourceType type;
    if (resource != null) {
      // resource alert definition
      type = resource.getResourceType();
    } else if (group != null) {
      // group alert definition
      type = group.getResourceType();
    } else {
      // template alert definition
      type = RequestUtils.getResourceType(request);
    }

    ResourceCategory category = type.getCategory();

    titleName = StringUtil.replace(titleName, "platform", category.toString().toLowerCase());

    portal.setName(titleName);

    // if there's an alert definition available, set our second
    // title parameter to its name
    try {
      AlertDefinition alertDef = AlertDefUtil.getAlertDefinition(request);
      request.setAttribute(Constants.TITLE_PARAM2_ATTR, alertDef.getName());
    } catch (ParameterNotFoundException e) {
      // it's okay
      log.trace("couldn't find alert definition: " + e.getMessage());
    }
  }
  private void updateCassandraJvmProps(Configuration newConfig) throws IOException {
    PropertiesFileUpdate propertiesUpdater =
        new PropertiesFileUpdate(jvmOptsFile.getAbsolutePath());
    Properties properties = propertiesUpdater.loadExistingProperties();

    String jmxPort = newConfig.getSimpleValue("jmxPort");
    if (!StringUtil.isEmpty(jmxPort)) {
      validateIntegerArg("jmx_port", jmxPort);
      properties.setProperty("jmx_port", jmxPort);
    }

    String maxHeapSize = newConfig.getSimpleValue("maxHeapSize");
    if (!StringUtil.isEmpty(maxHeapSize)) {
      validateHeapArg("maxHeapSize", maxHeapSize);
      // We want min and max heap to be the same
      properties.setProperty("heap_min", "-Xms" + maxHeapSize);
      properties.setProperty("heap_max", "-Xmx" + maxHeapSize);
    }

    String heapNewSize = newConfig.getSimpleValue("heapNewSize");
    if (!StringUtil.isEmpty(heapNewSize)) {
      validateHeapArg("heapNewSize", heapNewSize);
      properties.setProperty("heap_new", "-Xmn" + heapNewSize);
    }

    String threadStackSize = newConfig.getSimpleValue("threadStackSize");
    if (!StringUtil.isEmpty(threadStackSize)) {
      validateIntegerArg("threadStackSize", threadStackSize);
      properties.setProperty("thread_stack_size", "-Xss" + threadStackSize + "k");
    }

    PropertySimple heapDumpOnOMMError = newConfig.getSimple("heapDumpOnOOMError");
    if (heapDumpOnOMMError != null) {
      if (heapDumpOnOMMError.getBooleanValue()) {
        properties.setProperty("heap_dump_on_OOMError", "-XX:+HeapDumpOnOutOfMemoryError");
      } else {
        properties.setProperty("heap_dump_on_OOMError", "");
      }
    }

    String heapDumpDir = useForwardSlash(newConfig.getSimpleValue("heapDumpDir"));
    if (!StringUtil.isEmpty(heapDumpDir)) {
      properties.setProperty("heap_dump_dir", heapDumpDir);
    }

    propertiesUpdater.update(properties);
  }
  private String getHeapMinProp(Properties properties) {
    String value = properties.getProperty("heap_min");

    if (StringUtil.isEmpty(value)) {
      return "";
    }

    if (!value.startsWith("-Xms")) {
      return value;
    }

    return value.substring(4);
  }
  private String getStackSizeProp(Properties properties) {
    String value = properties.getProperty("thread_stack_size");

    if (StringUtil.isEmpty(value)) {
      return "";
    }

    if (!(value.startsWith("-Xss") || value.endsWith("k") || value.length() > 5)) {
      return value;
    }

    return value.substring(4, value.length() - 1);
  }
  private void updateStorageAuthConf(File basedir) {
    File confDir = new File(basedir, "conf");
    File authFile = new File(confDir, "rhq-storage-auth.conf");
    authFile.delete();

    Set<String> addresses = calculateLocalIPAddresses(deploymentOptions.getNumNodes());

    try {
      StreamUtil.copy(
          new StringReader(StringUtil.collectionToString(addresses, "\n")),
          new FileWriter(authFile),
          true);
    } catch (IOException e) {
      throw new RuntimeException("Failed to update " + authFile);
    }
  }