svn commit: r1776930 [18/19] - in /ofbiz/trunk/specialpurpose: lucene/ lucene/src/main/java/org/apache/ofbiz/content/search/ solr/ solr/src/main/java/org/apache/ofbiz/solr/webapp/ solr/webapp/solr/ solr/webapp/solr/WEB-INF/ solr/webapp/solr/css/ solr/w...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1776930 [18/19] - in /ofbiz/trunk/specialpurpose: lucene/ lucene/src/main/java/org/apache/ofbiz/content/search/ solr/ solr/src/main/java/org/apache/ofbiz/solr/webapp/ solr/webapp/solr/ solr/webapp/solr/WEB-INF/ solr/webapp/solr/css/ solr/w...

shijh
Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/libs/ngtimeago.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/libs/ngtimeago.js?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/libs/ngtimeago.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/libs/ngtimeago.js Mon Jan  2 13:44:06 2017
@@ -0,0 +1,102 @@
+/*
+Copyright (c) 2014 Uttesh Kumar
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+'use strict';
+
+var catalyst = angular.module('ngtimeago', []);
+
+
+catalyst.filter('timeago', function() {
+        return function(input, p_allowFuture) {
+
+            if (input === undefined) {
+              return "-";
+            }
+    
+            var substitute = function (stringOrFunction, number, strings) {
+                    var string = angular.isFunction(stringOrFunction) ? stringOrFunction(number, dateDifference) : stringOrFunction;
+                    var value = (strings.numbers && strings.numbers[number]) || number;
+                    return string.replace(/%d/i, value);
+                },
+                nowTime = (new Date()).getTime(),
+                date = (new Date(input)).getTime(),
+                //refreshMillis= 6e4, //A minute
+                allowFuture = p_allowFuture || false,
+                strings= {
+                    prefixAgo: '',
+                    prefixFromNow: '',
+                    suffixAgo: "ago",
+                    suffixFromNow: "from now",
+                    seconds: "less than a minute",
+                    minute: "about a minute",
+                    minutes: "%d minutes",
+                    hour: "about an hour",
+                    hours: "about %d hours",
+                    day: "a day",
+                    days: "%d days",
+                    month: "about a month",
+                    months: "%d months",
+                    year: "about a year",
+                    years: "%d years"
+                },
+                dateDifference = nowTime - date,
+                words,
+                seconds = Math.abs(dateDifference) / 1000,
+                minutes = seconds / 60,
+                hours = minutes / 60,
+                days = hours / 24,
+                years = days / 365,
+                separator = strings.wordSeparator === undefined ?  " " : strings.wordSeparator,
+            
+              
+                prefix = strings.prefixAgo,
+                suffix = strings.suffixAgo;
+                
+            if (allowFuture) {
+                if (dateDifference < 0) {
+                    prefix = strings.prefixFromNow;
+                    suffix = strings.suffixFromNow;
+                }
+            }
+
+            words = seconds < 45 && substitute(strings.seconds, Math.round(seconds), strings) ||
+            seconds < 90 && substitute(strings.minute, 1, strings) ||
+            minutes < 45 && substitute(strings.minutes, Math.round(minutes), strings) ||
+            minutes < 90 && substitute(strings.hour, 1, strings) ||
+            hours < 24 && substitute(strings.hours, Math.round(hours), strings) ||
+            hours < 42 && substitute(strings.day, 1, strings) ||
+            days < 30 && substitute(strings.days, Math.round(days), strings) ||
+            days < 45 && substitute(strings.month, 1, strings) ||
+            days < 365 && substitute(strings.months, Math.round(days / 30), strings) ||
+            years < 1.5 && substitute(strings.year, 1, strings) ||
+            substitute(strings.years, Math.round(years), strings);
+            console.log(prefix+words+suffix+separator);
+            prefix.replace(/ /g, '')
+            words.replace(/ /g, '')
+            suffix.replace(/ /g, '')
+            return (prefix+' '+words+' '+suffix+' '+separator);
+            
+        };
+    });
+
+    
+

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/analysis.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/analysis.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/analysis.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/analysis.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,128 @@
+<!--
+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.
+-->
+<div id="analysis">
+
+  <div class="block analysis-error" id="analysis-handler-missing" ng-show="isHandlerMissing">
+    <div class="head">This Functionality requires the <code>/analysis/field</code> Handler to be registered and active!</div>
+  </div>
+
+  <div class="block analysis-error" id="analysis-error" ng-show="analysisError">
+    <div class="body">{{analysisError}}</div>
+  </div>
+
+  <div id="analysis-holder">
+
+    <div id="field-analysis">
+
+      <form method="get">
+
+        <ul class="clearfix">
+
+          <li class="index">
+
+            <label for="analysis_fieldvalue_index">Field Value (Index)</label>
+            <textarea name="analysis.fieldvalue" id="analysis_fieldvalue_index" ng-model="indexText"></textarea>
+
+          </li>
+
+          <li class="query">
+
+            <label for="analysis_fieldvalue_query">Field Value (Query)</label>
+            <textarea name="analysis.query" id="analysis_fieldvalue_query" ng-model="queryText"></textarea>
+
+          </li>
+
+          <li class="settings-holder clearfix">
+            <div class="settings clearfix">
+              <label for="type_or_name">Analyse Fieldname / FieldType:</label>
+              <select style="width:130px" chosen ng-change="changeFieldOrType()" id="type_or_name" ng-model="fieldOrType" ng-options="f.value as f.label group by f.group for f in fieldsAndTypes"></select>
+
+              <a id="tor_schema" ng-href="#/{{core}}/schema?{{schemaBrowserUrl}}"><span>Schema Browser</span>&nbsp;</a>
+
+              <div class="buttons clearfix">
+
+                <button type="submit" ng-click="updateQueryString()"><span>Analyse Values</span></button>
+
+                <div class="verbose_output" ng-class="{active:verbose}">
+                  <a ng-click="toggleVerbose()">Verbose Output</a>
+                </div>
+
+              </div>
+
+            </div>
+          </li>
+
+        </ul>
+
+      </form>
+
+    </div>
+
+    <div id="analysis-result" class="clearfix verbose_output">
+      <div ng-class="key" ng-repeat="(key, type) in result">
+        <table border="0" cellspacing="0" cellpadding="0">
+          <tbody ng-repeat="component in type">
+            <tr class="step">
+              <td class="part analyzer">
+                <div>
+                  <abbr title="{{component.name}}">{{component.short}}</abbr>
+                </div>
+              </td>
+
+              <td class="part legend" ng-show="verbose">
+                <div class="holder">
+                  <table border="0" cellspacing="0" cellpadding="0">
+                    <tr>
+                      <td>
+                        <table border="0" cellspacing="0" cellpadding="0">
+                          <tr ng-repeat="caption in component.captions" class="{{generate_class_name( short_key )}}">
+                            <td>{{ caption }}</td>
+                          </tr>
+                        </table>
+                      </td>
+                    </tr>
+                  </table>
+                </div>
+              </td>
+              <td class="part data" ng-class="{spacer:token.blank}" colspan="1" ng-repeat="token in component.tokens track by token.index">
+                <div class="holder" ng-hide="token.blank">
+                  <table border="0" cellspacing="0" cellpadding="0">
+                    <tbody>
+                      <tr class="details">
+                        <td class="details">
+                          <table border="0" cellspacing="0" cellpadding="0">
+                            <tbody>
+                              <tr class="{{value.name}}" ng-repeat="value in token.keys" ng-show="verbose || value.name=='text'">
+                                <td>{{value.value}}</td>
+                              </tr>
+                            </tbody>
+                          </table>
+                        </td>
+                      </tr>
+                    </tbody>
+                  </table>
+                </div>
+                <div class="holder" ng-show="token.blank">&nbsp;</div>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+    </div>
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cloud.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cloud.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cloud.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cloud.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,105 @@
+<!--
+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.
+-->
+<div id="cloud" class="clearfix">
+
+  <div id="frame">
+
+    <div id="tree-content" class="content clearfix" ng-show="showTree">
+    <jstree class="tree" on-select="showTreeLink(url)" id="tree" data="tree"></jstree>
+
+      <div id="file-content" class="clearfix">
+
+        <a id="toggle" ng-click="showProps = !showProps" ng-show="showData" ng-class="showProps ? 'minus' : 'plus'">Metadata</a>
+        <div id="prop" ng-show="znode.prop && showData && showProps">
+          <ul>
+            <li ng-class="{odd:$odd}" ng-repeat="(key, prop) in znode.prop">
+              <dl class="clearfix">
+                <dt>{{ key }}</dt>
+                <dd>{{ prop }}</dd>
+              </dl>
+            </li>
+          </ul>
+        </div>
+
+        <div id="data" ng-show="showData">
+          <em ng-show="!znode.data">Node "{{znode.path }}" has no utf8 Content</em>
+          <pre ng-show="znode.data" class="syntax language-{{lang}}"
+            ng-bind-html="znode.data | highlight:lang | unsafe">
+          </pre>
+        <a class="close" ng-click="hideData()"><span>&nbsp;</span></a>
+        </div>
+
+
+      </div>
+
+    </div>
+
+    <div graph data="graphData" leaf-count="leafCount" helper-data="helperData" is-radial="isRadial" id="graph-content" class="content clearfix" ng-show="showGraph">
+
+      <div id="canvas"></div>
+
+      <div id="legend">
+        <ul>
+          <li class="leader"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Leader</li>
+          <li class="active"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Active</li>
+          <li class="recovering"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovering</li>
+          <li class="down"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Down</li>
+          <li class="recovery_failed"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Recovery Failed</li>
+          <li class="gone"><svg width="15" height="15"><g transform="translate(5,2)"><g transform="translate(0,5)"><circle r="4.5"></circle></g></g></svg> Gone</li>
+        </ul>
+      </div>
+      <div style="width: 100%; text-align: center;" ng-show="showPaging">
+        <div id="cloudGraphPaging">
+         <button ng-show="prevEnabled" ng-click="previous()" id="cloudGraphPagingPrev">&lt; Previous</button>
+         <span ng-show="total==0">No collections found.</span>
+         <span ng-hide="total==0">Collections {{start}} - {{last}} of {{total}}.</span>&nbsp;
+
+         Filter by:&nbsp;<select ng-model="filterType" ng-change="initGraph()" id="cloudGraphPagingFilterType">
+           <option value="status">Status</option>
+           <option value="name">Name</option>
+         </select>&nbsp;T:{{filterType}}
+
+         <span ng-show="filterType=='status'">
+           <select ng-model="pagingStatusFilter" id="cloudGraphPagingStatusFilter" ng-change="resetGraph()">
+             <option value=""> - Any - </option>
+             <option value="healthy">Healthy</option>
+             <option value="degraded">Degraded</option>
+             <option value="downed_shard">Downed Shard</option>
+             <option value="recovering">Replica in Recovery</option>
+           </select>
+         </span>
+         <span ng-show="filterType=='name'">
+           <input ng-model="pagingFilter" type="text" size="10" name="filter" ng-change="resetGraph()"/>&nbsp;
+         </span>
+         Show <input ng-model="rows" ng-change="resetGraph()" type="text" size="2" name="rows" /> per page.
+         <button ng-show="nextEnabled" ng-click="next()">Next &gt;</button>
+        </div>
+      </div>
+
+    </div>
+
+  </div>
+
+  <div id="debug" ng-show="showDebug">
+    <ul class="clearfix">
+      <li class="clipboard"><a href="#" data-copied="Copied to Clipboard!">Copy to Clipboard (BUGGY!)</a></li>
+      <li class="close"><a ng-click="closeDebug()">Close</a></li>
+    </ul>
+    <pre class="debug"></pre>
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collection_overview.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collection_overview.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collection_overview.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collection_overview.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,85 @@
+<!--
+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.
+-->
+<div id="dashboard">
+
+  <div class="clearfix">
+
+    <div id="collection" class="block fieldlist">
+
+      <h2><span>Collection: {{selectedCollection.name}}</span></h2>
+
+      <div class="content">
+
+        <dl>
+
+          <dt>Config name:</dt>
+            <dd class="value">{{selectedCollection.configName}}</dd>
+
+          <dt>Max shards per node:</dt>
+            <dd class="value">{{selectedCollection.maxShardsPerNode}}</dd>
+
+          <dt>Replication factor:</dt>
+            <dd class="value">{{selectedCollection.replicationFactor}}</dd>
+
+          <dt>Auto-add replicas:</dt>
+            <dd class="ico value" ng-class="selectedCollection.autoAddReplicas=='true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+
+          <dt>Router name:</dt>
+            <dd class="value">{{selectedCollection.router.name}}</dd>
+
+        </dl>
+
+      </div>
+    </div>
+
+    <div id="shards" class="block fieldlist">
+
+      <h2><span>Shards</span></h2>
+
+      <div>
+
+        <div class="shard" ng-repeat="(name, shard) in selectedCollection.shards">
+          <a ng-click="hideShard(shard)"><h3 class="shard-title">{{name}}</h3></a>
+          <dl class="shard-detail clearfix" ng-hide="shard.hide">
+            <dt>Range:</dt>
+            <dd class="value">{{ shard.range }}</dd>
+
+            <dt>Active:</dt>
+            <dd class="ico value" ng-class="shard.state='active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+
+            <dt>Replicas:</dt>
+            <dd>
+              <div class="replica clearfix {{$odd?'odd':''}}" ng-repeat="(name, replica) in shard.replicas">
+                <a ng-click="showReplica(replica)"><h3>{{replica.core}}</h3></a>
+                <dl ng-show="replica.show">
+                  <dt>Base URL: </dt><dd>{{replica.base_url}}</dd>
+                  <dt>Core: </dt><dd><a href="{{replica.base_url}}{{rootUrl}}#/{{replica.core}}">{{replica.core}}</a></dd>
+                  <dt>Active: </dt>
+                    <dd class="ico value" ng-class="replica.state == 'active' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+                  <dt>Leader: </dt>
+                    <dd class="ico value" ng-class="replica.leader == 'true' ? 'ico-1' : 'ico-0'"><span>yes</span></dd>
+                </dl>
+              </div>
+
+            </dd>
+          </dl>
+      </div>
+    </div>
+
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collections.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collections.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collections.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/collections.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,343 @@
+<!--
+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.
+-->
+<div id="collections" class="clearfix empty">
+
+  <div id="ui-block" style="display:none">&nbsp;</div><!-- @todo what is this for? -->
+
+  <div id="frame">
+
+    <div id="actions" class="actions clearfix">
+
+      <button id="add" class="action" ng-click="showAddCollection()"><span>Add Collection</span></button>
+
+      <button id="delete" class="warn requires-core" ng-click="showDeleteCollection()" ng-show="collection"><span>Delete</span></button>
+      <button id="reload" class="requires-core" ng-click="reloadCollection()" ng-show="collection"
+         ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
+      <button id="create-alias" class="action requires-core" ng-click="toggleCreateAlias()"><span>Create Alias</span></button>
+      <button id="delete-alias" class="action requires-core" ng-click="toggleDeleteAlias()"><span>Delete Alias</span></button>
+
+      <div class="action add" data-rel="add" ng-show="showAdd" style="left:0px">
+
+        <form>
+
+          <p class="clearfix"><label for="add_name">name:</label>
+          <input type="text" name="name" id="add_name" ng-model="newCollection.name" placeholder="new collection"></p>
+
+          <p class="clearfix"><label for="add_config">config set:</label>&nbsp;
+          <select chosen ng-options="config.name as config.name for config in configs" name="config_name" id="add_config" ng-model="newCollection.configName">
+          </select>
+          </p>
+
+          <p class="clearfix"><label for="add_numShards">numShards:</label>
+          <input type="text" name="numShards" id="add_numShards" ng-model="newCollection.numShards"></p>
+
+          <p class="clearfix"><label for="add_replicationFactor">replicationFactor:</label>
+          <input type="text" name="replicationFactor" id="add_replicationFactor" ng-model="newCollection.replicationFactor"></p>
+
+          <p class="clearfix"><a ng-click="showAdvanced=!showAdvanced">
+              <span id="add_advanced" ng-class="{open: showAdvanced}">Show advanced</span></a></p>
+          <div ng-show="showAdvanced">
+
+              <p>Advanced options: </p>
+              <p class="clearfix"><label for="add_router_name">router:</label>
+              <select name="routerName" id="add_router_name" ng-model="newCollection.routerName">
+                <option value="compositeId">Composite ID</option>
+                <option value="implicit">Implicit</option>
+              </select>
+              </p>
+
+              <p class="clearfix"><label for="add_maxShardsPerNode">maxShardsPerNode:</label>
+              <input type="text" name="replicationFactor" id="add_maxShardsPerNode" ng-model="newCollection.maxShardsPerNode"></p>
+
+              <p class="clearfix"><label for="add_shards">shards:</label>
+              <input type="text" name="shards" id="add_shards" ng-model="newCollection.shards"></p>
+
+              <p class="clearfix"><label for="add_routerField">routerField:</label>
+              <input type="text" name="routerField" id="add_routerField" ng-model="newCollection.routerField"></p>
+
+          </div>
+          <p class="clearfix note error" ng-show="addMessage">
+            <span>{{addMessage}}</span>
+          </p>
+
+          <p class="clearfix buttons">
+            <button type="submit" class="submit" ng-click="addCollection()"><span>Add Collection</span></button>
+            <button type="reset" class="reset" ng-click="cancelAddCollection()"><span>Cancel</span></button>
+          </p>
+
+        </form>
+
+      </div>
+
+      <div class="action delete" ng-show="showDelete">
+
+        <form>
+
+          <p>Please type collection name to confirm deletion:</p>
+          <p class="clearfix"><label for="collectiondeleteConfirm">Collection</label>
+          <input type="text" ng-model="collectionDeleteConfirm" id="collectionDeleteConfirm"></p>
+
+          <p class="clearfix note error" ng-show="deleteMessage">
+            <span>{{deleteMessage}}</span>
+          </p>
+
+          <p class="clearfix buttons">
+            <button class="submit" ng-click="deleteCollection()"><span>Delete</span></button>
+            <button type="reset" class="reset" ng-click="showDelete=false"><span>Cancel</span></button>
+          </p>
+        </form>
+
+      </div>
+
+      <div class="action create-alias" ng-show="showCreateAlias">
+
+        <form>
+
+          <input type="hidden" name="core" data-core="current">
+
+          <p class="clearfix"><label for="alias">Alias Name:</label>
+          <input type="text" name="alias" ng-model="aliasToCreate" id="alias"></p>
+
+          <p class="clearfix"><label for="aliasCollections">Collections:</label>
+          <select multiple id="aliasCollections" ng-model="aliasCollections" ng-options="collection.name for collection in collections" class="other">
+          </select></p>
+
+
+          <p class="clearfix note error" ng-show="renameMessage">
+            <span>{{renameMessage}}</span>
+          </p>
+
+          <p class="clearfix buttons">
+            <button class="submit" ng-click="createAlias()"><span>Create Alias</span></button>
+            <button type="reset" class="reset" ng-click="cancelCreateAlias()"><span>Cancel</span></button>
+          </p>
+        </form>
+
+      </div>
+
+      <div class="action delete-alias" ng-show="showDeleteAlias">
+
+        <form>
+          <span ng-show="aliases">
+          <p class="clearfix"><label for="deleteAlias">Alias:</label>
+          <select id="deleteAlias" ng-model="aliasToDelete" ng-options="alias as alias for (alias, collections) in aliases" class="other">
+          </select></p>
+
+          <p class="clearfix note error" ng-show="swapMessage">
+            <span>{{swapMessage}}</span>
+          </p>
+
+          <p class="clearfix buttons">
+            <button type="submit" class="submit" ng-click="deleteAlias()"><span>Delete Alias</span></button>
+            <button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
+          </p>
+          </span>
+          <span ng-hide="aliases">
+              <p>No aliases to delete.</p>
+          <p class="clearfix buttons">
+            <button type="reset" class="reset" ng-click="cancelDeleteAlias()"><span>Cancel</span></button>
+          </p>
+          </span>
+
+        </form>
+
+      </div>
+
+    </div>
+
+
+    <div class="requires-core" ng-hide="collection">
+      <h2>Please select a collection</h2>
+    </div>
+
+    <div id="data" class="requires-core clearfix" ng-show="collection">
+
+      <div class="block" id="collection-data">
+
+          <h2>Collection: {{collection.name}}</h2>
+
+          <div class="message-container">
+              <div class="message"></div>
+          </div>
+
+          <div class="content">
+
+          <ul>
+
+            <li>
+                <dl class="clearfix">
+                    <dt><span>Shard count:</span></dt>
+                    <dd>{{collection.shards.length}}</dd>
+                </dl>
+            </li>
+            <li><dl class="clearfix">
+              <dt><span>configName:</span></dt>
+                <dd>{{collection.configName}}</dd>
+            </dl></li>
+
+            <li><dl class="clearfix">
+              <dt><span>replicationFactor:</span></dt>
+                <dd>{{collection.replicationFactor}}</dd>
+            </dl></li>
+
+            <li><dl class="clearfix">
+              <dt><span>maxShardsPerNode:</span></dt>
+                <dd>{{collection.maxShardsPerNode}}</dd>
+            </dl></li>
+
+            <li><dl class="clearfix">
+              <dt><span>router:</span></dt>
+                <dd>{{collection.router.name}}</dd>
+            </dl></li>
+
+            <li><dl class="clearfix">
+              <dt><span>autoAddReplicas:</span></dt>
+                <dd>{{collection.autoAddReplicas}}</dd>
+            </dl></li>
+          </ul>
+
+        </div>
+      </div>
+
+      <div class="block" id="shard-data">
+        <div class="content shard" ng-repeat="shard in collection.shards">
+          <a ng-click="toggleShard(shard)"><h2><span ng-class="{open:shard.show}">Shard: {{shard.name}}</span></h2></a>
+          <ul ng-show="shard.show">
+              <li>
+                  <ul>
+                      <li>
+                          <dl class="clearfix">
+                            <dt><span>state:</span></dt>
+                            <dd>{{shard.state}}</dd>
+                          </dl>
+                      </li>
+                      <li>
+                      <dl class="clearfix">
+                        <dt><span>range:</span></dt>
+                        <dd>{{shard.range}}</dd>
+                      </dl>
+                          <br/>
+                      </li>
+                      <li>
+                        <ul class="replica" ng-repeat="replica in shard.replicas">
+                          <li>
+                                  <h2>
+                                    <a ng-click="toggleReplica(replica)">
+                                      <span class="openReplica" ng-class="{open:replica.show}">Replica: {{replica.name}}</span>
+                                    </a>
+                                    <div style="float:right"><a ng-click="toggleRemoveReplica(replica)"><span class="rem"></span></a></div>
+                                 </h2>
+                          </li>
+                          <li>
+                            <ul ng-show="replica.showRemove">
+                                <li>
+                                    <form class="delete-replica">
+
+                                      <p class="clearfix"><em>Are you sure you want to delete this replica?</em></p>
+
+                                      <p class="clearfix buttons">
+                                        <button class="submit" ng-class="{success: replica.deleted}" ng-click="deleteReplica(replica)"><span>Delete Replica</span></button>
+                                        <button type="reset" class="reset" ng-click="toggleRemoveReplica(replica)"><span>Cancel</span></button>
+                                      </p>
+                                    </form>
+                                </li>
+                            </ul>
+                            <ul ng-show="replica.show">
+                                <li>
+                                    <dl class="clearfix">
+                                        <dt><span>core:</span></dt>
+                                        <dd>{{replica.core}}</dd>
+                                    </dl>
+                                </li>
+
+                                <li>
+                                    <dl class="clearfix">
+                                        <dt><span>base URL:</span></dt>
+                                        <dd><a ng-href="{{replica.base_url}}{{rootUrl}}">{{replica.base_url}}</a></dd>
+                                    </dl>
+                                </li>
+
+                                <li>
+                                    <dl class="clearfix">
+                                        <dt><span>node name:</span></dt>
+                                        <dd>{{replica.node_name}}</dd>
+                                    </dl>
+                                </li>
+
+                                <li>
+                                    <dl class="clearfix">
+                                        <dt><span>state:</span></dt>
+                                        <dd>{{replica.state}}</dd>
+                                    </dl>
+                                </li>
+
+                                <li>
+                                    <dl class="clearfix">
+                                        <dt><span>leader:</span></dt>
+                                        <dd class="ico" ng-class="replica.leader ?'ico-1' : 'ico-0'"><span></span></dd>
+                                    </dl>
+                                </li>
+                            </ul>
+                          </li>
+
+                        </ul>
+                      </li>
+                      <li ng-hide="shard.showAdd">
+                          <span class="actions replica">
+                            <button class="action" id="add-replica" ng-click="toggleAddReplica(shard)"><span>add replica</span></button>
+                          </span>
+                      </li>
+                  </ul>
+                  <div class="action add-replica" ng-show="shard.showAdd">
+
+                    <form>
+
+                      <p id="node-name" class="clearfix"><label for="node-name">Node:</label>
+                      <select chosen ng-model="shard.replicaNodeName" ng-options="node for node in nodes" class="other">
+                          <option value="">No specified node</option>
+                      </select>
+                          node: {{shard.replicaNodeName}}
+                      </p>
+
+                      <p class="clearfix note error" ng-show="createReplicaMessage">
+                        <span>{{createReplicaMessage}}</span>
+                      </p>
+
+                      <p class="clearfix buttons">
+                        <button class="submit delete" ng-class="{success: shard.replicaAdded}" ng-click="addReplica(shard)"><span>Create Replica</span></button>
+                        <button type="reset" class="reset" ng-click="toggleAddReplica(shard)"><span>Cancel</span></button>
+                      </p>
+                        <p clas="clearfix">&nbsp;</p>
+                    </form>
+
+                  </div>
+              </li>
+          </ul>
+        </div>
+      </div>
+
+    </div>
+
+  </div>
+
+  <div id="navigation" class="requires-core clearfix">
+    <ul>
+      <li ng-repeat="c in collections" ng-class="{current: collection.name == c.name}"><a href="#~collections/{{c.name}}">{{c.name}}</a></li>
+    </ul>
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/core_overview.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/core_overview.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/core_overview.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/core_overview.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,227 @@
+<!--
+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.
+-->
+<div id="dashboard">
+
+  <div class="clearfix">
+
+    <div class="block fieldlist" id="statistics" ng-class="{disabled: statisticsDisabled}">
+
+      <h2><span>Statistics</span></h2>
+
+      <div class="message-container" ng-show="statsMessage">
+        <div class="message">{{statsMessage}}</div>
+      </div>
+
+      <div class="content">
+
+        <dl>
+
+          <dt>Last Modified:</dt>
+            <dd class="value">{{index.lastModified | timeago}}</dd>
+
+          <dt class="index_num-docs">Num Docs:</dt>
+            <dd class="value">{{index.numDocs}}</dd>
+
+          <dt class="index_max-doc">Max Doc:</dt>
+            <dd class="index_max-doc value">{{index.maxDoc}}</dd>
+
+          <dt class="index_heap-usage-bytes">Heap Memory Usage:</dt>
+            <dd class="index_heap-usage-bytes value">{{index.indexHeapUsageBytes}}</dd>
+
+          <dt class="index_deleted-docs">Deleted Docs:</dt>
+            <dd class="index_deleted-docs value">{{index.deletedDocs}}</dd>
+
+          <dt class="index_version">Version:</dt>
+            <dd class="index_version value">{{index.version}}</dd>
+
+          <dt class="index_segmentCount">Segment Count:</dt>
+            <dd class="index_segmentCount value">{{index.segmentCount}}</dd>
+
+          <dt class="index_optimized">Optimized:</dt>
+            <dd class="index_optimized ico value" ng-class="index.hasDeletions ? 'ico-0' : 'ico-1'"><span></span>
+            <a ng-click="optimizeIndex()" ng-show="index.hasDeletions">optimize now</a></dd>
+
+          <dt class="index_current">Current:</dt>
+            <dd class="ico" ng-class="index.current ?'ico-1' : 'ico-0'"><span></span></dd>
+
+        </dl>
+
+      </div>
+    </div>
+
+    <div class="block fieldlist" id="instance">
+
+      <h2><span>Instance</span></h2>
+
+      <div class="message-container" ng-show="indexMessage">
+        <div class="message">{{indexMessage}}</div>
+      </div>
+
+      <div class="content">
+
+        <dl>
+
+          <dt><abbr title="Current Working Directory">CWD</abbr>:</dt>
+            <dd class="value">{{ core.directory.cwd }}</dd>
+
+          <dt>Instance:</dt>
+            <dd class="value">{{ core.directory.instance }}</dd>
+
+          <dt>Data:</dt>
+            <dd class="value">{{ core.directory.data }}</dd>
+
+          <dt>Index:</dt>
+            <dd class="value">{{ core.directory.index }}</dd>
+
+          <dt>Impl:</dt>
+            <dd class="value">{{ core.directory.dirimpl }}</dd>
+
+        </dl>
+
+      </div>
+    </div>
+
+  </div>
+  <div class="clearfix">
+
+    <div class="block" id="replication">
+
+      <h2>
+        <span class="is-replicating">
+          Replication
+          <span ng-show="isSlave"> (Slave)</span>
+          <span ng-show="isMaster"> (Master)</span>
+        </span>
+      </h2>
+
+      <div class="message-container" ng-show="replicationMessage">
+        <div class="message">{{replicationMessage}}</div>
+      </div>
+
+      <div class="content clearfix" id="details">
+
+        <table border="0" cellspacing="0" cellpadding="0">
+
+          <thead>
+
+            <tr>
+
+              <td><span>Index</span></td>
+              <th>Version</th>
+              <th><abbr title="Generation">Gen</abbr></th>
+              <th>Size</th>
+
+            </tr>
+
+          </thead>
+          <tbody>
+
+            <tr class="masterSearch" ng-show="isMaster">
+
+              <th>Master (Searching)</th>
+              <td class="version"><div>{{replication.indexVersion}}</div></td>
+              <td class="generation"><div>{{replication.generation}}</div></td>
+              <td class="size"><div>{{replication.indexSize || '-'}}</div></td>
+
+            </tr>
+
+            <tr class="master" ng-show="isMaster">
+
+              <th>Master (Replicable)</th>
+              <td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
+              <td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
+              <td class="size"><div>-</div></td>
+
+            </tr>
+
+            <tr class="master" ng-show="isSlave">
+
+              <th>Master (Replicable)</th>
+              <td class="version"><div>{{replication.master.replicableVersion || '-'}}</div></td>
+              <td class="generation"><div>{{replication.master.replicableGeneration || '-'}}</div></td>
+              <td class="size"><div>-</div></td>
+
+            </tr>
+
+            <tr class="masterSearch" ng-show="isSlave">
+
+              <th>Master (Searching)</th>
+              <td class="version"><div>{{replication.slave.masterDetails.indexVersion}}</div></td>
+              <td class="generation"><div>{{replication.slave.masterDetails.generation}}</div></td>
+              <td class="size"><div>{{replication.slave.masterDetails.indexSize || '-'}}</div></td>
+
+            </tr>
+
+            <tr class="slave slaveOnly" ng-show="isSlave">
+
+              <th>Slave (Searching)</th>
+              <td class="version"><div>{{replication.indexVersion}}</div></td>
+              <td class="generation"><div>{{replication.generation}}</div></td>
+              <td class="size"><div>{{replication.indexSize || '-'}}</div></td>
+
+            </tr>
+          </tbody>
+
+        </table>
+
+      </div>
+    </div>
+
+    <div class="block fieldlist" id="healthcheck" ng-class="{disabled: healthcheckMessage}">
+
+      <h2><span>Healthcheck</span></h2>
+
+      <div class="message-container" ng-show="healthcheckMessage">
+        <div class="message">{{healthcheckMessage}}</div>
+      </div>
+
+      <div class="content" ng-show="!healthcheckMessage">
+        <dl>
+
+          <dt class="status">Status:</dt>
+          <dd class="status value ico ico-1" ng-show="healthcheckStatus">
+            <button class="healthcheck-status enabled">Healthcheck Status</button>
+          </dd>
+          <dd class="status value ico ico-0" ng-show="!healthcheckStatus">
+            <button class="healthcheck-status">enable ping</button>
+          </dd>
+        </dl>
+      </div>
+
+    </div>
+
+  </div>
+  <div class="clearfix">
+
+    <div class="block" id="admin-extra">
+
+      <h2><span>Admin Extra</span></h2>
+
+      <div class="message-container">
+        <div class="message"></div>
+      </div>
+
+      <div class="content">
+
+      </div>
+
+    </div>
+
+  </div>
+
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cores.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cores.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cores.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/cores.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,231 @@
+<!--
+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.
+-->
+<div id="cores" class="clearfix empty">
+
+  <div id="ui-block" style="display:none">&nbsp;</div><!-- @todo what is this for? -->
+
+  <div id="frame">
+
+    <div id="actions" class="actions clearfix">
+
+      <button id="add" class="action" ng-click="showAddCore()"><span>Add Core</span></button>
+      <span ng-show="hasCores">
+      <button id="unload" class="warn requires-core" ng-click="unloadCore()"><span>Unload</span></button>
+      <button id="rename" class="action requires-core" ng-click="showRenameCore()"><span>Rename</span></button>
+      <button id="swap" class="action requires-core" ng-click="showSwapCores()"><span>Swap</span></button>
+      <button id="reload" class="requires-core" ng-click="reloadCore()"
+         ng-class="{success: reloadSuccess, warn: reloadFailure}"><span>Reload</span></button>
+      <button id="optimize" class="requires-core" ng-click="optimizeCore()" ng-show="core.index.hasDeletions || optimizeSuccess"
+         ng-class="{success: optimizeSuccess, warn: optimizeFailure}"><span>Optimize</span></button>
+      </span>
+      <div class="action add" data-rel="add" ng-show="showAdd" style="display:block;left:0px;">
+
+        <form>
+
+          <p class="clearfix"><label for="add_name">name:</label>
+          <input type="text" name="name" id="add_name" ng-model="newCore.name"></p>
+
+          <p class="clearfix"><label for="add_instanceDir">instanceDir:</label>
+          <input type="text" name="instanceDir" id="add_instanceDir" ng-model="newCore.instanceDir"></p>
+
+          <p class="clearfix"><label for="add_dataDir">dataDir:</label>
+          <input type="text" name="dataDir" id="add_dataDir" ng-model="newCore.dataDir"></p>
+
+          <p class="clearfix"><label for="add_config">config:</label>
+          <input type="text" name="config" id="add_config" ng-model="newCore.config"></p>
+
+          <p class="clearfix"><label for="add_schema">schema:</label>
+          <input type="text" name="schema" id="add_schema" ng-model="newCore.schema"></p>
+
+          <div class="cloud" ng-show="isCloud">
+
+            <p class="clearfix"><label for="add_collection">collection:</label>
+            <input type="text" name="collection" id="add_collection" ng-model="newCore.collection"></p>
+
+            <p class="clearfix"><label for="add_shard">shard:</label>
+            <input type="text" name="add_shard" id="add_shard" ng-model="newCore.shard"></p>
+
+          </div>
+
+          <p class="clearfix note directory-note">
+
+            <span><code>instanceDir</code> and <code>dataDir</code> need to exist before you can create the core</span>
+
+          </p>
+
+          <p class="clearfix note error" ng-show="addMessage">
+            <span>{{addMessage}}</span>
+          </p>
+
+          <p class="clearfix buttons">
+            <button type="submit" class="submit" ng-click="addCore()"><span>Add Core</span></button>
+            <button type="reset" class="reset" ng-click="cancelAddCore()"><span>Cancel</span></button>
+          </p>
+
+        </form>
+
+      </div>
+
+      <div class="action rename" ng-show="showRename">
+
+        <form>
+
+          <input type="hidden" name="core" data-core="current">
+
+          <p class="clearfix"><label for="rename_other">New Name:</label>
+          <input type="text" name="other" ng-model="other" id="rename_other"></p>
+
+          <p class="clearfix note error" ng-show="renameMessage">
+            <span>{{renameMessage}}</span>
+          </p>
+
+          <p class="clearfix buttons">
+            <button class="submit" ng-click="renameCore()"><span>Rename Core</span></button>
+            <button type="reset" class="reset" ng-click="cancelRenameCore()"><span>Cancel</span></button>
+          </p>
+        </form>
+
+      </div>
+
+      <div class="action swap" ng-show="showSwap">
+
+        <form>
+
+          <p class="clearfix"><label for="swap_core">this:</label>
+          <input type="text" id="swap_core" name="core" ng-model="selectedCore" readonly="readonly"></p>
+
+          <p class="clearfix"><label for="swap_other">and:</label>
+          <select id="swap_other" ng-model="swapOther" ng-options="core.name as core.name for core in swapCorelist" class="other">
+          </select></p>
+
+          <p class="clearfix note error" ng-show="swapMessage">
+            <span>{{swapMessage}}</span>
+          </p>
+
+          <p class="clearfix buttons">
+            <button type="submit" class="submit" ng-click="swapCores()"><span>Swap Cores</span></button>
+            <button type="reset" class="reset" ng-click="cancelSwapCores()"><span>Cancel</span></button>
+          </p>
+
+        </form>
+
+      </div>
+
+    </div>
+
+    <div id="data" class="requires-core" ng-show="hasCores">
+
+      <div class="block" id="core-data">
+
+          <h2><span>Core</span></h2>
+
+          <div class="message-container">
+              <div class="message"></div>
+          </div>
+
+          <div class="content">
+
+          <ul>
+
+            <li class="startTime"><dl class="clearfix">
+              <dt><span>startTime:</span></dt>
+                <dd class="timeago">{{core.startTime | timeago}}</dd>
+            </dl></li>
+
+            <li class="instanceDir"><dl class="clearfix">
+              <dt><span>instanceDir:</span></dt>
+                <dd>{{core.instanceDir}}</dd>
+            </dl></li>
+
+            <li class="dataDir"><dl class="clearfix">
+              <dt><span>dataDir:</span></dt>
+                <dd>{{core.dataDir}}</dd>
+            </dl></li>
+
+          </ul>
+
+        </div>
+      </div>
+
+      <div class="block" id="index-data" ng-show="hasCores">
+
+          <h2><span>Index</span></h2>
+
+          <div class="message-container">
+              <div class="message">{{core.message}}</div>
+          </div>
+
+          <div class="content">
+
+          <ul>
+
+            <li class="lastModified"><dl class="clearfix">
+              <dt><span>lastModified:</span></dt>
+                <dd class="timeago">{{core.index.lastModified | timeago}}</dd>
+            </dl></li>
+
+            <li class="version"><dl class="clearfix">
+              <dt><span>version:</span></dt>
+                <dd>{{core.index.version}}</dd>
+            </dl></li>
+
+            <li class="numDocs"><dl class="clearfix">
+              <dt><span>numDocs:</span></dt>
+                <dd>{{core.index.numDocs}}</dd>
+            </dl></li>
+
+            <li class="maxDoc"><dl class="clearfix">
+              <dt><span>maxDoc:</span></dt>
+                <dd>{{core.index.maxDoc}}</dd>
+            </dl></li>
+
+            <li class="deletedDocs"><dl class="clearfix">
+              <dt><span>deletedDocs:</span></dt>
+                <dd>{{core.index.deletedDocs}}</dd>
+            </dl></li>
+
+            <li class="optimized"><dl class="clearfix">
+              <dt><span>optimized:</span></dt>
+                <dd class="ico" ng-class="core.index.hasDeletions ? 'ico-0' : 'ico-1'"><span></span></dd>
+            </dl></li>
+
+            <li class="current"><dl class="clearfix">
+              <dt><span>current:</span></dt>
+                <dd class="ico" ng-class="core.index.current ?'ico-1' : 'ico-0'"><span></span></dd>
+            </dl></li>
+
+            <li class="directory"><dl class="clearfix">
+              <dt><span>directory:</span></dt>
+                <dd>{{core.index.directory}}</dd>
+            </dl></li>
+
+          </ul>
+
+        </div>
+      </div>
+
+    </div>
+
+  </div>
+
+  <div id="navigation" class="requires-core clearfix" ng-show="hasCores">
+    <ul>
+      <li ng-repeat="c in cores" ng-class="{current: core.name == c.name}"><a href="#~cores/{{c.name}}">{{c.name}}</a></li>
+    </ul>
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/dataimport.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/dataimport.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/dataimport.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/dataimport.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,209 @@
+<!--
+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.
+-->
+<div id="dataimport" class="clearfix">
+
+  <div ng-show="!hasHandlers">Sorry, no dataimport-handler defined!</div>
+  <div id="frame" ng-show="hasHandlers">
+
+    <div id="error" ng-show="error"></div>
+
+    <div id="current_state" class="{{status}}">
+
+      <p class="last_update">Last Update: <abbr title="{{lastUpdateUTC}}">{{lastUpdate}}</abbr></p>
+      <div class="info">
+
+        <strong>{{info.text}}<span ng-show="info.timeTaken"> (Duration: {{info.timeTaken | readableSeconds }})</span>
+        </strong>
+        <div class="details" ng-show="info.showDetails">
+          <div class="docs">
+              <span ng-repeat="doc in info.docs">
+                  <abbr style="display:inline" title="{{ doc.desc }}">{{ doc.name }}</abbr>: {{doc.value | number}}<!-- remove whitespace!
+                  -->&nbsp;<span style="display:inline" ng-show="doc.speed">{{ doc.speed | number}}/s</span><!-- remove whitespace!
+                  --><span style="display:inline" ng-show="!$last">, </span>
+              </span>
+          </div>
+          <div class="dates">
+              <span ng-repeat="date in info.dates">
+                  <abbr title="{{ date.desc }}">{{ date.name }}</abbr>:
+                  <abbr class="time">{{ date.value | timeago }}</abbr>
+              </span>
+          </div>
+        </div>
+
+        <button class="abort-import" ng-class="{warn:!isAborting, success: isAborting}" ng-click="abort()" ng-show="isRunning">
+            <span ng-show="isAborting">Aborting Import</span>
+            <span ng-show="!isAborting">Abort Import</span>
+        </button>
+
+      </div>
+    
+    </div>
+
+    <div class="block" id="raw_output" >
+
+      <h2>
+        <a class="toggle" ng-click="toggleRawStatus()"><span>Raw Status-Output</span></a>
+      </h2>
+        
+      <div class="message-container" ng-show="showRawStatus">
+          <div class="message"></div>
+      </div>
+
+      <div class="content" ng-show="showRawStatus">
+
+        <div id="raw_output_container"><pre class="syntax language-json"><code ng-bind-html="rawStatus | highlight:'json' | unsafe"></code></pre></div>
+
+      </div>
+    
+    </div>
+
+    <div class="block" id="config" ng-class="{debug_mode:isDebugMode}">
+
+      <h2 class="clearfix">
+        <a class="toggle" ng-click="toggleConfiguration()"><span>Configuration</span></a>
+        <a class="r reload_config" ng-class="{success:reloaded}" ng-click="reload()" title="Reload Configuration">Reload</a>
+        <a class="r debug_mode" ng-click="toggleDebug()">Debug-Mode</a>
+      </h2>
+        
+      <div class="message-container" ng-show="showConfiguration">
+          <div class="message"></div>
+      </div>
+
+      <div class="content" ng-show="showConfiguration">
+        <div id="dataimport_config">
+
+          <div class="formatted" ng-show="!isDebugMode">
+
+            <pre class="syntax language-xml"><code ng-bind-html="config | highlight:'xml'| unsafe"></code></pre>
+
+          </div>
+
+          <div class="editable" ng-show="isDebugMode">
+
+            <textarea ng-model="config"></textarea>
+          
+          </div>
+
+        </div>
+
+      </div>
+    
+    </div>
+
+    <div class="block" id="debug_response" ng-show="form.showDebug">
+
+      <h2>
+        <a class="toggle" ng-click="toggleRawDebug()"><span>Raw Debug-Response</span></a>
+      </h2>
+        
+      <div class="message-container" ng-show="showRawDebug">
+          <div class="message"></div>
+      </div>
+
+      <div class="content" ng-show="showRawDebug">
+          <span ng-hide="rawResponse">
+              <em>No Request executed</em>
+          </span>
+          <span ng-show="rawResponse">
+            <pre class="syntax language-json"><code ng-bind-html="rawResponse | highlight:'json' | unsafe"></code></pre>
+          </span>
+      </div>
+    
+    </div>
+  
+  </div>
+
+  <div id="form" ng-show="hasHandlers">
+
+    <div id="navigation">
+
+      <ul>
+          <li ng-class="{current: currentHandler == handler}" ng-repeat="handler in handlers">
+              <a href="#/{{form.core}}/dataimport/{{handler}}">{{handler}}</a>
+          </li>
+      </ul>
+
+    </div>
+
+    <form action="#" method="get">
+
+      <label for="command">
+        <a rel="help">Command</a>
+      </label>
+      <select name="command" id="command" ng-model="form.command">
+        <option>full-import</option>
+        <option>delta-import</option>
+      </select>
+
+      <label for="verbose" class="checkbox">
+        <input type="checkbox" name="verbose" id="verbose" ng-model="form.verbose">
+        Verbose
+      </label>
+
+      <label for="clean" class="checkbox">
+        <input type="checkbox" name="clean" id="clean" ng-model="form.clean">
+        Clean
+      </label>
+
+      <label for="commit" class="checkbox">
+        <input type="checkbox" name="commit" id="commit" ng-model="form.commit">
+        Commit
+      </label>
+
+      <label for="optimize" class="checkbox">
+        <input type="checkbox" name="optimize" id="optimize" ng-model="form.optimize">
+        Optimize
+      </label>
+
+      <label for="debug" class="checkbox">
+        <input type="checkbox" name="debug" id="debug" ng-model="form.showDebug">
+        Debug
+      </label>
+
+      <label for="entity">
+        <a rel="help">Entity</a>
+      </label>
+      <select ng-model="form.entity" id="entity">
+        <option value=""></option>
+        <option ng-repeat="entity in entities">{{entity}}</option>
+      </select>
+
+      <label for="start">
+        <a rel="help">Start</a>,
+        <a rel="help">Rows</a>
+      </label>
+      <div class="clearfix">
+        <input type="text" id="start" placeholder="0" ng-model="form.start">
+        <input type="text" id="rows" placeholder="10" ng-model="form.rows">
+      </div>
+
+      <label for="custom_parameters">
+        <a rel="help">Custom Parameters</a>
+      </label>
+      <input type="text" id="custom_parameters" ng-model="form.custom" placeholder="key1=val1&amp;key2=val2">
+    </form>
+      <button class="execute" type="submit" ng-click="submit()">
+          <span ng-show="isDebugMode">Execute with this Configuration â†?</span>
+          <span ng-show="!isDebugMode">Execute</span>
+      </button>
+      <button class="refresh-status" ng-click="refreshStatus()" ng-class="{loader: isStatusLoading, success: statusUpdated}"><span>Refresh Status</span></button>
+
+    <p id="auto-refresh-status"><a ng-click="updateAutoRefresh()" ng-class="{on:autorefresh}">Auto-Refresh Status</a></p>
+  
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/documents.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/documents.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/documents.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/documents.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,118 @@
+<!--
+/*
+* 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.
+*/
+-->
+
+<div id="documents" class="clearfix">
+  <div id="form">
+    <form>
+      <label for="qt">
+        <a rel="help">Request-Handler (qt)</a>
+      </label>
+      <input ng-model="handler" type="text" id="qt" value="/update" title="Request handler in solrconfig.xml.">
+      <label for="document-type">
+        <a rel="help">Document Type</a>
+      </label>
+
+      <div><select ng-model="type" id="document-type" ng-change="changeDocumentType()" placeholder="The type of the document field">
+        <!-- TODO: support the Builder -->
+        <option value="csv">CSV</option>
+        <option value="wizard">Document Builder</option>
+        <option value="upload">File Upload</option>
+        <option value="json">JSON</option>
+        <option value="solr">Solr Command (raw XML or JSON)</option>
+        <option value="xml">XML</option>
+      </select>
+      </div>
+      <div id="document-container">
+        <div id="wizard" ng-show="type=='wizard'">
+          <div id="wizard-fields">
+            <div><span class="description">Field</span>: <select ng-model="fieldName" id="wiz-field-select" name="wiz-field-select"
+                     ng-options="field for field in fields"></select>
+            </div>
+            <div><span id="wiz-field-data"><span class="description">Field Data</span>:</span>
+                <textarea ng-model="fieldData"
+                          id="wizard-doc"
+                          name="wizard-doc"
+                          rows="10"
+                          cols="40"
+                          placeholder="Enter your field text here and then click 'Add Field' to add the field to the document.">
+                </textarea>
+            </div>
+          </div>
+          <div id="wizard-add"><a ng-click="addWizardField()" id="add-field-href"><img border="0" src="./img/ico/plus-button.png"/>Add
+            Field</a></div>
+        </div>
+        <label for="document">
+          <a rel="help">Document(s)</a>
+        </label>
+        <textarea ng-show="type!='upload'" ng-model="document" name="document" id="document" title="The Document" rows="10"
+                  cols="70" placeholder="{{placeholder}}"></textarea>
+
+        <div id="file-upload" ng-show="type=='upload'">
+          <input type="file" id="the-file" name="the-file" file-model="fileUpload"/>
+        </div>
+      </div>
+
+      <div id="advanced">
+        <!-- TODO: only show for JSON/XML-->
+        <div id="attribs">
+          <div id="upload-only" ng-show="type=='upload'">
+            <label for="erh-params"><!-- TODO: cleaner way to do this? -->
+              <a rel="help">Extracting Req. Handler Params</a>
+            </label>
+            <input ng-model="literalParams" type="text" id="erh-params" value="&literal.id=change.me"
+                   title="Extracting Request Handler Parameters" size="50">
+          </div>
+          <div id="general-attribs">
+            <label for="commitWithin">
+              <a rel="help">Commit Within</a>
+            </label>
+            <input type="text" ng-model="commitWithin" id="commitWithin" value="1000" title="Commit Within (ms)">
+            <label for="overwrite">
+              <a rel="help">Overwrite</a>
+            </label>
+            <input ng-model="overwrite" type="text" id="overwrite" value="true" title="Overwrite">
+          </div>
+          <!-- Boost is json only, since the XML has it embedded -->
+          <div id="json-only" ng-show="type=='json'">
+            <label for="boost">
+              <a rel="help">Boost</a>
+            </label>
+            <input ng-model="boost" type="text" id="boost" value="1.0" title="Document Boost">
+          </div>
+        </div>
+      </div>
+
+      <button type="submit" ng-click="submit()" id="submit">Submit Document</button>
+    </form>
+  </div>
+  <div id="result">
+    <div id="response" ng-show="response">
+        <div>
+          <span class="description">Status: </span>{{ responseStatus }}
+        </div>
+        <div>
+          <span class="description">Response:</span>
+          <pre class="syntax language-json"><code ng-bind-html="response | highlight:'json' | unsafe"></code></pre>
+        </div>
+    </div>
+
+  </div>
+</div>
+
+

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/files.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/files.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/files.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/files.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,47 @@
+<!--
+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.
+-->
+<div id="files" class="clearfix">
+
+  <div id="frame">
+
+    <div id="tree-holder">
+
+     <jstree class="tree" on-select="showTreeLink(data)" data="tree" id="tree"></jstree>
+
+    </div>
+    <div id="file-content" class="clearfix">
+
+      <div class="top clearfix">
+
+        <a id="url" class="address-bar" href="{{url}}" ng-show="url">{{url}}</a>
+
+      </div>
+
+      <div class="view-file">
+
+        <div class="response" ng-show="content">
+            <pre class="syntax language-{{lang}}"><code ng-bind-html="content | highlight:lang | unsafe"></code></pre>
+        </div>
+
+
+      </div>
+
+    </div>
+
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/index.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/index.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/index.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/index.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,261 @@
+<!--
+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.
+-->
+<div id="index" class="clearfix">
+
+  <div class="clearfix">
+
+    <div class="index-left">
+
+      <div class="block" id="instance">
+
+          <h2><span>Instance</span></h2>
+
+          <div class="content">
+
+            <ul class="data" ngShow="system">
+
+              <li class="start_time"><dl class="clearfix">
+                <dt><span>Start</span></dt>
+                  <dd class="timeago">{{system.jvm.jmx.startTime | timeago}}</dd>
+              </dl></li>
+
+<!--
+              <li class="host"><dl class="clearfix">
+                <dt><span>Host</span></dt>
+                  <dd></dd>
+              </dl></li>
+
+              <li class="dir dir_cwd"><dl class="clearfix">
+                <dt><span>CWD</span></dt>
+                <dd></dd>
+              </dl></li>
+
+              <li class="dir dir_instance"><dl class="clearfix">
+                <dt><span>Instance</span></dt>
+                <dd></dd>
+              </dl></li>
+
+              <li class="dir dir_data"><dl class="clearfix">
+                <dt><span>Data</span></dt>
+                <dd></dd>
+              </dl></li>
+
+              <li class="dir dir_index"><dl class="clearfix">
+                <dt><span>Index</span></dt>
+                <dd></dd>
+              </dl></li>
+-->
+            </ul>
+
+          </div>
+
+      </div>
+
+      <div class="block" id="versions">
+
+          <h2><span>Versions</span></h2>
+
+          <div class="content">
+
+            <ul class="data">
+
+              <li class="solr solr_spec_version"><dl class="clearfix">
+                <dt><span>solr-spec</span></dt>
+                  <dd>{{system.lucene["solr-spec-version"]}}</dd>
+              </dl></li>
+              
+              <li class="solr_impl_version"><dl class="clearfix">
+                <dt class=""><span>solr-impl</span></dt>
+                  <dd>{{system.lucene["solr-impl-version"]}}</dd>
+              </dl></li>
+              
+              <li class="lucene lucene_spec_version"><dl class="clearfix">
+                <dt><span>lucene-spec</span></dt>
+                  <dd>{{system.lucene["lucene-spec-version"]}}</dd>
+              </dl></li>
+
+              <li class="lucene_impl_version"><dl class="clearfix">            
+                <dt><span>lucene-impl</span></dt>
+                  <dd>{{system.lucene["lucene-impl-version"]}}</dd>
+              </dl></li>
+            
+            </ul>
+
+          </div>
+
+      </div>
+
+    </div>
+      
+    <div class="index-right">
+
+      <div class="block" id="system">
+
+          <h2><span>System</span>
+    <small class="bar-desc">{{load_average[0]}} {{load_average[1]}} {{load_average[2]}}</small>
+    </h2>
+          <a class="reload" ng-click="reload()"><span>reload</span></a>
+
+          <div class="content">
+
+            <div id="physical-memory-bar" ng-show="system.system.totalPhysicalMemorySize && system.system.freePhysicalMemorySize">
+
+              <p data-desc="physical-memory-bar">Physical Memory
+         <small class="bar-desc">{{memoryPercentage}}</small>
+        </p>
+              <div class="bar-holder bar-lvl-2">
+
+                <div class="bar-max bar">
+                  <span class="bar-max val">{{memoryMax}}</span>
+
+                  <div class="bar-total bar" ng-style="{width:memoryPercentage}">
+                    <span class="bar-total val" title="raw: {{memoryTotal}}B">{{memoryTotalDisplay}}</span>
+
+                  </div>
+
+                </div>
+
+              </div>
+
+            </div>
+
+            <div id="swap-space-bar" ng-show="system.system.totalSwapSpaceSize && system.system.freeSwapSpaceSize">
+
+              <p data-desc="swap-space-bar">Swap Space
+          <small class="bar-desc">{{swapPercentage}}</small>
+        </p>
+              <div class="bar-holder bar-lvl-2">
+
+                <div class="bar-max bar">
+                  <span class="bar-max val">{{swapMax}}</span>
+
+                  <div class="bar-total bar" ng-style="{width:swapPercentage}">
+                    <span class="bar-total val" title="raw:{{swapTotal}}B">{{swapTotalDisplay}}</span>
+
+                  </div>
+
+                </div>
+
+              </div>
+
+            </div>
+
+          <div id="file-descriptor-bar" ng-show="system.system.maxFileDescriptorCount && system.system.openFileDescriptorCount">
+
+              <p data-desc="file-descriptor-bar">File Descriptor Count
+          <small class="bar-desc">{{fileDescriptorPercentage}}</small>
+        </p>
+              <div class="bar-holder bar-lvl-2">
+
+                <div class="bar-max bar">
+                  <span class="bar-max val">{{system.system.maxFileDescriptorCount}}</span>
+
+                  <div class="bar-total bar" ng-style="{width:fileDescriptorPercentage}">
+                    <span class="bar-total val">{{system.system.openFileDescriptorCount}}</span>
+
+                  </div>
+
+                </div>
+
+              </div>
+
+            </div>
+
+            <p class="no-info" ng-show="noInfo">Sorry, no information available</p>
+
+          </div>
+
+      </div>
+
+    </div>
+
+  </div>
+
+  <div class="clearfix">
+
+    <div class="index-left">
+
+      <div class="block" id="jvm">
+
+          <h2><span>JVM</span></h2>
+
+          <div class="content clearfix">
+
+            <ul class="data">
+
+              <li class="jvm_version"><dl class="clearfix">            
+                <dt><span>Runtime</span></dt>
+                  <dd>{{system.jvm.name}} {{system.jvm.version}}</dd>
+              </dl></li>
+
+              <li class="processors"><dl class="clearfix">            
+                <dt><span>Processors</span></dt>
+                  <dd>{{system.jvm.processors}}</dd>
+              </dl></li>
+
+              <li class="command_line_args"><dl class="clearfix">
+                <dt><span>Args</span></dt>
+                <dd ng-repeat="arg in commandLineArgs" ng-class="{'odd':$odd}">{{arg}}</dd>
+              </dl></li>
+            
+            </ul>
+
+          </div>
+
+      </div>
+
+    </div>
+    <div class="index-right">
+
+      <div class="block" id="jvm-memory">
+
+          <h2><span data-desc="jvm-memory-bar">JVM-Memory
+       <small class="bar-desc">{{javaMemoryPercentage}}</small>
+    </span></h2>
+
+          <div class="content">
+
+            <div id="jvm-memory-bar">
+              <div class="bar-holder bar-lvl-3">
+
+                <div class="bar-max bar">
+                  <span class="bar-max val" title="raw: {{javaMemoryMax}}">{{javaMemoryMax}}</span>
+
+                  <div class="bar-total bar" ng-style="{width: javaMemoryTotalPercentage}">
+                    <span class="bar-total val" title="raw: {{javaMemoryTotal}}B">{{javaMemoryTotalDisplay}}</span>
+
+                    <div class="bar-used bar" ng-style="{width: javaMemoryUsedPercentage}">
+                      <span class="bar-used val" title="raw: {{javaMemoryUsed}}B">{{javaMemoryUsedDisplay}}</span>
+
+                    </div>
+
+                  </div>
+
+                </div>
+
+              </div>
+            </div>
+
+          </div>
+
+      </div>
+
+    </div>
+
+  </div>
+
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/java-properties.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/java-properties.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/java-properties.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/java-properties.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,27 @@
+<!--
+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.
+-->
+    <div id="java-properties">
+      <ul>
+        <li ng-class="{odd:$odd}" ng-repeat="prop in props | orderObjectBy:'name'">
+          <dl class="clearfix">
+            <dt ng-bind-html="prop.name | unsafe"></dt>
+            <dd ng-class="{odd:$odd, multi:props.length&gt;1}" ng-repeat="value in prop.values">{{value.value}}</dd>
+          </dl>
+        </li>
+      </ul>
+    </div>
+

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging-levels.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging-levels.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging-levels.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging-levels.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,56 @@
+<!--
+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.
+-->
+<div id="logging" class="clearfix">
+
+
+  <div id="frame">
+
+    <div class="block">
+      <h2><span>{{watcher}}</span></h2>
+      <ul class="tree jstree">
+        <li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logging" ng-include="'logger.html'"></li>
+      </ul>
+    </div>
+  </div>
+</div>
+
+  <script type="text/ng-template"  id="logger.html">
+      <ins class="trigger jstree-icon">&nbsp;</ins>
+      <a ng-click="toggleOptions(logger)" class="trigger {{logger.level.toLowerCase() }}" ng-class="{null:!logger.level, set: logger.set}" title="{{ logger.name }}" rel="{{logger.level}}">
+        <span class="ns">{{logger.name}}</span>
+        <span class="name" ng-show="logger.short">{{ logger.short }}</span>
+        <span class="name" ng-show="!logger.short"><em>empty</em></span>
+      </a>
+
+      <div class="selector-holder" ng-class="{open:logger.showOptions}">
+        <div class="selector">
+          <a class="trigger" ng-click="toggleOptions(logger)"><span><em>{{logger.level || "null"}}</em></span></a>
+          <div ng-show="logger.showOptions">
+          <ul>
+            <li ng-repeat="level in levels track by level.pos">
+              <a ng-click="setLevel(logger, level.name)">{{level.name}}</a>
+            </li>
+            <li class="unset"><a ng-click="setLevel(logger, 'unset')">UNSET</a></li>
+          </ul>
+          <a class="close" ng-click="toggleOptions(logger)"><span>[x]</span></a>
+          </div>
+        </div>
+      </div>
+      <ul>
+        <li class="jstree-leaf level-{{logger.level.toLowerCase()}}" ng-class="{'jstree-last':$last}" ng-repeat="logger in logger.children" ng-include="'logger.html'"></li>
+      </ul>
+  </script>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/logging.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,56 @@
+<!--
+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.
+-->
+<div id="logging" class="clearfix">
+
+  <div id="viewer">
+    <div class="block">
+      <h2><span>{{watcher}}</span></h2>
+    </div>
+    <table class="has-data" border="0" cellpadding="0" cellspacing="0">
+      <thead>
+        <tr>
+          <th class="time">Time (<span>{{timezone}}</span>)</th>
+          <th class="level">Level</th>
+          <th class="core">Core</th>
+          <th class="logger">Logger</th>
+          <th class="message">Message</th>
+        </tr>
+      </thead>
+      <tbody ng-repeat="event in events">
+        <tr ng-click="toggleRow(event)" class="{{event.trace ? 'has-trace': ''}} {{'level-'+event.level.toLowerCase()}}">
+          <td class="span"><a><span>{{ timezone == "UTC" ? event.utc_time : event.local_time }}</span></a></td>
+          <td class="level span"><a><span>{{ event.level }} {{event.showTrace}}</span></span></a></td>
+          <td class="span"><a><span>{{ event.core }}</span></a></td>
+          <td class="span"><a><span><abbr title="{{event.logger}}">{{event.loggerBase}}</abbr></span></a></td>
+          <td class="message span"><a><span>{{ event.message }}</span></a></td>
+        </tr>
+        <tr class="trace" ng-show="event.showTrace && event.trace">
+          <td colspan="4"><pre>{{event.trace}}</pre></td>
+        </tr>
+      </tbody>
+      <tfoot>
+        <tr ng-show="events.length==0">
+          <td colspan="4">No Events available</td>
+        </tr>
+      </thead>
+    </table>
+    <div id="footer" class="clearfix">
+      <div id="state" class="loader">Last Check: {{sinceDisplay}}</div>
+      <div id="date-format" ng-click="toggleTimezone()"><a ng-class="{on: timezone=='UTC'}">Show dates in UTC</a></div>
+    </div>
+  </div>
+</div>

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/plugins.html
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/plugins.html?rev=1776930&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/plugins.html (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/partials/plugins.html Mon Jan  2 13:44:06 2017
@@ -0,0 +1,72 @@
+<!--
+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.
+-->
+<div id="plugins" class="clearfix">
+
+  <div id="frame">
+      <ul>
+      <li class="entry" ng-class="{changed: plugin.changed}" ng-repeat="plugin in type.plugins">
+        <a ng-click="selectPlugin(plugin)">
+          <span>{{ plugin.name }}</span>
+        </a>
+        <ul class="detail" ng-show="plugin.open">
+          <li ng-repeat="(key, value) in plugin.properties" ng-class="{odd: $odd}">
+            <dl class="clearfix">
+              <dt>{{ key }}:</dt>
+              <!--<dd ng-repeat="v in value">{{v}}</dd><!-- is AN ARRAY!!-->
+              <dd>{{value}}</dd>
+            </dl>
+          </li>
+          <li class="stats clearfix" ng-show="plugin.stats">
+            <span>stats:</span>
+            <ul>
+              <li ng-repeat="(key, value) in plugin.stats" ng-class="{odd: $odd}">
+                  <dl class="clearfix">
+                      <dt>{{key}}:</dt>
+                      <dd>{{value}}</dd>
+                  </dl>
+              </li>
+            </ul>
+          </li>
+        </ul>
+      </ul>
+  </div>
+
+  <div id="navigation" class="clearfix">
+
+    <ul>
+        <li ng-repeat="type in types" class="{{type.lower}}">
+            <a ng-click="selectPluginType(type)" rel="{{type.name}}">{{type.name}}
+                <span ng-show="type.changes">{{type.changes}}</span>
+            </a>
+        </li>
+        <li class="PLUGINCHANGES"><a ng-click="startRecording()">Watch Changes</a></li>
+        <li class="RELOAD"><a ng-click="refresh()">Refresh Values</a></li>
+    </ul>
+  
+  </div>
+
+  <div id="recording" ng-show="isRecording">
+    <div class="wrapper clearfix">
+
+      <p class="loader">Watching for Changes</p>
+      <button class="primary" ng-click="stopRecording()">Stop &amp; Show Changes</button>
+
+    </div>
+    <div id="blockUI"></div>
+  </div>
+
+</div>