You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by sh...@apache.org on 2015/08/30 15:27:14 UTC

svn commit: r1700119 [23/26] - in /ofbiz/trunk: ./ runtime/indexes/ specialpurpose/ specialpurpose/solr/ specialpurpose/solr/conf/ specialpurpose/solr/config/ specialpurpose/solr/entitydef/ specialpurpose/solr/lib/ specialpurpose/solr/lib/compile/ spec...

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dashboard.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dashboard.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dashboard.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dashboard.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,562 @@
+/*
+ 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.
+*/
+
+var set_healthcheck_status = function( status )
+{
+  var hc_button = $( '.healthcheck-status' )
+  if ( status == 'enable' )
+  {
+    hc_button.parents( 'dd' )
+      .removeClass( 'ico-0' )
+      .addClass( 'ico-1' );
+    hc_button
+      .addClass( 'enabled' )
+      .html( 'disable ping' );
+  } else {
+    hc_button.parents( 'dd' )
+      .removeClass( 'ico-1')
+      .addClass( 'ico-0' );
+    hc_button
+      .removeClass( 'enabled' )
+      .html( 'enable ping' );
+  }
+};
+
+// #/:core
+sammy.get
+(
+  new RegExp( app.core_regex_base + '$' ),
+  function( context )
+  {
+    var core_basepath = this.active_core.attr( 'data-basepath' );
+    var content_element = $( '#content' );
+        
+    content_element
+      .removeClass( 'single' );
+    
+    if( !app.core_menu.data( 'admin-extra-loaded' ) )
+    {
+      app.core_menu.data( 'admin-extra-loaded', new Date() );
+
+      $.get
+      (
+        core_basepath + '/admin/file/?file=admin-extra.menu-top.html&contentType=text/html;charset=utf-8',
+        function( menu_extra )
+        {
+          app.core_menu
+            .prepend( menu_extra );
+        }
+      );
+      
+      $.get
+      (
+        core_basepath + '/admin/file/?file=admin-extra.menu-bottom.html&contentType=text/html;charset=utf-8',
+        function( menu_extra )
+        {
+          app.core_menu
+            .append( menu_extra );
+        }
+      );
+    }
+        
+    $.get
+    (
+      'tpl/dashboard.html',
+      function( template )
+      {
+        content_element
+          .html( template );
+                    
+        var dashboard_element = $( '#dashboard' );
+                                     
+        $.ajax
+        (
+          {
+            url : core_basepath + '/admin/luke?wt=json&show=index&numTerms=0',
+            dataType : 'json',
+            context : $( '#statistics', dashboard_element ),
+            beforeSend : function( xhr, settings )
+            {
+              $( 'h2', this )
+                .addClass( 'loader' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'Loading ...' );
+                            
+              $( '.content', this )
+                .hide();
+            },
+            success : function( response, text_status, xhr )
+            {
+              $( '.message', this )
+                .empty()
+                .hide();
+                            
+              $( '.content', this )
+                .show();
+                                
+              var data = {
+                'index_num-docs' : response['index']['numDocs'],
+                'index_heap-usage-bytes' : response['index']['indexHeapUsageBytes'],
+                'index_max-doc' : response['index']['maxDoc'],
+                'index_deleted-docs' : response['index']['deletedDocs'],
+                'index_version' : response['index']['version'],
+                'index_segmentCount' : response['index']['segmentCount'],
+                'index_last-modified' : response['index']['lastModified']
+              };
+                            
+              for( var key in data )
+              {
+                $( '.' + key, this )
+                  .show();
+                                
+                $( '.value.' + key, this )
+                  .html( data[key] );
+              }
+
+              var optimized_element = $( '.value.index_optimized', this );
+              if( !response['index']['hasDeletions'] )
+              {
+                optimized_element
+                  .addClass( 'ico-1' );
+
+                $( 'span', optimized_element )
+                  .html( 'yes' );
+              }
+              else
+              {
+                optimized_element
+                  .addClass( 'ico-0' );
+
+                $( 'span', optimized_element )
+                  .html( 'no' );
+              }
+
+              var current_element = $( '.value.index_current', this );
+              if( response['index']['current'] )
+              {
+                current_element
+                  .addClass( 'ico-1' );
+
+                $( 'span', current_element )
+                  .html( 'yes' );
+              }
+              else
+              {
+                current_element
+                  .addClass( 'ico-0' );
+
+                $( 'span', current_element )
+                  .html( 'no' );
+              }
+
+              $( 'a', optimized_element )
+                .die( 'click' )
+                .live
+                (
+                  'click',
+                  function( event )
+                  {                        
+                    $.ajax
+                    (
+                      {
+                      url : core_basepath + '/update?optimize=true&waitFlush=true&wt=json',
+                      dataType : 'json',
+                      context : $( this ),
+                      beforeSend : function( xhr, settings )
+                      {
+                        this
+                          .addClass( 'loader' );
+                      },
+                      success : function( response, text_status, xhr )
+                      {
+                        this.parents( 'dd' )
+                          .removeClass( 'ico-0' )
+                          .addClass( 'ico-1' );
+                      },
+                      error : function( xhr, text_status, error_thrown)
+                      {
+                        console.warn( 'd0h, optimize broken!' );
+                      },
+                      complete : function( xhr, text_status )
+                      {
+                        this
+                          .removeClass( 'loader' );
+                      }
+                      }
+                    );
+                  }
+                );
+
+              $( '.timeago', this )
+                                 .timeago();
+            },
+            error : function( xhr, text_status, error_thrown )
+            {
+              this
+                .addClass( 'disabled' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'Luke is not configured' );
+            },
+            complete : function( xhr, text_status )
+            {
+              $( 'h2', this )
+                .removeClass( 'loader' );
+            }
+          }
+        );
+                
+        $.ajax
+        (
+          {
+            url : core_basepath + '/replication?command=details&wt=json',
+            dataType : 'json',
+            context : $( '#replication', dashboard_element ),
+            beforeSend : function( xhr, settings )
+            {
+              $( 'h2', this )
+                .addClass( 'loader' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'Loading' );
+
+              $( '.content', this )
+                .hide();
+            },
+            success : function( response, text_status, xhr )
+            {
+              $( '.message', this )
+                .empty()
+                .hide();
+
+              $( '.content', this )
+                .show();
+                            
+              $( '.replication', context.active_core )
+                .show();
+                            
+              var data = response.details;
+              var is_slave = 'undefined' !== typeof( data.slave );
+              var headline = $( 'h2 span', this );
+              var details_element = $( '#details', this );
+              var current_type_element = $( ( is_slave ? '.slave' : '.masterSearch' ), this );
+              var master_data = is_slave ? data.slave.masterDetails : data;
+
+              if( is_slave )
+              {
+                this
+                  .addClass( 'slave' );
+                                
+                headline
+                  .html( headline.html() + ' (Slave)' );
+              }
+              else
+              {
+                this
+                  .addClass( 'master' );
+                                
+                headline
+                  .html( headline.html() + ' (Master)' );
+              }
+
+              // the currently searchable commit regardless of type
+              $( '.version div', current_type_element )
+                .html( data.indexVersion );
+              $( '.generation div', current_type_element )
+                .html( data.generation );
+              $( '.size div', current_type_element )
+                .html( data.indexSize );
+                            
+              // what's replicable on the master
+              var master_element = $( '.master', details_element );
+              $( '.version div', master_element )
+                .html( master_data.master.replicableVersion || '-' );
+              $( '.generation div', master_element )
+                .html( master_data.master.replicableGeneration || '-' );
+              $( '.size div', master_element )
+                .html( "-" );
+
+              if( is_slave )
+              {
+                var master_element = $( '.masterSearch', details_element );
+                $( '.version div', master_element )
+                  .html( data.slave.masterDetails.indexVersion );
+                $( '.generation div', master_element )
+                  .html( data.slave.masterDetails.generation );
+                $( '.size div', master_element )
+                  .html( data.slave.masterDetails.indexSize );
+                                
+                // warnings if slave version|gen doesn't match what's replicable
+                if( data.indexVersion !== master_data.master.replicableVersion )
+                {
+                  $( '.version', details_element )
+                    .addClass( 'diff' );
+                }
+                else
+                {
+                  $( '.version', details_element )
+                    .removeClass( 'diff' );
+                }
+                                
+                if( data.generation !== master_data.master.replicableGeneration )
+                {
+                  $( '.generation', details_element )
+                    .addClass( 'diff' );
+                }
+                else
+                {
+                  $( '.generation', details_element )
+                    .removeClass( 'diff' );
+                }
+              }
+            },
+            error : function( xhr, text_status, error_thrown)
+            {
+              this
+                .addClass( 'disabled' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'Replication is not configured' );
+            },
+            complete : function( xhr, text_status )
+            {
+              $( 'h2', this )
+                .removeClass( 'loader' );
+            }
+          }
+        );
+
+        $.ajax
+        (
+          {
+            url : core_basepath + '/admin/system?wt=json',
+            dataType : 'json',
+            context : $( '#instance', dashboard_element ),
+            beforeSend : function( xhr, settings )
+            {
+              $( 'h2', this )
+                .addClass( 'loader' );
+
+              $( '.message', this )
+                .show()
+                .html( 'Loading' );
+
+              $( '.content', this )
+                .hide();
+            },
+            success : function( response, text_status, xhr )
+            {
+              $( '.message', this )
+                .empty()
+                .hide();
+
+              $( '.content', this )
+                .show();
+                            
+              $( 'dl', this )
+                .show();
+                            
+              var data = {
+                'dir_cwd' : response.core.directory.cwd,
+                'dir_instance' : response.core.directory.instance,
+                'dir_data' : response.core.directory.data,
+                'dir_index' : response.core.directory.index,
+                'dir_impl' : response.core.directory.dirimpl
+              };
+                            
+              for( var key in data )
+              {
+                $( '.' + key, this )
+                  .show();
+                                
+                $( '.value.' + key, this )
+                  .html( data[key] );
+              }
+            },
+            error : function( xhr, text_status, error_thrown)
+            {
+              this
+                .addClass( 'disabled' );
+                            
+              $( '.message', this )
+                .show()
+                .html( '/admin/system Handler is not configured' );
+            },
+            complete : function( xhr, text_status )
+            {
+              $( 'h2', this )
+                .removeClass( 'loader' );
+            }
+          }
+        );
+                
+        $.ajax
+        (
+          {
+            url : core_basepath + '/admin/file/?file=admin-extra.html',
+            dataType : 'html',
+            context : $( '#admin-extra', dashboard_element ),
+            beforeSend : function( xhr, settings )
+            {
+              $( 'h2', this )
+                .addClass( 'loader' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'Loading' );
+
+              $( '.content', this )
+                .hide();
+            },
+            success : function( response, text_status, xhr )
+            {
+              $( '.message', this )
+                .hide()
+                .empty();
+
+              $( '.content', this )
+                .show()
+                .html( response );
+            },
+            error : function( xhr, text_status, error_thrown)
+            {
+              this
+                .addClass( 'disabled' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'We found no "admin-extra.html" file.' );
+            },
+            complete : function( xhr, text_status )
+            {
+              $( 'h2', this )
+                .removeClass( 'loader' );
+            }
+          }
+        );
+
+        $.ajax
+        (
+          {
+            url : core_basepath + '/admin/ping?action=status&wt=json',
+            dataType : 'json',
+            context : $( '#healthcheck', dashboard_element ),
+            beforeSend : function( xhr, settings )
+            {
+              $( 'h2', this )
+                .addClass( 'loader' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'Loading' );
+
+              $( '.content', this )
+                .hide();
+            },
+            success : function( response, text_status, xhr )
+            {
+              $( '.message', this )
+                .empty()
+                .hide();
+                            
+              $( '.content', this )
+                .show();
+
+              var status_element = $( '.value.status', this );
+              var toggle_button = $( '.healthcheck-status', this );
+              var status = response['status'];
+              $( 'span', status_element ).html( status );
+
+              var action = ( response['status'] == 'enabled' ) ? 'enable' : 'disable';  
+              set_healthcheck_status(action);
+
+              if( response['status'] == 'enabled' )
+              {
+                status_element
+                  .addClass( 'ico-1' );
+                toggle_button
+                  .addClass( 'enabled' );
+              }
+              else
+              {
+                status_element
+                  .addClass( 'ico-0' );
+              }
+              
+              $( '.healthcheck-status', status_element )
+                .die( 'click' )
+                .live
+                (
+                  'click',
+                  function( event )
+                  {                      
+                    var action = $(this).hasClass( 'enabled' ) ? 'disable' : 'enable';  
+                    $.ajax
+                    (
+                      {
+                        url : core_basepath + '/admin/ping?action=' + action + '&wt=json',
+                        dataType : 'json',
+                        context : $( this ),
+                        beforeSend : function( xhr, settings )
+                        {
+                          this
+                            .addClass( 'loader' );
+                        },
+                        success : function( response, text_status, xhr )
+                        {
+                          set_healthcheck_status(action);
+                        },
+                        error : function( xhr, text_status, error_thrown)
+                        {
+                          console.warn( 'd0h, enable broken!' );
+                        },
+                        complete : function( xhr, text_status )
+                        {
+                          this
+                            .removeClass( 'loader' );
+                        }
+                      }
+                    );
+                  }
+                );
+            },
+            error : function( xhr, text_status, error_thrown)
+            {
+              this
+                .addClass( 'disabled' );
+                            
+              $( '.message', this )
+                .show()
+                .html( 'Ping request handler is not configured with a healthcheck file.' );
+            },
+            complete : function( xhr, text_status )
+            {
+              $( 'h2', this )
+                .removeClass( 'loader' );
+            }
+          }
+        );
+                
+      }
+    );
+  }
+);

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dashboard.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dashboard.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dashboard.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dataimport.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dataimport.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dataimport.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dataimport.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,812 @@
+/*
+ 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.
+*/
+
+var dataimport_timeout = 2000;
+var cookie_dataimport_autorefresh = 'dataimport_autorefresh';
+
+sammy.bind
+(
+  'dataimport_queryhandler_load',
+  function( event, params )
+  {
+    var core_basepath = params.active_core.attr( 'data-basepath' );
+
+    $.ajax
+    (
+      {
+        url : core_basepath + '/admin/mbeans?cat=QUERYHANDLER&wt=json',
+        dataType : 'json',
+        beforeSend : function( xhr, settings )
+        {
+        },
+        success : function( response, text_status, xhr )
+        {
+          var handlers = response['solr-mbeans'][1];
+          var dataimport_handlers = [];
+          for( var key in handlers )
+          {
+            if( handlers[key]['class'] !== key &&
+              handlers[key]['class'] === 'org.apache.solr.handler.dataimport.DataImportHandler' )
+            {
+              dataimport_handlers.push( key );
+            }
+          }
+          params.callback( dataimport_handlers );
+        },
+        error : function( xhr, text_status, error_thrown)
+        {
+        },
+        complete : function( xhr, text_status )
+        {
+        }
+      }
+    );
+  }
+);
+
+// #/:core/dataimport
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(dataimport)$' ),
+  function( context )
+  {
+    sammy.trigger
+    (
+      'dataimport_queryhandler_load',
+      {
+        active_core : this.active_core,
+        callback :  function( dataimport_handlers )
+        {
+          if( 0 === dataimport_handlers.length )
+          {
+            $( '#content' )
+              .html( 'sorry, no dataimport-handler defined!' );
+
+            return false;
+          }
+
+          context.redirect( context.path + '/' + dataimport_handlers[0] );
+        }
+      }
+    );
+  }
+);
+
+// #/:core/dataimport
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(dataimport)\\/' ),
+  function( context )
+  {
+    var core_basepath = this.active_core.attr( 'data-basepath' );
+    var content_element = $( '#content' );
+
+    var path_parts = this.path.match( /^(.+\/dataimport\/)(.*)$/ );
+    var handler_url = core_basepath + path_parts[2];
+        
+    $( 'li.dataimport', this.active_core )
+      .addClass( 'active' );
+
+    $.get
+    (
+      'tpl/dataimport.html',
+      function( template )
+      {
+        content_element
+          .html( template );
+
+        var dataimport_element = $( '#dataimport', content_element );
+        var form_element = $( '#form', dataimport_element );
+        var config_element = $( '#config', dataimport_element );
+        var error_element = $( '#error', dataimport_element );
+        var debug_response_element = $( '#debug_response', dataimport_element );
+
+        var autorefresh_status = false;
+        var debug_mode = false;
+
+        // handler
+
+        sammy.trigger
+        (
+          'dataimport_queryhandler_load',
+          {
+            active_core : context.active_core,
+            callback :  function( dataimport_handlers )
+            {
+              var handlers_element = $( '#navigation ul', form_element );
+              var handlers = [];
+
+              for( var i = 0; i < dataimport_handlers.length; i++ )
+              {
+                handlers.push
+                (
+                    '<li><a href="' + path_parts[1] + dataimport_handlers[i] + '">' +
+                    dataimport_handlers[i] +
+                    '</a></li>'
+                );
+              }
+
+              $( handlers_element )
+                .html( handlers.join( "\n") ) ;
+                            
+              $( 'a[href="' + context.path + '"]', handlers_element ).closest( 'li' )
+                .addClass( 'current' );
+
+              $( 'form', form_element )
+                .show();
+            }
+          }
+        );
+
+        // config
+
+        function dataimport_fetch_config()
+        {
+          $.ajax
+          (
+            {
+              url : handler_url + '?command=show-config&indent=true',
+              dataType : 'xml',
+              context : $( '#dataimport_config', config_element ),
+              beforeSend : function( xhr, settings )
+              {
+                error_element
+                  .empty()
+                  .hide();
+              },
+              success : function( config, text_status, xhr )
+              {
+                dataimport_element
+                  .removeClass( 'error' );
+
+                config_element
+                  .addClass( 'hidden' );
+
+                var entities = [ '<option value=""></option>' ];
+
+                $( 'document > entity', config )
+                  .each
+                  (
+                    function( i, element )
+                    {
+                      entities.push( '<option>' + $( element ).attr( 'name' ).esc() + '</option>' );
+                    }
+                  );
+                                
+                $( '#entity', form_element )
+                  .html( entities.join( "\n" ) );
+
+                $( '.editable textarea', this )
+                  .val( xhr.responseText.replace( /\n+$/, '' ) );
+              },
+              error : function( xhr, text_status, error_thrown )
+              {
+                if( 'parsererror' === error_thrown )
+                {
+                  dataimport_element
+                    .addClass( 'error' );
+                                    
+                  error_element
+                    .text( 'Dataimport XML-Configuration is not valid' )
+                    .show();
+
+                  config_element
+                    .removeClass( 'hidden' );
+                }
+              },
+              complete : function( xhr, text_status )
+              {
+                var code = $(
+                  '<pre class="syntax language-xml"><code>' +
+                  xhr.responseText.esc() +
+                  '</code></pre>'
+                );
+                $( '.formatted', this ).html( code );
+
+                if( 'success' === text_status )
+                {
+                  hljs.highlightBlock( code.get(0) );
+                }
+              }
+            }
+          );
+        }
+        dataimport_fetch_config();
+
+        $( '.block .toggle', dataimport_element )
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              $( this ).parents( '.block' )
+                .toggleClass( 'hidden' );
+                            
+              return false;
+            }
+          )
+
+        var reload_config_element = $( '.reload_config', config_element );
+        reload_config_element
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              $.ajax
+              (
+                {
+                  url : handler_url + '?command=reload-config',
+                  dataType : 'xml',
+                  context: $( this ),
+                  beforeSend : function( xhr, settings )
+                  {
+                    this
+                      .removeClass( 'error' )
+                      .addClass( 'loader' );
+                  },
+                  success : function( response, text_status, xhr )
+                  {
+                    this
+                      .addClass( 'success' );
+
+                    window.setTimeout
+                    (
+                      function()
+                      {
+                        reload_config_element
+                          .removeClass( 'success' );
+                      },
+                      5000
+                    );
+                  },
+                  error : function( xhr, text_status, error_thrown )
+                  {
+                    this
+                      .addClass( 'error' );
+                  },
+                  complete : function( xhr, text_status )
+                  {
+                    this
+                      .removeClass( 'loader' );
+                                        
+                    dataimport_fetch_config();
+                  }
+                }
+              );
+              return false;
+            }
+          );
+
+        var debug_mode_element = $( '.debug_mode', config_element );
+        debug_mode_element
+          .die( 'click' )
+          .live
+          (
+            'click',
+            function( event )
+            {
+              var self = $( this );
+              var block = self.closest( '.block' )
+
+              var debug_checkbox = $( 'input[name="debug"]', form_element );
+              var submit_span = $( 'button[type="submit"] span', form_element );
+
+              debug_mode = !debug_mode;
+
+              block.toggleClass( 'debug_mode', debug_mode );
+
+              if( debug_mode )
+              {
+                block.removeClass( 'hidden' );
+
+                debug_checkbox
+                  .attr( 'checked', 'checked' )
+                  .trigger( 'change' );
+                  
+                submit_span
+                  .data( 'original', submit_span.text() )
+                  .text( submit_span.data( 'debugmode' ) );
+              }
+              else
+              {
+                submit_span
+                  .text( submit_span.data( 'original' ) )
+                  .removeData( 'original' );
+              }
+            }
+          );
+
+        // abort
+
+        var abort_import_element = $( '.abort-import', dataimport_element );
+        abort_import_element
+          .off( 'click' )
+          .on
+          (
+            'click',
+            function( event )
+            {
+              var span_element = $( 'span', this );
+
+              $.ajax
+              (
+                {
+                  url : handler_url + '?command=abort&wt=json',
+                  dataType : 'json',
+                  type: 'POST',
+                  context: $( this ),
+                  beforeSend : function( xhr, settings )
+                  {
+                    span_element
+                      .addClass( 'loader' );
+                  },
+                  success : function( response, text_status, xhr )
+                  {
+                    span_element
+                      .data( 'original', span_element.text() )
+                      .text( span_element.data( 'aborting' ) );
+
+                    this
+                      .removeClass( 'warn' )
+                      .addClass( 'success' );
+
+                    window.setTimeout
+                    (
+                      function()
+                      {
+                        $( 'span', abort_import_element )
+                          .removeClass( 'loader' )
+                          .text( span_element.data( 'original' ) )
+                          .removeData( 'original' );
+
+                        abort_import_element
+                          .removeClass( 'success' )
+                          .addClass( 'warn' );
+                      },
+                      dataimport_timeout * 2
+                    );
+
+                    dataimport_fetch_status();
+                  }
+                }
+              );
+              return false;
+            }
+          );
+
+        // state
+
+        var status_button = $( 'form button.refresh-status', form_element );
+
+        status_button
+          .off( 'click' )
+          .on
+          (
+            'click',
+            function( event )
+            {
+              dataimport_fetch_status();
+              return false;
+            }
+          )
+          .trigger( 'click' );
+                
+        function dataimport_fetch_status( clear_timeout )
+        {
+          if( clear_timeout )
+          {
+            app.clear_timeout();
+          }
+
+          $.ajax
+          (
+            {
+              url : handler_url + '?command=status&indent=true&wt=json',
+              dataType : 'json',
+              beforeSend : function( xhr, settings )
+              {
+                $( 'span', status_button )
+                  .addClass( 'loader' );
+              },
+              success : function( response, text_status, xhr )
+              {
+                var state_element = $( '#current_state', content_element );
+
+                var status = response.status;
+                var rollback_time = response.statusMessages.Rolledback || null;
+                var abort_time = response.statusMessages.Aborted || null;
+                
+                var messages = response.statusMessages;
+                var messages_count = 0;
+                for( var key in messages ) { messages_count++; }
+
+                function dataimport_compute_details( response, details_element, elapsed_seconds )
+                {
+                  details_element
+                    .show();
+
+                  // --
+
+                  var document_config = {
+                    'Requests' : 'Total Requests made to DataSource',
+                    'Fetched' : 'Total Rows Fetched',
+                    'Skipped' : 'Total Documents Skipped',
+                    'Processed' : 'Total Documents Processed'
+                  };
+
+                  var document_details = [];
+                  for( var key in document_config )
+                  {
+                    var value = parseInt( response.statusMessages[document_config[key]], 10 );
+
+                    var detail = '<abbr title="' + document_config[key].esc() + '">' + key.esc() + '</abbr>: ' +  app.format_number( value ).esc();
+                    if( elapsed_seconds && 'skipped' !== key.toLowerCase() )
+                    {
+                      detail += ' <span>(' + app.format_number( Math.round( value / elapsed_seconds ) ).esc() + '/s)</span>'
+                    }
+
+                    document_details.push( detail );
+                  };
+
+                  $( '.docs', details_element )
+                    .html( document_details.join( ', ' ) );
+
+                  // --
+
+                  var dates_config = {
+                      'Started' : 'Full Dump Started',
+                      'Aborted' : 'Aborted',
+                      'Rolledback' : 'Rolledback'
+                  };
+
+                  var dates_details = [];
+                  for( var key in dates_config )
+                  {
+                    var value = response.statusMessages[dates_config[key]];
+
+                    if( value )
+                    {
+                      var detail = '<abbr title="' + dates_config[key].esc() + '">' + key.esc() + '</abbr>: '
+                                 + '<abbr class="time">' +  value.esc() + '</abbr>';
+                      dates_details.push( detail );                      
+                    }
+                  };
+
+                  var dates_element = $( '.dates', details_element );
+
+                  dates_element
+                    .html( dates_details.join( ', ' ) );
+
+                  $( '.time', dates_element )
+                    .removeData( 'timeago' )
+                    .timeago();
+                };
+
+                var get_time_taken = function get_default_time_taken()
+                {
+                  var time_taken_text = response.statusMessages['Time taken'];
+                  return app.convert_duration_to_seconds( time_taken_text );
+                };
+
+                var get_default_info_text = function default_info_text()
+                {
+                  var info_text = response.statusMessages[''] || '';
+
+                  // format numbers included in status nicely
+                  info_text = info_text.replace
+                  (
+                    /\d{4,}/g,
+                    function( match, position, string )
+                    {
+                      return app.format_number( parseInt( match, 10 ) );
+                    }
+                  );
+
+                  var time_taken_text = app.convert_seconds_to_readable_time( get_time_taken() );
+                  if( time_taken_text )
+                  {
+                    info_text += ' (Duration: ' + time_taken_text.esc() + ')';
+                  }
+
+                  return info_text;
+                };
+
+                var show_info = function show_info( info_text, elapsed_seconds )
+                {
+                  $( '.info strong', state_element )
+                    .text( info_text || get_default_info_text() );
+
+                  $( '.info .details', state_element )
+                    .hide();
+                };
+
+                var show_full_info = function show_full_info( info_text, elapsed_seconds )
+                {
+                  show_info( info_text, elapsed_seconds );
+
+                  dataimport_compute_details
+                  (
+                    response,
+                    $( '.info .details', state_element ),
+                    elapsed_seconds || get_time_taken()
+                  );
+                };
+
+                state_element
+                  .removeAttr( 'class' );
+
+                var current_time = new Date();
+                $( '.last_update abbr', state_element )
+                  .text( current_time.toTimeString().split( ' ' ).shift() )
+                  .attr( 'title', current_time.toUTCString() );
+
+                $( '.info', state_element )
+                  .removeClass( 'loader' );
+
+                if( 'busy' === status )
+                {
+                  state_element
+                    .addClass( 'indexing' );
+
+                  if( autorefresh_status )
+                  {
+                    $( '.info', state_element )
+                      .addClass( 'loader' );
+                  }
+
+                  var time_elapsed_text = response.statusMessages['Time Elapsed'];
+                  var elapsed_seconds = app.convert_duration_to_seconds( time_elapsed_text );
+                  time_elapsed_text = app.convert_seconds_to_readable_time( elapsed_seconds );
+
+                  var info_text = time_elapsed_text
+                                ? 'Indexing since ' + time_elapsed_text
+                                : 'Indexing ...';
+
+                  show_full_info( info_text, elapsed_seconds );
+                }
+                else if( rollback_time )
+                {
+                  state_element
+                    .addClass( 'failure' );
+
+                  show_full_info();
+                }
+                else if( abort_time )
+                {
+                  state_element
+                    .addClass( 'aborted' );
+
+                  show_full_info( 'Aborting current Import ...' );
+                }
+                else if( 'idle' === status && 0 !== messages_count )
+                {
+                  state_element
+                    .addClass( 'success' );
+
+                  show_full_info();
+                }
+                else 
+                {
+                  state_element
+                    .addClass( 'idle' );
+
+                  show_info( 'No information available (idle)' );
+                }
+
+                // show raw status
+
+                var code = $(
+                  '<pre class="syntax language-json"><code>' +
+                  app.format_json( xhr.responseText ).esc() +
+                  '</code></pre>'
+                );
+
+                $( '#raw_output_container', content_element ).html( code );
+                hljs.highlightBlock( code.get(0) );
+
+                if( !app.timeout && autorefresh_status )
+                {
+                  app.timeout = window.setTimeout
+                  (
+                    function()
+                    {
+                      dataimport_fetch_status( true )
+                    },
+                    dataimport_timeout
+                  );
+                }
+              },
+              error : function( xhr, text_status, error_thrown )
+              {
+                console.debug( arguments );
+
+                reload_config_element
+                  .addClass( 'error' );
+              },
+              complete : function( xhr, text_status )
+              {
+                $( 'span', status_button )
+                  .removeClass( 'loader' )
+                  .addClass( 'success' );
+
+                window.setTimeout
+                (
+                  function()
+                  {
+                    $( 'span', status_button )
+                      .removeClass( 'success' );
+                  },
+                  dataimport_timeout / 2
+                );
+              }
+            }
+          );
+        }
+
+        // form
+
+        var form = $( 'form', form_element );
+
+        form
+          .ajaxForm
+          (
+            {
+              url : handler_url,
+              data : {
+                wt : 'json',
+                indent : 'true'
+              },
+              dataType : 'json',
+              type: 'POST',
+              beforeSend : function( xhr, settings )
+              {
+                $( 'button[type="submit"] span', form_element )
+                  .addClass( 'loader' );
+
+                error_element
+                  .empty()
+                  .hide();
+              },
+              beforeSubmit : function( array, form, options )
+              {
+                var entity = $( '#entity', form ).val();
+                if( entity.length )
+                {
+                  array.push( { name : 'entity', value: entity } );
+                }
+
+                var start = parseInt( $( '#start', form ).val(), 10 );
+                if( start )
+                {
+                  array.push( { name : 'start', value: start } );
+                }
+
+                var rows = parseInt( $( '#rows', form ).val(), 10 );
+                if( rows )
+                {
+                  array.push( { name : 'rows', value: rows } );
+                }
+
+                $( 'input:checkbox', form ).not( ':checked' )
+                  .each( function( i, input )
+                  {
+                    array.push( { name: input.name, value: 'false' } );
+                  }
+                );
+
+                var custom_parameters = $( '#custom_parameters', form ).val();
+                if( custom_parameters.length )
+                {
+                  var params = custom_parameters.split( '&' );
+                  for( var i in params )
+                  {
+                    var tmp = params[i].split( '=' );
+                    array.push( { name : tmp[0], value: tmp[1] } );
+                  }
+                }
+
+                if( debug_mode )
+                {
+                  array.push( { name: 'dataConfig', value: $( '#dataimport_config .editable textarea' ).val() } );
+                }
+              },
+              success : function( response, text_status, xhr )
+              {
+              },
+              error : function( xhr, text_status, error_thrown )
+              {
+                var response = null;
+                try
+                {
+                  eval( 'response = ' + xhr.responseText + ';' );
+                }
+                catch( e ){}
+
+                error_element
+                  .text( response.error.msg || 'Unknown Error (Exception w/o Message)' )
+                  .show();
+              },
+              complete : function( xhr, text_status )
+              {
+                $( 'button[type="submit"] span', form_element )
+                  .removeClass( 'loader' );
+
+                var debug = $( 'input[name="debug"]:checked', form );
+                if( 0 !== debug.size() )
+                {
+                  var code = $(
+                    '<pre class="syntax language-json"><code>' +
+                    app.format_json( xhr.responseText ).esc() +
+                    '</code></pre>'
+                  );
+
+                  $( '.content', debug_response_element ).html( code );
+                  hljs.highlightBlock( code.get(0) );
+                }
+
+                dataimport_fetch_status();
+              }
+            }
+          );
+
+        $( 'input[name="debug"]', form )
+          .off( 'change' )
+          .on
+          (
+            'change',
+            function( event )
+            {
+              debug_response_element.toggle( this.checked );
+            }
+          );
+
+        $( '#auto-refresh-status a', form_element )
+          .off( 'click' )
+          .on
+          (
+            'click',
+            function( event )
+            {
+              $.cookie( cookie_dataimport_autorefresh, $.cookie( cookie_dataimport_autorefresh ) ? null : true );
+              $( this ).trigger( 'state' );
+
+              dataimport_fetch_status();
+
+              return false;
+            }
+          )
+          .off( 'state' )
+          .on
+          (
+            'state',
+            function( event )
+            {
+              autorefresh_status = !!$.cookie( cookie_dataimport_autorefresh );
+
+              $.cookie( cookie_dataimport_autorefresh )
+                ? $( this ).addClass( 'on' )
+                : $( this ).removeClass( 'on' );
+            }
+          )
+          .trigger( 'state' );
+      }
+    );
+  }
+);

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dataimport.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dataimport.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/dataimport.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/documents.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/documents.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/documents.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/documents.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,370 @@
+/*
+ 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.
+ */
+//helper for formatting JSON and others
+var content_generator = {
+
+  _default: function (toEsc) {
+    return toEsc.esc();
+  },
+
+  json: function (toEsc) {
+    return app.format_json(toEsc);
+  }
+
+};
+
+//Utiltity function for turning on/off various elements
+function toggles(documents_form, show_json, show_file, show_doc, doc_text, show_wizard) {
+  var json_only = $('#json-only');
+  var the_document = $('#document', documents_form);
+  if (show_doc) {
+    //console.log("doc: " + doc_text);
+    the_document.val(doc_text);
+    the_document.show();
+  } else {
+    the_document.hide();
+  }
+  if (show_json) {
+    json_only.show();
+  } else {
+    json_only.hide();
+  }
+  var file_upload = $('#file-upload', documents_form);
+  var upload_only = $('#upload-only', documents_form);
+  if (show_file) {
+    file_upload.show();
+    upload_only.show();
+  } else {
+    file_upload.hide();
+    upload_only.hide();
+  }
+  var wizard = $('#wizard', documents_form);
+  if (show_wizard) {
+    wizard.show();
+  } else {
+    wizard.hide();
+  }
+}
+// #/:core/documents
+
+//Utiltity function for setting up the wizard fields
+function addWizardFields(active_core, wizard) {
+  var core_basepath = active_core.attr('data-basepath');
+  var select_options = "";
+  //Populate the select options based off the Fields REST API
+  $.getJSON(window.location.protocol + '//' + window.location.host
+          + core_basepath + "/schema/fields").done(
+      //TODO: handle dynamic fields
+      //TODO: get the unique key, too
+      function (data) {
+        var field_select = $("#wiz-field-select", wizard);
+        field_select.empty();
+        $.each(data.fields,
+            function (i, item) {
+              //console.log("i[" + i + "]=" + item.name);
+              if (item.name != "_version_"){
+                select_options += '<option name="' + item.name + '">'
+                  + item.name + '</option>';
+              }
+            });
+        //console.log("select_options: " + select_options);
+        //fill in the select options
+        field_select.append(select_options);
+      });
+  var wizard_doc = $("#wizard-doc", wizard);
+  wizard_doc.die('focusin')
+      .live('focusin', function (event) {
+        $("#wizard-doc", wizard).text("");
+      }
+  );
+  //Add the click handler for the "Add Field" target, which
+  //takes the field content and moves it into the document target
+  var add_field = $("#add-field-href", wizard);
+  add_field.die("click")
+      .live("click",
+      function (event) {
+        //take the field and the contents and append it to the document
+        var wiz_select = $("#wiz-field-select", wizard);
+        var selected = $("option:selected", wiz_select);
+        console.log("selected field: " + selected);
+        var wiz_doc = $("#wizard-doc", wizard);
+        var the_document = $("#document");
+        var current_doc = the_document.val();
+        console.log("current_text: " + current_doc + " wiz_doc: " + wiz_doc.val());
+        var index = current_doc.lastIndexOf("}");
+        var new_entry = '"' + selected.val() + '":"' + wiz_doc.val() + '"';
+        if (index >= 0) {
+          current_doc = current_doc.substring(0, index) + ', ' + new_entry + "}";
+        } else {
+          //we don't have a doc at all
+          current_doc = "{" + new_entry + "}";
+        }
+        current_doc = content_generator['json'](current_doc);
+        the_document.val(current_doc);
+        //clear the wiz doc window
+        wiz_doc.val("");
+        return false;
+      }
+  );
+
+  //console.log("adding " + i + " child: " + child);
+
+}
+
+//The main program for adding the docs
+sammy.get
+(
+    new RegExp(app.core_regex_base + '\\/(documents)$'),
+    function (context) {
+      var active_core = this.active_core;
+      var core_basepath = active_core.attr('data-basepath');
+      var content_element = $('#content');
+
+
+      $.post
+      (
+          'tpl/documents.html',
+          function (template) {
+
+            content_element
+                .html(template);
+            var documents_element = $('#documents', content_element);
+            var documents_form = $('#form form', documents_element);
+            var url_element = $('#url', documents_element);
+            var result_element = $('#result', documents_element);
+            var response_element = $('#response', documents_element);
+            var doc_type_select = $('#document-type', documents_form);
+            //Since we are showing "example" docs, when the area receives the focus
+            // remove the example content.
+            $('#document', documents_form).die('focusin')
+                .live('focusin',
+                function (event) {
+                  var document_type = $('#document-type', documents_form).val();
+                  if (document_type != "wizard"){
+                    //Don't clear the document when in wizard mode.
+                    var the_document = $('#document', documents_form);
+                    the_document.text("");
+                  }
+                }
+            );
+
+            /*response_element.html("");*/
+            //Setup the handlers for toggling the various display options for the "Document Type" select
+            doc_type_select
+                .die('change')
+                .live
+            (
+                'change',
+                function (event) {
+                  var document_type = $('#document-type', documents_form).val();
+                  var file_upload = $('#file-upload', documents_form);
+
+                  //need to clear out any old file upload by forcing a redraw so that
+                  //we don't try to upload an old file
+                  file_upload.html(file_upload.html());
+                  if (document_type == "json") {
+                    toggles(documents_form, true, false, true, '{"id":"change.me","title":"change.me"}', false);
+                    $("#attribs").show();
+                  } else if (document_type == "upload") {
+                    toggles(documents_form, false, true, false, "", false);
+                    $("#attribs").show();
+                  } else if (document_type == "csv") {
+                    toggles(documents_form, false, false, true, "id,title\nchange.me,change.me", false);
+                    $("#attribs").show();
+                  } else if (document_type == "solr") {
+                    toggles(documents_form, false, false, true, '<add>\n' +
+                        '<doc>\n' +
+                        '<field name="id">change.me</field>\n' +
+                        '<field name="title" >chang.me</field>\n' +
+                        '</doc>\n' +
+                        '</add>\n', false);
+                    $("#attribs").hide();
+                  } else if (document_type == "wizard") {
+                    var wizard = $('#wizard', documents_form);
+                    addWizardFields(active_core, wizard);
+                    //$("#wizard-doc", wizard).text('Enter your field text here and then click "Add Field" to add the field to the document.');
+                    toggles(documents_form, false, false, true, "", true);
+                    $("#attribs").show();
+                  } else if (document_type == "xml") {
+                    toggles(documents_form, false, false, true, '<doc>\n' +
+                        '<field name="id">change.me</field>' +
+                        '<field name="title">change.me</field>' +
+                        '</doc>', false);
+                    $("#attribs").show();
+                  }
+                  return false;
+                }
+            );
+            doc_type_select.chosen().trigger('change');
+            //Setup the submit option handling.
+            documents_form
+                .die('submit')
+                .live
+            (
+                'submit',
+                function (event) {
+                  var form_values = [];
+                  var handler_path = $('#qt', documents_form).val();
+                  if ('/' !== handler_path[0]) {
+                    form_values.push({ name: 'qt', value: handler_path.esc() });
+                    handler_path = '/update';
+                  }
+
+                  var document_url = window.location.protocol + '//' + window.location.host
+                      + core_basepath + handler_path + '?wt=json';
+
+                  url_element
+                      .attr('href', document_url)
+                      .text(document_url)
+                      .trigger('change');
+                  var the_document = $('#document', documents_form).val();
+                  var commit_within = $('#commitWithin', documents_form).val();
+                  var boost = $('#boost', documents_form).val();
+                  var overwrite = $('#overwrite', documents_form).val();
+                  var the_command = "";
+                  var content_type = "";
+                  var document_type = $('#document-type', documents_form).val();
+                  var doingFileUpload = false;
+                  //Both JSON and Wizard use the same pathway for submission
+                  //New entries primarily need to fill the_command and set the content_type
+                  if (document_type == "json" || document_type == "wizard") {
+                    //create a JSON command
+                    the_command = "{"
+                        + '"add":{ "doc":' + the_document + ","
+                        + '"boost":' + boost + ","
+                        + '"overwrite":' + overwrite + ","
+                        + '"commitWithin":' + commit_within
+                        + "}}";
+                    content_type = "application/json";
+                  } else if (document_type == "csv") {
+                    the_command = the_document;
+                    document_url += "&commitWithin=" + commit_within + "&overwrite=" + overwrite;
+                    content_type = "application/csv";
+                  } else if (document_type == "xml") {
+                    the_command = '<add commitWithin="' + commit_within
+                        + '" overwrite="' + overwrite + '"'
+                        + ">"
+                        + the_document + "</add>";
+                    content_type = "text/xml";
+                  } else if (document_type == "upload") {
+                    doingFileUpload = true;
+                  } else if (document_type == "solr") {
+                    //guess content_type
+                    the_command = the_document;
+                    if (the_document.indexOf("<") >= 0) {
+                      //XML
+                      content_type = "text/xml";
+                    } else if (the_document.indexOf("{") >= 0) {
+                      //JSON
+                      content_type = "application/json";
+                    } //TODO: do we need to handle others?
+                  } else {
+                    //How to handle other?
+                  }
+
+                  //Handle the submission of the form in the case where we are not uploading a file
+                  if (doingFileUpload == false) {
+                    $.ajax(
+                        {
+                          url: document_url,
+                          //dataType : 'json',
+                          processData: false,
+                          type: 'POST',
+                          contentType: content_type,
+                          data: the_command,
+                          context: response_element,
+                          beforeSend: function (xhr, settings) {
+                            console.log("beforeSend: Vals: " + document_url + " content-type: " + document_type + " the cmd: " + the_command);
+
+                          },
+                          success: function (response, text_status, xhr) {
+                            console.log("success:  " + response + " status: " + text_status + " xhr: " + xhr.responseText);
+                            this.html('<div><span class="description">Status</span>: ' + text_status + '</div>'
+                                + '<div><span class="description">Response:</span>' + '<pre class="syntax language-json"><code>' + content_generator['json'](xhr.responseText) + "</code></pre></div>");
+                            result_element.show();
+                          },
+                          error: function (xhr, text_status, error_thrown) {
+                            console.log("error: " + text_status + " thrown: " + error_thrown);
+                            this.html('<div><span class="description">Status</span>: ' + text_status + '</div><div><span class="description">Error:</span> '
+                                + '' + error_thrown
+                                + '</div>'
+                                + '<div><span class="description">Error</span>:' + '<pre class="syntax language-json"><code>'
+                                + content_generator['json'](xhr.responseText) +
+                                '</code></pre></div>');
+                            result_element.show();
+                          },
+                          complete: function (xhr, text_status) {
+                            //console.log("complete: " + text_status + " xhr: " + xhr.responseText + " doc type: " + document_type);
+
+                            //alert(text_status + ": " + xhr.responseText);
+                            /*this
+                             .removeClass( 'loader' );*/
+                          }
+                        }
+                    );
+                  } else {
+                    //upload the file
+                    var the_file = $('#the-file', documents_form);
+                    var erh_params = $('#erh-params', documents_form).val();
+                    if (erh_params != "") {
+                      if (erh_params.substring(0,1) != "&"){
+                        erh_params = "&" + erh_params;
+                      }
+                      document_url = document_url + erh_params;
+                    }
+                    console.log("uploading file to: " + document_url);
+                    the_file.ajaxfileupload({
+                      'action': document_url,
+                      'validate_extensions': false,
+                      'upload_now': true,
+                      'params': {
+                        'extra': 'info'
+                      },
+                      'onComplete': function (response) {
+                        response = response.replace('<pre style="word-wrap: break-word; white-space: pre-wrap;">', "");
+                        response = response.replace("</pre>", "");
+                        console.log('completed upload: ' + response);
+                        response_element.html('<div><span class="description">Response:</span>' + '<pre class="syntax language-json"><code>' + content_generator['json'](response) + "</code></pre></div>");
+                        result_element.show();
+
+                      },
+                      'onStart': function () {
+                        console.log("starting file upload");
+                        //if (weWantedTo) return false; // cancels upload
+                      },
+                      'onCancel': function () {
+                        console.log('no file selected');
+                      }
+                    });
+                  }
+                  return false;
+                }
+            );
+          }
+      )
+    }
+)
+/*
+ Sample docs:
+ <doc boost="2.5">
+ <field name="id">05991</field>
+ <field name="title" boost="2.0">Bridgewater</field>
+ </doc>
+
+ {"id":"foo","title":"blah"}
+
+ */
\ No newline at end of file

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/documents.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/documents.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/documents.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/files.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/files.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/files.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/files.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,256 @@
+/*
+ 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.
+*/
+
+// #/:core/files
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(files)$' ),
+  function( context )
+  {
+    core_basepath = this.active_core.attr( 'data-basepath' );
+    current_core = context.params.splat[0];
+
+    var content_element = $( '#content' );
+
+    var file_endpoint = core_basepath + '/admin/file';
+
+    var path = context.path.split( '?' );
+    var selected_file = null;
+    if( path && path[1] )
+    {
+      selected_file = path[1].split( '=' ).pop();
+    }
+
+    $.get
+    (
+      'tpl/files.html',
+      function( template )
+      {
+        content_element
+          .html( template );
+
+        var frame_element = $( '#frame', content_element );
+
+        var tree_callback = function( event, data )
+        {
+          $( 'li[data-file].jstree-closed', event.currentTarget )
+            .filter
+            (
+              function( index, element )
+              {
+                return selected_file && 0 === selected_file.indexOf( $( element ).data( 'file' ) );
+              }
+            )
+            .each
+            (
+              function( index, element )
+              {
+                data.inst.open_node( element );
+              }
+            );
+
+          if( selected_file )
+          {
+            $( 'li[data-file="' + selected_file.replace( /\/$/, '' ) + '"] > a', event.currentTarget )
+              .addClass( 'active' );
+          }
+        };
+
+        var load_tree = function()
+        {
+          $( '#tree', frame_element )
+            .empty()
+            .jstree
+            (
+              {
+                plugins : [ 'json_data', 'sort' ],
+                json_data : {
+                  ajax: {
+                    url : file_endpoint + '?wt=json',
+                    data : function( n )
+                    {
+                      if( -1 === n )
+                        return null;
+
+                      return {
+                        file : n.attr( 'data-file' )
+                      };
+                    },
+                    success : function( response, status, xhr )
+                    {
+                      var files = [];
+
+                      for( var file in response.files )
+                      {
+                        var is_directory = response.files[file].directory;
+                        var prefix = xhr.data ? xhr.data.file + '/' : ''
+
+                        var item = {
+                          data: {
+                            title : file,
+                            attr : {
+                              href : '#/' + current_core + '/files?file=' + prefix + file
+                            }
+                          },
+                          attr : {
+                            'data-file' : prefix + file
+                          }
+                        };
+
+                        if( is_directory )
+                        {
+                          item.state = 'closed';
+                          item.data.attr.href += '/';
+                        }
+
+                        files.push( item );
+                      }
+
+                      return files;
+                    }
+                  },
+                  progressive_render : true
+                },
+                core : {
+                  animation : 0
+                }
+              }
+            )
+            .on
+            (
+              'loaded.jstree',
+              tree_callback
+            )
+            .on
+            (
+              'open_node.jstree',
+              tree_callback
+            );
+        };
+        load_tree();
+
+        if( selected_file )
+        {
+          $( '#new-file-holder input' )
+            .val
+            (
+              '/' !== selected_file.substr( -1 )
+              ? selected_file.replace( /[^\/]+$/, '' )
+              : selected_file
+            );
+        }
+
+        if( selected_file && '/' !== selected_file.substr( -1 ) )
+        {
+          frame_element
+            .addClass( 'show' );
+
+          var endpoint = file_endpoint + '?file=' + selected_file;
+
+          var content_type_map = { xml : 'text/xml', html : 'text/html', js : 'text/javascript' };
+          var file_ext = selected_file.match( /\.(\w+)$/  );
+          endpoint += '&contentType=' + ( content_type_map[ file_ext[1] || '' ] || 'text/plain' ) + ';charset=utf-8';
+
+          var public_url = window.location.protocol + '//' + window.location.host + endpoint;
+
+          $( '#url', frame_element )
+            .text( public_url )
+            .attr( 'href', public_url );
+
+          var load_file = function( load_tree )
+          {
+            if( load_tree )
+            {
+              load_tree();
+            }
+
+            $.ajax
+            (
+              {
+                url : endpoint,
+                context : frame_element,
+                beforeSend : function( xhr, settings )
+                {
+                  var block = $( '.view-file .response', this );
+
+                  if( !block.data( 'placeholder' ) )
+                  {
+                    block.data( 'placeholder', block.text() );
+                  }
+
+                  block
+                    .text( block.data( 'placeholder' ) );
+                },
+                success : function( response, text_status, xhr )
+                {
+                  var content_type = xhr.getResponseHeader( 'Content-Type' ) || '';
+                  var highlight = null;
+
+                  if( 0 === content_type.indexOf( 'text/xml' ) ||  0 === xhr.responseText.indexOf( '<?xml' ) ||
+                      0 === content_type.indexOf( 'text/html' ) ||  0 === xhr.responseText.indexOf( '<!--' ) )
+                  {
+                    highlight = 'xml';
+                  }
+                  else if( 0 === content_type.indexOf( 'text/javascript' ) )
+                  {
+                    highlight = 'javascript';
+                  }
+
+                  var code = $(
+                    '<pre class="syntax' + ( highlight ? ' language-' + highlight : '' )+ '"><code>' +
+                    xhr.responseText.esc() +
+                    '</code></pre>'
+                  );
+                  $( '.view-file .response', this )
+                    .html( code );
+
+                  if( highlight )
+                  {
+                    hljs.highlightBlock( code.get( 0 ) );
+                  }
+
+                  $( 'form textarea', this )
+                    .val( xhr.responseText );
+                },
+                error : function( xhr, text_status, error_thrown)
+                {
+                  $( '.view-file .response', this )
+                    .text( 'No such file exists.' );
+                },
+                complete : function( xhr, text_status )
+                {
+                }
+              }
+            );
+          }
+          load_file();
+        }
+      }
+    );
+  }
+);
+
+// legacy redirect for 'config' & 'schema' pages
+// #/:core/schema, #/:core/config
+sammy.get
+(
+  new RegExp( app.core_regex_base + '\\/(schema|config)$' ),
+  function( context )
+  {
+    context.redirect( '#/' + context.params.splat[0] + '/files?file=' + this.active_core.attr( context.params.splat[1] ) );    
+  }
+);
\ No newline at end of file

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/files.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/files.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/files.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/index.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/index.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/index.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/index.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,340 @@
+/*
+ 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.
+*/
+
+var parse_memory_value = function( value )
+{
+  if( value !== Number( value ) )
+  {
+    var units = 'BKMGTPEZY';
+    var match = value.match( /^(\d+([,\.]\d+)?) (\w)\w?$/ );
+    var value = parseFloat( match[1] ) * Math.pow( 1024, units.indexOf( match[3].toUpperCase() ) );
+  }
+    
+  return value;
+};
+
+var generate_bar = function( bar_container, bar_data, convert_label_values )
+{
+  bar_holder = $( '.bar-holder', bar_container );
+
+  var bar_level = 1;
+  var max_width = Math.round( $( '.bar-max', bar_holder ).width() );
+  $( '.bar-max.val', bar_holder ).text( bar_data['max'] );
+    
+  bar_level++;
+  $( '.bar-total.bar', bar_holder ).width( new String( (bar_data['total']/bar_data['max'])*100 ) + '%' );
+  $( '.bar-total.val', bar_holder ).text( bar_data['total'] );
+
+  if( bar_data['used'] )
+  {
+    bar_level++;
+    $( '.bar-used.bar', bar_holder ).width( new String( (bar_data['used']/bar_data['total'])*100 ) + '%' );
+    $( '.bar-used.val', bar_holder ).text( bar_data['used'] );
+  }
+
+  bar_holder
+    .addClass( 'bar-lvl-' + bar_level );
+
+  var percentage = ( ( ( bar_data['used'] || bar_data['total'] ) / bar_data['max'] ) * 100 ).toFixed(1);
+        
+  var hl = $( '[data-desc="' + bar_container.attr( 'id' ) + '"]' );
+
+  $( '.bar-desc', hl )
+    .remove();
+
+  hl
+    .append( ' <small class="bar-desc">' + percentage + '%</small>' );
+
+  if( !!convert_label_values )
+  {
+    $( '.val', bar_holder )
+      .each
+      (
+        function()
+        {
+          var self = $( this );
+
+          var unit = null;
+          var byte_value = parseInt( self.html() );
+
+          self
+            .attr( 'title', 'raw: ' + byte_value + ' B' );
+
+          byte_value /= 1024;
+          byte_value /= 1024;
+          unit = 'MB';
+
+          if( 1024 <= byte_value )
+          {
+            byte_value /= 1024;
+            unit = 'GB';
+          }
+
+          byte_value = byte_value.toFixed( 2 ) + ' ' + unit;
+
+          self
+            .text( byte_value );
+        }
+      );
+  }
+};
+
+var system_info = function( element, system_data )
+{
+  // -- usage
+
+  var load_average = ( system_data['system']['uptime'] || '' ).match( /load averages?: (\d+[.,]\d\d),? (\d+[.,]\d\d),? (\d+[.,]\d\d)/ );
+  if( load_average )
+  {
+    var hl = $( '#system h2', element );
+
+    $( '.bar-desc', hl )
+      .remove();
+
+    hl
+      .append( ' <small class="bar-desc">' + load_average.slice( 1 ).join( '  ' ).replace( /,/g, '.' ).esc() + '</small>' );
+  }
+
+  // -- physical-memory-bar
+    
+  var bar_holder = $( '#physical-memory-bar', element );
+  if( system_data['system']['totalPhysicalMemorySize'] === undefined || system_data['system']['freePhysicalMemorySize'] === undefined )
+  {
+    bar_holder.hide();
+  }
+  else
+  {
+    bar_holder.show();
+
+    var bar_data = {
+      'max' : parse_memory_value( system_data['system']['totalPhysicalMemorySize'] ),
+      'total' : parse_memory_value( system_data['system']['totalPhysicalMemorySize'] - system_data['system']['freePhysicalMemorySize'] )
+    };
+
+    generate_bar( bar_holder, bar_data, true );
+  }
+
+  // -- swap-space-bar
+    
+  var bar_holder = $( '#swap-space-bar', element );
+  if( system_data['system']['totalSwapSpaceSize'] === undefined || system_data['system']['freeSwapSpaceSize'] === undefined )
+  {
+    bar_holder.hide();
+  }
+  else
+  {
+    bar_holder.show();
+
+    var bar_data = {
+      'max' : parse_memory_value( system_data['system']['totalSwapSpaceSize'] ),
+      'total' : parse_memory_value( system_data['system']['totalSwapSpaceSize'] - system_data['system']['freeSwapSpaceSize'] )
+    };
+
+    generate_bar( bar_holder, bar_data, true );
+  }
+
+  // -- file-descriptor-bar
+    
+  var bar_holder = $( '#file-descriptor-bar', element );
+  if( system_data['system']['maxFileDescriptorCount'] === undefined || system_data['system']['openFileDescriptorCount'] === undefined )
+  {
+    bar_holder.hide();
+  }
+  else
+  {
+    bar_holder.show();
+
+    var bar_data = {
+      'max' : parse_memory_value( system_data['system']['maxFileDescriptorCount'] ),
+      'total' : parse_memory_value( system_data['system']['openFileDescriptorCount'] )
+    };
+
+    generate_bar( bar_holder, bar_data );
+  }
+
+  0 === $( '#system div[id$="-bar"]:visible', element ).size()
+    ? $( '#system .no-info', element ).show()
+    : $( '#system .no-info', element ).hide();
+
+  // -- memory-bar
+
+  var bar_holder = $( '#jvm-memory-bar', element );
+  if( system_data['jvm']['memory'] === undefined )
+  {
+    bar_holder.hide();
+  }
+  else
+  {
+    bar_holder.show();
+
+    var jvm_memory = $.extend
+    (
+      {
+        'free' : null,
+        'total' : null,
+        'max' : null,
+        'used' : null,
+        'raw' : {
+          'free' : null,
+          'total' : null,
+          'max' : null,
+          'used' : null,
+          'used%' : null
+        }
+      },
+      system_data['jvm']['memory']
+    );
+
+    var bar_data = {
+      'max' : parse_memory_value( jvm_memory['raw']['max'] || jvm_memory['max'] ),
+      'total' : parse_memory_value( jvm_memory['raw']['total'] || jvm_memory['total'] ),
+      'used' : parse_memory_value( jvm_memory['raw']['used'] || jvm_memory['used'] )
+    };
+
+    generate_bar( bar_holder, bar_data, true );
+  }
+
+}
+
+// #/
+sammy.get
+(
+  /^#\/$/,
+  function( context )
+  {
+    var content_element = $( '#content' );
+
+    content_element
+      .html( '<div id="index"></div>' );
+
+    $.ajax
+    (
+      {
+        url : 'tpl/index.html',
+        context : $( '#index', content_element ),
+        beforeSend : function( arr, form, options )
+        {
+        },
+        success : function( template )
+        {
+          var self = this;
+
+          this
+            .html( template );
+    
+          var data = {
+            'start_time' : app.dashboard_values['jvm']['jmx']['startTime'],
+            'jvm_version' : app.dashboard_values['jvm']['name'] + ' (' + app.dashboard_values['jvm']['version'] + ')',
+            'processors' : app.dashboard_values['jvm']['processors'],
+            'solr_spec_version' : app.dashboard_values['lucene']['solr-spec-version'] || '-',
+            'solr_impl_version' : app.dashboard_values['lucene']['solr-impl-version'] || '-',
+            'lucene_spec_version' : app.dashboard_values['lucene']['lucene-spec-version'] || '-',
+            'lucene_impl_version' : app.dashboard_values['lucene']['lucene-impl-version'] || '-'
+          };
+    
+          for( var key in data )
+          {                                                        
+            var value_element = $( '.' + key + ' dd', this );
+
+            value_element
+              .text( data[key].esc() );
+                        
+            value_element.closest( 'li' )
+              .show();
+          }
+
+          var commandLineArgs = app.dashboard_values['jvm']['jmx']['commandLineArgs'];
+          if( 0 !== commandLineArgs.length )
+          {
+            var cmd_arg_element = $( '.command_line_args dt', this );
+            var cmd_arg_key_element = $( '.command_line_args dt', this );
+            var cmd_arg_element = $( '.command_line_args dd', this );
+
+            for( var key in commandLineArgs )
+            {
+              cmd_arg_element = cmd_arg_element.clone();
+              cmd_arg_element.text( commandLineArgs[key] );
+
+              cmd_arg_key_element
+                .after( cmd_arg_element );
+            }
+
+            cmd_arg_key_element.closest( 'li' )
+              .show();
+
+            $( '.command_line_args dd:last', this )
+              .remove();
+
+            $( '.command_line_args dd:odd', this )
+              .addClass( 'odd' );
+          }
+
+          $( '.timeago', this )
+            .timeago();
+
+          $( '.index-left .block li:visible:odd', this )
+            .addClass( 'odd' );
+                    
+          // -- system_info
+
+          system_info( this, app.dashboard_values );
+
+          $( '#system a.reload', this )
+            .die( 'click' )
+            .live
+            (
+              'click',
+              function( event )
+              {
+                $.ajax
+                (
+                  {
+                    url : config.solr_path + '/admin/info/system?wt=json',
+                    dataType : 'json',
+                    context : this,
+                    beforeSend : function( arr, form, options )
+                    {
+                      loader.show( this );
+                    },
+                    success : function( response )
+                    {
+                      system_info( self, response );
+                    },
+                    error : function()
+                    {
+                    },
+                    complete : function()
+                    {
+                      loader.hide( this );
+                    }
+                  }
+                );
+
+                return false;
+              }
+            );
+        },
+        error : function( xhr, text_status, error_thrown )
+        {
+        },
+        complete : function( xhr, text_status )
+        {
+        }
+      }
+    );
+  }
+);

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/index.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/index.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/index.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/java-properties.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/java-properties.js?rev=1700119&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/java-properties.js (added)
+++ ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/java-properties.js Sun Aug 30 13:27:07 2015
@@ -0,0 +1,106 @@
+/*
+ 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.
+*/
+
+// #/~java-properties
+sammy.get
+(
+  /^#\/(~java-properties)$/,
+  function( context )
+  {
+    var content_element = $( '#content' );
+
+    content_element
+      .html( '<div id="java-properties"></div>' );
+
+    $.ajax
+    (
+      {
+        url : app.config.solr_path + '/admin/info/properties?wt=json',
+        dataType : 'json',
+        context : $( '#java-properties', content_element ),
+        beforeSend : function( xhr, settings )
+        {
+          this
+            .html( '<div class="loader">Loading ...</div>' );
+        },
+        success : function( response, text_status, xhr )
+        {
+          var system_properties = response['system.properties'];
+          var properties_data = {};
+          var properties_content = [];
+          var properties_order = [];
+
+          var workaround = xhr.responseText.match( /"(line\.separator)"\s*:\s*"(.+?)"/ );
+          if( workaround && workaround[2] )
+          {
+            system_properties[workaround[1]] = workaround[2];
+          }
+
+          for( var key in system_properties )
+          {
+            var displayed_key = key.replace( /\./g, '.&#8203;' );
+            var displayed_value = [ system_properties[key] ];
+            var item_class = 'clearfix';
+
+            if( -1 !== key.indexOf( '.path' ) || -1 !== key.indexOf( '.dirs' ) )
+            {
+              displayed_value = system_properties[key].split( system_properties['path.separator'] );
+              if( 1 < displayed_value.length )
+              {
+                item_class += ' multi';
+              }
+            }
+
+            var item_content = '<li><dl class="' + item_class + '">' + "\n"
+                             + '<dt>' + displayed_key.esc() + '</dt>' + "\n";
+
+            for( var i in displayed_value )
+            {
+              item_content += '<dd>' + displayed_value[i].esc() + '</dd>' + "\n";
+            }
+
+            item_content += '</dl></li>';
+
+            properties_data[key] = item_content;
+            properties_order.push( key );
+          }
+
+          properties_order.sort();
+          for( var i in properties_order )
+          {
+            properties_content.push( properties_data[properties_order[i]] );
+          }
+
+          this
+            .html( '<ul>' + properties_content.join( "\n" ) + '</ul>' );
+                    
+          $( 'li:odd', this )
+            .addClass( 'odd' );
+                    
+          $( '.multi dd:odd', this )
+            .addClass( 'odd' );
+        },
+        error : function( xhr, text_status, error_thrown)
+        {
+        },
+        complete : function( xhr, text_status )
+        {
+        }
+      }
+    );
+  }
+);
\ No newline at end of file

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/java-properties.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/java-properties.js
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/solr/webapp/solr/js/scripts/java-properties.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain