You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

116 lines
4.2 KiB

package com.sothr.imagetools.util
import java.util.Properties
import grizzled.slf4j.Logging
import java.io.{FileInputStream, FileOutputStream, OutputStream}
import scala.collection.JavaConversions._
/*
* Service for loading and interacting with the properties file
*/
object PropertiesService extends Logging {
private val properties:Properties = new Properties()
private var version:Version = null
def getVersion:Version = this.version
private val propertiesToClean:Array[String] = Array("version")
/*
* Load the properties file from the specified location
*/
def loadProperties(defaultLocation:String, userLocation:String = null) = {
info(s"Attempting to load properties from: $defaultLocation")
val defaultInputStream = ResourceLoader.get.getResourceStream(defaultLocation)
properties.load(defaultInputStream)
if (userLocation != null) {
val userInputStream = new FileInputStream(userLocation)
val userProperties = new Properties();
userProperties.loadFromXML(userInputStream)
for (propertyName:String <- userProperties.stringPropertyNames()) {
properties.setProperty(propertyName, userProperties.getProperty(propertyName));
}
} else {
info("No user properties file exists to load from")
}
version = new Version(properties.getProperty("version"));
info(s"Detected Version: $version")
//load special properties
DebugLogEnabled = get(PropertiesEnum.LogDebug.toString).toBoolean
InfoLogEnabled = get(PropertiesEnum.LogInfo.toString).toBoolean
ErrorLogEnabled = get(PropertiesEnum.LogError.toString).toBoolean
TimingEnabled = get(PropertiesEnum.Timed.toString).toBoolean
//ahash
aHashPrecision = PropertiesService.get(PropertiesEnum.AhashPrecision.toString).toInt
aHashTolerance = PropertiesService.get(PropertiesEnum.AhashTolerance.toString).toInt
aHashWeight = PropertiesService.get(PropertiesEnum.AhashWeight.toString).toFloat
useAhash = PropertiesService.get(PropertiesEnum.UseAhash.toString).toBoolean
//dhash
dHashPrecision = PropertiesService.get(PropertiesEnum.DhashPrecision.toString).toInt
dHashTolerance = PropertiesService.get(PropertiesEnum.DhashTolerance.toString).toInt
dHashWeight = PropertiesService.get(PropertiesEnum.DhashWeight.toString).toFloat
useDhash = PropertiesService.get(PropertiesEnum.UseDhash.toString).toBoolean
//phash
pHashPrecision = PropertiesService.get(PropertiesEnum.PhashPrecision.toString).toInt
pHashTolerance = PropertiesService.get(PropertiesEnum.PhashTolerance.toString).toInt
pHashWeight = PropertiesService.get(PropertiesEnum.PhashWeight.toString).toFloat
usePhash = PropertiesService.get(PropertiesEnum.UsePhash.toString).toBoolean
info("Loaded Special Properties")
}
/**
* Gets a properties object that is cleaned of things that are expected to change. i.e. version
*/
private def getCleanProperties():Properties = {
val cleanProperties:Properties = properties.clone().asInstanceOf[Properties]
//Remove properties to be cleaned
for (key <- propertiesToClean) {
cleanProperties.remove(key)
}
return cleanProperties
}
def saveXMLProperties(location:String) = {
info(s"Saving user properties to $location")
val out:OutputStream = new FileOutputStream(location, false)
val cleanProperties = getCleanProperties
//insert special keys here
cleanProperties.setProperty("version.previous", version.parsableToString())
cleanProperties.storeToXML(out, "User Properties")
out.flush()
out.close()
}
def get(key:String):String = {
return properties.getProperty(key)
}
def set(key:String, value:String) = {
properties.setProperty(key, value)
}
//specific highly used properties
var DebugLogEnabled:Boolean = false
var InfoLogEnabled:Boolean = false
var ErrorLogEnabled:Boolean = false
var TimingEnabled:Boolean = false
//ahash
var aHashPrecision = 0
var aHashTolerance = 0
var aHashWeight = 0.0f
var useAhash = false
//dhash
var dHashPrecision = 0
var dHashTolerance = 0
var dHashWeight = 0.0f
var useDhash = false
//phash
var pHashPrecision = 0
var pHashTolerance = 0
var pHashWeight = 0.0f
var usePhash = false
}