From 6373a45afc21504e2c63d9de9fa06467f0847744 Mon Sep 17 00:00:00 2001
From: Maximilian Brodhun <brodhun@sub.uni-goettingen.de>
Date: Fri, 17 Jul 2020 17:52:35 +0200
Subject: [PATCH] prepare listrecords for open aire and make openAireRecord
 read setting from property file

---
 .../textgrid/middleware/OAIPMHUtilities.java  |  20 ++
 .../textgrid/middleware/OpenAireRecord.java   |  67 ++++++-
 .../RecordListDelivererAbstract.java          | 188 ++++++++++++++++++
 .../middleware/RecordListDelivererDC.java     |   6 +-
 .../info/textgrid/middleware/TGConstants.java |   3 +
 .../info/textgrid/middleware/OaiPmhTest.java  |  74 ++++++-
 .../webapp/WEB-INF/oaipmh.textgrid.properties |  34 +++-
 7 files changed, 365 insertions(+), 27 deletions(-)

diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
index abd3aeae..8134ada2 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHUtilities.java
@@ -12,6 +12,7 @@ import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.TimeZone;
 
 import javax.xml.bind.JAXBContext;
@@ -32,6 +33,8 @@ import org.elasticsearch.action.get.GetRequest;
 import org.elasticsearch.action.get.GetResponse;
 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.fetch.subphase.FetchSourceContext;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -41,6 +44,7 @@ import info.textgrid.clients.tgauth.AuthClientException;
 import info.textgrid.middleware.oaipmh.GetRecordType;
 import info.textgrid.middleware.oaipmh.HeaderType;
 import info.textgrid.middleware.oaipmh.ListMetadataFormatsType;
+import info.textgrid.middleware.oaipmh.ListRecordsType;
 import info.textgrid.middleware.oaipmh.MetadataFormatType;
 import info.textgrid.middleware.oaipmh.MetadataType;
 import info.textgrid.middleware.oaipmh.OAIPMHtype;
@@ -430,4 +434,20 @@ public class OAIPMHUtilities {
     	
     	return getRecordType;
     }
+    
+    public static String[][] fetchArrayFromPropFile(String propertyName, Properties propFile) {
+
+    	  //get array split up by the semicolin
+    	  String[] a = propFile.getProperty(propertyName).split(";");
+
+    	  //create the two dimensional array with correct size
+    	  String[][] array = new String[a.length][a.length];
+
+    	  //combine the arrays split by semicolin and comma 
+    	  for(int i = 0;i < a.length;i++) {
+    	      array[i] = a[i].split(",");
+    	  }
+    	  return array;
+    	}
+    	
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OpenAireRecord.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OpenAireRecord.java
index 2a0ef350..dc9ec029 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OpenAireRecord.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OpenAireRecord.java
@@ -1,6 +1,11 @@
 package info.textgrid.middleware;
 
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
 import java.text.ParseException;
+import java.util.Properties;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
@@ -8,6 +13,7 @@ import javax.xml.datatype.DatatypeConfigurationException;
 
 import org.apache.commons.logging.LogFactory;
 import org.elasticsearch.common.Strings;
+import org.json.JSONException;
 import org.json.JSONObject;
 
 import info.textgrid.middleware.oaipmh.ContributorType;
@@ -40,6 +46,7 @@ import info.textgrid.middleware.oaipmh.Resource.RightsList;
 import info.textgrid.middleware.oaipmh.Resource.RightsList.Rights;
 import info.textgrid.middleware.oaipmh.Resource.Titles;
 import info.textgrid.middleware.oaipmh.Resource.Titles.Title;
+import info.textgrid.namespaces.middleware.tgcrud.common.TextGridMimetypes;
 
 
 /**
@@ -78,6 +85,7 @@ public class OpenAireRecord extends RecordDelivererAbstract {
     private String[] relatedIdentifierFields;
     private String[] workFields;
     private String relationToWorkObject;
+    private String identifierField;
 
     //Contains the setting to get connection to the ElasticSearch index. The content will be given by a configuration file
     private OAI_ESClient oaiEsClient;
@@ -89,9 +97,35 @@ public class OpenAireRecord extends RecordDelivererAbstract {
      * 
      * @param textgrid
      * @param dariah
+     * @throws IOException 
      */
-    public OpenAireRecord(boolean textgrid, boolean dariah) {
+    public OpenAireRecord(boolean textgrid, boolean dariah) throws IOException {
         super(textgrid, dariah);
+
+        InputStream input = null;
+		try {
+			input = new FileInputStream("/home/max/dev/oai-pmh/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties");
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+        Properties prop = new Properties();
+        prop.load(input);
+        
+        this.setFields(OAIPMHUtilities.fetchArrayFromPropFile("fields", prop)[0]);
+        this.setFormatField(prop.getProperty("formatField"));
+        this.setFormatToFilter(TextGridMimetypes.EDITION);
+        this.setTitleFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.titleFields", prop)[0]);
+        this.setDateFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.dateFields", prop)[0]);
+        this.setContributorFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.contributorFields", prop)[0]);
+        this.setLanguageFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.languageFields", prop)[0]);
+        this.setAlternateIdentifierFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.alternateIdentifierFields", prop)[0]);
+        this.setFormatFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.formatFields", prop)[0]);
+        this.setRightsFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.rightsFields", prop)[0]);
+        this.setDescriptionFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.descriptionFields", prop)[0]);
+        this.setRelationToWorkObject(prop.getProperty("oar.relationToWorkObject"));
+        this.setRelatedIdentifierFields(OAIPMHUtilities.fetchArrayFromPropFile("oar.relatedIdentifierFields", prop)[0]);     
+
     }
 
     /**
@@ -103,6 +137,7 @@ public class OpenAireRecord extends RecordDelivererAbstract {
     	
     	HeaderType header = new HeaderType();
     	header.setDatestamp(OAIPMHUtilities.datestampAsString(OAIPMHUtilities.fieldLoader(jsonObj, TGConstants.CREATED)));
+    	
         if(!idInElasticSearchIndex.startsWith(TGConstants.ITEM_IDENTIFIER_PREFIX)) {
         	header.setIdentifier(TGConstants.ITEM_IDENTIFIER_PREFIX + idInElasticSearchIndex);
         }else {
@@ -279,7 +314,12 @@ public class OpenAireRecord extends RecordDelivererAbstract {
     private Identifier addIdentifier() {
     	Identifier identifier = new Identifier();
         identifier.setIdentifierType("HANDLE");
-        identifier.setValue(jsonObj.getJSONObject("pid").get("value").toString());
+        try {
+        	identifier.setValue(jsonObj.getJSONObject("pid").get("value").toString());
+        }catch(JSONException fieldNotFound) {
+        	identifier.setValue(jsonObj.get("textgridUri").toString());
+        }
+        
 
         return identifier;
     }
@@ -298,9 +338,12 @@ public class OpenAireRecord extends RecordDelivererAbstract {
         NameIdentifier nameIdentifier = new NameIdentifier();
         //TODO: creatorID Field from configfile
         String creatorID = OAIPMHUtilities.fieldLoader(jsonObj, "edition.source.bibliographicCitation.author.id");
-        if (creatorID != null) {
+        
+        if (creatorID != null && creatorID.contains(":")) {
             nameIdentifier.setValue(creatorID.split(":")[1]);
             nameIdentifier.setNameIdentifierScheme(creatorID.split(":")[0]);
+        }else {
+        	nameIdentifier.setValue(creatorID);
         }
         creator.setNameIdentifier(nameIdentifier);
         creators.getCreator().add(creator);
@@ -310,8 +353,11 @@ public class OpenAireRecord extends RecordDelivererAbstract {
 
     private Titles addTitles() {
     	Titles titles = new Titles();
-    	
+    	for(String field : fields) {
+    		System.out.println(field);
+    	}
         for (String titleField: titleFields) {
+        	
             Title tileInOpenAireRecord = new Title();
             tileInOpenAireRecord.setValue(OAIPMHUtilities.fieldLoader(jsonObj, titleField));
             titles.getTitle().add(tileInOpenAireRecord);
@@ -353,6 +399,9 @@ public class OpenAireRecord extends RecordDelivererAbstract {
         this.formatField = formatField;
     }
 
+    public String getFormatField() {
+        return formatField;
+    }
     /**
      * @param fields
      */
@@ -430,6 +479,8 @@ public class OpenAireRecord extends RecordDelivererAbstract {
     public void setFormatFields(String[] formatFields) {
         this.formatFields = formatFields;
     }
+    
+
 
     public String[] getRightsFields() {
         return rightsFields;
@@ -477,6 +528,14 @@ public class OpenAireRecord extends RecordDelivererAbstract {
         this.workFields = workFields;
     }
 
+	public String getIdentifierField() {
+		return identifierField;
+	}
+
+	public void setIdentifierField(String identifierField) {
+		this.identifierField = identifierField;
+	}
+
 
 
 }
\ No newline at end of file
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java
index 7b0fab41..7e810c83 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java
@@ -1,17 +1,45 @@
 package info.textgrid.middleware;
 
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
+
+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;
+
+import info.textgrid.middleware.oaipmh.ListRecordsType;
 import info.textgrid.middleware.oaipmh.RequestType;
+import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 
 /**
  *
  */
 public abstract class RecordListDelivererAbstract implements RecordListDelivererInterface {
 
+  private OAI_ESClient oaiEsClient;	
+	
   protected boolean textgrid;
   protected boolean dariah;
 
+  private String rangeField;
+  private String formatField;
+  private String formatToFilter;
+  private int searchResponseSize;
+  private long resultSize;
+  private boolean foundItems;
+  
+  private static final int LIFETIME_RES_TOKEN = 600;
+  protected static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>();
+  
   /**
    * @param textgrid
    * @param dariah
@@ -21,6 +49,108 @@ public abstract class RecordListDelivererAbstract implements RecordListDeliverer
     this.dariah = dariah;
   }
 
+  public List<String> getUriList(String from, String to, String set, String resumptionToken) {
+  	
+  	List<String> uriList = new ArrayList<String>();
+    QueryBuilder query;
+
+    QueryBuilder rangeQuery = QueryBuilders.rangeQuery(this.rangeField).from("1900").to("2020");
+  	
+  	if(set.length()>0) {
+  		String[] setParts = set.split(":");
+  		
+        String queryField = "";
+        String valueField = "";
+  		
+        if (setParts[0].equals(TGConstants.SET_FIELD_FOR_TEXTGRID)) {
+            queryField = TGConstants.PROJECT_ID_FOR_TEXTGRID;          
+            valueField = setParts[1];
+        }
+        
+        QueryBuilder matchQuery = QueryBuilders.matchPhraseQuery(queryField, valueField);
+        QueryBuilder boolQuery = QueryBuilders.boolQuery().must(rangeQuery).must(matchQuery);
+        
+        query = boolQuery;
+    }else {
+       query = rangeQuery;
+    }  	
+  	
+  	return getFieldsFromESIndex(query, resumptionToken, set);
+  }
+  
+  
+  public List<String> getFieldsFromESIndex(QueryBuilder query, String resumptionToken,
+	      String set) {
+	  ListRecordsType recordList = new ListRecordsType();
+	  List<String> uriList = new ArrayList<String>();
+	  QueryBuilder recordFilter = QueryBuilders.boolQuery().must(query)
+	          .must(QueryBuilders.matchPhraseQuery(this.formatField, this.formatToFilter));
+	  
+	  SearchRequest searchRequest = new SearchRequest(OAI_ESClient.getEsIndex());
+	    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
+	    
+	     
+	  searchSourceBuilder.query(recordFilter);
+	  searchSourceBuilder.size(this.searchResponseSize);
+	  searchRequest.source(searchSourceBuilder);
+	  
+	  SearchResponse scrollResp = new SearchResponse();
+	  
+	  if (resumptionToken.length()>0) {
+		  
+		  //scrollResp = null;
+		  SearchScrollRequest scrollRequest = new SearchScrollRequest(resumptionToken);
+	      scrollRequest.scroll(TimeValue.timeValueSeconds(LIFETIME_RES_TOKEN));
+	      
+	  	try {
+	        scrollResp = OAI_ESClient.getEsClient().scroll(scrollRequest, RequestOptions.DEFAULT);
+	      } catch (IOException e) {
+	        // TODO Auto-generated catch block
+	        e.printStackTrace();
+	      }
+	  } else {
+	      searchRequest.source(searchSourceBuilder);
+	      searchRequest.scroll(TimeValue.timeValueMinutes(LIFETIME_RES_TOKEN));
+	      try {
+	    	  System.out.println(searchRequest);
+	        scrollResp = OAI_ESClient.getEsClient().search(searchRequest,RequestOptions.DEFAULT);
+	      } catch (IOException e) {
+	        // TODO Auto-generated catch block
+	        e.printStackTrace();
+	      }
+	    }
+	  
+	  String scrollID = scrollResp.getScrollId(); 
+	  long completeListSize = scrollResp.getHits().totalHits;
+	  setResultSize(completeListSize);
+	  
+	  if (completeListSize > 0) {
+		  
+		  setFoundItems(true);
+		  int i=0;
+		  
+		  for (SearchHit hit : scrollResp.getHits().getHits()) {
+			  i++;
+			  if (hit != null && hit.getFields() != null) {
+				  uriList.add(hit.getSourceAsMap().get(TGConstants.URI).toString());				  
+			  }
+		  }
+		  
+	      ResumptionTokenType resTokenForResponse = OAIPMHUtilities.getResumptionToken(
+	              completeListSize, resumptionToken, cursorCollector, scrollID, this.searchResponseSize, i);
+	         
+	          if (resTokenForResponse != null) {
+	            recordList.setResumptionToken(resTokenForResponse);
+	          }
+	  }else {
+		  setFoundItems(false);
+	  }
+	  
+	  return uriList;
+  }
+  
+
+  
   /**
    * @param request
    * @return
@@ -86,6 +216,64 @@ public abstract class RecordListDelivererAbstract implements RecordListDeliverer
 
     return result;
   }
+
+  
   
+  //GETTER AND SETTER
+  
+	public String getRangeField() {
+		return rangeField;
+	}
+	
+	public void setRangeField(String rangeField) {
+		this.rangeField = rangeField;
+	}
+	
+	
+	/**
+	 * @param formatToFilter
+	 */
+	public void setFormatToFilter(String formatToFilter) {
+	  this.formatToFilter = formatToFilter;
+	}
+	
+	/**
+	 * @param formatField
+	 */
+	public void setFormatField(String formatField) {
+	  this.formatField = formatField;
+	}
+
+	public int getSearchResponseSize() {
+		return searchResponseSize;
+	}
+
+	public void setSearchResponseSize(int searchResponseSize) {
+		this.searchResponseSize = searchResponseSize;
+	}
+
+	public long getResultSize() {
+		return resultSize;
+	}
+
+	public void setResultSize(long resultSize) {
+		this.resultSize = resultSize;
+	}
+
+	public boolean isFoundItems() {
+		return foundItems;
+	}
+
+	public void setFoundItems(boolean foundItems) {
+		this.foundItems = foundItems;
+	}
+
+	public OAI_ESClient getOaiEsClient() {
+		return oaiEsClient;
+	}
+
+	public void setOaiEsClient(OAI_ESClient oaiEsClient) {
+		this.oaiEsClient = oaiEsClient;
+	}
 
 }
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 defe0a3b..4b0271e0 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java
@@ -385,7 +385,6 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
     QueryBuilder rangeQuery = QueryBuilders.rangeQuery(this.rangeField).from(from).to(to);
 
     if (set != null) {
-
       String queryField = "";
       String valueField = "";
 
@@ -410,6 +409,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
       query = boolQuery;
     } else {
       query = rangeQuery;
+      
     }
     try {
       fetchFields(query, recordList, resumptionToken, set);
@@ -449,9 +449,9 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
     header.setIdentifier(identifierForHeader);
     
     // Set set :-)
-    //if (set != null) {
+    if (set != null) {
       header.getSetSpec().add(setSpec);
-    //}
+    }
 
     return header;
   }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/TGConstants.java b/oaipmh-core/src/main/java/info/textgrid/middleware/TGConstants.java
index cc47c193..4a5b1849 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/TGConstants.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/TGConstants.java
@@ -20,6 +20,9 @@ public final class TGConstants {
     //
   }
 
+  public static final String SET_FIELD_FOR_TEXTGRID = "project";
+  public static final String PROJECT_ID_FOR_TEXTGRID = "project.id";
+  
   public static final String ITEM_IDENTIFIER_PREFIX = "textgrid:";
   public static final List<String> TEXTGRID_REP_ADMIN_CONTACT =
       Arrays.asList("support@de.dariah.eu");
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 35a20952..38fa84c5 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java
@@ -1,7 +1,11 @@
 package info.textgrid.middleware;
 
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.text.ParseException;
 import java.util.Map;
+import java.util.Properties;
 
 import javax.xml.bind.JAXBException;
 import javax.xml.datatype.DatatypeConfigurationException;
@@ -73,8 +77,10 @@ public class OaiPmhTest {
 
     recordIDIOM = new RecordDelivererIDIOM(true, false);
     recordIDIOM.setOaiEsClient(oaiEsClient);
-
+    
     openAireRecord = new OpenAireRecord(true, false);
+    openAireRecord.setOaiEsClient(oaiEsClient);
+    
     
     recordList = new RecordListDelivererDC(true, false);
     recordList.setFields(TGConstants.TGFields);
@@ -92,6 +98,11 @@ public class OaiPmhTest {
     setListTextGrid = new SetDeliverer(true, false);
   }
 
+  @Test
+  public void testReadFromPropertyFile() throws IOException {
+	  OpenAireRecord oar = new OpenAireRecord(true, false);
+  }
+  
   /**
    * @throws DatatypeConfigurationException
    */
@@ -232,12 +243,12 @@ public class OaiPmhTest {
   
   @Test
   //@Ignore
-  public void testGetRequestGetRecordOpenAire() throws ParseException, JAXBException, DatatypeConfigurationException {
+  public void testGetRequestGetRecordOpenAire() throws ParseException, JAXBException, DatatypeConfigurationException, IOException {
     System.out.println("Test for OpenAire get record");
     
     //OpenAireRecord oar = new OpenAireRecord(true, false);
-    openAireRecord.setOaiEsClient(oaiEsClient);
-    String[] fields = {"textgridUri", "pid.value", "format", "edition", "title", "created", "issued", "lastModified", "dataContributor"};
+    
+    /*String[] fields = {"textgridUri", "pid.value", "format", "edition", "title", "created", "issued", "lastModified", "dataContributor"};
     String[] titleFields = {"title", "edition.source.bibliographicCitation.editionTitle"};
     String[] dateFields = {"created", "issued", "lastModified"};
     String[] contributorFields = {"dataContributor"};
@@ -247,10 +258,10 @@ public class OaiPmhTest {
     String[] rightsFields = {"edition.license"};
     String[] descriptionFields = {"work.abstract"};
     String[] relatedIdentifierFields = {"edition.isEditionOf"};
-    openAireRecord.setFields(fields );
+    openAireRecord.setFields(fields);
+	openAireRecord.setFormatField(TGConstants.FORMAT);
+	openAireRecord.setFormatToFilter(TextGridMimetypes.EDITION);
 	
-    openAireRecord.setFormatField(TGConstants.FORMAT);
-    openAireRecord.setFormatToFilter(TextGridMimetypes.EDITION);	
     openAireRecord.setTitleFields(titleFields);
     openAireRecord.setDateFields(dateFields);
     openAireRecord.setContributorFields(contributorFields);
@@ -260,7 +271,7 @@ public class OaiPmhTest {
     openAireRecord.setRightsFields(rightsFields);
     openAireRecord.setDescriptionFields(descriptionFields);
     openAireRecord.setRelationToWorkObject("edition.isEditionOf");
-    openAireRecord.setRelatedIdentifierFields(relatedIdentifierFields);
+    openAireRecord.setRelatedIdentifierFields(relatedIdentifierFields);*/
 	
 	//oar.getRecordById("24gv8.0");
 	/*System.out.println("Identifier: " + oar.getResource().getIdentifier().getIdentifierType() + " " + oar.getResource().getIdentifier().getValue());
@@ -318,13 +329,52 @@ public class OaiPmhTest {
     
     //OAIPMHUtilities.marshal(oar.getRecord("24gv8.0"));
     
-    String p = this.request.getRequest("GetRecord", "24gv8.0",
+    String p = this.request.getRequest("GetRecord", "mk7j.0",
             TGConstants.METADATA_OPENAIRE_PREFIX, "", "", "", "");
     
     System.out.println(p);
-
   }
   
+  
+  @Test
+  //@Ignore
+  public void testLIstRecordsOpenAire() throws IOException {
+	  OpenAireRecordList oarList = new OpenAireRecordList(true, false);
+	  OpenAireRecord openAireRecord = new OpenAireRecord(true, false);
+	  
+	   /* String[] fields = {"textgridUri", "pid.value", "format", "edition", "title", "created", "issued", "lastModified", "dataContributor"};
+	    String[] titleFields = {"title", "edition.source.bibliographicCitation.editionTitle"};
+	    String[] dateFields = {"created", "issued", "lastModified"};
+	    String[] contributorFields = {"dataContributor"};
+	    String[] languageFields = {"edition.language"};
+	    String[] alternateIdentifierFields = {"textgridUri"};
+	    String[] formatFields = {"format"};
+	    String[] rightsFields = {"edition.license"};
+	    String[] descriptionFields = {"work.abstract"};
+	    String[] relatedIdentifierFields = {"edition.isEditionOf"};
+	    
+	    openAireRecord.setFields(fields );			
+	    openAireRecord.setFormatField(TGConstants.FORMAT);
+	    openAireRecord.setFormatToFilter(TextGridMimetypes.EDITION);	
+	    openAireRecord.setTitleFields(titleFields);
+	    openAireRecord.setDateFields(dateFields);
+	    openAireRecord.setContributorFields(contributorFields);
+	    openAireRecord.setLanguageFields(languageFields);
+	    openAireRecord.setAlternateIdentifierFields(alternateIdentifierFields);
+	    openAireRecord.setFormatFields(formatFields);
+	    openAireRecord.setRightsFields(rightsFields);
+	    openAireRecord.setDescriptionFields(descriptionFields);
+	    openAireRecord.setRelationToWorkObject("edition.isEditionOf");
+	    openAireRecord.setRelatedIdentifierFields(relatedIdentifierFields);*/
+	  
+	  oarList.setOpenAireRecord(openAireRecord);
+	  oarList.setOaiEsClient(oaiEsClient);
+	  oarList.setRangeField(TGConstants.RANGE_FIELD);
+	  oarList.setFormatField(TGConstants.FORMAT);
+	  oarList.setFormatToFilter(TextGridMimetypes.EDITION);
+	  oarList.setSearchResponseSize(100);
+	  oarList.getRecords("", "", "", "");
+  }
 
   /**
    * @throws ParseException
@@ -436,7 +486,7 @@ public class OaiPmhTest {
    * @throws ParseException
    */
   @Test
-  @Ignore
+  //@Ignore
   public void testListRecordSets() throws ParseException {
     OaiPmhTest.recordList.setContributor(TGConstants.CONTRIBUTOR_LIST);
     OaiPmhTest.recordList.setCoverage(TGConstants.COVERAGE_LIST);
@@ -466,6 +516,7 @@ public class OaiPmhTest {
     System.out.println("Test for the verb \"ListRecords\" with sets with succesfull response");
     //String p = this.request.getRequest("ListRecords", "", "oai_dc", "project:TGPR-f89ad029-4eb2-ae5c-6028-5db876513128", "", "", "");
     String p = this.request.getRequest("ListRecords", "", "oai_dc", "", "", "", "");
+    
     System.out.println(p);
     /*String resToken = "";
     for (Map.Entry<String, Integer> entry : RecordListDelivererDC.cursorCollector.entrySet()) {
@@ -520,6 +571,7 @@ public class OaiPmhTest {
   @Test
   @Ignore
   public void testListRecords2() throws ParseException {
+	  System.out.println("HU");
     OaiPmhTest.recordList.setContributor(TGConstants.CONTRIBUTOR_LIST);
     OaiPmhTest.recordList.setCoverage(TGConstants.COVERAGE_LIST);
     OaiPmhTest.recordList.setCreators(TGConstants.CREATOR_LIST);
diff --git a/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties b/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties
index 155cfca4..d07aaf14 100644
--- a/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties
+++ b/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties
@@ -37,36 +37,52 @@ AdminMail = support@de.dariah.eu
 ##  Field Settings  ##
 ######################
 
-fields = created, format, identifier, dataContributor, textgridUri, project.id, relations.isDerivedFrom, title, pid.value, edition.isEditionOf, edition.agent.value, edition.license.licenseUri, edition.language, edition.source.bibliographicCitation.author.value, edition.source.bibliographicCitation.editor.value, edition.source.bibliographicCitation.editionTitle, edition.source.bibliographicCitation.placeOfPublication.value, edition.source.bibliographicCitation.publisher.value, edition.source.bibliographicCitation.editionNo, edition.source.bibliographicCitation.series, edition.source.bibliographicCitation.volume, edition.source.bibliographicCitation.issue, edition.source.bibliographicCitation.epage, edition.source.bibliographicCitation.spage, edition.source.bibliographicCitation.bibidentifier, work.abstract, work.genre, work.type, work.spatial.value, work.temporal.value, work.agent.value, work.subject.id.value, lastModified
-workFields = created, work.abstract, relations.isDerivedFrom, textgridUri, work.genre, title, work.type, work.spatial.value, work.temporal.spatial, work.agent.value, work.subject.id.value
+fields = created,issued,format,identifier,dataContributor,textgridUri,project.id,relations.isDerivedFrom,title,pid.value,edition.isEditionOf,edition.agent.value,edition.license.licenseUri,edition.language,edition.source.bibliographicCitation.author.value,edition.source.bibliographicCitation.editor.value,edition.source.bibliographicCitation.editionTitle,edition.source.bibliographicCitation.placeOfPublication.value,edition.source.bibliographicCitation.publisher.value,edition.source.bibliographicCitation.editionNo,edition.source.bibliographicCitation.series,edition.source.bibliographicCitation.volume,edition.source.bibliographicCitation.issue,edition.source.bibliographicCitation.epage,edition.source.bibliographicCitation.spage,edition.source.bibliographicCitation.bibidentifier,work.abstract,work.genre,work.type,work.spatial.value,work.temporal.value,work.agent.value,work.subject.id.value,lastModified
+workFields = created,work.abstract,relations.isDerivedFrom,textgridUri,work.genre,title,work.type,work.spatial.value,work.temporal.spatial,work.agent.value,work.subject.id.value
+
+
+######################
+## OpenAireRecords ###
+######################
+
+oar.titleFields = title,edition.source.bibliographicCitation.editionTitle
+oar.dateFields = created,issued,lastModified
+oar.contributorFields = dataContributor
+oar.languageFields = edition.language
+oar.alternateIdentifierFields = textgridUri
+oar.formatFields = format
+oar.rightsFields = edition.license
+oar.descriptionFields = work.abstract
+oar.relatedIdentifierFields = edition.isEditionOf
+oar.relationToWorkObject = edition.isEditionOf
 
 ##########################
 ##  Dublin Core Fields  ##
 ##########################
 
 contributorList = dataContributor
-coverageList = work.spatial.value, work.temporal.value
+coverageList = work.spatial.value,work.temporal.value
 creatorList = work.agent.value
 dateList = created
 descriptionList = work.abstract
 formatList = format
-identifierList = textgridUri, pid.value, identifier
+identifierList = textgridUri,pid.value,identifier
 languageList = edition.language
 publisherList = edition.source.bibliographicCitation.publisher.value
-relationList = project.id, relations.isDerivedFrom
-relationsForWorkList = relations.isDerivedFrom, title, textgridUri
+relationList = project.id,relations.isDerivedFrom
+relationsForWorkList = relations.isDerivedFrom,title,textgridUri
 rightsList = edition.license.licenseUri
-sourceList = edition.source.bibliographicCitation.author.value, edition.source.bibliographicCitation.editor.value, edition.source.bibliographicCitation.editionTitle, edition.source.bibliographicCitation.placeOfPublication.value, edition.source.bibliographicCitation.publisher.value, edition.source.bibliographicCitation.editionNo, edition.source.bibliographicCitation.series, edition.source.bibliographicCitation.volume, edition.source.bibliographicCitation.issue, edition.source.bibliographicCitation.epage, edition.source.bibliographicCitation.spage
+sourceList = edition.source.bibliographicCitation.author.value,edition.source.bibliographicCitation.editor.value,edition.source.bibliographicCitation.editionTitle,edition.source.bibliographicCitation.placeOfPublication.value,edition.source.bibliographicCitation.publisher.value,edition.source.bibliographicCitation.editionNo,edition.source.bibliographicCitation.series,edition.source.bibliographicCitation.volume,edition.source.bibliographicCitation.issue,edition.source.bibliographicCitation.epage,edition.source.bibliographicCitation.spage
 subjectList = work.subject.id.value
 titleList = title
-typeList = work.genre, work.type
+typeList = work.genre,work.type
 
 #############################
 ##  ListIdentifierSetting  ##
 #############################
 
 rangeField = created
-identifierListFields = textgridUri, created, format
+identifierListFields = textgridUri,created,format
 formatField = format
 formatToFilter = text/vnd.dariah.dhrep.collection+turtle
 dateOfObjectCreation = created
-- 
GitLab