<!--
  ~ 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.
  -->
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="css/bootstrap.2.0.4.css">

  <script type="text/javascript" src="js/jquery-1.7.2.js"></script>
  <script type="text/javascript" src="js/bootstrap.2.0.4.js"></script>
  <script type="text/javascript" src="js/sample.js"></script>
  <script type="text/javascript" src="js/jquery.json-2.3.js"></script>
  <script type="text/javascript" src="js/jquery-tmpl.js"></script>
  <title>Apache DirectMemory Sample</title>

</head>

<body style="padding-top: 1px;">

<div id="topbar-menu-container"></div>

<div class="container-fluid" style="min-height: 450px">
  <div class="row-fluid">

    <div class="span10 columns">
      <div class="content">


          <div id="wine-result">
            <div class="page-header"><h4>Results</h4></div>
            <div id="result-content"></div>
          </div>

          <div class="accordion" id="accordion-div">

            <div class="accordion-group">
              <div class="accordion-heading">
                <a class="accordion-toggle" href="#collapse-put" data-parent="#accordion-div" data-toggle="collapse"><h4>Put in cache</h4></a>
              </div>
              <div id="collapse-put" class="accordion-body collapse" style="height: auto;">
                <div class="well">
                  Wine Name:&nbsp<input type="text" id="wine_name" name="wine_name">
                  Wine Description:&nbsp<input type="text" id="wine_description" name="wine_description">
                  ExpiresIn:&nbsp<input type="text" id="expires-in" name="expires-in">
                  Serializer:&nbsp;
                  <select name="serialize" id="serializer" class="span8">
                    <option value="org.apache.directmemory.serialization.StandardSerializer">org.apache.directmemory.serialization.StandardSerializer</option>
                    <option value="org.apache.directmemory.serialization.protostuff.ProtoStuffWithLinkedBufferSerializer">org.apache.directmemory.serialization.protostuff.ProtoStuffWithLinkedBufferSerializer</option>
                  </select>
                  <br/>
                  <button class="btn" id="put-cache-btn">Put</button>
                </div>
              </div>
            </div>

            <div class="accordion-group">
              <div class="accordion-heading">
                <a class="accordion-toggle" href="#collapse-get" data-parent="#accordion-div" data-toggle="collapse"><h4>Get from cache</h4></a>
              </div>
              <div id="collapse-get" class="accordion-body collapse" style="height: 0px;">
                <div class="well">
                  Wine Key:&nbsp<input type="text" id="wine_name_cache" name="wine_name_cache">
                  <br/>
                  <button class="btn" id="get_cache_btn">Get</button>
                </div>
              </div>

            </div>

            <div class="accordion-group">
              <div class="accordion-heading">
                <a class="accordion-toggle" href="#collapse-delete" data-parent="#accordion-div" data-toggle="collapse"><h4>Delete from cache</h4></a>
              </div>
              <div id="collapse-delete" class="accordion-body collapse" style="height: 0px;">
                <div class="well">
                  Wine Key:&nbsp<input type="text" id="wine_key_cache" name="wine_key_cache">
                  <br/>
                  <button class="btn" id="delete_cache_btn">Delete</button>
                </div>
              </div>

            </div>


    </div>
  </div>
  </div>

</div>

<footer id="footer-content" style="vertical-align: bottom">
  <div class="pull-left">
    <a href="http://incubator.apache.org/directmemory" target="_blank">Apache DirectMemory Sample</a>
  </div>
  <div class="pull-right">
    Copyright &copy; 2005 - 2012 <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a>
  </div>
</footer>
</body>

<script id='alert-message-error' type='text/html'>
  <div class="alert fade in alert-error" data-alert="alert">
    <a class="close" href="#" data-dismiss="alert" id='alert-message-error-close-a'>&#215;</a>
    ${message}
  </div>
</script>
<script id='alert-message-warning' type='text/html'>
  <div class="alert fade in alert-heading" data-alert="alert">
    <a class="close" href="#" data-dismiss="alert" id='alert-message-warning-close-a'>&#215;</a>
    ${message}
  </div>
</script>
<script id='alert-message-info' type='text/html'>
  <div class="alert fade in alert-info" data-alert="alert">
    <a class="close" href="#" data-dismiss="alert" id='alert-message-info-close-a'>&#215;</a>
    ${message}
  </div>
</script>

</html>


