Package com.opengamma.util

Source Code of com.opengamma.util.PlatformConfigUtils

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.util.time.DateUtils;

/**
* The platform (in particular the Spring configuration files) makes use of certain system properties which are assumed
* to exist. These allow the platform to be configured differently depending on the OS (affecting external file
* references) and database type.
* <p>
* This is a helper for anything that launches the platform in any way, to ensure that the necessary properties have
* been set.
*/
public final class PlatformConfigUtils {

  static {
    DateUtils.initTimeZone();
  }

  /** Logger. */
  private static final Logger s_logger = LoggerFactory.getLogger(PlatformConfigUtils.class);
  /**
   * The prefix for the property.
   */
  private static final String PROPERTY_PREFIX = "opengamma.platform.";
  /**
   * System property used to specify the OS type.
   */
  public static final String OS_TYPE_PROPERTY_NAME = PROPERTY_PREFIX + "os";

  //-------------------------------------------------------------------------
  /**
   * Enumerates the valid operating system types.
   */
  public static enum OsType {
    /**
     * Windows.
     */
    WIN,
    /**
     * POSIX-compliant.
     */
    POSIX;
  }

  /**
   * Restricted constructor.
   */
  private PlatformConfigUtils() {
  }

  //-------------------------------------------------------------------------
  /**
   * Sets and/or validates the system properties generally necessary for the platform to run.
   * Argument values are only used if the corresponding system properties have not been set directly.
   *
   * @throws OpenGammaRuntimeException  if any property is missing or invalid and cannot be set automatically
   */
  public static void configureSystemProperties() {
    if (System.getProperty(OS_TYPE_PROPERTY_NAME) == null) {
      String os = System.getProperty("os.name").toLowerCase();
      System.setProperty(OS_TYPE_PROPERTY_NAME, toPropertyValue(os.startsWith("win") ? OsType.WIN : OsType.POSIX));
    } else {
      validateProperty(OsType.class, OS_TYPE_PROPERTY_NAME);
    }
   
    logPlatformConfiguration();
  }

  private static <T extends Enum<T>> String toPropertyValue(Enum<T> enumValue) {
    return enumValue.name().toLowerCase();
  }

  private static <T extends Enum<T>> void validateProperty(Class<T> enumType, String propertyName) {
    String propertyValue = System.getProperty(propertyName);
    validatePropertyValue(enumType, propertyName, propertyValue);
  }

  private static <T extends Enum<T>> void validatePropertyValue(Class<T> enumType, String propertyName, String propertyValue) {
    if (propertyValue == null) {
      throw new OpenGammaRuntimeException("System property '" + propertyName + "' is required, but has not been set");
    }
    try {
      Enum.valueOf(enumType, propertyValue.toUpperCase());
    } catch (IllegalArgumentException e) {
      throw new OpenGammaRuntimeException("The value '" + propertyValue + "' is not valid for system property '" + propertyName + "'");
    }
  }

  private static void logPlatformConfiguration() {
    if (!s_logger.isInfoEnabled()) {
      return;
    }
    StringBuilder sb = new StringBuilder("\nOpenGamma platform configuration: \n");
    for (String propertyName : System.getProperties().stringPropertyNames()) {
      if (propertyName.startsWith(PROPERTY_PREFIX)) {
        sb.append("\t").append(propertyName).append(" = ").append(System.getProperty(propertyName)).append("\n");
      }
    }
    s_logger.info(sb.toString());
  }

}
TOP

Related Classes of com.opengamma.util.PlatformConfigUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.