Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

75011: Merged WAT2 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud)
      70370: Cleaned up the solr stats code, added security check and tenants


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@75339 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Will Abson
2014-07-01 15:00:02 +00:00
parent 4f4aefbe27
commit 4dff764c22
3 changed files with 98 additions and 25 deletions

View File

@@ -1,3 +1,21 @@
/*
* Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.web.scripts.solr; package org.alfresco.repo.web.scripts.solr;
import java.util.HashMap; import java.util.HashMap;
@@ -24,8 +42,6 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
* You can pass one of these facets in eg. facet=content.creator . The facet name can be used as a I18n resource bundle key, * You can pass one of these facets in eg. facet=content.creator . The facet name can be used as a I18n resource bundle key,
* it also has a predefined structure: group.property[.type] eg. content.created.datetime. The [.type] is optional, the default is String.</description> * it also has a predefined structure: group.property[.type] eg. content.created.datetime. The [.type] is optional, the default is String.</description>
* *
* The facets are configured using Spring config. For Dates it may be necessary to display a different value from the one you use to query,
* in this case add the value to the "displayedFacets" map.
* @author Gethin James * @author Gethin James
*/ */
public class StatsGet extends DeclarativeWebScript public class StatsGet extends DeclarativeWebScript
@@ -34,17 +50,11 @@ public class StatsGet extends DeclarativeWebScript
private StatsService stats; private StatsService stats;
private SiteService siteService; private SiteService siteService;
private Map<String,String> facets; private Map<String,String> facets;
// private Map<String,String> displayedFacets; //alternative facets to use for display
public void setFacets(Map<String, String> facets) public void setFacets(Map<String, String> facets)
{ {
this.facets = facets; this.facets = facets;
} }
//
// public void setDisplayedFacets(Map<String, String> displayedFacets)
// {
// this.displayedFacets = displayedFacets;
// }
public void setStats(StatsService stats) public void setStats(StatsService stats)
{ {
@@ -82,7 +92,6 @@ public class StatsGet extends DeclarativeWebScript
String facetKey = req.getParameter("facet"); String facetKey = req.getParameter("facet");
if (facetKey == null) facetKey = facets.entrySet().iterator().next().getKey(); //default if (facetKey == null) facetKey = facets.entrySet().iterator().next().getKey(); //default
//boolean usesDateTime = (facetKey != null && facetKey.endsWith(DATE_TIME_SUFFIX));
String query; String query;
QName propFacet = findFacet(facetKey); QName propFacet = findFacet(facetKey);
@@ -98,7 +107,6 @@ public class StatsGet extends DeclarativeWebScript
model.put("result", result); model.put("result", result);
model.put("resultSize", result.getStats().size()); model.put("resultSize", result.getStats().size());
//model.put("isDate", startAndEnd!=null);
return model; return model;
} }
@@ -113,18 +121,8 @@ public class StatsGet extends DeclarativeWebScript
{ {
throw new AccessDeniedException("Invalid facet key:"+facetKey); throw new AccessDeniedException("Invalid facet key:"+facetKey);
} }
//If there is an alternative facet to use for display then use it.
// if (displayedFacets.containsKey(facetKey))
// {
// QName propFacet = QName.createQName(displayedFacets.get(facetKey));
// return propFacet;
// }
// else
// {
QName propFacet = QName.createQName(facets.get(facetKey)); QName propFacet = QName.createQName(facets.get(facetKey));
return propFacet; return propFacet;
// }
} }
@@ -136,7 +134,7 @@ public class StatsGet extends DeclarativeWebScript
if (startEndDate != null) if (startEndDate != null)
{ {
//QName propFacet = QName.createQName(facets.get(facetKey)); //QName propFacet = QName.createQName(facets.get(facetKey));
String dateFacet = "{http://www.alfresco.org/model/content/1.0}created";//hard coded for now. String dateFacet = ContentModel.PROP_CREATED.toString();//hard coded for now.
luceneQuery.append(" AND "+dateFacet.toString()+":(\""+startEndDate.getFirst()+"\"..\""+startEndDate.getSecond()+"\")"); luceneQuery.append(" AND "+dateFacet.toString()+":(\""+startEndDate.getFirst()+"\"..\""+startEndDate.getSecond()+"\")");
} }
@@ -164,7 +162,7 @@ public class StatsGet extends DeclarativeWebScript
/** /**
* Allows you to add a facet to the list of available facets for Solr Statistics * Allows you to add a facet to the list of available facets for Solr Statistics
* @param facetKey e.g. content.mimetype * @param facetKey e.g. content.mimetype
* @param facetType e.g. @{http://www.alfresco.org/model/content/1.0}content.mimetype * @param facetType e.g. {http://www.alfresco.org/model/content/1.0}content.mimetype
*/ */
public void addFacet(String facetKey, String facetType) public void addFacet(String facetKey, String facetType)
{ {

View File

@@ -4,6 +4,7 @@ import junit.framework.JUnit4TestAdapter;
import junit.framework.Test; import junit.framework.Test;
import junit.framework.TestSuite; import junit.framework.TestSuite;
import org.alfresco.repo.web.scripts.solr.StatsGetTest;
import org.alfresco.repo.web.util.PagingCursorTest; import org.alfresco.repo.web.util.PagingCursorTest;
import org.alfresco.repo.web.util.paging.PagingTest; import org.alfresco.repo.web.util.paging.PagingTest;
import org.alfresco.repo.webdav.GetMethodTest; import org.alfresco.repo.webdav.GetMethodTest;
@@ -32,6 +33,7 @@ public class AllUnitTestsSuite extends TestSuite
webdavTests(suite); webdavTests(suite);
pagingTests(suite); pagingTests(suite);
suite.addTest(new JUnit4TestAdapter(StatsGetTest.class));
return suite; return suite;
} }

View File

@@ -0,0 +1,73 @@
/*
* Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.web.scripts.solr;
import static org.junit.Assert.*;
import org.alfresco.util.Pair;
import org.joda.time.LocalDate;
import org.junit.Test;
/**
* Tests StatsGet Webscript
*
* @author Gethin James
* @since 5.0
*/
public class StatsGetTest
{
@Test
public void testGetStartAndEndDates()
{
LocalDate currentDate = LocalDate.now();
Pair<LocalDate, LocalDate> dates = StatsGet.getStartAndEndDates(null, null);
assertNull(dates);
String test1 = "2014-05-01";
String test2 = "2015-06-30";
dates = StatsGet.getStartAndEndDates(test1, null);
assertNotNull(dates);
assertEquals(2014, dates.getFirst().getYear());
assertEquals(5, dates.getFirst().getMonthOfYear());
assertEquals(1, dates.getFirst().getDayOfMonth());
assertEquals(currentDate, dates.getSecond());
dates = StatsGet.getStartAndEndDates(null, test2);
assertNull(dates);
dates = StatsGet.getStartAndEndDates(test1, test2);
assertNotNull(dates);
assertEquals(2014, dates.getFirst().getYear());
assertEquals(5, dates.getFirst().getMonthOfYear());
assertEquals(1, dates.getFirst().getDayOfMonth());
assertNotNull(dates);
assertEquals(2015, dates.getSecond().getYear());
assertEquals(6, dates.getSecond().getMonthOfYear());
assertEquals(30, dates.getSecond().getDayOfMonth());
}
@Test(expected=IllegalArgumentException.class)
public void testGetStartAndEndDatesWithRubbish()
{
Pair<LocalDate, LocalDate> dates = StatsGet.getStartAndEndDates("rubbish", "more");
assertNotNull(dates);
}
}