#
# Copyright (c) 2008-2013 Jonas Helming, Maximilian Koegel. All rights reserved. This program and the
# accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this
# distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
#
#
# EMFStore property file: es.properties
# with descriptions
#
# Version of file: 5.1
# Last Update: 30.08.2013
# Author(s): Otto von Wesendonk, Edgar Mueller
#

# THIS ES.PROPERTIES FILE WAS AUTOMATICALLY COPIED INTO YOUR CONFIG PATH BECAUSE THERE WAS NO OTHER PROPERTY FILE FOUND.

# EMFStore is able to run without this configuration file. The default values are displayed for every option.

# Some options differ if the server is running as released version [RV] or is running as a developer version [DV]

# This file will be processed by the default java properties api. Therefore the syntax for options is:
# "option.key = value". If multiple values are allowed, separate them with ",". "option.key = value1,value2"

#
# Version
#

# Use this property do define accepted version numbers. For the server, version numbers only are strings, so you can 
# define your format as you wish. You can define several version numbers at the same time separating them with a ","
# With the keyword "any" all versions are accepted, this should be used for development only.
# Options: Multiple values separated by ","
# Default: [RV] no value, server won't accept any call. [DV] if no value is specified, "any" is used, otherwise 
# the specified values are checked
#
emfstore.acceptedversions=any


#
# Persistence
#

#
#emfstore.persistence.version.projectstate

# EMFStore mainly saves operations in it's versions. For backup reasons however, every X versions the total 
# project state is saved into  a file. This options allows to specify how often a complete  project state 
# should be saved. If the range is too small a lot of memory is used.
# Options: Number bigger than 0
# If 1, every state is preserved. Shouldn't be used if server is deployed
# Default: "50"
#
emfstore.persistence.version.projectstate.everyxversions = 50

# Deprecated, not in use anymore.
# emfstore.persistence.version.backup.projectstate.everyxversions = 10


#
# Validation
#

# Defines whether the projects on the server shall run through validation. 
# Validation is used to confirm the consistency of the saved projects and models.
# Options: "true" or "false"
# Default: "true"
#
emfstore.validation = true

# Defines level of validation. At the moment there are 3 kinds of validation, which can be combined by adding them 
# bitwise.
# Level 1: Loading all files and loading their models and cross-file links.
# Level 2: Checks whether every model element and change operation has model element ID
# Level 4: Applies all changes between to project states and compares whether calculated project state and the 
#          actual project state are equal.
# Options: Any level or their bitwise combination, e.g. the default value 7 is a combination of all other levels: 
#          1 & 2 & 4 = 7. 
# If only want to use the first both level, choose 3 = 1 & 2.
# Default: 7 
#
emfstore.validation.level = 7

# You can exclude certain projects from the validation. It is not possible to exclude projects from _Level 1_ validation
# Options: Multiple Project IDs separated by ","
# Default: Not set
#
emfstore.validation.exclude = 



#
# Connection related options
#

# At the moment EMFStore runs with RMI and XML RPC in parallel. So you can use both technologies for the connection.
# XML RPC is suggested for environments with strict firewalls, because it runs via HTTPS.

# Defines whether RMI should use SSL encryption or not. Please Note: The password is always encrypted with 
# the server certificate, this "only" indicates whether all data is encrypted additionally.
# Options: "true" or "false"
# Default: "true"
#
emfstore.connection.rmi.encryption = true

# Defines the Port for the XML RPC server. Normally we want to use the "442" HTTPS port. However, on 
# Linux/Unix based systems lower ports (<1024) are restricted. One workaround for these operating systems is to 
# listen on higher port and to setup a port forward from 443 to the specified port.
# Options: Any possible port
# Default: [RV] "443", [DV] "8080"
#
emfstore.connection.xmlrpc.port= 8080


#
# Certificates
#

# These options are used to handle the server's keystore. the keystore file is located in the main EMFStore folder.
# When deploying you should generate an own certificate and don't use the default developer certificate

# Defines the alias of the main server certificate stored in the keystore.
# Options: any alias allowed in the keystore
# Default: dependent of the used certificate
#
emfstore.keystore.alias = emfstoreServer

# Password for the selected certificate.
# Options: any password
# Default: dependent of the used certificate
#
emfstore.keystore.password = 123456

# Defines the used certificate type stored in the keystore
# Options: All Certificates which are supported by the java keystore
# Default: "SunX509"
#
emfstore.keystore.certificate.type= SunX509

# Defines the used cipher algorithm for the certificate
# Options: All cipher algorithms supported by the java API
# Default: "RSA"
#
emfstore.keystore.cipher.algorithm=RSA


#
# Authentication
#

# Defines the name of the super user. The super user will be created on server startup if not present.
# If the super user is deleted while runtime, you have to restart the server in order to restore it.
# Options: Any name
# Default: "super"
#
emfstore.accesscontrol.authentication.superuser = super

# The password for the super user account.
# Options: Any password
# Default: "super"
#
emfstore.accesscontrol.authentication.superuser.password = super

# Defines the session timeout for a user session. If a session is inactive for this period of time, 
# the session will be destroyed.
# Options: A number specifying the time in milliseconds
# Default: "1800000" (= 30 minutes)
#
emfstore.accesscontrol.session.timeout= 1800000


# Defines the policy for user authentication. EMFStore doesn't store any password and uses external resources 
# for authentication.
# In order to create a new user, the user has to be created within the EMFStore with a specified user name.
# The authentication method uses this name and validates the password against the specified authentication adapter
# Options: "spfv", "model" or "ldap" (explanations beneath)
# Default: "spfv"
#
emfstore.accesscontrol.authentication.policy=spfv

# Defines the rights that the project administrator role has. Valid keys are:
# - AssignRoleToOrgUnit: Defines whether a project administrator is allowed to assign 
#                        roles to users and groups. This also applies to the assignment
#                        of users and groups to projects  
# - ChangeAssignmentsOfOrgUnits: Whether a project administrator is allowed to assign 
#                        users and groups as members to other groups
# - ChangeUserPassword:  Whether a project administrator is allowed to change the password
#                        of a user. In general, a project administrator is only allowed 
#                        to change the passwords of users, which belong to projects
#                        the project administrator has control of 
# - CreateGroup:         Whether a project administrator is allowed to create new groups
# - CreateUser:          Whether a project administrator is allowed to create new users
# - ShareProject:        Whether a project administrator is allowed to share projects
# - DeleteOrgUnit:       Whether a project administrator is allowed to delete users and groups
# Default: AssignRoleToOrgUnit set to TRUE, all other default to FALSE
#emfstore.accesscontrol.projectadmin=AssignRoleToOrgUnit

# SPFV (Simple property file verification) is a simple mechanism to store user passwords. 
# It's only intended for development purposes.
# It uses the java properties api and the format for passwords are: "username=password" in each line
# The default location for this file is {user-folder}/.emfstore/emfstore/conf/user.properties

# Defines the location of the spfv file.
# Options: OS dependent path to file, absolute or relative.
# Default: Not set (= than uses the default location)
#
#emfstore.accesscontrol.authentication.spfv = /your/path/

# The 'model' authentication stores the user's password directly in the model, 
# thus it is serialized as any regular EMF attribute would be serialized. This authentication provider
# therefore supports changing a user's password at runtime. 
# The password will not be encrypted when saved.

# If you are using LDAP, you have to specify the server's location. EMFStore can cope with several LDAP server at once.
# The server will try to authenticate against each server until the authentication was successful, 
# otherwise the authentication fails
# For each LDAP server there are 3 necessary options, all prefixed with the server's index
# Indexes start with 1 and you can add more by counting up. You shouldn't have a gap in your indexes, otherwise the 
# server will stop looking for further LDAP servers.
# Also if a configuration is empty, the server will stop looking for further configurations.
# Options: LDAP configuration specifying "url", "base" and "searchdn"
# Default: Not set
#
emfstore.accesscontrol.authentication.ldap.1.url=ldap://ldap1.in.tum.de:389
emfstore.accesscontrol.authentication.ldap.1.base=ou=Personen,ou=IN,o=TUM,c=DE
emfstore.accesscontrol.authentication.ldap.1.searchdn=uid

emfstore.accesscontrol.authentication.ldap.2.url=ldap://ldap2.in.tum.de:389
emfstore.accesscontrol.authentication.ldap.2.base=ou=Personen,ou=IN,o=TUM,c=DE
emfstore.accesscontrol.authentication.ldap.2.searchdn=uid


#
# Plugin configuration.
#

# Defines whether post load plugins shall be called or not.
# Options: true or false
# Default: true
#
emfstore.startup.post.loadlistener = true

#
# Deprecated options or options not meant for public use. Please don't change or use these:
#

# Used for development purposes.
#
emfstore.startup.loadlistener = false

# EMF resource type for storing data. At the moment only one option is allowed: 
# org.eclipse.emf.emfstore.internal.server.internal.storage.XMLStorage
# emfstore.persistence.resourceStorage = org.eclipse.emf.emfstore.internal.server.internal.storage.XMLStorage
