<!--
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.
-->
<wicket:panel>
<wicket:link>
  <link type="text/css" rel="stylesheet" href="Workbench_wicket.css"/>
  <link type="text/css" rel="stylesheet" href="jquery.alerts_wicket.css"/>
  <script type="text/javascript" src="jquery-1.3.2.js"></script>
  <script type="text/javascript" src="jquery-ui-1.7.2.full.min.js"></script>
  <script type="text/javascript" src="jquery.periodicalupdater.js"></script>
  <script type="text/javascript" src="jquery.alerts.js"></script>    
  <script type="text/javascript" src="Workbench.js"></script>
</wicket:link>

<wicket:remove>
  <link type="text/css" rel="stylesheet" href="Workbench.css"/>
  <link type="text/css" rel="stylesheet" href="jquery.alerts.css"/>  
</wicket:remove>

<div class="page">
    <div class="container browsers">
        <div id="browseStagingContainer">
        <h5>Staging Area</h5>
            <div id="browseStagingPath" class="pathbar">initializing...</div>
            <div id="browseStaging" class="browser">
                <div id="browseStagingNav">
                    <ul class="fileTree">
                        <li class="directory nav"><a id="stagingNavUpRoot" href="#" rel=".">.</a></li>
                        <li class="directory nav"><a id="stagingNavUpOne"  href="#" rel="..">..</a></li>
                    </ul>
                </div>
                <div id="browseStagingContents"></div>
            </div>
            <div id="stagedMetadataWorkbench"   class="editor">
                <div id="infoNoMetadataExtractorDefined" class="info overlay">
                    <div class="infoContent">
                        No Metadata Detected...<br/>
                    </div>
                </div>
                <div id="stagingMetContainer">              
                    <div id="stagingMetExtractorSelection">
                        <select id="stagingMetExtractorConfigList">
                            <option value="-1">Initializing...</option>
                        </select>
                        <input id="stagingMetExtractorRefreshButton" type="button" value="Refresh"/>
                        &nbsp;
                        
                    </div>
                    <div id="stagedMetadataWorkbenchContent"></div>
                </div>
            </div>
        </div>
        <div id="browseCatalogContainer">
        <h5>File Manager Catalog</h5>
            <div id="browseCatalogPath" class="pathbar">initializing...</div>
            <div id="browseCatalog" class="browser">
                <div id="browseCatalogNav">
                    <ul class="fileTree">
                        <li class="directory nav"><a id="catalogNavUpRoot" href="#" rel=".">.</a></li>
                        <li class="directory nav"><a id="catalogNavUpOne"  href="#" rel="..">..</a></li>
                    </ul>
                </div>
                <div id="browseCatalogContents"></div>
            </div>
            <div id="catalogMetadataWorkbench" class="editor">
                <div id="catalogMetadataWorkbenchContent"></div>
            </div>
        </div>
        <br class="clr"/>
    </div>
    <div class="container tasks">
        <div id="ingestionTaskList">
            <h5>File Manager Ingestion Task List</h5>
            <div id="ingestionTaskListContent">
            <table cellspacing="0" cellpadding="0" id="ingestionTaskListItems">
              <thead>
              <tr>
                <th style="width:50px;">TaskId</th>
                <th>Created</th>
                <th>Files</th>
                <th>Policy</th>
                <th>ProductType</th>
                <th>MetExtractor</th>
                <th>MetExt Config</th>
                <th>Status</th>
                <th style="border-right-width:0px;">Action</th>
              </tr>
              </thead>
              <tbody>
              
              </tbody>
              
            </table>
            </div>
        </div>
    </div>
</div>

<!-- product type workbench -->
<div id="productTypeWorkbenchContents" style="display:none">
    <ul>
        <li><a href='#ptwbAddProducts'>Add Products</a></li>
        <li><a href='#ptwbMetadata'>View Metadata</a></li>
    </ul><br class="clr"/>
    <div id="ptwbAddProducts">
        <span class="instructions">
        Add files from the staging area by dragging them into the target box below. Once you have 
        Finished, click 'Save as Ingestion Task' to finalize.
        </span>
        <div id="droppedFileTarget" class="ptwbSectionBox">
            <h5>File Drop Target...</h5>
        
        </div>
        <div id="droppedFileList" class="ptwbSectionBox">
            <h5>Files to be ingested...</h5>
            <ul></ul>
        </div>
        <div id="itMetExtractorSelector" class="ptwbSectionBox">
            <h5>Metadata Extraction Configuration...</h5>
            <span class="instructions">Choose a metadata extractor configuration from
                the list below:
            </span>
            <select name="itMetExtractorConfigId" id="itMetExtractorConfigId">
                <option value="">Initializing...</option>
            </select><br/><br/>
        </div>
        <div id="itCreateIngestionTaskButton">
            <span class="instructions">Click here to create an ingestion task for these files</span>
            <input type="button" value="Save as Ingestion Task" onclick="createIngestionTask();"/>
        </div>
    
    </div>
    <div id="ptwbMetadata">
        <span class="instructions">
            The following metadata has been defined for this product type.
        </span>
        <div class="ptwbMetadataList"></div>
    </div>
</div>
</wicket:panel>
