Java tutorial
/** * 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 * * https://github.com/CILEA/dspace-cris/wiki/License */ package org.dspace.app.cris.statistics.batch; import java.io.IOException; import java.sql.SQLException; import java.util.List; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.util.ClientUtils; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.dspace.app.cris.model.CrisConstants; import org.dspace.app.cris.model.ResearcherPage; import org.dspace.app.cris.service.ApplicationService; import org.dspace.content.DSpaceObject; import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.statistics.SolrLogger; import org.dspace.statistics.SolrStatsIndexPlugin; import org.dspace.utils.DSpace; public class RebuildDerivateStatisticsMetadata { /** * @param args * @throws SolrServerException * @throws IOException * @throws SQLException */ public static void main(String[] args) throws SolrServerException, IOException, SQLException { DSpace dspace = new DSpace(); SolrLogger indexer = dspace.getServiceManager().getServiceByName(SolrLogger.class.getName(), SolrLogger.class); SolrDocumentList sdl = indexer.getRawData(Constants.ITEM); System.out.println("Found " + sdl.getNumFound() + " access in the statistics core"); HttpSolrServer solr = indexer.getSolr(); indexer.deleteByType(Constants.ITEM); solr.commit(); System.out.println("Remove old data"); Context context = new Context(); context.turnOffAuthorisationSystem(); int i = 0; for (SolrDocument sd : sdl) { i++; System.out.println("Processed access #" + i + " of " + sdl.getNumFound()); SolrInputDocument sdi = ClientUtils.toSolrInputDocument(sd); Integer id = (Integer) sd.getFieldValue("id"); Integer type = (Integer) sd.getFieldValue("type"); DSpaceObject dso = DSpaceObject.find(context, type, id); // Do any additional indexing, depends on the plugins List<SolrStatsIndexPlugin> solrServiceIndexPlugins = new DSpace().getServiceManager() .getServicesByType(SolrStatsIndexPlugin.class); for (SolrStatsIndexPlugin solrServiceIndexPlugin : solrServiceIndexPlugins) { solrServiceIndexPlugin.additionalIndex(null, dso, sdi); } context.removeCached(dso, id); solr.add(sdi); } solr.commit(); solr.optimize(); sdl = indexer.getRawData(CrisConstants.RP_TYPE_ID); System.out.println("Found " + sdl.getNumFound() + " access in the RP statistics core"); HttpSolrServer rpsolr = indexer.getSolr(); indexer.deleteByType(CrisConstants.RP_TYPE_ID); rpsolr.commit(); System.out.println("Remove old data"); ApplicationService as = dspace.getServiceManager().getServiceByName("applicationService", ApplicationService.class); i = 0; for (SolrDocument sd : sdl) { i++; System.out.println("Processed RP access #" + i + " of " + sdl.getNumFound()); SolrInputDocument sdi = ClientUtils.toSolrInputDocument(sd); Integer id = (Integer) sd.getFieldValue("id"); ResearcherPage rp = as.get(ResearcherPage.class, id); if (rp == null) continue; // Do any additional indexing, depends on the plugins List<SolrStatsIndexPlugin> solrServiceIndexPlugins = new DSpace().getServiceManager() .getServicesByType(SolrStatsIndexPlugin.class); for (SolrStatsIndexPlugin solrServiceIndexPlugin : solrServiceIndexPlugins) { solrServiceIndexPlugin.additionalIndex(null, rp, sdi); } rpsolr.add(sdi); } rpsolr.commit(); rpsolr.optimize(); } }