# 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.
#
#
# -----------------------------------------------------------------------------
# Environment-dependent paths to resources used to build OpenTrader application
#
#    OpenTrader essentially depends on three major frameworks
#        Google Web Toolkit
#        a JEE Application server
#        OpenJPA
# -----------------------------------------------------------------------------
#   OpenJPA as persistence provider and a JDBC Driver resources
# -----------------------------------------------------------------------------
maven.repos=C:/Documents and Settings/Administrator/.m2/repository
jpa.jar=${maven.repos}/org/apache/geronimo/specs/geronimo-jpa_2.0_spec/1.1/geronimo-jpa_2.0_spec-1.1.jar
openjpa.version=2.1.0-SNAPSHOT
openjpa.jar=${maven.repos}/org/apache/openjpa/openjpa-all/${openjpa.version}/openjpa-all-${openjpa.version}.jar
openjpa.src.jar=${maven.repos}/org/apache/openjpa/openjpa-all/${openjpa.version}/openjpa-all-${openjpa.version}-sources.jar

# -----------------------------------------------------------------------------
#    Google Web Toolkit specific resources
# -----------------------------------------------------------------------------
gwt.sdk=C:/gwt-2.0.4
# -----------------------------------------------------------------------------
#    JDBC specific resources
# -----------------------------------------------------------------------------
jdbc.jar=C:/mysql/mysql-connector-java-5.1.6/mysql-connector-java-5.1.6-bin.jar

# -----------------------------------------------------------------------------
# Application Server specific paths
# -----------------------------------------------------------------------------
appserver.root=C:/apache-tomcat-6.0.29
auto.deploy.dir=${appserver.root}/webapps

# The root directory of the application server 
#appserver.root=C:/glassfishv3/glassfish
appserver.root=C:/apache-tomcat-6.0.29
# The root directory of the deployed application domains
domain.root=${appserver.root}
# Name of the domain
#domain.name=domain1
domain.name=
# The root directory of the domain in which this application will be deployed
base.domain=${domain.root}/${domain.name}
# The directory for automatic deployment
#auto.deploy.dir=${base.domain}/autodeploy
#auto.deploy.dir=${base.domain}/autodeploy
# The directory for libraries the application depends on
deploy.app.lib=${base.domain}/lib
# The directory for common libraries many application depends on, e.g. JDBC driver
deploy.common.lib=${base.domain}/lib/ext

gxt.sdk=C:/gxt-2.2.0