From e3ec1b60b287f45a23989ee37d85fd92f302a764 Mon Sep 17 00:00:00 2001 From: "Stefan E. Funk" <funk@sub.uni-goettingen.de> Date: Wed, 11 Mar 2015 18:18:03 +0100 Subject: [PATCH] mc --- .../info/textgrid/middleware/OAIPMHImpl.java | 5 - .../middleware/RecordListDeliverer.java | 287 +++++++++++++----- 2 files changed, 206 insertions(+), 86 deletions(-) diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java index 6fb22c0a..864df145 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java @@ -465,8 +465,6 @@ public class OAIPMHImpl implements OAIPMHProducer { // TGConstants.TGFields); JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai); - System.out.println("ARGL 1"); - if (recordList.requestChecker(request)) { if (!request.getMetadataPrefix().equals( @@ -480,9 +478,6 @@ public class OAIPMHImpl implements OAIPMHProducer { oai.getError().add( error.setError(TGConstants.OAI_METADATA_FORMAT_ERROR)); } else { - - System.out.println("ARGL 2"); - listRecords = recordList.getRecordsWithSet(request.getFrom(), request.getUntil(), request.getSet()); if (recordList.isFoundItems()) { diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java index 727d26ef..82f30311 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java @@ -2,11 +2,9 @@ package info.textgrid.middleware; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; -import java.net.URLEncoder; import java.text.ParseException; import java.util.ArrayList; import java.util.List; -import java.util.Map; import javax.xml.datatype.DatatypeConfigurationException; @@ -18,7 +16,6 @@ import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; -import org.elasticsearch.search.SearchHitField; import info.textgrid.middleware.oaipmh.HeaderType; import info.textgrid.middleware.oaipmh.ListRecordsType; @@ -32,6 +29,9 @@ import info.textgrid.middleware.oaipmh.RequestType; * TODO Make aggregator URL configurable! * * TODO Care about repeatable fields as done in TITLE! + * + * TODO Replace CregId with "dariah:collection:", use static final or even + * config file value! */ public class RecordListDeliverer { @@ -64,11 +64,11 @@ public class RecordListDeliverer { private String repositoryObjectURIPrefix; private String rangeField; private boolean foundItems; - private String collectionTitle; - /* - * DC-Field Lists - */ + + // ** + // DC-Field Lists + // ** private List<String> contributors = new ArrayList<String>(); private List<String> coverages = new ArrayList<String>(); @@ -127,11 +127,8 @@ public class RecordListDeliverer { * @param esClient * @throws UnsupportedEncodingException */ - public GetResponse furtherDCElements(String id, OAI_ESClient esClient) { - System.out.println("URGL START!"); - try { id = URLDecoder.decode(id, "UTF-8"); } catch (UnsupportedEncodingException e) { @@ -141,13 +138,14 @@ public class RecordListDeliverer { GetRequestBuilder getWorkValues = esClient.getOaiESClient() .prepareGet().setIndex(esClient.getEsIndex()) - .setType(esClient.getEsType()).setId(id).setFields(workFields); + .setType(esClient.getEsType()).setId(id) + .setFields(this.workFields); GetResponse responseWorkValues = getWorkValues.execute().actionGet(); - if (dariah == true) { - collectionTitle = responseWorkValues.getField("metadata.dc:title") - .getValue().toString(); + if (this.dariah == true) { + this.collectionTitle = responseWorkValues + .getField("metadata.dc:title").getValue().toString(); } return responseWorkValues; @@ -164,15 +162,17 @@ public class RecordListDeliverer { */ public void fetchFields(QueryBuilder query, ListRecordsType recordList) { - SearchRequestBuilder getRecordList = oaiEsClient.getOaiESClient() - .prepareSearch(oaiEsClient.getEsIndex()) - .setTypes(oaiEsClient.getEsType()).addFields(fields) + SearchRequestBuilder getRecordList = this.oaiEsClient.getOaiESClient() + .prepareSearch(this.oaiEsClient.getEsIndex()) + .setTypes(this.oaiEsClient.getEsType()).addFields(this.fields) .setQuery(query).setSize(1000); SearchResponse getRecordListItems = getRecordList.execute().actionGet(); + // TODO REMOVE DEBUG OUTPUT System.out.println("totalHits: " + getRecordListItems.getHits().totalHits()); + // TODO REMOVE DEBUG OUTPUT if (getRecordListItems != null && getRecordListItems.getHits().totalHits() > 0) { @@ -199,7 +199,7 @@ public class RecordListDeliverer { try { String datestamp = hit.getFields() - .get(dateOfObjectCreation).getValue() + .get(this.dateOfObjectCreation).getValue() .toString(); datestamp = OAIPMHUtillities.convertDateFormat( @@ -215,18 +215,22 @@ public class RecordListDeliverer { // is in an other object than just the edition // TextGrid search! - if (textgrid == true) { - String workUri = hit.getFields() - .get(relationToFurtherMetadataObject).values() - .get(0).toString() - .substring(repositoryObjectURIPrefix.length()); + if (this.textgrid == true) { + String workUri = hit + .getFields() + .get(this.relationToFurtherMetadataObject) + .values() + .get(0) + .toString() + .substring( + this.repositoryObjectURIPrefix.length()); if (!workUri.endsWith(".0")) { workUri = workUri.concat(".0"); } putContentIntoDCFieldLists(hit, - furtherDCElements(workUri, oaiEsClient)); + furtherDCElements(workUri, this.oaiEsClient)); buildRecord(recordList); listClearer(); } @@ -236,7 +240,7 @@ public class RecordListDeliverer { // relationToFurtherMetadataObject); // if (dariah == true && shf != null) { - if (dariah == true) { + if (this.dariah == true) { // String collectionUri = shf.values().toString(); // @@ -252,8 +256,9 @@ public class RecordListDeliverer { // e.printStackTrace(); // } - putContentIntoDCFieldLists2(hit, - furtherDCElements(hit.getId(), oaiEsClient)); + putContentIntoDCFieldLists2( + hit, + furtherDCElements(hit.getId(), this.oaiEsClient)); buildRecord(recordList); listClearer(); } @@ -266,59 +271,82 @@ public class RecordListDeliverer { } } + /** + * @param hit + * @param responseWorkValues + */ public void putContentIntoDCFieldLists(SearchHit hit, GetResponse responseWorkValues) { - contributors = DublinCoreFieldLoader.setContributor(hit, - contributorList); - coverages = DublinCoreFieldLoader.setCoverage(responseWorkValues, - coverageList); - creators = DublinCoreFieldLoader.setCreator(responseWorkValues, - creatorList); - dates = DublinCoreFieldLoader.setDate(responseWorkValues, dateList); - descriptions = DublinCoreFieldLoader.setDescription(responseWorkValues, - descriptionList); - formats = DublinCoreFieldLoader.setFormat(hit, formatList); - identifiers = DublinCoreFieldLoader.setIdentifier(hit, identifierList); - languages = DublinCoreFieldLoader.setLanguage(hit, languageList); - publishers = DublinCoreFieldLoader.setPublisher(hit, publisherList); - relations = DublinCoreFieldLoader.setRelation(hit, relationList); - relations = DublinCoreFieldLoader.setRelationForWork( - responseWorkValues, relationForWorkList); - rights = DublinCoreFieldLoader.setRights(hit, rightList); - sources = DublinCoreFieldLoader.setSources(hit, sourceList); - subjects = DublinCoreFieldLoader.setSubject(hit, subjectList); - titles = DublinCoreFieldLoader.setTitle(hit, titleList); - types = DublinCoreFieldLoader.setType(responseWorkValues, typeList); + this.contributors = DublinCoreFieldLoader.setContributor(hit, + this.contributorList); + this.coverages = DublinCoreFieldLoader.setCoverage(responseWorkValues, + this.coverageList); + this.creators = DublinCoreFieldLoader.setCreator(responseWorkValues, + this.creatorList); + this.dates = DublinCoreFieldLoader.setDate(responseWorkValues, + this.dateList); + this.descriptions = DublinCoreFieldLoader.setDescription( + responseWorkValues, this.descriptionList); + this.formats = DublinCoreFieldLoader.setFormat(hit, this.formatList); + this.identifiers = DublinCoreFieldLoader.setIdentifier(hit, + this.identifierList); + this.languages = DublinCoreFieldLoader.setLanguage(hit, + this.languageList); + this.publishers = DublinCoreFieldLoader.setPublisher(hit, + this.publisherList); + this.relations = DublinCoreFieldLoader.setRelation(hit, + this.relationList); + this.relations = DublinCoreFieldLoader.setRelationForWork( + responseWorkValues, this.relationForWorkList); + this.rights = DublinCoreFieldLoader.setRights(hit, this.rightList); + this.sources = DublinCoreFieldLoader.setSources(hit, this.sourceList); + this.subjects = DublinCoreFieldLoader.setSubject(hit, this.subjectList); + this.titles = DublinCoreFieldLoader.setTitle(hit, this.titleList); + this.types = DublinCoreFieldLoader.setType(responseWorkValues, + this.typeList); } + /** + * @param hit + * @param responseWorkValues + */ public void putContentIntoDCFieldLists2(SearchHit hit, GetResponse responseWorkValues) { - contributors = DublinCoreFieldLoader.setContributor(hit, - contributorList); - coverages = DublinCoreFieldLoader.setCoverage(hit, coverageList); - creators = DublinCoreFieldLoader.setCreator(hit, creatorList); - dates = DublinCoreFieldLoader.setDate(hit, dateList); - descriptions = DublinCoreFieldLoader.setDescription(hit, - descriptionList); - formats = DublinCoreFieldLoader.setFormat(hit, formatList); - identifiers = DublinCoreFieldLoader.setIdentifier(hit, identifierList); - languages = DublinCoreFieldLoader.setLanguage(hit, languageList); - publishers = DublinCoreFieldLoader.setPublisher(hit, publisherList); - relations = DublinCoreFieldLoader.setRelation(hit, relationList); + this.contributors = DublinCoreFieldLoader.setContributor(hit, + this.contributorList); + this.coverages = DublinCoreFieldLoader.setCoverage(hit, + this.coverageList); + this.creators = DublinCoreFieldLoader.setCreator(hit, this.creatorList); + this.dates = DublinCoreFieldLoader.setDate(hit, this.dateList); + this.descriptions = DublinCoreFieldLoader.setDescription(hit, + this.descriptionList); + this.formats = DublinCoreFieldLoader.setFormat(hit, this.formatList); + this.identifiers = DublinCoreFieldLoader.setIdentifier(hit, + this.identifierList); + this.languages = DublinCoreFieldLoader.setLanguage(hit, + this.languageList); + this.publishers = DublinCoreFieldLoader.setPublisher(hit, + this.publisherList); + this.relations = DublinCoreFieldLoader.setRelation(hit, + this.relationList); // relations = // DublinCoreFieldLoader.setRelationForWork(responseWorkValues, // relationForWorkList); - rights = DublinCoreFieldLoader.setRights(hit, rightList); - sources = DublinCoreFieldLoader.setSources(hit, sourceList); - subjects = DublinCoreFieldLoader.setSources(hit, subjectList); - titles = DublinCoreFieldLoader.setTitle(hit, titleList); - types = DublinCoreFieldLoader.setType(hit, typeList); + this.rights = DublinCoreFieldLoader.setRights(hit, this.rightList); + this.sources = DublinCoreFieldLoader.setSources(hit, this.sourceList); + this.subjects = DublinCoreFieldLoader.setSources(hit, this.subjectList); + this.titles = DublinCoreFieldLoader.setTitle(hit, this.titleList); + this.types = DublinCoreFieldLoader.setType(hit, this.typeList); } + /** + * @param recordList + * @return + */ public RecordType buildRecord(ListRecordsType recordList) { ObjectFactory of = new ObjectFactory(); @@ -331,34 +359,40 @@ public class RecordListDeliverer { setDCObject(odt, of); - if (!identifiers.isEmpty()) { - recordHeader.setIdentifier(identifiers.get(0)); + if (!this.identifiers.isEmpty()) { + recordHeader.setIdentifier(this.identifiers.get(0)); } // TODO Why take the 0th date here? - if (!dates.isEmpty()) { - recordHeader.setDatestamp(dates.get(0)); + if (!this.dates.isEmpty()) { + recordHeader.setDatestamp(this.dates.get(0)); } metadata = newDbc.getDC(); record.setMetadata(metadata); - record.setHeader(setHeader(set)); + record.setHeader(setHeader(this.set)); recordList.getRecord().add(record); return record; } + /** + * @param from + * @param to + * @param set + * @return + */ public ListRecordsType getRecordsWithSet(String from, String to, String set) { ListRecordsType recordList = new ListRecordsType(); QueryBuilder query; - QueryBuilder rangeQuery = QueryBuilders.rangeQuery(rangeField) + QueryBuilder rangeQuery = QueryBuilders.rangeQuery(this.rangeField) .from(from).to(to); if (set != null) { this.set = set; String[] setParts = set.split(":"); - if (dariah == true) { + if (this.dariah == true) { if (setParts[0].equals("cregId")) { /* * cregId is the name of the set Category but no field in @@ -372,7 +406,7 @@ public class RecordListDeliverer { } } - if (textgrid == true) { + if (this.textgrid == true) { if (setParts[0].equals("project")) { setParts[0] = setParts[0].concat(".value"); @@ -396,14 +430,18 @@ public class RecordListDeliverer { return recordList; } + /** + * @param set + * @return + */ public HeaderType setHeader(String set) { HeaderType header = new HeaderType(); - header.setDatestamp(dates.get(0)); - header.setIdentifier(identifiers.get(0)); + header.setDatestamp(this.dates.get(0)); + header.setIdentifier(this.identifiers.get(0)); if (set != null) { header.getSetSpec().add(set); - header.getSetSpec().add(collectionTitle); + header.getSetSpec().add(this.collectionTitle); } return header; } @@ -436,6 +474,9 @@ public class RecordListDeliverer { return dbc; } + /** + * + */ public void listClearer() { this.contributors.clear(); @@ -455,43 +496,73 @@ public class RecordListDeliverer { this.types.clear(); } + /** + * @param formatToFilter + */ public void setFormatToFilter(String formatToFilter) { this.formatToFilter = formatToFilter; } + /** + * @param formatField + */ public void setFormatField(String formatField) { this.formatField = formatField; } + /** + * @return + */ public String getDateOfObjectCreation() { - return dateOfObjectCreation; + return this.dateOfObjectCreation; } + /** + * @param dateOfObjectCreation + */ public void setDateOfObjectCreation(String dateOfObjectCreation) { this.dateOfObjectCreation = dateOfObjectCreation; } + /** + * @return + */ public String getRelationToFurtherMetadataObject() { - return relationToFurtherMetadataObject; + return this.relationToFurtherMetadataObject; } + /** + * @param relationToFurtherMetadataObject + */ public void setRelationToFurtherMetadataObject( String relationToFurtherMetadataObject) { this.relationToFurtherMetadataObject = relationToFurtherMetadataObject; } + /** + * @return + */ public String getRepositoryObjectURIPrefix() { - return repositoryObjectURIPrefix; + return this.repositoryObjectURIPrefix; } + /** + * @param repositoryObjectURIPrefix + */ public void setRepositoryObjectURIPrefix(String repositoryObjectURIPrefix) { this.repositoryObjectURIPrefix = repositoryObjectURIPrefix; } + /** + * @return + */ public String getFieldForRange() { - return rangeField; + return this.rangeField; } + /** + * @param fieldForRange + */ public void setFieldForRange(String fieldForRange) { this.rangeField = fieldForRange; } @@ -500,66 +571,114 @@ public class RecordListDeliverer { * Setter for DublinCore Lists */ + /** + * @param contributorList + */ public void setContributor(String[] contributorList) { this.contributorList = contributorList; } + /** + * @param coveragesList + */ public void setCoverage(String[] coveragesList) { this.coverageList = coveragesList; } + /** + * @param creatorsList + */ public void setCreators(String[] creatorsList) { this.creatorList = creatorsList; } + /** + * @param datesList + */ public void setDates(String[] datesList) { this.dateList = datesList; } + /** + * @param descriptionsList + */ public void setDescriptions(String[] descriptionsList) { this.descriptionList = descriptionsList; } + /** + * @param formatsList + */ public void setFormats(String[] formatsList) { this.formatList = formatsList; } + /** + * @param identifiersList + */ public void setIdentifiers(String[] identifiersList) { this.identifierList = identifiersList; } + /** + * @param languagesList + */ public void setLanguages(String[] languagesList) { this.languageList = languagesList; } + /** + * @param publishersList + */ public void setPublishers(String[] publishersList) { this.publisherList = publishersList; } + /** + * @param relationsList + */ public void setRelations(String[] relationsList) { this.relationList = relationsList; } + /** + * @param relationsList + */ public void setRelationsForWork(String[] relationsList) { this.relationForWorkList = relationsList; } + /** + * @param rightsList + */ public void setRights(String[] rightsList) { this.rightList = rightsList; } + /** + * @param sourcesList + */ public void setSources(String[] sourcesList) { this.sourceList = sourcesList; } + /** + * @param subjectsList + */ public void setSubjects(String[] subjectsList) { this.subjectList = subjectsList; } + /** + * @param titlesList + */ public void setTitles(String[] titlesList) { this.titleList = titlesList; } + /** + * @param typesList + */ public void setTypes(String[] typesList) { this.typeList = typesList; } @@ -583,10 +702,16 @@ public class RecordListDeliverer { return requestCheck; } + /** + * @return + */ public boolean isFoundItems() { - return foundItems; + return this.foundItems; } + /** + * @param foundItems + */ public void setFoundItems(boolean foundItems) { this.foundItems = foundItems; } -- GitLab