/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.statistics.service;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Context;
import org.dspace.eperson.EPerson;
import org.dspace.statistics.ObjectCount;
import org.dspace.usage.UsageWorkflowEvent;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
* Static holder for a HttpSolrClient connection pool to issue
* usage logging events to Solr from DSpace libraries, and some static query
* composers.
*
* @author ben at atmire.com
* @author kevinvandevelde at atmire.com
* @author mdiggory at atmire.com
*/
public interface SolrLoggerService {
/**
* Old post method, use the new postview method instead !
*
* @deprecated
* @param dspaceObject the object used.
* @param request the current request context.
* @param currentUser the current session's user.
*/
public void post(DSpaceObject dspaceObject, HttpServletRequest request,
EPerson currentUser);
/**
* Store a usage event into Solr.
*
* @param dspaceObject the object used.
* @param request the current request context.
* @param currentUser the current session's user.
*/
public void postView(DSpaceObject dspaceObject, HttpServletRequest request,
EPerson currentUser);
public void postView(DSpaceObject dspaceObject,
String ip, String userAgent, String xforwardedfor, EPerson currentUser);
public void postSearch(DSpaceObject resultObject, HttpServletRequest request, EPerson currentUser,
List<String> queries, int rpp, String sortBy, String order, int page, DSpaceObject scope);
public void postWorkflow(UsageWorkflowEvent usageWorkflowEvent) throws SQLException;
/**
* Method just used to log the parents.
* <ul>
* <li>Community log: owning comms.</li>
* <li>Collection log: owning comms and their comms.</li>
* <li>Item log: owning colls/comms.</li>
* <li>Bitstream log: owning item/colls/comms.</li>
* </ul>
*
* @param doc1
* the current SolrInputDocument
* @param dso
* the current dspace object we want to log
* @throws SQLException if database error
* ignore it
*/
public void storeParents(SolrInputDocument doc1, DSpaceObject dso)
throws SQLException;
public boolean isUseProxies();
/**
* Delete data from the index, as described by a query.
*
* @param query description of the records to be deleted.
* @throws IOException
* A general class of exceptions produced by failed or interrupted I/O operations.
* @throws SolrServerException
* Exception from the Solr server to the solrj Java client.
*/
public void removeIndex(String query) throws IOException,
SolrServerException;
public Map<String, List<String>> queryField(String query,
List oldFieldVals, String field);
public void markRobotsByIP();
public void markRobotByUserAgent(String agent);
public void deleteRobotsByIsBotFlag();
public void deleteIP(String ip);
public void deleteRobotsByIP();
/*
* update(String query, boolean addField, String fieldName, Object
* fieldValue, Object oldFieldValue) throws SolrServerException, IOException
* { List<Object> vals = new ArrayList<Object>(); vals.add(fieldValue);
* List<Object> oldvals = new ArrayList<Object>(); oldvals.add(fieldValue);
* update(query, addField, fieldName, vals, oldvals); }
*/
public void update(String query, String action,
List<String> fieldNames, List<List<Object>> fieldValuesList)
throws SolrServerException, IOException;
public void query(String query, int max) throws SolrServerException;
/**
* Query used to get values grouped by the given facet field.
*
* @param query
* the query to be used
* @param filterQuery
* filter query
* @param facetField
* the facet field on which to group our values
* @param max
* the max number of values given back (in case of 10 the top 10
* will be given)
* @param showTotal
* a boolean determining whether the total amount should be given
* back as the last element of the array
* @param facetQueries
* list of facet queries
* @return an array containing our results
* @throws SolrServerException
* Exception from the Solr server to the solrj Java client.
*/
public ObjectCount[] queryFacetField(String query,
String filterQuery, String facetField, int max, boolean showTotal,
List<String> facetQueries) throws SolrServerException;
/**
* Query used to get values grouped by the date.
*
* @param query
* the query to be used
* @param filterQuery
* filter query
* @param max
* the max number of values given back (in case of 10 the top 10
* will be given)
* @param dateType
* the type to be used (example: DAY, MONTH, YEAR)
* @param dateStart
* the start date Format:(-3, -2, ..) the date is calculated
* relatively on today
* @param dateEnd
* the end date stop Format (-2, +1, ..) the date is calculated
* relatively on today
* @param showTotal
* a boolean determining whether the total amount should be given
* back as the last element of the array
* @param context
* The relevant DSpace Context.
* @return and array containing our results
* @throws SolrServerException
* Exception from the Solr server to the solrj Java client.
*/
public ObjectCount[] queryFacetDate(String query,
String filterQuery, int max, String dateType, String dateStart,
String dateEnd, boolean showTotal, Context context) throws SolrServerException;
public Map<String, Integer> queryFacetQuery(String query,
String filterQuery, List<String> facetQueries)
throws SolrServerException;
public ObjectCount queryTotal(String query, String filterQuery)
throws SolrServerException;
public QueryResponse query(String query, String filterQuery,
String facetField, int rows, int max, String dateType, String dateStart,
String dateEnd, List<String> facetQueries, String sort, boolean ascending)
throws SolrServerException;
/**
* Returns in a filterQuery string all the ip addresses that should be ignored
*
* @return a string query with ip addresses
*/
public String getIgnoreSpiderIPs();
/**
* Maintenance to keep a SOLR index efficient.
* Note: This might take a long time.
*/
public void optimizeSOLR();
public void shardSolrIndex() throws IOException, SolrServerException;
public void reindexBitstreamHits(boolean removeDeletedBitstreams) throws Exception;
/**
* Export all SOLR usage statistics for viewing/downloading content to a flat text file.
* The file goes to a series
*
* @throws Exception if error
*/
public void exportHits() throws Exception;
}