# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#
# Framework config properties.
# (This version will be interpolated)

# To override the packages the framework exports by default from the
# class path, set this variable.
#org.osgi.framework.system.packages=

# To append packages to the default set of exported system packages,
# set this value.#
org.osgi.framework.system.packages.extra=\
 com.sun.net.httpserver,\
 sun.security.action,\
 javax.smartcardio,\
 javax.net.ssl,\
 javax.mail, \
 javax.mail.internet, \
 com.google.common.base, \
 sun.misc

org.osgi.framework.system.capabilities=\
osgi.ee; osgi.ee="JavaSE";version:List="1.0,1.1,1.2,1.3,1.3.0,1.4,1.4.0,1.5,1.5.0,1.6,1.6.0,1.7,1.8"

# The following property makes specified packages from the class path
# available to all bundles. You should avoid using this property.
#org.osgi.framework.bootdelegation=sun.*,com.sun.*,javax.net.*

# Felix tries to guess when to implicitly boot delegate in certain
# situations to ease integration without outside code. This feature
# is enabled by default, uncomment the following line to disable it.
#felix.bootdelegation.implicit=false

# The following property explicitly specifies the location of the bundle
# cache, which defaults to "felix-cache" in the current working directory.
# If this value is not absolute, then the felix.cache.rootdir controls
# how the absolute location is calculated. (See next property)
#org.osgi.framework.storage=${felix.cache.rootdir}/felix-cache

# The following property is used to convert a relative bundle cache
# location into an absolute one by specifying the root to prepend to
# the relative cache path. The default for this property is the
# current working directory.
#felix.cache.rootdir=${user.dir}

# The following property controls whether the bundle cache is flushed
# the first time the framework is initialized. Possible values are
# "none" and "onFirstInit"; the default is "none".
org.osgi.framework.storage.clean=onFirstInit

# The following property determines which actions are performed when
# processing the auto-deploy directory. It is a comma-delimited list of
# the following values: 'install', 'start', 'update', and 'uninstall'.
# An undefined or blank value is equivalent to disabling auto-deploy
# processing.
felix.auto.deploy.action=install,start

# The following property specifies the directory to use as the bundle
# auto-deploy directory; the default is 'bundle' in the working directory.
#felix.auto.deploy.dir=bundle

# The following property is a space-delimited list of bundle URLs
# to install when the framework starts. The ending numerical component
# is the target start level. Any number of these properties may be
# specified for different start levels.
#felix.auto.install.1=

# The following property is a space-delimited list of bundle URLs
# to install and start when the framework starts. The ending numerical
# component is the target start level. Any number of these properties
# may be specified for different start levels.
#  file:bundle/1/org.apache.felix.gogo.shell-${gogo.version}.jar \
felix.auto.start.1= \
  file:bundle/1/logback-classic-1.2.3.jar \
  file:bundle/1/logback-core-1.2.3.jar \
  file:bundle/1/jline-${org.jline.version}.jar \
  file:bundle/1/jansi-${org.fusesource.jansi.version}.jar \
  file:bundle/1/org.apache.felix.framework.security-2.4.0.jar \
  file:bundle/1/org.apache.felix.gogo.runtime-${org.apache.felix.gogo.runtime.version}.jar \
  file:bundle/1/org.apache.felix.gogo.command-${org.apache.felix.gogo.command.version}.jar \
  file:bundle/1/org.apache.felix.gogo.jline-${org.apache.felix.gogo.jline.version}.jar \
  file:bundle/1/osgi-over-slf4j-1.7.25.jar \
  file:bundle/1/slf4j-api-${slf4j.version}.jar \
  file:bundle/1/slf4j-simple-${slf4j.version}.jar

felix.auto.start.2= \
  file:bundle/2/org.apache.felix.fileinstall-${felix.fileinstall.version}.jar \
  file:bundle/2/org.osgi.compendium-${osgi.compendium.version}.jar \
  file:bundle/2/org.apache.felix.configadmin-1.9.10.jar \
  file:bundle/2/org.osgi.service.event-1.4.0.jar \
  file:bundle/2/sensinact-framework-extension-${project.version}.jar \
  file:bundle/2/org.apache.felix.bundlerepository-2.0.10.jar \
  file:bundle/2/org.apache.felix.scr-2.1.14.jar \
  file:bundle/2/org.osgi.service.component-1.4.0.jar \
  file:bundle/2/org.osgi.service.remoteserviceadmin-1.1.0.jar \
  file:bundle/2/org.osgi.util.function-1.1.0.jar \
  file:bundle/2/org.osgi.util.promise-1.1.1.jar \
  file:bundle/2/mqtt-utils-${project.version}.jar \
  file:bundle/2/org.eclipse.paho.client.mqttv3-1.2.0.jar

felix.auto.install.3= \
  file:bundle/3/sensinact-common-${project.version}.jar \
  file:bundle/3/sensinact-datastore-api-${project.version}.jar \
  file:bundle/3/sensinact-security-none-${project.version}.jar \
  file:bundle/3/sensinact-utils-${project.version}.jar

felix.auto.start.3= \
  file:bundle/3/sensinact-core-${project.version}.jar \
  file:bundle/3/sensinact-generic-${project.version}.jar \
  file:bundle/3/sensinact-northbound-access-${project.version}.jar \
  file:bundle/3/sensinact-shell-${project.version}.jar \
  file:bundle/3/sensinact-signature-validator-${project.version}.jar \
  file:bundle/3/sensinact-system-${project.version}.jar

felix.auto.start.4= \
  file:bundle/4/org.apache.felix.shell.remote-1.1.2.jar

felix.log.level=3

# Sets the initial start level of the framework upon startup.
org.osgi.framework.startlevel.beginning=5

# Sets the start level of newly installed bundles.
felix.startlevel.bundle=5

# Felix installs a stream and content handler factories by default,
# uncomment the following line to not install them.
#felix.service.urlhandlers=false

# The launcher registers a shutdown hook to cleanly stop the framework
# by default, uncomment the following line to disable it.
felix.shutdown.hook=false

#
# Apache Felix Log service config properties.
#

# The maximum size of the log history. A value of -1 means the log has
# no maximum size; a value of 0 means that no historical information
# is maintained. The default is '100'.
org.apache.felix.log.maxSize=-1


# Determines whether or not debug messages will be stored in the history.
# The default is 'false'.
org.apache.felix.log.storeDebug=false

#
# Apache Felix HTTP service config properties.
#

# Enable Jetty as the HTTP container. The default is false. Uncomment the
# following line to enable it.
org.apache.felix.http.jettyEnabled=true

# Enable the whiteboard implementation. The default is false.
org.apache.felix.http.whiteboardEnabled=true

# Security management is turned on
# org.osgi.framework.security=osgi

#Flag to enable debugging for this service implementation. The default is false.
org.apache.felix.http.debug=true
#Host name or IP Address of the interface to listen on. The default is null causing
# Jetty to listen on all interfaces.
#org.apache.felix.http.host 

#The port used for servlets and resources available via HTTP. The default is 8080. 
#See port settings below for additional information. A negative port number has the same effect 
#as setting org.apache.felix.http.enable to false.	
org.osgi.service.http.port=8080
	
#The port used for servlets and resources available via HTTPS. The default is 8443. 
#See port settings below for additional information. A negative port number has the same effect 
#as setting org.apache.felix.https.enable to false.
#org.osgi.service.http.port.secure=8443

#The servlet Context Path to use for the Http Service. If this property is not configured it defaults 
#to "/". This must be a valid path starting with a slash and not ending with a slash (unless it is the root context).
#org.apache.felix.http.context_path 	

#Connection timeout in milliseconds. The default is 60000 (60 seconds).
#org.apache.felix.http.timeout
 	
#Allows for the specification of the Session life time as a number of minutes. This property serves the 
#same purpose as the session-timeout element in a Web Application descriptor. The default is "0" (zero) 
#for no timeout at all.
#org.apache.felix.http.session.timeout 	

#Flag to enable the use of HTTP. The default is true.
#org.apache.felix.http.enable=true	

#Flag to enable the user of HTTPS. The default is false.
#org.apache.felix.https.enable=true	

#The name of the file containing the keystore.
#org.apache.felix.https.keystore
 
#The password for the keystore.	
#org.apache.felix.https.keystore.password 
	
#The password for the key in the keystore.
#org.apache.felix.https.keystore.key.password 
	
#The name of the file containing the truststore.
#org.apache.felix.https.truststore 	

#The type of truststore to use. The default is JKS.
#org.apache.felix.https.truststore.type 	

#The password for the truststore.
#org.apache.felix.https.truststore.password 
	
#Flag to determine if the HTTPS protocol requires, wants or does not use client certificates. Legal values 
#are needs, wants and none. The default is none.
#org.apache.felix.https.clientcertificate 	

#Size of the buffer for request and response headers, in bytes. Default is 16 KB.
#org.apache.felix.http.jetty.headerBufferSize 
	
#Size of the buffer for requests not fitting the header buffer, in bytes. Default is 8 KB.
#org.apache.felix.http.jetty.requestBufferSize 
	
#Size of the buffer for responses, in bytes. Default is 24 KB.
#org.apache.felix.http.jetty.responseBufferSize 	

#The maximum size accepted for a form post, in bytes. Defaults to 200 KB.
#org.apache.felix.http.jetty.maxFormSize

#If true, enables the MBean server functionality. The default is false.
#org.apache.felix.http.mbeans 	

#If false, the Server HTTP header is no longer included in responses. The default is false.
#org.apache.felix.http.jetty.sendServerHeader
 	
#Name of the cookie used to transport the Session ID. The default is JSESSIONID.
#org.eclipse.jetty.servlet.SessionCookie 
	
#Name of the request parameter to transport the Session ID. The default is jsessionid.
#org.eclipse.jetty.servlet.SessionURL 	

#Domain to set on the session cookie. The default is null.
#org.eclipse.jetty.servlet.SessionDomain 	

#The path to set on the session cookie. The default is the configured session context path ("/").
#org.eclipse.jetty.servlet.SessionPath 	

#The maximum age value to set on the cookie. The default is "-1".
#org.eclipse.jetty.servlet.MaxAge 	

#
# Eclipse sensiNact properties.
#

# Security properties
org.eclipse.sensinact.gateway.security.jks.filename=datastore/keystore/keystore.jks
org.eclipse.sensinact.gateway.security.jks.password=sensiNact_team

#Fileinstall configuration
felix.fileinstall.dir=./cfgs
felix.fileinstall.noInitialDelay=true
felix.fileinstall.poll=1000


sensinact.log.mode=info
sensinact.log.service.filter.property.key=description
sensinact.log.service.filter.property.value=An SLF4J LogService implementation.

# Location of the Gateway
org.eclipse.sensinact.gateway.location.latitude=45.19334890078532d
org.eclipse.sensinact.gateway.location.longitude=5.706474781036377d

# Enable the GUI for the simulated devices (e.g., slider, light, button,...)
org.eclipse.sensinact.simulated.gui.enabled=true

# Enable HTTP cross-origin resource sharing
org.eclipse.sensinact.http.corsheader=true

#Telnet port configuration
osgi.shell.telnet.port=6671
