<?xml version="1.0"?>
<!--

    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.

-->
<configuration>
  <property>
    <name>lens.client.dbname</name>
    <value>default</value>
    <description>Default lens database</description>
  </property>

  <property>
    <name>lens.client.user.name</name>
    <value>anonymous</value>
    <description>Lens client user name</description>
  </property>
  <property>
    <name>lens.server.base.url</name>
    <value>http://0.0.0.0:9999/lensapi</value>
    <description>The base url for the lens server</description>
  </property>
  <property>
    <name>lens.client.ws.request.filternames</name>
    <value>requestfilter</value>
    <description>These JAX-RS filters would be started in the specified order when lens-client starts</description>
  </property>
  <property>
    <name>lens.client.requestfilter.ws.filter.impl</name>
    <value>org.apache.lens.client.RequestFilter</value>
    <description>Implementation class for Request Filter</description>
  </property>
</configuration>
