/*
 * Copyright 2004, 2009 The Apache Software Foundation.
 *
 * Licensed 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.
 */

package org.apache.axis2.maven2.server.util;

/**
 * The Class Constants.
 * 
 * @since 1.7.0 
 */
public class Constants {
    
    /** The Constant DEFAULT_REPO_LOCATION. */
    public static final String DEFAULT_REPO_LOCATION = "target/work/repository";
    
    /** The Constant DEFAULT_STD_SERVICE_DIRECTOY. */
    public static final String DEFAULT_STD_SERVICE_DIRECTORY = "services";
    
    /** The Constant DEFAULT_JAX_WS_SERVICE_DIRECTOY. */
    public static final String DEFAULT_JAX_WS_SERVICE_DIRECTORY = "servicejars";    
    
    /** The Constant DEFAULT_MODULE_REPO_DIRECTOY. */
    public static final String DEFAULT_MODULE_REPO_DIRECTORY = "modules";
    
    /** The Constant DEFAULT_STD_SERVICE_SRC_DIRECTOY. */
    public static final String DEFAULT_STD_SERVICE_SRC_DIRECTORY = "src/main/resources/services";
    
    /** The Constant DEFAULT_JAX_WS_SERVICE_SRC_DIRECTOY. */
    public static final String DEFAULT_JAX_WS_SERVICE_SRC_DIRECTORY = "src/main/resources/serviceJars"; 
    
    /** The Constant DEFAULT_MODULE_SRC_DIRECTOY. */
    public static final String DEFAULT_MODULE_SRC_DIRECTORY = "src/main/resources/modules"; 
    
    /** The Constant DEFAULT_WEB_APP_DIRECTOY. */
    public static final String DEFAULT_WEB_APP_DIRECTORY = "src/main/webapp/WEB-INF";
    
    /** The Constant DEFAULT_CLASSES_DIRECTOY. */
    public static final String DEFAULT_CLASSES_DIRECTORY = "classes";
    
    /** The Constant DEFAULT_TEST_CLASSES_DIRECTOY. */
    public static final String DEFAULT_TEST_CLASSES_DIRECTORY = "test-classes";
    
    /** The Constant DEFAULT_PORT_PARAM. */
    public static final String DEFAULT_PORT_PARAM = "port";
    
    /** The Constant DEFAULT_PORT. */
    public static final String DEFAULT_PORT = "8080";
    
    /** The Constant  DEFAULT_CONF_SRC_DIR. */
    public static final String DEFAULT_CONF_SRC_DIR = "src/main/resources";
    
    /** The Constant  DEFAULT_CONF_DIR. */
    public static final String DEFAULT_CONF_DIR = "conf";
    
    /** The Constant  DEFAULT_CONF_FILE_NAME. */
    public static final String DEFAULT_CONF_FILE_NAME = "axis2.xml";

}
