/** * 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.xoai.tests.helpers.stubs; import com.lyncode.xoai.builders.dataprovider.ElementBuilder; import com.lyncode.xoai.builders.dataprovider.MetadataBuilder; import com.lyncode.xoai.dataprovider.exceptions.MetadataBindException; import com.lyncode.xoai.dataprovider.exceptions.WritingXmlException; import com.lyncode.xoai.dataprovider.xml.XmlOutputContext; import com.lyncode.xoai.dataprovider.xml.xoai.Metadata; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.common.SolrInputDocument; import javax.xml.stream.XMLStreamException; import java.io.ByteArrayOutputStream; import java.sql.SQLException; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.List; import static com.lyncode.xoai.dataprovider.core.Granularity.Second; public class ItemRepositoryBuilder { private SolrServer solrServer; public ItemRepositoryBuilder(SolrServer solrServer) { this.solrServer = solrServer; } public ItemRepositoryBuilder withItem (DSpaceItemBuilder builder) { try { solrServer.add(index(builder)); solrServer.commit(); } catch (Exception e) { throw new RuntimeException(e); } return this; } private SolrInputDocument index(DSpaceItemBuilder item) throws SQLException, MetadataBindException, ParseException, XMLStreamException, WritingXmlException { SolrInputDocument doc = new SolrInputDocument(); doc.addField("item.id", item.getId()); doc.addField("item.public", item.isPublic()); doc.addField("item.lastmodified", item.getLastModifiedDate()); doc.addField("item.submitter", item.getSubmitter()); doc.addField("item.handle", item.getHandle()); doc.addField("item.deleted", item.isDeleted()); for (String col : item.getCollections()) doc.addField("item.collections", col); for (String col : item.getCommunities()) doc.addField("item.communities", col); ByteArrayOutputStream out = new ByteArrayOutputStream(); XmlOutputContext context = XmlOutputContext.emptyContext(out, Second); item.getMetadata().write(context); context.getWriter().flush(); context.getWriter().close(); doc.addField("item.compile", out.toString()); return doc; } public static class DSpaceItemBuilder { private List<String> collections = new ArrayList<String>(); private List<String> communities = new ArrayList<String>(); private MetadataBuilder metadataBuilder = new MetadataBuilder(); private String handle; private int id; private String submitter; private Date lastModifiedDate; private boolean deleted; private boolean aPublic = true; public DSpaceItemBuilder withLastModifiedDate (Date lastModifiedDate) { this.lastModifiedDate = lastModifiedDate; return this; } public DSpaceItemBuilder withCollection (String colName) { collections.add(colName); return this; } public DSpaceItemBuilder withCommunity (String comName) { communities.add(comName); return this; } public DSpaceItemBuilder whichSsPublic () { aPublic = true; return this; } public DSpaceItemBuilder whichSsPrivate () { aPublic = false; return this; } public DSpaceItemBuilder whichIsDeleted () { this.deleted = true; return this; } public DSpaceItemBuilder whichIsNotDeleted () { this.deleted = false; return this; } public DSpaceItemBuilder withMetadata (String schema, String element, String value) { metadataBuilder.withElement(new ElementBuilder().withName(schema).withField(element, value).build()); return this; } public String getHandle() { return handle; } public DSpaceItemBuilder withHandle (String handle) { this.handle = handle; return this; } public DSpaceItemBuilder withSubmitter (String submitter) { this.submitter = submitter; return this; } public DSpaceItemBuilder withId (int id) { this.id = id; return this; } public int getId() { return id; } public String getSubmitter() { return submitter; } public Date getLastModifiedDate() { return lastModifiedDate; } public List<String> getCollections() { return collections; } public List<String> getCommunities() { return communities; } public Metadata getMetadata() { return metadataBuilder.build(); } public boolean isDeleted() { return deleted; } public boolean isPublic() { return aPublic; } } }