#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<!--
  ~ 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.1.css">

  <script type="text/javascript" src="js/jquery-1.7.1.js"></script>
  <script type="text/javascript" src="js/bootstrap.2.0.1.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="${symbol_pound}collapse-put" data-parent="${symbol_pound}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="${symbol_pound}collapse-get" data-parent="${symbol_pound}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="${symbol_pound}collapse-delete" data-parent="${symbol_pound}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="${symbol_pound}" data-dismiss="alert" id='alert-message-error-close-a'>&${symbol_pound}215;</a>
    ${symbol_dollar}{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="${symbol_pound}" data-dismiss="alert" id='alert-message-warning-close-a'>&${symbol_pound}215;</a>
    ${symbol_dollar}{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="${symbol_pound}" data-dismiss="alert" id='alert-message-info-close-a'>&${symbol_pound}215;</a>
    ${symbol_dollar}{message}
  </div>
</script>

</html>


