org.dspace.app.cris.ws.WSServicesPublications.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.cris.ws.WSServicesPublications.java

Source

/**
 * 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.ws;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.dspace.app.cris.ws.discovery.CrisWebservicesExtraIndexPlugin;
import org.dspace.app.cris.ws.marshaller.bean.WSItem;
import org.dspace.app.cris.ws.marshaller.bean.WSMetadata;
import org.dspace.app.cris.ws.marshaller.bean.WSMetadataValue;
import org.dspace.core.Constants;

public class WSServicesPublications extends AWSServices<WSItem> {

    private static Logger log = Logger.getLogger(WSServicesPublications.class);

    @Override
    protected List<WSItem> getWSObject(QueryResponse response) {
        List<WSItem> results = new LinkedList<WSItem>();
        for (SolrDocument solrDocument : response.getResults()) {
            results.add(getItemFromSolrDoc(solrDocument));
        }
        return results;
    }

    public void internalBuildFieldList(SolrQuery solrQuery, String... projection) {

        solrQuery.addField("handle");
        solrQuery.addField("search.resourceid");

        for (String otherToIndex : CrisWebservicesExtraIndexPlugin.OTHERS_TO_INDEX) {
            solrQuery.addField(otherToIndex);
        }

        for (int j = 0; j < projection.length; j++) {
            solrQuery.addField(projection[j]);
        }

    }

    private WSItem getItemFromSolrDoc(SolrDocument sd) {
        WSItem item = new WSItem();
        item.setHandle((String) sd.getFieldValue("handle"));
        item.setItemID((Integer) sd.getFieldValue("search.resourceid"));

        item.setCollection((ArrayList) sd.getFieldValues(CrisWebservicesExtraIndexPlugin.FIELDNAME_COLLECTIONS));
        item.setCollectionName(
                (ArrayList) sd.getFieldValues(CrisWebservicesExtraIndexPlugin.FIELDNAME_COLLECTIONS_NAME));
        item.setCollectionHandle(
                (ArrayList) sd.getFieldValues(CrisWebservicesExtraIndexPlugin.FIELDNAME_COLLECTIONS_HANDLE));

        item.setCommunity((ArrayList) sd.getFieldValues(CrisWebservicesExtraIndexPlugin.FIELDNAME_COMMUNITIES));
        item.setCommunityName(
                (ArrayList) sd.getFieldValues(CrisWebservicesExtraIndexPlugin.FIELDNAME_COMMUNITIES_NAME));
        item.setCommunityHandle(
                (ArrayList) sd.getFieldValues(CrisWebservicesExtraIndexPlugin.FIELDNAME_COMMUNITIES_HANDLE));

        for (String m : sd.getFieldNames()) {
            if (!m.startsWith("dc.")) {
                continue;
            }
            WSMetadata metadata = new WSMetadata();
            metadata.setName(m);
            int place = 1;
            for (Object v : sd.getFieldValues(m)) {
                String value = (String) v;
                String[] mv = value.split("\\|\\|\\|");
                WSMetadataValue mvalue = new WSMetadataValue();
                mvalue.setValue(mv[0]);
                mvalue.setAuthority(mv.length > 1 ? mv[1] : null);
                mvalue.setShare(mv.length > 2 ? Integer.parseInt(mv[2]) : null);
                mvalue.setPlace(place);
                place++;
                metadata.getValues().add(mvalue);
            }
            item.getMetadata().add(metadata);
        }
        return item;
    }

    @Override
    protected int getSupportedType() {
        return Constants.ITEM;
    }
}