<?xml version='1.0' encoding='UTF-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements.  See the NOTICE.txt 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.
-->
<Context path="/pcs-opsui">
		
	<Parameter name="filemgr.url"
	    value="[FILEMGR_URL]"/>		
	
	<Parameter name="workflow.url"
	    value="[WORKFLOW_URL]"/>

	<Parameter name="resmgr.url"
	    value="[RESMGR_URL]"/>

	<Parameter name="org.apache.oodt.pcs.opsui.workflow.lifecycleFilePath"
	    value="[WORKFLOW_HOME]/policy/wengine/wengine-lifecycle.xml"/>
	    
	<Parameter name="org.apache.oodt.pcs.opsui.winst.statuses"
	    value="Null, Loaded, Queued, Blocked, WaitingOnResources, PreConditionSuccess, ExecutionComplete, Unknown, Paused, PreConditionEval, Executing, PostConditionEval, ResultsSuccess, ResultsFailure, ResultsBail, Stopped, Off, Failure, Success"/>
	
	<!-- <Parameter name="org.apache.oodt.pcs.opsui.winst.statuses"
	    value="QUEUED, RSUBMIT, BUILDING CONFIG FILE, PGE EXEC, CRAWLING, STAGING INPUT, FINISHED, STARTED, PAUSED"/>-->
	    
	<Parameter name="org.apache.oodt.pcs.opsui.winst.metFields.filePath"
	    value="[WORKFLOW_HOME]/policy/workflow-instance-met.xml"/>   
	    
	<Parameter name="org.apache.oodt.pcs.health.crawler.conf.filePath"
	    value="[PCS_HOME]/aux/pcs/pcs-crawlers.xml"/>
	    
	<Parameter name="org.apache.oodt.pcs.health.workflow.statuses.filePath"
	    value="[PCS_HOME]/aux/pcs/pcs-workflow-statuses.xml"/>	    
	    
	<Parameter name="org.apache.oodt.pcs.trace.excludeList"
	    value=""/>
	
	<Parameter name="org.apache.oodt.pcs.trace.enableNotCat"
	    value="true"/>
	 
	<Parameter name="ganglia.url" value="[GANGLIA_URL]"/>
	<Parameter name="contact.email" value="user@oodt.apache.org"/>

	<!-- OPSUI SKINNING
		Directions: Set the 'opsui.skin' property's value attribute. 
		Supported skins:
			""           => No skin
			"cleanwhite" => Clean, white background OODT base skin
			"navyblue"   => Darker, blue background OODT base skin
			"classic"    => The original, OCO (Orbiting Carbon Observatory) skin for OPSUI
		OR add your own!
	-->
	<Parameter name="opsui.skin" value=""/>
	
	<!-- 
	if you use the classic skin, change the home page to 
	                org.apache.oodt.pcs.opsui.status.StatusPage
	 -->
	<Parameter name="opsui.homepage" value="org.apache.oodt.pcs.opsui.HomePage"/>
	
	
    <!--  needed by Curation Services -->          
    <Parameter name="org.apache.oodt.cas.curator.metExtractorConf.uploadPath"
        value="[OODT_HOME]/extractors" />

    <Parameter name="org.apache.oodt.cas.curator.dataDefinition.uploadPath"
        value="[FILEMGR_HOME]/policy" />
        
    <Parameter name="org.apache.oodt.cas.curator.stagingAreaPath"
        value="[OODT_HOME]/data/staging"/>
    
    <Parameter name="org.apache.oodt.cas.curator.metAreaPath"
        value="[OODT_HOME]/data/met"/>
    
    <Parameter name="org.apache.oodt.cas.curator.fmProps"
        value="[FILEMGR_HOME]/etc/filemgr.properties"/>
    
    <Parameter name="org.apache.oodt.cas.curator.metExtension"
        value=".met"/>

    <Parameter name="org.apache.oodt.cas.fm.url"
        value="[FILEMGR_URL]"/>
   
    <Parameter name="org.apache.oodt.cas.curator.catalogFactoryClass" 
               value="org.apache.oodt.cas.filemgr.catalog.LuceneCatalogFactory" />	
	    
</Context>
