# This is the main configuration file for the application.
# ~~~~~

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions.
# If you deploy your application to several instances be sure to use the same key!
application.secret="CR2H^VlZ3M3fu;/jDZ<_ZQI`nb[pQ7:TxyV/tACshUD;Udj^5b64F=/J08yTG1A2"

# The application languages
# ~~~~~
application.langs="en"

# Global object class
# ~~~~~
# Define the Global object class for this application.
# Default to Global in the root package.
# global=Global

# Database configuration
# ~~~~~
# You can declare as many datasources as you want.
# By convention, the default datasource is named `default`
#
# db.default.driver=org.h2.Driver
# db.default.url="jdbc:h2:mem:play"
# db.default.user=sa
# db.default.password=

# Evolutions
# ~~~~~
# You can disable evolutions if needed
# evolutionplugin=disabled

# Logger
# ~~~~~
# You can also configure logback (http://logback.qos.ch/), by providing a logger.xml file in the conf directory .

# Root logger:
logger.root=ERROR

# Logger used by the framework:
logger.play=INFO

# Logger provided to your application:
logger.application=DEBUG

# PredictionIO Commons Settings
io.prediction.commons.settings.db.type=mongodb
io.prediction.commons.settings.db.host=localhost
io.prediction.commons.settings.db.port=27017

io.prediction.commons.appdata.db.type=mongodb
io.prediction.commons.appdata.db.host=localhost
io.prediction.commons.appdata.db.port=27017

io.prediction.commons.appdata.test.db.type=mongodb
io.prediction.commons.appdata.test.db.host=localhost
io.prediction.commons.appdata.test.db.port=27017

io.prediction.commons.appdata.training.db.type=mongodb
io.prediction.commons.appdata.training.db.host=localhost
io.prediction.commons.appdata.training.db.port=27017

io.prediction.commons.appdata.validation.db.type=mongodb
io.prediction.commons.appdata.validation.db.host=localhost
io.prediction.commons.appdata.validation.db.port=27017

io.prediction.commons.modeldata.db.type=mongodb
io.prediction.commons.modeldata.db.host=localhost
io.prediction.commons.modeldata.db.port=27017

io.prediction.commons.modeldata.training.db.type=mongodb
io.prediction.commons.modeldata.training.db.host=localhost
io.prediction.commons.modeldata.training.db.port=27017

# PredictionIO Algorithms
pdio-knnitembased.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
pdio-latestrank.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
pdio-randomrank.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-itembased.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-parallelals.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-knnuserbased.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-thresholduserbased.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-slopeone.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-alswr.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-svdsgd.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar
mahout-svdplusplus.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar

# PredictionIO generic scalding job
io.prediction.algorithms.scalding.itemrec.generic.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.5.0.jar

# Itemrec Scala Mahout Algorithms
io.prediction.algorithms.mahout.itemrec.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Algorithms-Scala-Mahout-assembly-0.5.0.jar

# Mahout core job
io.prediction.algorithms.mahout-core-job.jar=${io.prediction.base}/vendors/mahout-0.8-snapshot/mahout-core-0.8-SNAPSHOT-job.jar

# PredictionIO Offline Evaluation
io.prediction.evaluations.scalding.itemrec.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Evaluations-Hadoop-Scalding-assembly-0.5.0.jar
io.prediction.evaluations.itemrec.topkitems.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Evaluations-TopKItems-assembly-0.5.0.jar
io.prediction.evaluations.itemrec.trainingtestsplit.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Evaluations-Scala-TrainingTestSplitTime-assembly-0.5.0.jar
io.prediction.evaluations.itemrec.paramgen.jar=${io.prediction.base}/lib/PredictionIO-Process-ItemRec-Evaluations-ParamGen-assembly-0.5.0.jar

