package com.khs.sherpa.util; /* * Copyright 2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import static com.khs.sherpa.util.Constants.SHERPA_NOT_INITIALIZED; import static com.khs.sherpa.util.Util.msg; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.khs.sherpa.annotation.Encode; import com.khs.sherpa.json.service.ActivityService; import com.khs.sherpa.json.service.DefaultActivityService; import com.khs.sherpa.json.service.DefaultTokenService; import com.khs.sherpa.json.service.DefaultUserService; import com.khs.sherpa.json.service.GsonJsonProvider; import com.khs.sherpa.json.service.JsonProvider; import com.khs.sherpa.json.service.SessionTokenService; import com.khs.sherpa.json.service.UserService; import com.khs.sherpa.servlet.SherpaServlet; public class SettingsLoader { private static final Logger LOGGER = LoggerFactory.getLogger(SettingsLoader.class); protected Properties properties; public String decodeInputConfigFilePath(String configFile){ String path = null; if(configFile !=null){ try { path = URLDecoder.decode(configFile, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(SHERPA_NOT_INITIALIZED+"property file sherpa.properties must be defined in classpath"); } } return path; } public SettingsLoader (){ } public SettingsLoader(String configFile) { try { InputStream in = SherpaServlet.class.getClassLoader().getResourceAsStream(decodeInputConfigFilePath(configFile)); if (in != null) { properties = new Properties(); properties.load(in); LOGGER.info(msg("sherpa properties loaded")); } } catch (IOException e) { LOGGER.error("sherpa properties not found, defaults applied..."); // does'nt exist... } if (properties == null) { throw new RuntimeException(SHERPA_NOT_INITIALIZED+"property file sherpa.properties must be defined in classpath"); } } public SettingsLoader(Properties properties) { this.properties = properties; } public String sherpaAdmin() { String value = properties.getProperty("sherpa.role"); if (value != null) { return value; } return Defaults.SHERPA_ADMIN; } public String encoding() { String value = properties.getProperty("encode.format"); if (value != null) { value = value.toUpperCase(); if (value.equals(Encode.CSV) || value.equals(Encode.XML) || value.equals(Encode.HTML)) { return value; } } return Defaults.ENCODE; } public boolean logging() { String value = properties.getProperty("activity.logging"); if (value != null) { value = value.toUpperCase(); if (value.equals("N") || value.equals("NO") || value.equals("FALSE")) { return false; } } return Defaults.ACTIVITY_LOG; } public boolean jsonpSupport() { String value = properties.getProperty("jsonp.support"); if (value != null) { value = value.toUpperCase(); if (value.equals("Y") || value.equals("YES") || value.equals("TRUE")) { return true; } } return Defaults.JSONP_SUPPORT; } public String dateFormat() { String value = properties.getProperty("date.format"); if (value != null) { return value; } return Defaults.DATE_FORMAT; } public String dateTimeFormat() { String value = properties.getProperty("date.time.format"); if (value != null) { return value; } return Defaults.DATE_TIME_FORMAT; } public long timeout() { String value = properties.getProperty("session.timeout"); if (value != null) { try { long timeout = Long.parseLong(value); LOGGER.info(msg("session timeout set to "+timeout+" ms")); return timeout; } catch(NumberFormatException e) { throw new RuntimeException("ERROR reading session.timeout value from property file, value must be long"); } } LOGGER.info(msg("session timeout set to "+Defaults.SESSION_TIMEOUT+" ms")); return Defaults.SESSION_TIMEOUT; } public JsonProvider jsonProvider() { String userClazzName = properties.getProperty("json.provider"); if (userClazzName == null) { return new GsonJsonProvider(); } else { return (GsonJsonProvider) createInstance(userClazzName); } } public String endpoint() { String endpoint = properties.getProperty("endpoint.package"); if (endpoint != null) { int end = endpoint.length(); // add package separator if (endpoint.lastIndexOf('.') != end - 1) { endpoint += "."; } } else { throw new RuntimeException(SHERPA_NOT_INITIALIZED+"endpoint package location must be defined in sherpa.properties"); } return endpoint; } public UserService userService() { String userClazzName = properties.getProperty("user.service"); if (userClazzName == null) { return new DefaultUserService(); } else { return (UserService) createInstance(userClazzName); } } public SessionTokenService tokenService() { String tokenClazzName = properties.getProperty("token.service"); if (tokenClazzName == null) { return new DefaultTokenService(); } else { return (SessionTokenService) createInstance(tokenClazzName); } } public ActivityService activityService() { String activityClazzName = properties.getProperty("activity.service"); if (activityClazzName == null) { return new DefaultActivityService(); } else { return (ActivityService) createInstance(activityClazzName); } } protected Object createInstance(String name) { try { Class<?> clazz = Class.forName(name); return clazz.newInstance(); } catch (ClassNotFoundException e) { throw new RuntimeException("User service class not found " + name); } catch (InstantiationException e) { throw new RuntimeException("User service class could be instantiated " + name); } catch (IllegalAccessException e) { throw new RuntimeException("User service class could not be accessed " + name); } } }