You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2015/12/21 05:04:52 UTC
svn commit: r1721081 [1/2] - in /portals/jetspeed-2/portal/trunk:
applications/jetspeed/src/main/webapp/WEB-INF/min-pages/
applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/
applications/jetspeed/src/main/webapp/WEB-INF/pages/ applications...
Author: taylor
Date: Mon Dec 21 04:04:51 2015
New Revision: 1721081
URL: http://svn.apache.org/viewvc?rev=1721081&view=rev
Log:
JS2-1348: implemented Search feature, adding support to search over some demo html content found in j2-admin app
Added:
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/definition2.fpsml
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/folder.metadata
- copied unchanged from r1710106, portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/system/prm/folder.metadata
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/results.psml
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition2.fpsml
- copied, changed from r1710106, portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition.fpsml
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/folder.metadata
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/results.psml
portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/testdocs/
portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/testdocs/about.html
- copied unchanged from r1709942, portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/info/about.html
portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/testdocs/developers.html
- copied unchanged from r1709942, portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/info/developers.html
portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/testdocs/welcome.html
- copied unchanged from r1709942, portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/info/welcome.html
Modified:
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/header.vm
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/css/styles.css
portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/header.vm
portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/velocity/JetspeedPowerToolImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/lucene/SearchEngineImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/solr/SolrSearchEngineImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/java/org/apache/jetspeed/search/lucene/TestPortletRegistrySearch.java
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/search/SearchEngine.java
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/alternate/search-embedded-solr-override.xml
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/alternate/search-http-solr-override.xml
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/search.xml
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties
portals/jetspeed-2/portal/trunk/maven/jetspeed-db-maven-plugin/pom.xml
Added: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/definition2.fpsml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/definition2.fpsml?rev=1721081&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/definition2.fpsml (added)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/definition2.fpsml Mon Dec 21 04:04:51 2015
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<fragment-definition id="definition"
+ xmlns="http://portals.apache.org/jetspeed"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/fpsml.xsd">
+
+ <title>DEFINITION</title>
+ <fragment id="sp-definition" type="portlet" name="j2-admin::SearchPortlet"/>
+</fragment-definition>
+
+
Added: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/results.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/results.psml?rev=1721081&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/results.psml (added)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/min-pages/search/results.psml Mon Dec 21 04:04:51 2015
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ 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.
+ -->
+<page id="search.psml" hidden="true"
+ xmlns="http://portals.apache.org/jetspeed"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/psml.xsd">
+ <title>Jetspeed Search Results</title>
+ <short-title>Search Results</short-title>
+ <fragment id="js-search-results.1" type="layout" name="jetspeed-layouts::VelocityOneColumn">
+ <fragment id="js-search-results.2" type="portlet" name="j2-admin::SearchPortlet"></fragment>
+ <fragment id="js-search-results.3" type="portlet" name="j2-admin::SearchResultsPortlet"></fragment>
+ </fragment>
+</page>
Copied: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition2.fpsml (from r1710106, portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition.fpsml)
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition2.fpsml?p2=portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition2.fpsml&p1=portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition.fpsml&r1=1710106&r2=1721081&rev=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition.fpsml (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/definition2.fpsml Mon Dec 21 04:04:51 2015
@@ -14,10 +14,12 @@ See the License for the specific languag
limitations under the License.
-->
<fragment-definition id="definition"
- xmlns="http://portals.apache.org/jetspeed"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/fpsml.xsd">
+ xmlns="http://portals.apache.org/jetspeed"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/fpsml.xsd">
<title>DEFINITION</title>
- <fragment id="wp-definition" type="portlet" name="demo::WeatherPortlet"/>
+ <fragment id="sp-definition" type="portlet" name="j2-admin::SearchPortlet"/>
</fragment-definition>
+
+
Added: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/folder.metadata
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/folder.metadata?rev=1721081&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/folder.metadata (added)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/folder.metadata Mon Dec 21 04:04:51 2015
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<folder hidden="true"
+ xmlns="http://portals.apache.org/jetspeed"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/folder-metadata.xsd">
+ <security-constraints>
+ <security-constraints-ref>AEUV</security-constraints-ref>
+ </security-constraints>
+</folder>
Added: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/results.psml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/results.psml?rev=1721081&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/results.psml (added)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/WEB-INF/pages/search/results.psml Mon Dec 21 04:04:51 2015
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ 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.
+ -->
+<page id="search.psml" hidden="true"
+ xmlns="http://portals.apache.org/jetspeed"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://portals.apache.org/jetspeed http://portals.apache.org/jetspeed-2/2.2/schemas/psml.xsd">
+ <title>Jetspeed Search Results</title>
+ <short-title>Search Results</short-title>
+ <fragment id="js-search-results.1" type="layout" name="jetspeed-layouts::VelocityOneColumn">
+ <fragment id="js-search-results.2" type="portlet" name="j2-admin::SearchResultsPortlet">
+ </fragment>
+ </fragment>
+</page>
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/css/styles.css Mon Dec 21 04:04:51 2015
@@ -464,6 +464,14 @@ background-position: 0px -30px
font-size:8pt;
}
+.layout-jetspeed .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #000;
+ text-decoration:none;
+ font-size:8pt;
+}
+
.layout-jetspeed .layout-jetspeed-logout:hover{
text-decoration: underline;
}
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-blue/header.vm Mon Dec 21 04:04:51 2015
@@ -99,6 +99,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/css/styles.css Mon Dec 21 04:04:51 2015
@@ -464,6 +464,14 @@ background-position: 0px -30px
font-size:8pt;
}
+.layout-jetspeed .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #000;
+ text-decoration:none;
+ font-size:8pt;
+}
+
.layout-jetspeed .layout-jetspeed-logout:hover{
text-decoration: underline;
}
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-green/header.vm Mon Dec 21 04:04:51 2015
@@ -99,6 +99,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/css/styles.css Mon Dec 21 04:04:51 2015
@@ -464,6 +464,14 @@ background-position: 0px -30px
font-size:8pt;
}
+.layout-jetspeed .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #000;
+ text-decoration:none;
+ font-size:8pt;
+}
+
.layout-jetspeed .layout-jetspeed-logout:hover{
text-decoration: underline;
}
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap-red/header.vm Mon Dec 21 04:04:51 2015
@@ -99,6 +99,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/css/styles.css Mon Dec 21 04:04:51 2015
@@ -464,6 +464,14 @@ color: #fff;
font-size:8pt;
}
+.layout-jetspeed .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #000;
+ text-decoration:none;
+ font-size:8pt;
+}
+
.layout-jetspeed .layout-jetspeed-logout:hover{
text-decoration: underline;
}
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/bootstrap/header.vm Mon Dec 21 04:04:51 2015
@@ -99,6 +99,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/css/styles.css Mon Dec 21 04:04:51 2015
@@ -462,6 +462,16 @@ font-size:8pt;
text-decoration: underline;
}
+.layout-greenearth .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #fff;
+ text-decoration:none;
+ font-size:8pt;
+}
+
+
+
.layout-jetspeed .tooltext { font-size: 8pt; }
.layout-greenearth .navmenu ul { margin: 0 0 0 3px; padding: 2px; }
.layout-greenearth .navmenu li { margin: 0 0 0 3px; padding: 2px; }
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/greenearth/header.vm Mon Dec 21 04:04:51 2015
@@ -97,6 +97,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/css/styles.css Mon Dec 21 04:04:51 2015
@@ -458,6 +458,14 @@ color: #fff;
font-size:8pt;
}
+.layout-jetspeed .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #fff;
+ text-decoration:none;
+ font-size:8pt;
+}
+
.layout-jetspeed .layout-jetspeed-logout:hover{
text-decoration: underline;
}
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/jetspeed/header.vm Mon Dec 21 04:04:51 2015
@@ -97,6 +97,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/css/styles.css Mon Dec 21 04:04:51 2015
@@ -16,43 +16,43 @@ limitations under the License.
*/
@import url("../../css/portal-standard.css");
-
-
-* { margin:0; padding:0; }
-
-body, div, span, a, form, li, ul, ol, input, select, textarea, button, pre, blockquote, label, h1, h2, h3, h4, td, tr, th, tbody, table, p, iframe, img {
- padding:0px;margin:0px;
- white-space:normal;
- font-weight:normal;
+
+
+* { margin:0; padding:0; }
+
+body, div, span, a, form, li, ul, ol, input, select, textarea, button, pre, blockquote, label, h1, h2, h3, h4, td, tr, th, tbody, table, p, iframe, img {
+ padding:0px;margin:0px;
+ white-space:normal;
+ font-weight:normal;
font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif;
voice-family: "\"}\"";
- voice-family: inherit;
- font-size: 8pt;
-}
+ voice-family: inherit;
+ font-size: 8pt;
+}
body {
background: #fff;;
-}
-
-textarea, button, select, form {
- padding:1px;
-}
-
-p {
- margin-top:4px;
- margin-bottom:4px;
-}
-
-h2 {
- margin-bottom:6px;
- color:#12293f;
- font-size:9pt;
- font-weight:bold;
-}
-
-h3 {
- margin-bottom:4px;
- text-decoration:underline;
+}
+
+textarea, button, select, form {
+ padding:1px;
+}
+
+p {
+ margin-top:4px;
+ margin-bottom:4px;
+}
+
+h2 {
+ margin-bottom:6px;
+ color:#12293f;
+ font-size:9pt;
+ font-weight:bold;
+}
+
+h3 {
+ margin-bottom:4px;
+ text-decoration:underline;
}
/**
@@ -179,38 +179,38 @@ background-position: 0px -30px
width:10px;
padding-left: 0px;
padding-right: 9px;
-}
-
-.layout-oldstyle .menu {
- background:url(../images/blue_gradient.gif) #05549c;
- padding:1px;
- border-top:1px solid #033563;
-}
-
-.layout-oldstyle .menu a {
- color:#ced7dc;
- text-decoration:none;
-}
-
-.layout-oldstyle .menu a:hover {
- color:#f5f7f8;
- text-decoration:underline;
-}
+}
+
+.layout-oldstyle .menu {
+ background:url(../images/blue_gradient.gif) #05549c;
+ padding:1px;
+ border-top:1px solid #033563;
+}
+
+.layout-oldstyle .menu a {
+ color:#ced7dc;
+ text-decoration:none;
+}
+
+.layout-oldstyle .menu a:hover {
+ color:#f5f7f8;
+ text-decoration:underline;
+}
.layout-oldstyle .tabs {
- list-style-type:none;
- list-style-position:inside;
+ list-style-type:none;
+ list-style-position:inside;
display:table;
-}
-
-.layout-oldstyle .tabs li {
- float:left;
- display:inline;
- border-collapse:collapse;
- margin-right:10px;
- padding: 3px;
- color:#fff;
-}
+}
+
+.layout-oldstyle .tabs li {
+ float:left;
+ display:inline;
+ border-collapse:collapse;
+ margin-right:10px;
+ padding: 3px;
+ color:#fff;
+}
.layout-oldstyle #banner h1 {
font-size: 1.25em;
@@ -267,7 +267,7 @@ color: #012d46;
}
.layout-oldstyle #leftcol a:active, .layout-oldstyle #leftcol a:hover {
- color: #000000 !important;
+ color: #000000 !important;
text-decoration: underline;
}
@@ -389,26 +389,26 @@ color: #012d46;
{
font-family: Verdana,sans-serif;
font-size: 8pt;
-}
+}
.layout-oldstyle td{
font-size: 8pt;
font-family: Verdana,sans-serif;
vertical-align: top;
}
-
-.layout-oldstyle .header {
- width:100%;
- background:#fff;
- border-bottom:4px solid #eef0f0;
- margin:0px;
-}
+
+.layout-oldstyle .header {
+ width:100%;
+ background:#fff;
+ border-bottom:4px solid #eef0f0;
+ margin:0px;
+}
.layout-oldstyle .logo {
text-indent: -9999px;
-background: url("../images/Jetspeed_blue_med.png") no-repeat;
-background-position: 1px 1px;
-height:35px;
+background: url("../images/Jetspeed_blue_med.png") no-repeat;
+background-position: 1px 1px;
+height:35px;
padding:1px;
}
@@ -418,12 +418,12 @@ padding:1px;
position: absolute;
right: 5px; top: 5px;
z-index: 10;
-color: #000;
-padding:2px;
+color: #000;
+padding:2px;
text-decoration:none;
-}
+}
-.layout-oldstyle .layout-oldstyle-logout:hover{
+.layout-oldstyle .layout-oldstyle-logout:hover{
text-decoration: underline;
}
@@ -552,3 +552,31 @@ font-weight: bold;
clear: both;
}
+.layout-oldstyle .layout-statusarea {
+ position: absolute;
+ right: 2px; top: 10px;
+ color: #000;
+ padding:2px;
+ text-decoration:none;
+ font-size:8pt;
+}
+.layyout-oldstyle .layout-statusarea A:visited,
+.layout-oldstyle .layout-statusarea A {
+ color: #000;
+ font-size:8pt;
+}
+
+
+.layout-oldstyle .layout-oldstyle-logout:hover{
+ text-decoration: underline;
+}
+
+.layout-oldstyle .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #fff;
+ text-decoration:none;
+ font-size:8pt;
+}
+
+
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/oldstyle/header.vm Mon Dec 21 04:04:51 2015
@@ -62,7 +62,8 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/oldstyle/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
-<a class="layout-oldstyle-logout" href="#BaseHref()login/logout">Logout</a>
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
+<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#PageActionBar()
<!-- end of header -->
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/css/styles.css Mon Dec 21 04:04:51 2015
@@ -457,6 +457,15 @@ color: #fff;
font-size:8pt;
}
+
+.layout-purpleplanet .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #fff;
+ text-decoration:none;
+ font-size:8pt;
+}
+
.layout-purpleplanet .layout-purpleplanet-logout:hover{
text-decoration: underline;
}
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/purpleplanet/header.vm Mon Dec 21 04:04:51 2015
@@ -97,6 +97,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/css/styles.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/css/styles.css?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/css/styles.css (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/css/styles.css Mon Dec 21 04:04:51 2015
@@ -458,6 +458,14 @@ font-size:8pt;
}
+.layout-turbo .layout-searcharea {
+ position: absolute;
+ right: 210px; top: 10px;
+ color: #fff;
+ text-decoration:none;
+ font-size:8pt;
+}
+
.layout-turbo .layout-turbo-logout:hover{
text-decoration: underline;
}
Modified: portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/header.vm
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/header.vm?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/header.vm (original)
+++ portals/jetspeed-2/portal/trunk/applications/jetspeed/src/main/webapp/decorations/layout/turbo/header.vm Mon Dec 21 04:04:51 2015
@@ -97,6 +97,7 @@ else if (window.attachEvent) // Microsof
<!-- BEGIN: layout/html/jetspeed/decorator.vm -->
<!-- Page Action Bar -->
#if ($request.getUserPrincipal())
+<span class="layout-searcharea">$jetspeed.renderPortletWindow("sp-definition", "j2-admin::SearchPortlet")</span>
<span class="layout-statusarea"><b>$jetspeed.getUserAttribute("user.name.given","") $jetspeed.getUserAttribute("user.name.family", ${request.userPrincipal.name})</b> | <a href="#BaseHref()login/logout">Log out</a></span>
#end
#if (!$jetspeed.isAjaxCustomizationEnabled())
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentFragmentImpl.java Mon Dec 21 04:04:51 2015
@@ -1,4 +1,4 @@
-/*
+/*
* 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.
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/main/java/org/apache/jetspeed/om/page/impl/ContentPageImpl.java Mon Dec 21 04:04:51 2015
@@ -265,6 +265,20 @@ public class ContentPageImpl implements
return rootContentFragment;
}
+ public ContentFragment getRootFragmentUnlocked()
+ {
+ ContentFragment root = rootContentFragment;
+ if (root.isLocked()) {
+ for (ContentFragment f : root.getFragments()) {
+ if (!f.isTemplate() && !f.isLocked()) {
+ return f;
+ }
+ }
+ }
+ return root;
+
+ }
+
/* (non-Javadoc)
* @see org.apache.jetspeed.om.page.ContentPage#getShortTitle()
*/
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/velocity/JetspeedPowerToolImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/velocity/JetspeedPowerToolImpl.java?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/velocity/JetspeedPowerToolImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/velocity/JetspeedPowerToolImpl.java Mon Dec 21 04:04:51 2015
@@ -298,6 +298,20 @@ public class JetspeedPowerToolImpl imple
return (ContentFragment) renderRequest.getAttribute(PortalReservedParameters.FRAGMENT_ATTRIBUTE);
}
+ public ContentFragment getCurrentFragmentUnlocked()
+ {
+ checkState();
+ ContentFragment root = (ContentFragment)renderRequest.getAttribute(PortalReservedParameters.FRAGMENT_ATTRIBUTE);
+ if (root.isLocked()) {
+ for (ContentFragment f : root.getFragments()) {
+ if (!f.isTemplate() && !f.isLocked()) {
+ return f;
+ }
+ }
+ }
+ return root;
+ }
+
/**
*
* @param f
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/lucene/SearchEngineImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/lucene/SearchEngineImpl.java?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/lucene/SearchEngineImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/lucene/SearchEngineImpl.java Mon Dec 21 04:04:51 2015
@@ -16,17 +16,6 @@
*/
package org.apache.jetspeed.search.lucene;
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.map.MultiValueMap;
import org.apache.commons.lang.StringUtils;
@@ -57,99 +46,128 @@ import org.apache.lucene.util.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
/**
* @author <a href="mailto: jford@apache.org">Jeremy Ford</a>
* @version $Id$
*/
-public class SearchEngineImpl implements SearchEngine
-{
+public class SearchEngineImpl implements SearchEngine {
protected final static Logger log = LoggerFactory.getLogger(SearchEngineImpl.class);
private Directory directory;
private Analyzer analyzer;
private boolean optimizeAfterUpdate = true;
private HandlerFactory handlerFactory;
-
+
private static final int KEYWORD = 0;
private static final int TEXT = 1;
-
+
private int defaultTopHitsCount = 1000;
-
+ private Boolean documentsEnabled = false;
+ private String documentsLocation = null;
+
public SearchEngineImpl(Directory directory, Analyzer analyzer, boolean optimzeAfterUpdate, HandlerFactory handlerFactory)
- throws Exception
- {
+ throws Exception {
this(directory, analyzer, optimzeAfterUpdate, handlerFactory, 0);
}
-
+
public SearchEngineImpl(Directory directory, Analyzer analyzer, boolean optimzeAfterUpdate, HandlerFactory handlerFactory, int defaultTopHitsCount)
- throws Exception
- {
+ throws Exception {
this.directory = directory;
this.analyzer = analyzer;
this.optimizeAfterUpdate = optimzeAfterUpdate;
this.handlerFactory = handlerFactory;
-
- if (defaultTopHitsCount > 0)
- {
+
+ if (defaultTopHitsCount > 0) {
this.defaultTopHitsCount = defaultTopHitsCount;
}
-
+
validateIndexDirectory();
}
-
+
public SearchEngineImpl(String indexRoot, String analyzerClassName, boolean optimzeAfterUpdate, HandlerFactory handlerFactory)
- throws Exception
- {
+ throws Exception {
this(indexRoot, analyzerClassName, optimzeAfterUpdate, handlerFactory, 0);
}
-
+
public SearchEngineImpl(String indexRoot, String analyzerClassName, boolean optimzeAfterUpdate, HandlerFactory handlerFactory, int defaultTopHitsCount)
- throws Exception
- {
- if(analyzerClassName != null)
- {
+ throws Exception {
+ if (analyzerClassName != null) {
try {
Class analyzerClass = Class.forName(analyzerClassName);
analyzer = (Analyzer) analyzerClass.newInstance();
- } catch(InstantiationException ce) {
+ } catch (InstantiationException ce) {
//logger.error("InstantiationException", e);
- } catch(ClassNotFoundException ce) {
+ } catch (ClassNotFoundException ce) {
//logger.error("ClassNotFoundException", e);
- } catch(IllegalAccessException ce) {
+ } catch (IllegalAccessException ce) {
//logger.error("IllegalAccessException", e);
}
}
-
- if (analyzer == null)
- {
+
+ if (analyzer == null) {
analyzer = new StandardAnalyzer(Version.LUCENE_30);
}
-
+
this.optimizeAfterUpdate = optimzeAfterUpdate;
this.handlerFactory = handlerFactory;
-
- if (defaultTopHitsCount > 0)
- {
+
+ if (defaultTopHitsCount > 0) {
this.defaultTopHitsCount = defaultTopHitsCount;
}
-
+
//assume it's full path for now
File rootIndexDir = new File(indexRoot);
-
- if (!rootIndexDir.isDirectory())
- {
+
+ if (!rootIndexDir.isDirectory()) {
rootIndexDir.mkdirs();
}
-
+
directory = FSDirectory.open(rootIndexDir);
-
+
validateIndexDirectory();
}
-
+
+ public void start() throws IOException {
+ if (documentsEnabled) {
+ String query = ParsedObject.FIELDNAME_TYPE + ":\"" + ParsedObject.OBJECT_TYPE_URL + "\" ";
+ SearchResults searchResults = search(query);
+ if (searchResults.size() == 0) {
+ log.info("Adding Jetspeed documentation to search index ....");
+ indexDirectory(documentsLocation);
+ }
+ }
+ }
+
+ public Boolean getDocumentsEnabled() {
+ return documentsEnabled;
+ }
+
+ public void setDocumentsEnabled(Boolean documentsEnabled) {
+ this.documentsEnabled = documentsEnabled;
+ }
+
+ public String getDocumentsLocation() {
+ return documentsLocation;
+ }
+
+ public void setDocumentsLocation(String documentsLocation) {
+ this.documentsLocation = documentsLocation;
+ }
+
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#add(java.lang.Object)
*/
- public boolean add(Object o)
- {
+ public boolean add(Object o) {
Collection c = new ArrayList(1);
c.add(o);
@@ -159,16 +177,14 @@ public class SearchEngineImpl implements
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#add(java.util.Collection)
*/
- public boolean add(Collection objects)
- {
+ public boolean add(Collection objects) {
return removeIfExistsAndAdd(objects);
}
-
+
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#remove(java.lang.Object)
*/
- public boolean remove(Object o)
- {
+ public boolean remove(Object o) {
Collection c = new ArrayList(1);
c.add(o);
@@ -178,21 +194,17 @@ public class SearchEngineImpl implements
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#remove(java.util.Collection)
*/
- public synchronized boolean remove(Collection objects)
- {
+ public synchronized boolean remove(Collection objects) {
IndexReader indexReader = null;
int deleteCount = 0;
-
- try
- {
+
+ try {
Iterator it = objects.iterator();
- while (it.hasNext())
- {
- if (indexReader == null)
- {
+ while (it.hasNext()) {
+ if (indexReader == null) {
indexReader = IndexReader.open(directory, false);
}
-
+
Object o = it.next();
// Look up appropriate handler
ObjectHandler handler = handlerFactory.getHandler(o);
@@ -203,8 +215,7 @@ public class SearchEngineImpl implements
// Create term
Term term = null;
- if (parsedObject.getKey() != null)
- {
+ if (parsedObject.getKey() != null) {
term = new Term(ParsedObject.FIELDNAME_KEY, parsedObject.getKey());
// Remove the document from search index
deleteCount += indexReader.deleteDocuments(term);
@@ -212,32 +223,22 @@ public class SearchEngineImpl implements
//System.out.println("Attempted to delete '" + term.toString() + "' from index, documents deleted = " + rc);
}
}
-
- if (indexReader != null)
- {
+
+ if (indexReader != null) {
indexReader.close();
indexReader = null;
}
-
- if (deleteCount > 0 && optimizeAfterUpdate)
- {
+
+ if (deleteCount > 0 && optimizeAfterUpdate) {
optimizeIndex();
}
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
log.error("Exception during removing documents in the search index.", e);
- }
- finally
- {
- if (indexReader != null)
- {
- try
- {
+ } finally {
+ if (indexReader != null) {
+ try {
indexReader.close();
- }
- catch (IOException ce)
- {
+ } catch (IOException ce) {
}
}
}
@@ -248,242 +249,199 @@ public class SearchEngineImpl implements
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#update(java.lang.Object)
*/
- public boolean update(Object o)
- {
+ public boolean update(Object o) {
Collection c = new ArrayList(1);
c.add(o);
-
+
return update(c);
}
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#update(java.util.Collection)
*/
- public boolean update(Collection objects)
- {
+ public boolean update(Collection objects) {
return removeIfExistsAndAdd(objects);
}
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#optimize()
*/
- public synchronized boolean optimize()
- {
+ public synchronized boolean optimize() {
return optimizeIndex();
}
-
- private boolean optimizeIndex()
- {
+
+ private boolean optimizeIndex() {
boolean result = false;
- try
- {
+ try {
IndexWriter indexWriter = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.optimize();
indexWriter.close();
result = true;
- }
- catch (IOException e)
- {
- //logger.error("Error while trying to optimize index.");
+ } catch (IOException e) {
+ //logger.error("Error while trying to optimize index.");
}
return result;
}
-
+
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEngine#search(java.lang.String)
*/
- public SearchResults search(String queryString)
- {
+ public SearchResults search(String queryString) {
return search(queryString, ParsedObject.FIELDNAME_SYNTHETIC);
}
-
+
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEngine#search(java.lang.String, java.lang.String)
*/
- public SearchResults search(String queryString, String defaultFieldName)
- {
+ public SearchResults search(String queryString, String defaultFieldName) {
return search(queryString, defaultFieldName, defaultTopHitsCount);
}
-
+
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEngine#search(java.lang.String, java.lang.String, int)
*/
- public SearchResults search(String queryString, String defaultFieldName, int topHitsCount)
- {
+ public SearchResults search(String queryString, String defaultFieldName, int topHitsCount) {
SearchResults results = null;
-
+
IndexReader indexReader = null;
Searcher searcher = null;
-
- try
- {
+
+ try {
indexReader = IndexReader.open(directory);
searcher = new IndexSearcher(indexReader);
-
+
QueryParser queryParser = new QueryParser(Version.LUCENE_30, defaultFieldName, analyzer);
Query query = queryParser.parse(queryString);
TopDocs topDocs = searcher.search(query, topHitsCount);
-
+
int count = Math.min(topHitsCount, topDocs.totalHits);
List<ParsedObject> resultList = new ArrayList<ParsedObject>(count);
-
- for (int i = 0; i < count; i++)
- {
+
+ for (int i = 0; i < count; i++) {
ParsedObject result = new BaseParsedObject();
-
- Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
-
- addFieldsToParsedObject(doc, result);
-
- result.setScore(topDocs.scoreDocs[i].score);
- Field type = doc.getField(ParsedObject.FIELDNAME_TYPE);
- if(type != null)
- {
- result.setType(type.stringValue());
- }
-
- Field key = doc.getField(ParsedObject.FIELDNAME_KEY);
- if(key != null)
- {
- result.setKey(key.stringValue());
- }
-
- Field description = doc.getField(ParsedObject.FIELDNAME_DESCRIPTION);
- if(description != null)
- {
- result.setDescription(description.stringValue());
- }
-
- Field title = doc.getField(ParsedObject.FIELDNAME_TITLE);
- if(title != null)
- {
- result.setTitle(title.stringValue());
- }
-
- Field content = doc.getField(ParsedObject.FIELDNAME_CONTENT);
- if(content != null)
- {
- result.setContent(content.stringValue());
- }
-
- Field language = doc.getField(ParsedObject.FIELDNAME_LANGUAGE);
- if (language != null)
- {
- result.setLanguage(language.stringValue());
- }
-
- Field classname = doc.getField(ParsedObject.FIELDNAME_CLASSNAME);
- if (classname != null)
- {
- result.setClassName(classname.stringValue());
- }
-
- Field url = doc.getField(ParsedObject.FIELDNAME_URL);
- if (url != null)
- {
- result.setURL(new URL(url.stringValue()));
- }
-
- Field[] keywords = doc.getFields(ParsedObject.FIELDNAME_KEYWORDS);
- if(keywords != null)
- {
- String[] keywordArray = new String[keywords.length];
-
- for(int j=0; j<keywords.length; j++)
- {
- Field keyword = keywords[j];
- keywordArray[j] = keyword.stringValue();
- }
-
- result.setKeywords(keywordArray);
- }
-
- resultList.add(i, result);
+
+ Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
+
+ addFieldsToParsedObject(doc, result);
+
+ result.setScore(topDocs.scoreDocs[i].score);
+ Field type = doc.getField(ParsedObject.FIELDNAME_TYPE);
+ if (type != null) {
+ result.setType(type.stringValue());
+ }
+
+ Field key = doc.getField(ParsedObject.FIELDNAME_KEY);
+ if (key != null) {
+ result.setKey(key.stringValue());
+ }
+
+ Field description = doc.getField(ParsedObject.FIELDNAME_DESCRIPTION);
+ if (description != null) {
+ result.setDescription(description.stringValue());
+ }
+
+ Field title = doc.getField(ParsedObject.FIELDNAME_TITLE);
+ if (title != null) {
+ result.setTitle(title.stringValue());
+ }
+
+ Field content = doc.getField(ParsedObject.FIELDNAME_CONTENT);
+ if (content != null) {
+ result.setContent(content.stringValue());
+ }
+
+ Field language = doc.getField(ParsedObject.FIELDNAME_LANGUAGE);
+ if (language != null) {
+ result.setLanguage(language.stringValue());
+ }
+
+ Field classname = doc.getField(ParsedObject.FIELDNAME_CLASSNAME);
+ if (classname != null) {
+ result.setClassName(classname.stringValue());
+ }
+
+ Field url = doc.getField(ParsedObject.FIELDNAME_URL);
+ if (url != null) {
+ result.setURL(new URL(url.stringValue()));
+ }
+
+ Field[] keywords = doc.getFields(ParsedObject.FIELDNAME_KEYWORDS);
+ if (keywords != null) {
+ String[] keywordArray = new String[keywords.length];
+
+ for (int j = 0; j < keywords.length; j++) {
+ Field keyword = keywords[j];
+ keywordArray[j] = keyword.stringValue();
+ }
+
+ result.setKeywords(keywordArray);
+ }
+
+ resultList.add(i, result);
}
-
+
results = new SearchResultsImpl(resultList);
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
log.error("Failed to search. ", e);
- }
- finally
- {
- if (searcher != null)
- {
- try
- {
+ } finally {
+ if (searcher != null) {
+ try {
searcher.close();
- }
- catch (IOException ioe)
- {
+ } catch (IOException ioe) {
//logger.error("Closing Searcher", ioe);
}
}
-
- if (indexReader != null)
- {
- try
- {
+
+ if (indexReader != null) {
+ try {
indexReader.close();
- }
- catch (IOException ioe)
- {
+ } catch (IOException ioe) {
//logger.error("Closing Index Reader", ioe);
}
}
}
-
+
return (results != null ? results : new SearchResultsImpl(new ArrayList<ParsedObject>()));
}
-
- private synchronized boolean removeIfExistsAndAdd(Collection objects)
- {
+
+ private synchronized boolean removeIfExistsAndAdd(Collection objects) {
IndexWriter indexWriter = null;
IndexReader indexReader = null;
Searcher searcher = null;
-
- try
- {
+
+ try {
Iterator it = objects.iterator();
- while (it.hasNext())
- {
- if (indexWriter == null)
- {
+ while (it.hasNext()) {
+ if (indexWriter == null) {
indexWriter = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
indexReader = indexWriter.getReader();
searcher = new IndexSearcher(indexReader);
}
-
+
Object o = it.next();
// Look up appropriate handler
ObjectHandler handler = null;
- try
- {
+ try {
handler = handlerFactory.getHandler(o);
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
log.error("Failed to create hanlder for object " + o.getClass().getName());
continue;
}
-
+
// Parse the object
ParsedObject parsedObject = handler.parseObject(o);
-
+
String key = parsedObject.getKey();
// if there's an existing one with the same key, then remove it first.
- if (parsedObject.getKey() != null)
- {
+ if (parsedObject.getKey() != null) {
Term keyTerm = new Term(ParsedObject.FIELDNAME_KEY, key);
TopDocs topDocs = searcher.search(new TermQuery(keyTerm), 1);
- if (topDocs.totalHits > 0)
- {
+ if (topDocs.totalHits > 0) {
indexWriter.deleteDocuments(keyTerm);
}
}
-
+
String type = parsedObject.getType();
String title = parsedObject.getTitle();
String description = parsedObject.getDescription();
@@ -491,67 +449,55 @@ public class SearchEngineImpl implements
String language = parsedObject.getLanguage();
URL url = parsedObject.getURL();
String className = parsedObject.getClassName();
-
+
// Create document
Document doc = new Document();
-
+
// Populate document from the parsed object
- if (key != null)
- {
+ if (key != null) {
doc.add(new Field(ParsedObject.FIELDNAME_KEY, key, Field.Store.YES, Field.Index.NOT_ANALYZED));
}
- if (type != null)
- {
+ if (type != null) {
doc.add(new Field(ParsedObject.FIELDNAME_TYPE, type, Field.Store.YES, Field.Index.ANALYZED));
}
- if (title != null)
- {
+ if (title != null) {
doc.add(new Field(ParsedObject.FIELDNAME_TITLE, title, Field.Store.YES, Field.Index.ANALYZED));
}
- if (description != null)
- {
+ if (description != null) {
doc.add(new Field(ParsedObject.FIELDNAME_DESCRIPTION, description, Field.Store.YES, Field.Index.ANALYZED));
}
- if (content != null)
- {
+ if (content != null) {
doc.add(new Field(ParsedObject.FIELDNAME_CONTENT, content, Field.Store.NO, Field.Index.ANALYZED));
}
- if (language != null)
- {
+ if (language != null) {
doc.add(new Field(ParsedObject.FIELDNAME_LANGUAGE, language, Field.Store.YES, Field.Index.ANALYZED));
}
- if (url != null)
- {
+ if (url != null) {
String urlString = url.toString();
doc.add(new Field(ParsedObject.FIELDNAME_URL, urlString, Field.Store.YES, Field.Index.ANALYZED));
}
- if (className != null)
- {
+ if (className != null) {
doc.add(new Field(ParsedObject.FIELDNAME_CLASSNAME, className, Field.Store.YES, Field.Index.ANALYZED));
}
-
+
String[] keywordArray = parsedObject.getKeywords();
- if(keywordArray != null)
- {
- for(int i=0; i<keywordArray.length; ++i)
- {
+ if (keywordArray != null) {
+ for (int i = 0; i < keywordArray.length; ++i) {
String keyword = keywordArray[i];
doc.add(new Field(ParsedObject.FIELDNAME_KEYWORDS, keyword, Field.Store.YES, Field.Index.NOT_ANALYZED));
}
}
-
+
Map keywords = parsedObject.getKeywordsMap();
addFieldsToDocument(doc, keywords, KEYWORD);
-
+
Map fields = parsedObject.getFields();
addFieldsToDocument(doc, fields, TEXT);
-
+
List<String> syntheticField = new ArrayList<String>();
- for (Fieldable fieldable : doc.getFields())
- {
+ for (Fieldable fieldable : doc.getFields()) {
String value = fieldable.stringValue();
- if (value != null)
- {
+ if (value != null) {
syntheticField.add(value);
}
}
@@ -563,156 +509,110 @@ public class SearchEngineImpl implements
//logger.info("Added '" + parsedObject.getTitle() + "' to index");
}
- if (objects.size() > 0 && optimizeAfterUpdate && indexWriter != null)
- {
- try
- {
+ if (objects.size() > 0 && optimizeAfterUpdate && indexWriter != null) {
+ try {
indexWriter.optimize();
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
log.error("Error while trying to optimize index.", e);
}
}
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
log.error("Error while writing index.", e);
return false;
- }
- finally
- {
- if (searcher != null)
- {
- try
- {
+ } finally {
+ if (searcher != null) {
+ try {
searcher.close();
- }
- catch (IOException ce)
- {
+ } catch (IOException ce) {
}
}
- if (indexReader != null)
- {
- try
- {
+ if (indexReader != null) {
+ try {
indexReader.close();
- }
- catch (IOException ce)
- {
+ } catch (IOException ce) {
}
}
- if (indexWriter != null)
- {
- try
- {
+ if (indexWriter != null) {
+ try {
indexWriter.close();
- }
- catch (IOException ce)
- {
+ } catch (IOException ce) {
}
}
}
-
+
return true;
}
- private void addFieldsToDocument(Document doc, Map fields, int type)
- {
- if(fields != null)
- {
+ private void addFieldsToDocument(Document doc, Map fields, int type) {
+ if (fields != null) {
Iterator keyIter = fields.keySet().iterator();
- while(keyIter.hasNext())
- {
+ while (keyIter.hasNext()) {
Object key = keyIter.next();
- if(key != null)
- {
+ if (key != null) {
Object values = fields.get(key);
- if(values != null)
- {
- if(values instanceof Collection)
- {
- Iterator valueIter = ((Collection)values).iterator();
- while(valueIter.hasNext())
- {
+ if (values != null) {
+ if (values instanceof Collection) {
+ Iterator valueIter = ((Collection) values).iterator();
+ while (valueIter.hasNext()) {
Object value = valueIter.next();
- if(value != null)
- {
- if(type == TEXT)
- {
+ if (value != null) {
+ if (type == TEXT) {
doc.add(new Field(key.toString(), value.toString(), Field.Store.YES, Field.Index.ANALYZED));
- }
- else
- {
+ } else {
doc.add(new Field(key.toString(), value.toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
}
}
}
- }
- else
- {
- if(type == TEXT)
- {
+ } else {
+ if (type == TEXT) {
doc.add(new Field(key.toString(), values.toString(), Field.Store.YES, Field.Index.ANALYZED));
- }
- else
- {
+ } else {
doc.add(new Field(key.toString(), values.toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
}
}
}
}
- }
+ }
}
}
-
- private void addFieldsToParsedObject(Document doc, ParsedObject o)
- {
- try
- {
+
+ private void addFieldsToParsedObject(Document doc, ParsedObject o) {
+ try {
MultiMap multiKeywords = new MultiValueMap();
MultiMap multiFields = new MultiValueMap();
HashMap fieldMap = new HashMap();
-
+
Field classNameField = doc.getField(ParsedObject.FIELDNAME_CLASSNAME);
- if(classNameField != null)
- {
+ if (classNameField != null) {
String className = classNameField.stringValue();
o.setClassName(className);
ObjectHandler handler = handlerFactory.getHandler(className);
-
+
Set fields = handler.getFields();
addFieldsToMap(doc, fields, multiFields);
addFieldsToMap(doc, fields, fieldMap);
-
+
Set keywords = handler.getKeywords();
addFieldsToMap(doc, keywords, multiKeywords);
}
-
+
o.setKeywordsMap(multiKeywords);
o.setFields(multiFields);
o.setFields(fieldMap);
- }
- catch(Exception e)
- {
+ } catch (Exception e) {
//logger.error("Error trying to add fields to parsed object.", e);
}
}
-
- private void addFieldsToMap(Document doc, Set fieldNames, Map fields)
- {
+
+ private void addFieldsToMap(Document doc, Set fieldNames, Map fields) {
Iterator fieldIter = fieldNames.iterator();
- while(fieldIter.hasNext())
- {
- String fieldName = (String)fieldIter.next();
+ while (fieldIter.hasNext()) {
+ String fieldName = (String) fieldIter.next();
Field[] docFields = doc.getFields(fieldName);
- if(docFields != null)
- {
- for(int i=0; i<docFields.length; i++)
- {
+ if (docFields != null) {
+ for (int i = 0; i < docFields.length; i++) {
Field field = docFields[i];
- if(field != null)
- {
+ if (field != null) {
String value = field.stringValue();
fields.put(fieldName, value);
}
@@ -720,80 +620,80 @@ public class SearchEngineImpl implements
}
}
}
-
- private void validateIndexDirectory() throws Exception
- {
+
+ @Override
+ public void indexDirectory(String dir) throws IOException {
+ Collection<Object> docs = new ArrayList<>();
+ indexDocs(new File(dir), docs);
+ this.add(docs);
+ }
+
+ private void indexDocs(File file, Collection<Object> docs) throws IOException {
+ if (file.canRead()) {
+ if (file.isDirectory()) {
+ String[] files = file.list();
+ if (files != null) {
+ for (int i = 0; i < files.length; i++) {
+ indexDocs(new File(file, files[i]), docs);
+ }
+ }
+ } else {
+ docs.add(file.toURI().toURL());
+ }
+ }
+ }
+
+ private void validateIndexDirectory() throws Exception {
boolean recreateIndex = false;
-
+
IndexReader indexReader = null;
Searcher searcher = null;
-
- try
- {
+
+ try {
indexReader = IndexReader.open(directory);
searcher = new IndexSearcher(indexReader);
searcher.close();
searcher = null;
indexReader.close();
indexReader = null;
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
recreateIndex = true;
- }
- finally
- {
- if (searcher != null)
- {
- try
- {
+ } finally {
+ if (searcher != null) {
+ try {
searcher.close();
- }
- catch (Exception ce)
- {
+ } catch (Exception ce) {
}
}
- if (indexReader != null)
- {
- try
- {
+ if (indexReader != null) {
+ try {
indexReader.close();
- }
- catch (Exception ce)
- {
+ } catch (Exception ce) {
}
}
}
-
- if (recreateIndex)
- {
+
+ if (recreateIndex) {
IndexWriter indexWriter = null;
-
- try
- {
+
+ try {
indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.close();
indexWriter = null;
- }
- catch (Exception e1)
- {
- String message = "Cannot RECREATE Portlet Registry indexes in " + directory;
+ } catch (Exception e1) {
+ String message = "Cannot RECREATE Portlet Registry indexes in " + directory;
log.error(message, e1);
throw new Exception(message);
- }
- finally
- {
- if (indexWriter != null)
- {
- try
- {
+ } finally {
+ if (indexWriter != null) {
+ try {
indexWriter.close();
- }
- catch (Exception ce)
- {
+ } catch (Exception ce) {
}
}
}
}
+
+
}
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/solr/SolrSearchEngineImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/solr/SolrSearchEngineImpl.java?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/solr/SolrSearchEngineImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/main/java/org/apache/jetspeed/search/solr/SolrSearchEngineImpl.java Mon Dec 21 04:04:51 2015
@@ -16,18 +16,6 @@
*/
package org.apache.jetspeed.search.solr;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.commons.collections.MultiMap;
import org.apache.commons.collections.map.MultiValueMap;
import org.apache.commons.lang.StringUtils;
@@ -50,6 +38,19 @@ import org.apache.solr.common.SolrInputF
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
/**
* @version $Id: SolrSearchEngineImpl.java 1086464 2011-03-29 02:08:39Z woonsan $
*/
@@ -75,7 +76,10 @@ public class SolrSearchEngineImpl implem
"description",
"fieldname.description"
));
-
+
+ private Boolean documentsEnabled = false;
+ private String documentsLocation = null;
+
public SolrSearchEngineImpl(SolrServer server, boolean optimzeAfterUpdate, HandlerFactory handlerFactory)
{
this.server = server;
@@ -93,6 +97,22 @@ public class SolrSearchEngineImpl implem
this.searchableMetadataFieldNames = searchableMetadataFieldNames;
}
+ public Boolean getDocumentsEnabled() {
+ return documentsEnabled;
+ }
+
+ public void setDocumentsEnabled(Boolean documentsEnabled) {
+ this.documentsEnabled = documentsEnabled;
+ }
+
+ public String getDocumentsLocation() {
+ return documentsLocation;
+ }
+
+ public void setDocumentsLocation(String documentsLocation) {
+ this.documentsLocation = documentsLocation;
+ }
+
/* (non-Javadoc)
* @see org.apache.jetspeed.search.SearchEnging#add(java.lang.Object)
*/
@@ -215,10 +235,32 @@ public class SolrSearchEngineImpl implem
{
return search(queryString, defaultFieldName, 0);
}
-
+
+ @Override
+ public void indexDirectory(String dir) throws IOException {
+ Collection<Object> docs = new ArrayList<>();
+ indexDocs(new File(dir), docs);
+ this.add(docs);
+ }
+
+ private void indexDocs(File file, Collection<Object> docs) throws IOException {
+ if (file.canRead()) {
+ if (file.isDirectory()) {
+ String[] files = file.list();
+ if (files != null) {
+ for (int i = 0; i < files.length; i++) {
+ indexDocs(new File(file, files[i]), docs);
+ }
+ }
+ } else {
+ docs.add(file.toURI().toURL());
+ }
+ }
+ }
+
/* (non-Javadoc)
- * @see org.apache.jetspeed.search.SearchEngine#search(java.lang.String, java.lang.String, int)
- */
+ * @see org.apache.jetspeed.search.SearchEngine#search(java.lang.String, java.lang.String, int)
+ */
public SearchResults search(String queryString, String defaultFieldName, int topHitsCount)
{
SearchResults results = null;
@@ -574,5 +616,16 @@ public class SolrSearchEngineImpl implem
}
}
}
+
+ public void start() throws IOException {
+ if (documentsEnabled) {
+ String query = ParsedObject.FIELDNAME_TYPE + ":\"" + ParsedObject.OBJECT_TYPE_URL + "\" ";
+ SearchResults searchResults = search(query);
+ if (searchResults.size() == 0) {
+ log.info("Adding Jetspeed documentation to search index ....");
+ indexDirectory(documentsLocation);
+ }
+ }
+ }
}
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/java/org/apache/jetspeed/search/lucene/TestPortletRegistrySearch.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/java/org/apache/jetspeed/search/lucene/TestPortletRegistrySearch.java?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/java/org/apache/jetspeed/search/lucene/TestPortletRegistrySearch.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-search/src/test/java/org/apache/jetspeed/search/lucene/TestPortletRegistrySearch.java Mon Dec 21 04:04:51 2015
@@ -16,13 +16,8 @@
*/
package org.apache.jetspeed.search.lucene;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-
import junit.framework.Test;
import junit.framework.TestSuite;
-
import org.apache.commons.collections.MultiHashMap;
import org.apache.jetspeed.search.AbstractObjectHandler;
import org.apache.jetspeed.search.BaseParsedObject;
@@ -30,7 +25,7 @@ import org.apache.jetspeed.search.Parsed
import org.apache.jetspeed.search.SearchEngine;
import org.apache.jetspeed.search.SearchResults;
import org.apache.jetspeed.search.handlers.HandlerFactoryImpl;
-import org.apache.jetspeed.search.lucene.SearchEngineImpl;
+import org.apache.jetspeed.search.handlers.URLToDocHandler;
import org.apache.jetspeed.test.JetspeedTestCase;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -38,6 +33,11 @@ import org.apache.lucene.store.Directory
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* TestPortletRegistrySearch
* @version $Id$
@@ -81,9 +81,10 @@ public class TestPortletRegistrySearch e
super.setUp();
HashMap mapping = new HashMap();
mapping.put("java.util.HashMap", MapObjectHandler.class.getName());
+ mapping.put("java.net.URL", URLToDocHandler.class.getName());
HandlerFactoryImpl hfi = new HandlerFactoryImpl(mapping);
directory = new RAMDirectory();
- analyzer = new StandardAnalyzer(Version.LUCENE_29);
+ analyzer = new StandardAnalyzer(Version.LUCENE_30);
searchEngine = new SearchEngineImpl(directory, analyzer, true, hfi);
}
@@ -225,7 +226,36 @@ public class TestPortletRegistrySearch e
searchResults = searchEngine.search(query);
assertEquals(1, searchResults.size());
}
-
+
+ public void testIndexFileURL() throws Exception
+ {
+ searchEngine.add(new File(getBaseDir() + "src/test/testdocs/about.html").toURI().toURL());
+ searchEngine.add(new File(getBaseDir() + "src/test/testdocs/developers.html").toURI().toURL());
+ searchEngine.add(new File(getBaseDir() + "src/test/testdocs/welcome.html").toURI().toURL());
+
+ SearchResults searchResults = searchEngine.search("Captcha");
+ assertEquals(1, searchResults.size());
+
+ searchResults = searchEngine.search("Architecture");
+ assertEquals(2, searchResults.size());
+ }
+
+ public void testIndexDirectory() throws Exception
+ {
+ searchEngine.indexDirectory(getBaseDir() + "src/test/testdocs");
+
+ SearchResults searchResults = searchEngine.search("Captcha");
+ assertEquals(1, searchResults.size());
+
+ searchResults = searchEngine.search("Architecture");
+ assertEquals(2, searchResults.size());
+
+ String query = ParsedObject.FIELDNAME_TYPE + ":\"" + ParsedObject.OBJECT_TYPE_URL + "\" ";
+ searchResults = searchEngine.search(query);
+ assertEquals(3, searchResults.size());
+
+ }
+
public static class MapObjectHandler extends AbstractObjectHandler
{
private String keyPrefix;
Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/search/SearchEngine.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/search/SearchEngine.java?rev=1721081&r1=1721080&r2=1721081&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/search/SearchEngine.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/search/SearchEngine.java Mon Dec 21 04:04:51 2015
@@ -16,6 +16,7 @@
*/
package org.apache.jetspeed.search;
+import java.io.IOException;
import java.util.Collection;
/**
@@ -118,4 +119,12 @@ public interface SearchEngine
* @return
*/
SearchResults search(String query, String defaultFieldName, int topHitsCount);
+
+ /**
+ * Index a directory of files
+ *
+ * Recursively index contents of a directory
+ * @since 2.3.1
+ */
+ void indexDirectory(String directory) throws IOException;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org