diff --git a/oaipmh-core/pom.xml b/oaipmh-core/pom.xml index dbdacba73f397173396d848f9bebbbed1fed3251..43fbd8609e40b9cea832e8d768fea531e58b8f75 100644 --- a/oaipmh-core/pom.xml +++ b/oaipmh-core/pom.xml @@ -91,6 +91,11 @@ <artifactId>package-info-maven-plugin</artifactId> <version>1.4.5</version> </dependency> +<dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <version>2.8.5</version> +</dependency> </dependencies> <build> <pluginManagement> diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java b/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java index 4589b4f74fed07df70979e8430f3ddbf55bbf7ef..c14a85c6b1f1f04967cca844a9f221ba954278a0 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java @@ -3,6 +3,8 @@ package info.textgrid.middleware; import java.text.ParseException; import java.util.ArrayList; import java.util.List; +import java.util.Map; + import javax.xml.datatype.DatatypeConfigurationException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,17 +56,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setContributor(GetResponse responseWorkValues, String[] fields) { - List<String> contributors = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - contributors.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return contributors; + return fillList(responseWorkValues, fields); } @@ -75,17 +67,9 @@ public class DublinCoreFieldLoader { */ public static List<String> setCreator(GetResponse responseWorkValues, String[] fields) { - List<String> creators = new ArrayList<String>(); + return fillList(responseWorkValues, fields); - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - creators.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - return creators; } /** @@ -113,18 +97,7 @@ public class DublinCoreFieldLoader { * @return all elements mapped from TetxGrid metadata scheme to Dublin Core */ public static List<String> setCoverage(GetResponse responseWorkValues, String[] fields) { - - List<String> coverages = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - coverages.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return coverages; + return fillList(responseWorkValues, fields); } /** @@ -152,35 +125,8 @@ public class DublinCoreFieldLoader { * @return all elements mapped from TetxGrid metadata scheme to Dublin Core */ public static List<String> setDate(GetResponse responseWorkValues, String[] fields) { - - List<String> dates = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - try { - // FIXME DO SET VALUES VIA CONFIG FILE! - if (responseWorkValues.getField(field) != null) { - dates.add(OAIPMHUtillities - .convertDateFormat(responseWorkValues.getField(field).getValue().toString()) - .toXMLFormat()); - } - } catch (ParseException e) { - // FIXME DO NOT USE INVALID DATE HERE! - dates.add(responseWorkValues.getField(field).getValue().toString()); - log.debug(e); - log.debug("Tried to parse date value: " - + responseWorkValues.getField(field).getValue().toString()); - } catch (DatatypeConfigurationException e) { - // FIXME DO NOT USE INVALID DATE HERE! - dates.add(responseWorkValues.getField(field).getValue().toString()); - log.debug("Tried to configure date value: " - + responseWorkValues.getField(field).getValue().toString()); - log.debug(e); - } - } - } - - return dates; + //TODO: transform to OAI-PMH certificated time stamp + return fillList(responseWorkValues, fields); } /** @@ -218,17 +164,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setDescription(GetResponse responseWorkValues, String[] fields) { - List<String> descriptions = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - descriptions.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return descriptions; + return fillList(responseWorkValues, fields); } /** @@ -276,17 +212,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setFormat(GetResponse responseWorkValues, String[] fields) { - List<String> formats = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - formats.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return formats; + return fillList(responseWorkValues, fields); } /** @@ -323,21 +249,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setIdentifier(GetResponse responseWorkValues, String[] fields) { - List<String> identifiers = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - - if (responseWorkValues.getField(field) != null) { - List<Object> entireIdentifier = responseWorkValues.getField(field).getValues(); - for (int i = 0; i < responseWorkValues.getField(field).getValues().size(); i++) { - identifiers.add(entireIdentifier.get(i).toString()); - } - } - } - } - - return identifiers; + return fillList(responseWorkValues, fields); } /** @@ -365,17 +277,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setLanguage(GetResponse responseWorkValues, String[] fields) { - List<String> languages = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - languages.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return languages; + return fillList(responseWorkValues, fields); } /** @@ -403,17 +305,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setPublisher(GetResponse responseWorkValues, String[] fields) { - List<String> publishers = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - publishers.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return publishers; + return fillList(responseWorkValues, fields); } /** @@ -443,17 +335,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setRelation(GetResponse responseWorkValues, String[] fields) { - List<String> relations = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - relations.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return relations; + return fillList(responseWorkValues, fields); } /** @@ -463,17 +345,11 @@ public class DublinCoreFieldLoader { */ public static List<String> setRelationForWork(GetResponse responseWorkValues, String[] fields) { - List<String> relations = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - relations.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return relations; + for(String field : fields) { + System.out.println(field); + } + + return fillList(responseWorkValues, fields); } /** @@ -501,17 +377,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setRights(GetResponse responseWorkValues, String[] fields) { - List<String> rights = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - rights.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return rights; + return fillList(responseWorkValues, fields); } /** @@ -539,17 +405,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setSources(GetResponse responseWorkValues, String[] fields) { - List<String> sources = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - sources.add(responseWorkValues.getField(field).getValue().toString()); - } - } - } - - return sources; + return fillList(responseWorkValues, fields); } /** @@ -559,15 +415,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setSubject(GetResponse responseWorkValues, String[] fields) { - List<String> subjects = new ArrayList<String>(); - - for (String field : fields) { - if (responseWorkValues.getField(field) != null) { - subjects.add(responseWorkValues.getField(field).getValue().toString()); - } - } - - return subjects; + return fillList(responseWorkValues, fields); } /** @@ -615,20 +463,7 @@ public class DublinCoreFieldLoader { */ public static List<String> setTitle(GetResponse responseWorkValues, String[] fields) { - List<String> titles = new ArrayList<String>(); - - if (responseWorkValues.isExists()) { - for (String field : fields) { - String entireTitles = responseWorkValues.getSourceAsMap().get(field).toString(); - if (responseWorkValues.getSourceAsMap().get(field) != null) { - //for (int i = 0; i < responseWorkValues.getField(field).getValues().size(); i++) { - titles.add(entireTitles); - //} - } - } - } - - return titles; + return fillList(responseWorkValues, fields); } /** @@ -638,25 +473,11 @@ public class DublinCoreFieldLoader { */ public static List<String> setType(GetResponse responseWorkValues, String[] fields) { - List<String> types = new ArrayList<String>(); - System.out.println(responseWorkValues.getSourceAsMap().get("work")); - if (responseWorkValues.isExists()) { + //List<String> types = new ArrayList<String>(); - if (fields != null) { + return fillList(responseWorkValues, fields); + } - for (String field : fields) { - System.out.println("types: "); - System.out.println(responseWorkValues.getSourceAsMap().get(field)); - if (responseWorkValues.getSourceAsMap().get(field) != null) { - - types.add(responseWorkValues.getSourceAsMap().get(field).toString()); - } - } - } - } - - return types; - } /** * @param hit contains results of the ElasticSearch request @@ -677,5 +498,41 @@ public class DublinCoreFieldLoader { return types; } + + public static List<String> fillList(GetResponse responseWorkValues, String[] fields){ + List<String> list = new ArrayList<String>(); + + if (responseWorkValues.isExists()) { + if (fields != null) { + for (String field : fields) { + if(responseWorkValues.getSourceAsMap().get(field)==null ) { + String[] requestedField = field.split("\\."); + Map<String, Object> nestedMap = responseWorkValues.getSourceAsMap(); + String valueOfRequestedField=null; + Map<String, Object> nestedMap2 = null; + for(int i=0; i<requestedField.length; i++) { + if(i<requestedField.length-1 && nestedMap!=null && nestedMap.get(requestedField[i])!=null) { + nestedMap2 = (Map<String, Object>)nestedMap.get(requestedField[i]); + } + if(i==requestedField.length-1 && + nestedMap2!=null && nestedMap2.get(requestedField[i])!=null ) { + valueOfRequestedField =nestedMap2.get(requestedField[i]).toString(); + if(valueOfRequestedField.length()>0) { + System.out.println("VALUE: " + valueOfRequestedField); + list.add(valueOfRequestedField); + } + } + nestedMap= nestedMap2; + } + }else { + list.add(responseWorkValues.getSourceAsMap().get(field).toString()); + } + } + } + } + + return list; + } + } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java index f3a47a6851af12a17e5cf566fd5c197aacffdb2d..d1c2ff0d73c1573872cede7d76967dcc1f205b8c 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java @@ -2,13 +2,11 @@ package info.textgrid.middleware; import java.io.IOException; import java.text.ParseException; -import java.util.HashMap; import java.util.Map; import javax.xml.datatype.DatatypeConfigurationException; import org.apache.commons.logging.LogFactory; import org.elasticsearch.action.get.GetRequest; -import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.common.Strings; @@ -18,6 +16,13 @@ import info.textgrid.middleware.oaipmh.GetRecordType; import info.textgrid.middleware.oaipmh.HeaderType; import info.textgrid.middleware.oaipmh.RecordType; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + + /** * FIXME * @@ -60,6 +65,8 @@ public class RecordDelivererDC extends RecordDelivererAbstract { private String[] titleList; private String[] typeList; + private String textGridObjectAsJSON; + private static org.apache.commons.logging.Log log = LogFactory.getLog(RecordDelivererDC.class); private OAI_ESClient oaiEsClient; @@ -100,6 +107,9 @@ public class RecordDelivererDC extends RecordDelivererAbstract { esResultObject = OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); + Gson gson = new GsonBuilder().create(); + textGridObjectAsJSON=esResultObject.getSourceAsString(); + } catch (IOException e1) { // TODO Auto-generated catch block @@ -136,15 +146,32 @@ public class RecordDelivererDC extends RecordDelivererAbstract { if (this.textgrid == true && esResultObject.getSourceAsMap().get(this.formatField).equals(this.formatToFilter)) { + String[] requestedField = relationToFurtherMetadataObject.split("\\."); + Map<String, Object> nestedMap = esResultObject.getSourceAsMap(); - Map<String, Object> nestedMap2 = (Map<String, Object>)nestedMap.get("edition"); - + String valueOfRequestedField=null; + Map<String, Object> nestedMap2 = null; + for(int i=0; i<requestedField.length; i++) { + + if(i<requestedField.length-1) { + nestedMap2 = (Map<String, Object>)nestedMap.get(requestedField[i]); + } + if(i==requestedField.length-1) { + valueOfRequestedField =nestedMap2.get(requestedField[i]).toString(); + } + + + } + + + + //Map<String, Object> nestedMap2 = (Map<String, Object>)nestedMap.get("edition"); String workUri = nestedMap2.get("isEditionOf").toString(); workUri = workUri.substring(this.repositoryObjectURIPrefix.length()); dublinCoreBuilder = putContentIntoDCFieldLists(esResultObject, furtherDCElements(workUri)); identifier = esResultObject.getSourceAsMap().get(this.identifierField).toString(); - String dateOfCreation = + String dateOfCreation = esResultObject.getSourceAsMap().get(this.dateOfObjectCreation).toString(); setRecordHeader(dateOfCreation, identifier, record, dublinCoreBuilder); record.setMetadata(dublinCoreBuilder.getDC()); @@ -188,7 +215,7 @@ public class RecordDelivererDC extends RecordDelivererAbstract { * @return */ private GetResponse furtherDCElements(String id) { - System.out.println("damdam"); + String[] includes = this.workFields; String[] excludes = Strings.EMPTY_ARRAY; FetchSourceContext fetchSourceContext = @@ -204,7 +231,7 @@ public class RecordDelivererDC extends RecordDelivererAbstract { try { responseWorkValues = OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); - System.out.println(responseWorkValues.getSourceAsString()); + } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java index eae734a85712f96fb117e4dde395fe867be336f8..e9946dd864bfe90096fd7ff0de55e434853badb9 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java @@ -192,8 +192,7 @@ public class OaiPmhTest { record.setFormatToFilter(TextGridMimetypes.EDITION); record.setDateOfObjectCreation(TGConstants.CREATED); record.setRelationToFurtherMetadataObject(TGConstants.EDITION_ISEDITIONOF); - record.setRepositoryObjectURIPrefix(TGConstants.ITEM_IDENTIFIER_PREFIX); - + record.setRepositoryObjectURIPrefix(TGConstants.ITEM_IDENTIFIER_PREFIX); record.setIdentifierField("textgridUri"); System.out.println("Test for the verb \"GetRecord\" with succesfull response");