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.

115 lines
4.2 KiB

  1. package com.sothr.imagetools.util
  2. import java.util.Properties
  3. import grizzled.slf4j.Logging
  4. import java.io.{FileInputStream, FileOutputStream, OutputStream}
  5. import scala.collection.JavaConversions._
  6. /*
  7. * Service for loading and interacting with the properties file
  8. */
  9. object PropertiesService extends Logging {
  10. private val properties:Properties = new Properties()
  11. private var version:Version = null
  12. def getVersion:Version = this.version
  13. private val propertiesToClean:Array[String] = Array("version")
  14. /*
  15. * Load the properties file from the specified location
  16. */
  17. def loadProperties(defaultLocation:String, userLocation:String = null) = {
  18. info(s"Attempting to load properties from: $defaultLocation")
  19. val defaultInputStream = ResourceLoader.get.getResourceStream(defaultLocation)
  20. properties.load(defaultInputStream)
  21. if (userLocation != null) {
  22. val userInputStream = new FileInputStream(userLocation)
  23. val userProperties = new Properties();
  24. userProperties.loadFromXML(userInputStream)
  25. for (propertyName:String <- userProperties.stringPropertyNames()) {
  26. properties.setProperty(propertyName, userProperties.getProperty(propertyName));
  27. }
  28. } else {
  29. info("No user properties file exists to load from")
  30. }
  31. version = new Version(properties.getProperty("version"));
  32. info(s"Detected Version: $version")
  33. //load special properties
  34. DebugLogEnabled = get(PropertiesEnum.LogDebug.toString).toBoolean
  35. InfoLogEnabled = get(PropertiesEnum.LogInfo.toString).toBoolean
  36. ErrorLogEnabled = get(PropertiesEnum.LogError.toString).toBoolean
  37. TimingEnabled = get(PropertiesEnum.Timed.toString).toBoolean
  38. //ahash
  39. aHashPrecision = PropertiesService.get(PropertiesEnum.AhashPrecision.toString).toInt
  40. aHashTolerance = PropertiesService.get(PropertiesEnum.AhashTolerance.toString).toInt
  41. aHashWeight = PropertiesService.get(PropertiesEnum.AhashWeight.toString).toFloat
  42. useAhash = PropertiesService.get(PropertiesEnum.UseAhash.toString).toBoolean
  43. //dhash
  44. dHashPrecision = PropertiesService.get(PropertiesEnum.DhashPrecision.toString).toInt
  45. dHashTolerance = PropertiesService.get(PropertiesEnum.DhashTolerance.toString).toInt
  46. dHashWeight = PropertiesService.get(PropertiesEnum.DhashWeight.toString).toFloat
  47. useDhash = PropertiesService.get(PropertiesEnum.UseDhash.toString).toBoolean
  48. //phash
  49. pHashPrecision = PropertiesService.get(PropertiesEnum.PhashPrecision.toString).toInt
  50. pHashTolerance = PropertiesService.get(PropertiesEnum.PhashTolerance.toString).toInt
  51. pHashWeight = PropertiesService.get(PropertiesEnum.PhashWeight.toString).toFloat
  52. usePhash = PropertiesService.get(PropertiesEnum.UsePhash.toString).toBoolean
  53. info("Loaded Special Properties")
  54. }
  55. /**
  56. * Gets a properties object that is cleaned of things that are expected to change. i.e. version
  57. */
  58. private def getCleanProperties():Properties = {
  59. val cleanProperties:Properties = properties.clone().asInstanceOf[Properties]
  60. //Remove properties to be cleaned
  61. for (key <- propertiesToClean) {
  62. cleanProperties.remove(key)
  63. }
  64. return cleanProperties
  65. }
  66. def saveXMLProperties(location:String) = {
  67. info(s"Saving user properties to $location")
  68. val out:OutputStream = new FileOutputStream(location, false)
  69. val cleanProperties = getCleanProperties
  70. //insert special keys here
  71. cleanProperties.setProperty("version.previous", version.parsableToString())
  72. cleanProperties.storeToXML(out, "User Properties")
  73. out.flush()
  74. out.close()
  75. }
  76. def get(key:String):String = {
  77. return properties.getProperty(key)
  78. }
  79. def set(key:String, value:String) = {
  80. properties.setProperty(key, value)
  81. }
  82. //specific highly used properties
  83. var DebugLogEnabled:Boolean = false
  84. var InfoLogEnabled:Boolean = false
  85. var ErrorLogEnabled:Boolean = false
  86. var TimingEnabled:Boolean = false
  87. //ahash
  88. var aHashPrecision = 0
  89. var aHashTolerance = 0
  90. var aHashWeight = 0.0f
  91. var useAhash = false
  92. //dhash
  93. var dHashPrecision = 0
  94. var dHashTolerance = 0
  95. var dHashWeight = 0.0f
  96. var useDhash = false
  97. //phash
  98. var pHashPrecision = 0
  99. var pHashTolerance = 0
  100. var pHashWeight = 0.0f
  101. var usePhash = false
  102. }