/** * Copyright 2014 Comcast Cable Communications Management, LLC * * This file is part of CATS. * * CATS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CATS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CATS. If not, see <http://www.gnu.org/licenses/>. */ package com.comcast.cats.domain.configuration; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Properties; import java.util.UUID; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; /** * * @author cfrede001 * */ @Named public class CatsProperties extends Properties { /** * */ private static final long serialVersionUID = -1610598488861890712L; private static Logger logger = Logger.getLogger( CatsProperties.class ); public static final String DEFAULT_CATS_SERVER = "localhost"; public static final String CATS_PROPS_FILENAME = "cats.props"; public static final String AUTH_TOKEN_PROPERTY = "cats.user.authToken"; public static final String SERVER_URL_PROPERTY = "cats.server.url"; public static final String CONFIG_SERVER_URL_PROPERTY = "cats.config.url"; public static final String USERNAME_PROPERTY = "cats.user.name"; public static final String USER_EMAIL_PROPERTY = "cats.user.email"; public static final String USER_FULLNAME_PROPERTY = "cats.user.fullname"; public static final String SETTOP_URL_PROPERTY = "settop.url"; public static final String SETTOP_DEFAULT_PROPERTY = "cats.settop.default"; public static final String STRINGS_DM_PROPERTY = "strings.dm.location"; public static final String OCR_SERVER_URL_PROPERTY = "cats.ocr.server.url"; protected CatsHome catsHome; protected String catsPropsFileName; @Inject protected CatsProperties( CatsHome catsHome ) throws IOException { super(); this.catsHome = catsHome; this.catsPropsFileName = createCatsPropsFileName( catsHome.getCatsHomeDirectory() ); /* * We must load the properties in the contructor so they can be * overridden by Spring dependency injection of @Value. */ loadPropertiesFromFile(); } @PostConstruct public void initDummyProperties(){ setAuthToken( UUID.randomUUID().toString() ); } private String createCatsPropsFileName( String catsHomeDir ) { return catsHomeDir + CatsHome.FILE_SEPERATOR + CATS_PROPS_FILENAME; } protected void loadPropertiesFromFile() throws IOException { /** * Touch the cats props to make sure we have one. If one exists the * updated time will be changed. */ logger.info( "Loading cats.props [" + catsPropsFileName + "]" ); File catsPropsFile = new File( catsPropsFileName ); FileUtils.touch( catsPropsFile ); this.load( new FileInputStream( catsPropsFile ) ); } public CatsHome getCatsHome() { return catsHome; } private void storeProperty( String key, String value ) { if ( null == value ) { logger.warn( "Key[" + key + "] is NULL" ); // It is important to not set a null value, so just return here. return; } logger.info( "Key[" + key + "] = " + value ); this.setProperty( key, value ); } private String loadProperty( String key ) { return this.getProperty( key ); } public String getServerUrl() { return loadProperty( SERVER_URL_PROPERTY ); } public String getConfigServerUrl() { return loadProperty( CONFIG_SERVER_URL_PROPERTY ); } /** * This is a tricky Spring SPEL statement. For CATS Vision to work * correctly, we need to determine the server address by either the * systemProperties or from the cats.props file. The System properties * should be favored by default. * * @param serverUrl * - Spring determined cats server base url eg. */ @Value( "#{systemProperties['" + SERVER_URL_PROPERTY + "']}" ) public void setServerUrl( String serverUrl ) { storeProperty( SERVER_URL_PROPERTY, serverUrl ); } public String getAuthToken() { return loadProperty( AUTH_TOKEN_PROPERTY ); } /** * See statement for setServerUrl above. * * @param authToken * - This token * will be used to verify identity of user for requests. */ @Value( "#{systemProperties['" + AUTH_TOKEN_PROPERTY + "']}" ) public void setAuthToken( String authToken ) { storeProperty( AUTH_TOKEN_PROPERTY, authToken ); } @Value( "#{systemProperties['" + CONFIG_SERVER_URL_PROPERTY + "']}" ) public void setConfigServerUrl( String configServerUrl ) { storeProperty( CONFIG_SERVER_URL_PROPERTY, configServerUrl ); } public String getUsername() { return loadProperty( USERNAME_PROPERTY ); } @Value( "#{systemProperties['" + USERNAME_PROPERTY + "']}" ) public void setUsername( String name ) { storeProperty( USERNAME_PROPERTY, name ); } public String getEmail() { return loadProperty( USER_EMAIL_PROPERTY ); } @Value( "#{systemProperties['" + USER_EMAIL_PROPERTY + "']}" ) public void setEmail( String email ) { storeProperty( USER_EMAIL_PROPERTY, email ); } public String getFullname() { return loadProperty( USER_FULLNAME_PROPERTY ); } @Value( "#{systemProperties['" + USER_FULLNAME_PROPERTY + "']}" ) public void setFullname( String fullname ) { storeProperty( USER_FULLNAME_PROPERTY, fullname ); } @Value( "#{systemProperties['" + SETTOP_URL_PROPERTY + "']}" ) public void setInputFilePath( String inputFilePath ) { storeProperty( SETTOP_URL_PROPERTY, inputFilePath ); } public String getInputFilePath() { return loadProperty( SETTOP_URL_PROPERTY ); } @Value( "#{systemProperties['" + STRINGS_DM_PROPERTY + "']}" ) public void setStringsDMLocation( String stringDMFilePath ) { storeProperty( STRINGS_DM_PROPERTY, stringDMFilePath ); } public String getStringsDMLocation() { return loadProperty( STRINGS_DM_PROPERTY ); } public String getServerHost() throws URISyntaxException { String host = null; if ( null != getServerUrl() ) { URI uri = new URI( getServerUrl() ); host = uri.getHost(); } return host; } @Value( "#{systemProperties['" + SETTOP_DEFAULT_PROPERTY + "']}" ) public void setDefaultSettopMac( String settopMac ) { storeProperty( SETTOP_DEFAULT_PROPERTY, settopMac ); } public String getDefaultSettopMac() { return loadProperty( SETTOP_DEFAULT_PROPERTY ); } @PostConstruct private void init() throws IOException { logger.info( toString() ); } @Override public String toString() { return "CatsProperties [authToken=" + getAuthToken() + ", serverUrl=" + getServerUrl() + ", configServerUrl=" + getConfigServerUrl() + ", inputFilePath=" + getInputFilePath() + ", username=" + getUsername() + ", fullname=" + getFullname() + ", email=" + getEmail() + ", stringsDMFileLocation=" + getStringsDMLocation() + ", defaultSettopMac=" + getDefaultSettopMac() + ", ocrServerUrl=" + getOcrServerUrl() + ", cats.props=" + super.toString() + "]"; } public String getOcrServerUrl() { return loadProperty( OCR_SERVER_URL_PROPERTY ); } /** * This is a tricky Spring SPEL statement. For CATS Vision to work * correctly, we need to determine the server address by either the * systemProperties or from the cats.props file. The System properties * should be favored by default. * * @param ocrServerUrl * - Spring determined cats ocr server base url */ @Value( "#{systemProperties['" + OCR_SERVER_URL_PROPERTY + "']}" ) public void setOcrServerUrl( String ocrServerUrl ) { storeProperty( OCR_SERVER_URL_PROPERTY, ocrServerUrl ); } }