diff --git a/Jenkinsfile b/Jenkinsfile index dbd16f8407ec34e1e8136bf846db2e916db8e4cf..b91728340bd910d30cfb4f87a30486b8dc1850bb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,11 +16,11 @@ node { def pVersion = pom.parent.version def snapshot = pVersion.contains("SNAPSHOT") - if (snapshot) { - doDebSnapshot(pName, 'oaipmh-webapp/target', pVersion) - } - else { - doDebRelease(pName, 'oaipmh-webapp/target', pVersion) - } + #if (snapshot) { + # doDebSnapshot(pName, 'oaipmh-webapp/target', pVersion) + # } + #else { + # doDebRelease(pName, 'oaipmh-webapp/target', pVersion) + #} } } diff --git a/oaipmh-core/pom.xml b/oaipmh-core/pom.xml index 600bd2c00d9c56f94b499f8c74a508677e708fd5..dbdacba73f397173396d848f9bebbbed1fed3251 100644 --- a/oaipmh-core/pom.xml +++ b/oaipmh-core/pom.xml @@ -50,10 +50,10 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.elasticsearch</groupId> - <artifactId>elasticsearch</artifactId> - <version>${elasticsearch.version}</version> - </dependency> + <groupId>org.elasticsearch.client</groupId> + <artifactId>elasticsearch-rest-high-level-client</artifactId> + <version>${elasticsearch.version}</version> + </dependency> <dependency> <groupId>info.textgrid.utils</groupId> <artifactId>httpclients</artifactId> 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 90cda9e10aff7e5951d5b99aabaa658d9dc8c818..9a2a36f53c440d38dcaf3e32d69b68cf235acf88 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java @@ -39,7 +39,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - contributors.add(hit.getFields().get(field).values().get(0) + contributors.add(hit.getFields().get(field).getValues().get(0) .toString()); } } @@ -99,7 +99,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - creators.add(hit.getFields().get(field).values().get(0) + creators.add(hit.getFields().get(field).getValues().get(0) .toString()); } } @@ -138,7 +138,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - coverages.add(hit.getFields().get(field).values().get(0) + coverages.add(hit.getFields().get(field).getValues().get(0) .toString()); } } @@ -197,7 +197,7 @@ public class DublinCoreFieldLoader { try { dates.add(OAIPMHUtillities.convertDateFormat( - hit.getFields().get(field).values().get(0).toString()).toXMLFormat()); + hit.getFields().get(field).getValues().get(0).toString()).toXMLFormat()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -242,7 +242,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - descriptions.add(hit.getFields().get(field).values().get(0) + descriptions.add(hit.getFields().get(field).getValues().get(0) .toString()); } } @@ -261,7 +261,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - formats.add(hit.getFields().get(field).values().get(0) + formats.add(hit.getFields().get(field).getValues().get(0) .toString()); } } @@ -302,12 +302,12 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { for (int i = 0; i < hit.getFields().get(field).getValues().size(); i++) { - if (hit.getFields().get(field).values().get(i).toString().startsWith("textgrid")) { - identifier = hit.getFields().get(field).values().get(i).toString(); + if (hit.getFields().get(field).getValues().get(i).toString().startsWith("textgrid")) { + identifier = hit.getFields().get(field).getValues().get(i).toString(); identifier = identifier.replace(identifier, "https://textgridrep.org/" + identifier); identifiers.add(identifier); } else { - identifiers.add(hit.getFields().get(field).values().get(i).toString()); + identifiers.add(hit.getFields().get(field).getValues().get(i).toString()); } } } @@ -351,7 +351,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - languages.add(hit.getFields().get(field).values().get(0).toString()); + languages.add(hit.getFields().get(field).getValues().get(0).toString()); } } @@ -389,7 +389,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - publishers.add(hit.getFields().get(field).values().get(0).toString()); + publishers.add(hit.getFields().get(field).getValues().get(0).toString()); } } @@ -428,7 +428,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { for (int i = 0; i < hit.getFields().get(field).getValues().size(); i++) { - relations.add(hit.getFields().get(field).values().get(i).toString()); + relations.add(hit.getFields().get(field).getValues().get(i).toString()); } } } @@ -487,7 +487,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - rights.add(hit.getFields().get(field).values().get(0).toString()); + rights.add(hit.getFields().get(field).getValues().get(0).toString()); } } @@ -525,7 +525,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - sources.add(hit.getFields().get(field).values().get(0).toString()); + sources.add(hit.getFields().get(field).getValues().get(0).toString()); } } @@ -581,7 +581,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { - subjects.add(hit.getFields().get(field).values().get(0).toString()); + subjects.add(hit.getFields().get(field).getValues().get(0).toString()); } } @@ -600,7 +600,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { for (int i = 0; i < hit.getFields().get(field).getValues().size(); i++) { - titles.add(hit.getFields().get(field).values().get(i).toString()); + titles.add(hit.getFields().get(field).getValues().get(i).toString()); } } } @@ -619,11 +619,13 @@ public class DublinCoreFieldLoader { if (responseWorkValues.isExists()) { for (String field : fields) { - List<Object> entireTitles = responseWorkValues.getField(field).getValues(); - if (responseWorkValues.getField(field) != null) { - for (int i = 0; i < responseWorkValues.getField(field).getValues().size(); i++) { - titles.add(entireTitles.get(i).toString()); - } + String entireTitles = responseWorkValues.getSourceAsMap().get(field).toString(); + System.out.println(entireTitles); + if (responseWorkValues.getSourceAsMap().get(field) != null) { + System.out.println("hallo"); + //for (int i = 0; i < responseWorkValues.getField(field).getValues().size(); i++) { + titles.add(entireTitles); + //} } } } @@ -665,7 +667,7 @@ public class DublinCoreFieldLoader { for (String field : fields) { if (hit.getFields().get(field) != null) { for (int i = 0; i < hit.getFields().get(field).getValues().size(); i++) { - types.add(hit.getFields().get(field).values().get(i).toString()); + types.add(hit.getFields().get(field).getValues().get(i).toString()); } } } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java index b94d7206b13f27d818585ef1abd7b61ebecca228..92a2db90f0af51de3ac2ee799d228e4501fc3ce2 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java @@ -1,5 +1,6 @@ package info.textgrid.middleware; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import info.textgrid.middleware.oaipmh.ListIdentifiersType; @@ -30,7 +31,7 @@ public abstract class IdentifierListDelivererAbstract implements IdentifierListD */ @Override public ListIdentifiersType processIdentifierList(String from, String to, String set, - String resumptionToken) { + String resumptionToken) throws IOException { return null; } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java index 86523c2c6b3c579e529c65a22906ac99545a0bb3..146f56d2fdf4a74b622a203572da66e691840dbd 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java @@ -4,16 +4,22 @@ import info.textgrid.middleware.oaipmh.HeaderType; import info.textgrid.middleware.oaipmh.ListIdentifiersType; import info.textgrid.middleware.oaipmh.ResumptionTokenType; import info.textgrid.namespaces.middleware.tgcrud.common.TextGridMimetypes; + +import java.io.IOException; import java.text.ParseException; import java.util.Hashtable; import java.util.Map; import javax.xml.datatype.DatatypeConfigurationException; import org.apache.commons.logging.LogFactory; +import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchScrollRequest; +import org.elasticsearch.client.RequestOptions; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.builder.SearchSourceBuilder; @@ -94,29 +100,35 @@ public class IdentifierListDelivererDC extends IdentifierListDelivererAbstract { * @param to : end value to the range query * @return after calling the function "setListIdentifierHeader" the return value is the whole * ListIdentifiers element + * @throws IOException */ public ListIdentifiersType processIdentifierList(String from, String to, String set, - String resumptionToken) { + String resumptionToken) throws IOException { // FIXME combine it with with getIdentifierListWithSet and check for empty set ListIdentifiersType lit = new ListIdentifiersType(); QueryBuilder query = setOrNot(set, from, to); SearchResponse listListIdentiferValues; - + + + SearchRequest searchRequest = new SearchRequest(OAI_ESClient.getEsIndex()); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(query); + searchSourceBuilder.size(this.searchResponseSize); + + + if (resumptionToken != null) { - listListIdentiferValues = OAI_ESClient.getOaiESClient().prepareSearchScroll(resumptionToken) - .setScroll(new TimeValue(lifeTimeResToken)).execute().actionGet(); + + SearchScrollRequest scrollRequest = new SearchScrollRequest(resumptionToken); + scrollRequest.scroll(TimeValue.timeValueSeconds(lifeTimeResToken)); + listListIdentiferValues = OAI_ESClient.getEsClient().scroll(scrollRequest, RequestOptions.DEFAULT); + } else { - listListIdentiferValues = OAI_ESClient - .getOaiESClient().prepareSearch(OAI_ESClient.getEsIndex()) - .setTypes(OAI_ESClient.getEsType()) - .setScroll(new TimeValue(lifeTimeResToken)) - .addFields(this.identifierListFields) - .setQuery(query) - .setSize(this.searchResponseSize) - .execute() - .actionGet(); + searchRequest.source(searchSourceBuilder); + searchRequest.scroll(TimeValue.timeValueMinutes(lifeTimeResToken)); + listListIdentiferValues = OAI_ESClient.getEsClient().search(searchRequest, RequestOptions.DEFAULT); } listListIdentiferValues = hitHandling(listListIdentiferValues, lit, set, listListIdentiferValues.getScrollId()); diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java index 2e9b56f3cc793b0b6c6b322c1bff0733c0fe8fd3..81068740ca4c4907c06a0b004875b47ab0715fe3 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java @@ -1,5 +1,6 @@ package info.textgrid.middleware; +import java.io.IOException; import java.text.ParseException; import info.textgrid.middleware.oaipmh.ListIdentifiersType; @@ -15,8 +16,9 @@ public interface IdentifierListDelivererInterface { * @param resumptionToken * @return * @throws ParseException + * @throws IOException */ public ListIdentifiersType processIdentifierList(String from, String to, String set, - String resumptionToken) throws ParseException; + String resumptionToken) throws ParseException, IOException; } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDeliverer.java index 1b3e71afaff6543e612df80b02413d7b62e08b89..66d92ec3abc373bbf9f037142c07d0ad295030c1 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDeliverer.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDeliverer.java @@ -1,7 +1,14 @@ package info.textgrid.middleware; +import java.io.IOException; + +import org.elasticsearch.action.get.GetAction; +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; +import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import info.textgrid.middleware.oaipmh.ListMetadataFormatsType; import info.textgrid.middleware.oaipmh.MetadataFormatType; @@ -16,17 +23,32 @@ public class MetadataFormatListDeliverer { } public ListMetadataFormatsType setMetadataFormatList(String id){ - + + String[] includes = new String[]{TGConstants.URI}; + String[] excludes = Strings.EMPTY_ARRAY; + FetchSourceContext fetchSourceContext = + new FetchSourceContext(true, includes, excludes); + ListMetadataFormatsType lmft = new ListMetadataFormatsType(); MetadataFormatType mft = new MetadataFormatType(); + GetRequest getRequest = new GetRequest(OAI_ESClient.getEsIndex(), OAI_ESClient.getEsType(), id).fetchSourceContext(fetchSourceContext); - GetRequestBuilder recordById = OAI_ESClient.getOaiESClient().prepareGet() + + /* + GetRequestBuilder recordById = OAI_ESClient.getEsClient().get(getRequest, GetAction.INSTANCE) .setIndex(OAI_ESClient.getEsIndex()) .setType(OAI_ESClient.getEsType()) .setFields(TGConstants.URI) - .setId(id); + .setId(id); */ + + GetResponse tgObject = null; - GetResponse tgObject = recordById.execute().actionGet(); + try { + tgObject=OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } if(tgObject.isExists()){ setIdExist(true); 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 e635753b2c41b3164a0497a6970d307b3776d9af..034ae4684f035f90bac56f6a09b178715bb1252d 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java @@ -1,5 +1,6 @@ package info.textgrid.middleware; +import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.List; @@ -278,8 +279,14 @@ public class OAIPMHImpl implements OAIPMHProducer { // listDeliv = this.identifierListDC; // } - ListIdentifiersType listIdentifiers = idListDeliv.processIdentifierList(request.getFrom(), - request.getUntil(), request.getSet(), request.getResumptionToken()); + ListIdentifiersType listIdentifiers=null; + try { + listIdentifiers = idListDeliv.processIdentifierList(request.getFrom(), + request.getUntil(), request.getSet(), request.getResumptionToken()); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } if (listIdentifiers != null) { oai.setListIdentifiers(listIdentifiers); diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAI_ESClient.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAI_ESClient.java index a9b902f0cad7337f4518a21b5d39b169c610109a..b6d68b2686f0fed709817210b329899cfc8e297f 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAI_ESClient.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAI_ESClient.java @@ -1,12 +1,18 @@ package info.textgrid.middleware; +import java.util.ArrayList; +import java.util.List; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpHost; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; -import org.elasticsearch.common.settings.ImmutableSettings; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestHighLevelClient; + import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.transport.InetSocketTransportAddress; + /** * Establishing to connection to an ElasticSearch client @@ -20,11 +26,13 @@ public class OAI_ESClient { private Log log = LogFactory.getLog(OAI_ESClient.class); private static String url; - private static int port; + //private static int port; + private static int[] ports; private static String esCluster; private static String esIndex; private static String esType; - public static Client oaiESClient; + //public static Client oaiESClient; + private static RestHighLevelClient esClient; /** * Constructor for the connection to an ElasticSearch index @@ -32,23 +40,29 @@ public class OAI_ESClient { * @param port for the ElasticSearch connection * @param clusterName indicating the name of the cluster where the index exists */ - @SuppressWarnings("resource") - public OAI_ESClient(String url, String thePort, String clusterName){ + + public OAI_ESClient(String url, int[] ports, int itemLimit){ - int port = Integer.parseInt(thePort); + //int port = Integer.parseInt(thePort); - this.log.info("ElasticSearch connection settings:"); + /*this.log.info("ElasticSearch connection settings:"); this.log.info("url = " + url); this.log.info("port = " + port); - this.log.info("cluster name = " + clusterName); - + this.log.info("cluster name = " + clusterName);*/ + OAI_ESClient.setUrl(url); - OAI_ESClient.setPort(port); - - Settings oaiESClusterSettings = ImmutableSettings.settingsBuilder().put("cluster.name", clusterName).build(); + + OAI_ESClient.setPorts(ports); - oaiESClient = new TransportClient(oaiESClusterSettings) - .addTransportAddress(new InetSocketTransportAddress(url, port)); + + List<HttpHost> hosts = new ArrayList<HttpHost>(); + for(int port : ports) { + hosts.add(new HttpHost(url, port, "http")); + } + + setEsClient(new RestHighLevelClient( + RestClient.builder( + hosts.toArray(new HttpHost[hosts.size()])))); } /** @@ -83,13 +97,7 @@ public class OAI_ESClient { OAI_ESClient.esType = esType; } - /** - * - * @return oaiESClient - */ - public static Client getOaiESClient() { - return oaiESClient; - } + /** * @@ -127,24 +135,33 @@ public class OAI_ESClient { * * @return port */ - public static int getPort() { - return port; - } + public static int[] getPort() { + return ports; + } /** * * @param port */ - public static void setPort(int port) { - OAI_ESClient.port=port; - } + public static void setPorts(int ports[]) { + // System.out.println("SETTER OF PORTS: " +ports[0]); + OAI_ESClient.ports = ports; + } /** * * @param oaiClient */ - public static void setOaiESClient(Client theOaiClient){ - OAI_ESClient.oaiESClient = theOaiClient; + public static void setOaiESClient(RestHighLevelClient theOaiClient){ + OAI_ESClient.esClient = theOaiClient; + } + + public static RestHighLevelClient getEsClient() { + return esClient; + } + + public static void setEsClient(RestHighLevelClient esClient) { + OAI_ESClient.esClient = esClient; } } 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 eccb54aa5338267acdf80473f08625b3df591133..b434b4d881b5a2e9be4fb7a4f2170fc49e6c71aa 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java @@ -1,10 +1,19 @@ 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; +import org.elasticsearch.search.fetch.subphase.FetchSourceContext; + import info.textgrid.middleware.oaipmh.GetRecordType; import info.textgrid.middleware.oaipmh.HeaderType; import info.textgrid.middleware.oaipmh.RecordType; @@ -70,6 +79,11 @@ public class RecordDelivererDC extends RecordDelivererAbstract { */ public GetRecordType getRecordById(String id) { + String[] includes = this.fields; + String[] excludes = Strings.EMPTY_ARRAY; + FetchSourceContext fetchSourceContext = + new FetchSourceContext(true, includes, excludes); + GetRecordType getRecordType = new GetRecordType(); RecordType record = new RecordType(); String changedId = id; @@ -78,18 +92,20 @@ public class RecordDelivererDC extends RecordDelivererAbstract { if (id.startsWith(this.repositoryObjectURIPrefix)) { changedId = changedId.replace(this.repositoryObjectURIPrefix, ""); } + + GetRequest getRequest = new GetRequest(OAI_ESClient.getEsIndex(), OAI_ESClient.getEsType(), changedId).fetchSourceContext(fetchSourceContext); + GetResponse esResultObject=null; - // TODO Must Index and Type be set here? Isn't it already set in beans.xml? - GetRequestBuilder recordById = - OAI_ESClient - .getOaiESClient() - .prepareGet() - .setIndex(OAI_ESClient.getEsIndex()) - .setType(OAI_ESClient.getEsType()) - .setFields(this.fields) - .setId(changedId); + try { - GetResponse esResultObject = recordById.execute().actionGet(); + esResultObject = + OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); + System.out.println(esResultObject.getSourceAsMap()); + + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } if (esResultObject.isExists()) { @@ -119,16 +135,26 @@ public class RecordDelivererDC extends RecordDelivererAbstract { setRecordHeader(dateOfCreation, identifier, record, dublinCoreBuilder); } - if (this.textgrid == true && esResultObject.getField(this.formatField).getValue().toString() - .equals(this.formatToFilter)) { - - String workUri = - esResultObject.getField(this.relationToFurtherMetadataObject).getValue().toString(); + if (this.textgrid == true && esResultObject.getSourceAsMap().get(this.formatField).equals(this.formatToFilter)) { + System.out.println(esResultObject.getSourceAsMap().get(this.formatField).toString()); + + System.out.println(esResultObject.getSourceAsMap().get("edition").toString()); + Map<String, Object> nestedMap = esResultObject.getSourceAsMap(); + + Map<String, Object> nestedMap2 = (Map<String, Object>)nestedMap.get("edition"); + + System.out.println(nestedMap2.get("isEditionOf")); + + //System.out.println(esResultObject.getSourceAsMap().get(this.relationToFurtherMetadataObject).toString()); + + + + String workUri = nestedMap2.get("isEditionOf").toString(); workUri = workUri.substring(this.repositoryObjectURIPrefix.length()); dublinCoreBuilder = putContentIntoDCFieldLists(esResultObject, furtherDCElements(workUri)); - identifier = esResultObject.getField(this.identifierField).getValue().toString(); + identifier = esResultObject.getSourceAsMap().get(this.identifierField).toString(); String dateOfCreation = - esResultObject.getField(this.dateOfObjectCreation).getValue().toString(); + esResultObject.getSourceAsMap().get(this.dateOfObjectCreation).toString(); setRecordHeader(dateOfCreation, identifier, record, dublinCoreBuilder); record.setMetadata(dublinCoreBuilder.getDC()); } @@ -171,20 +197,27 @@ public class RecordDelivererDC extends RecordDelivererAbstract { * @return */ private GetResponse furtherDCElements(String id) { - + String[] includes = this.workFields; + String[] excludes = Strings.EMPTY_ARRAY; + FetchSourceContext fetchSourceContext = + new FetchSourceContext(true, includes, excludes); if (!id.endsWith(".0")) { id = id.concat(".0"); } - GetRequestBuilder getWorkValues = - OAI_ESClient.getOaiESClient() - .prepareGet() - .setIndex(OAI_ESClient.getEsIndex()) - .setType(OAI_ESClient.getEsType()) - .setId(id) - .setFields(this.workFields); - - GetResponse responseWorkValues = getWorkValues.execute().actionGet(); + + GetRequest getRequest = new GetRequest(OAI_ESClient.getEsIndex(), OAI_ESClient.getEsType(), id).fetchSourceContext(fetchSourceContext); + GetResponse responseWorkValues=null; + + + try { + responseWorkValues = OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // FIXME MAX!!! DO WE NEED THST DATE??? // FIXME MAX!!! DO WE NEED THST DATE??? diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java index 80da54b5dd39be65ef8290c218bf2a5c5627f5ca..9e62806a567c2371b1617884dd8839261e9ae56e 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java @@ -1,5 +1,6 @@ package info.textgrid.middleware; +import java.io.IOException; import java.io.StringReader; import java.text.ParseException; @@ -11,8 +12,12 @@ import org.xml.sax.InputSource; import org.apache.commons.logging.LogFactory; import org.classicmayan.tools.ClassicMayanMetsMods; +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; +import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import info.textgrid.middleware.oaipmh.GetRecordType; import info.textgrid.middleware.oaipmh.HeaderType; @@ -63,6 +68,11 @@ public class RecordDelivererIDIOM extends RecordDelivererAbstract { public void setDatestamps(String idInDatabase) { String changedId = idInDatabase; + String[] includes = new String[] {TGConstants.CREATED, TGConstants.MODIFIED_FIELD}; + String[] excludes = Strings.EMPTY_ARRAY; + FetchSourceContext fetchSourceContext = + new FetchSourceContext(true, includes, excludes); + if(idInDatabase.startsWith("textgrid:")) { changedId = idInDatabase.substring("textgrid:".length()); } @@ -70,15 +80,16 @@ public class RecordDelivererIDIOM extends RecordDelivererAbstract { if(!idInDatabase.contains(".0")) { changedId = changedId + ".0"; } - //sSystem.out.println(changedId); - GetRequestBuilder recordById = OAI_ESClient.getOaiESClient() - .prepareGet() - .setIndex("textgrid-nonpublic") - .setType(OAI_ESClient.getEsType()) - .setFields(TGConstants.CREATED, TGConstants.MODIFIED_FIELD) - .setId(changedId); - GetResponse objectInDatabase = recordById.execute().actionGet(); + GetRequest getRequest = new GetRequest(OAI_ESClient.getEsIndex(), OAI_ESClient.getEsType(), changedId).fetchSourceContext(fetchSourceContext); + GetResponse objectInDatabase=null; + + try { + objectInDatabase = OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } dateOfObjectCreation = objectInDatabase.getField(TGConstants.CREATED).getValue().toString(); dateOfLastOblectModification = objectInDatabase.getField(TGConstants.MODIFIED_FIELD).getValue().toString(); diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java index 7b434caeb0313fc9b58394c743fed69ff41fc7e1..e43ab7d5a8dbf4243df88f60b99fc44dac81bb2b 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java @@ -1,5 +1,6 @@ package info.textgrid.middleware; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; @@ -7,14 +8,23 @@ import java.util.Hashtable; 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.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchScrollRequest; import org.elasticsearch.client.Client; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.common.Strings; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.elasticsearch.search.fetch.subphase.FetchSourceContext; + import info.textgrid.middleware.oaipmh.HeaderType; import info.textgrid.middleware.oaipmh.ListRecordsType; import info.textgrid.middleware.oaipmh.MetadataType; @@ -94,7 +104,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { * @param client * @return */ - public GetResponse furtherDCElements(String id, Client client) { + public GetResponse furtherDCElements(String id, RestHighLevelClient client) { if (id != null) { try { @@ -102,16 +112,27 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { } catch (UnsupportedEncodingException e) { e.printStackTrace(); } - - GetRequestBuilder getWorkValues = + String[] includes = this.workFields; + String[] excludes = Strings.EMPTY_ARRAY; + FetchSourceContext fetchSourceContext = + new FetchSourceContext(true, includes, excludes); + GetRequest getRequest = new GetRequest(OAI_ESClient.getEsIndex(), OAI_ESClient.getEsType(), id).fetchSourceContext(fetchSourceContext); + + /*GetRequestBuilder getWorkValues = OAI_ESClient.getOaiESClient() .prepareGet() .setIndex(OAI_ESClient.getEsIndex()) .setType(OAI_ESClient.getEsType()) .setId(id) - .setFields(this.workFields); + .setFields();*/ - GetResponse responseWorkValues = getWorkValues.execute().actionGet(); + GetResponse responseWorkValues=null; + try { + responseWorkValues = OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } return responseWorkValues; } @@ -144,19 +165,36 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { .must(QueryBuilders.matchPhraseQuery(this.formatField, this.formatToFilter)); } + SearchRequest searchRequest = new SearchRequest(OAI_ESClient.getEsIndex()); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + + scrollResp=null; + if (resumptionToken == null) { - scrollResp = OAI_ESClient.getOaiESClient() - .prepareSearch(OAI_ESClient.getEsIndex()) - .setScroll(new TimeValue(lifeTimeResToken)) - .setTypes(OAI_ESClient.getEsType()) - .addFields(this.fields) - .setQuery(recordFilter) - .setSize(this.searchResponseSize) - .execute() - .actionGet(); + + searchSourceBuilder.query(recordFilter); + searchSourceBuilder.size(this.searchResponseSize); + searchRequest.source(searchSourceBuilder); + SearchScrollRequest scrollRequest = new SearchScrollRequest(resumptionToken); + scrollRequest.scroll(TimeValue.timeValueSeconds(lifeTimeResToken)); + + try { + scrollResp = OAI_ESClient.getEsClient().scroll(scrollRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } else { - scrollResp = OAI_ESClient.getOaiESClient().prepareSearchScroll(resumptionToken) - .setScroll(new TimeValue(lifeTimeResToken)).execute().actionGet(); + + searchRequest.source(searchSourceBuilder); + searchRequest.scroll(TimeValue.timeValueMinutes(lifeTimeResToken)); + try { + scrollResp = OAI_ESClient.getEsClient().search(searchRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } log.info("Queried fields: " + this.fields.toString()); @@ -164,7 +202,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { scrollID = scrollResp.getScrollId(); - long completeListSize = scrollResp.getHits().totalHits(); + long completeListSize = scrollResp.getHits().totalHits; if (completeListSize > 0) { setFoundItems(true); @@ -191,10 +229,10 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { // TextGrid search! String workUri = ""; - if (this.textgrid == true && hit.getFields().get(this.formatField).values().get(0) + if (this.textgrid == true && hit.getFields().get(this.formatField).getValues().get(0) .toString().equals(this.formatToFilter)) { if (hit.getFields().get(this.relationToFurtherMetadataObject) != null) { - workUri = hit.getFields().get(this.relationToFurtherMetadataObject).values().get(0) + workUri = hit.getFields().get(this.relationToFurtherMetadataObject).getValues().get(0) .toString().substring(this.repositoryObjectURIPrefix.length()); if (!workUri.endsWith(".0")) { @@ -203,7 +241,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { } dublinCoreBuilder = putContentIntoDCFieldLists(hit, - furtherDCElements(workUri, OAI_ESClient.getOaiESClient())); + furtherDCElements(workUri, OAI_ESClient.getEsClient())); buildRecord(recordList, set, hit.getFields().get(this.identifierField).getValue().toString(), dublinCoreBuilder); @@ -211,7 +249,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract { if (this.dariah == true) { dublinCoreBuilder = putContentIntoDCFieldLists2(hit, - furtherDCElements(hit.getId(), OAI_ESClient.getOaiESClient())); + furtherDCElements(hit.getId(), OAI_ESClient.getEsClient())); buildRecord(recordList, set, hit.getFields().get(this.identifierField).getValue().toString(), dublinCoreBuilder); } diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java index e8a98fd410da53dcce7f9793764c0b16ccd5a977..aab625514e0fe5425c3aded8c761d993796a09fc 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java @@ -4,20 +4,29 @@ import info.textgrid.middleware.oaipmh.ListSetsType; import info.textgrid.middleware.oaipmh.SetType; import info.textgrid.namespaces.middleware.tgcrud.common.TextGridMimetypes; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedHashSet; +import java.util.List; import java.util.Map; import java.util.Set; + +import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; +import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.common.Strings; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.elasticsearch.search.fetch.subphase.FetchSourceContext; /** * @@ -51,6 +60,7 @@ public class SetDeliverer { */ public ListSetsType setListBuilder() { + ListSetsType setList = new ListSetsType(); QueryBuilder aggQuery; if (this.textgrid) { @@ -60,24 +70,40 @@ public class SetDeliverer { TextGridMimetypes.DARIAH_COLLECTION); } - SearchRequestBuilder request = OAI_ESClient.getOaiESClient() + SearchRequest request = new SearchRequest(OAI_ESClient.getEsIndex()); + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); + searchSourceBuilder.query(aggQuery); + + searchSourceBuilder.storedField(this.formatField); + searchSourceBuilder.storedField(this.identifierField); + searchSourceBuilder.storedField("project.value"); + searchSourceBuilder.storedField("project.id"); + searchSourceBuilder.size(100000); + + /*SearchRequestBuilder request = OAI_ESClient.getEsClient() .prepareSearch(OAI_ESClient.getEsIndex()).setTypes(OAI_ESClient.getEsType()) .setQuery(aggQuery).addField(this.formatField).addField(this.identifierField) - .addField("project.value").addField("project.id").setSize(100000); + .addField("project.value").addField("project.id").setSize(100000);*/ - SearchResponse getRecordListItems = request.execute().actionGet(); + SearchResponse getRecordListItems=null; + try { + getRecordListItems = OAI_ESClient.getEsClient().search(request, RequestOptions.DEFAULT); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } ; for (SearchHit hit : getRecordListItems.getHits().getHits()) { - if (this.dariah == true && hit.getFields().get(this.identifierField).values().get(0) + if (this.dariah == true && hit.getFields().get(this.identifierField).getValues().get(0) .toString().startsWith("hdl:")) { - String pid = hit.getFields().get(this.identifierField).values().get(0).toString(); + String pid = hit.getFields().get(this.identifierField).getValues().get(0).toString(); this.identifier.add(pid); } if (this.textgrid == true) { - String projectName = hit.getFields().get("project.value").values().get(0).toString(); - String projectID = hit.getFields().get("project.id").values().get(0).toString(); + String projectName = hit.getFields().get("project.value").getValues().get(0).toString(); + String projectID = hit.getFields().get("project.id").getValues().get(0).toString(); String projectSetSpec = projectName.concat(":").concat(projectID); this.setSet.put(projectID, projectName); } @@ -105,11 +131,21 @@ public class SetDeliverer { id = identifierSetSpec.substring(this.repositoryObjectURIPrefix.length()); - GetRequestBuilder collectionNameById = - OAI_ESClient.getOaiESClient().prepareGet().setIndex(OAI_ESClient.getEsIndex()) - .setType(OAI_ESClient.getEsType()).setFields(this.specField).setId(id); - - GetResponse setSpec = collectionNameById.execute().actionGet(); + String[] includes = new String[] {this.specField}; + String[] excludes = Strings.EMPTY_ARRAY; + FetchSourceContext fetchSourceContext = + new FetchSourceContext(true, includes, excludes); + + GetRequest getRequest = new GetRequest(OAI_ESClient.getEsIndex(), OAI_ESClient.getEsType(), id).fetchSourceContext(fetchSourceContext); + GetResponse setSpec = null; + + try { + setSpec=OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String setName = ""; if (setSpec != null && setSpec.isExists()) { if (setSpec.getField(this.specField) != null) { 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 4a45af95670464c3cd86f57ab31b1f9ce82ed35a..eae734a85712f96fb117e4dde395fe867be336f8 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java @@ -51,10 +51,12 @@ public class OaiPmhTest { */ @BeforeClass public static void setUp() throws Exception { - oaiEsClient = new OAI_ESClient("localhost", "9302", "tg-esx2-instance"); + int[] ports = new int[] {9202}; + oaiEsClient = new OAI_ESClient("localhost", ports, 100); OAI_ESClient.setEsIndex("textgrid-public"); - OAI_ESClient.setEsType("metadata"); - + OAI_ESClient.setEsType("metadata"); + + OAI_ESClient.setPorts(ports); record = new RecordDelivererDC(true, false); record.setOaiEsClient(oaiEsClient); record.setWorkFields(TGConstants.TGWorkFields); @@ -166,7 +168,7 @@ public class OaiPmhTest { * @throws ParseException */ @Test - @Ignore + // @Ignore public void testGetRequestGetRecordTextGrid() throws ParseException { record.setContributor(TGConstants.CONTRIBUTOR_LIST); @@ -191,6 +193,7 @@ public class OaiPmhTest { record.setDateOfObjectCreation(TGConstants.CREATED); record.setRelationToFurtherMetadataObject(TGConstants.EDITION_ISEDITIONOF); record.setRepositoryObjectURIPrefix(TGConstants.ITEM_IDENTIFIER_PREFIX); + record.setIdentifierField("textgridUri"); System.out.println("Test for the verb \"GetRecord\" with succesfull response"); @@ -234,7 +237,7 @@ public class OaiPmhTest { * @throws ParseException */ @Test - @Ignore + //@Ignore public void testListIdentifierSetsDC() throws ParseException { OaiPmhTest.identifierList.setFieldForRange(TGConstants.RANGE_FIELD); diff --git a/pom.xml b/pom.xml index 06015ba96de10120c832fae82a870e875f8016c0..9103838191351a4d4bd4fd45c6649766575a5248 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <cxf.version>3.2.8</cxf.version> <spring.version>4.0.2.RELEASE</spring.version> - <elasticsearch.version>1.7.5</elasticsearch.version> + <elasticsearch.version>6.5.4</elasticsearch.version> <antlr-runtime.version>3.2</antlr-runtime.version> <antlr-maven-plugin.version>3.2</antlr-maven-plugin.version> <slf4j.version>1.7.5</slf4j.version>