package eu.dnetlib.data.utility.featureextraction;

import static org.junit.Assert.*;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import javax.xml.bind.JAXBException;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
import org.xml.sax.InputSource;

import eu.dnetlib.common.utils.XMLSerializer;
import eu.dnetlib.common.ws.ISBeansFactoryCnrApi;
import eu.dnetlib.data.sts.das.DataAccessServiceException;
import eu.dnetlib.data.sts.das.IDataAccessService;
import eu.dnetlib.data.sts.ds.DepotServiceException;
import eu.dnetlib.data.sts.ds.IDepotService;
import eu.dnetlib.data.utility.download.DownloadServiceException;
import eu.dnetlib.data.utility.download.IDownloadService;
import eu.dnetlib.data.utility.featureextraction.Feature;
import eu.dnetlib.data.utility.featureextraction.FeatureExtractionException;
import eu.dnetlib.data.utility.featureextraction.IFeatureExtractionService;
import eu.dnetlib.data.utility.featureextraction.Feature.STORAGETYPE;
import eu.dnetlib.data.utility.featureextraction.record.StoreObject;
import eu.dnetlib.data.utility.featureextraction.record.StoreRecord;
import eu.dnetlib.data.utility.featureextraction.record.StoreObject.DATATYPE;
import eu.dnetlib.enabling.resultset.rmi.ResultSetException;
import eu.dnetlib.enabling.resultset.rmi.ResultSetService;
import eu.dnetlib.enabling.tools.JaxwsServiceResolverImpl;
import eu.dnetlib.enabling.tools.ServiceResolver;

public class StorePdf {

	private static final Log log = LogFactory.getLog(StorePdf.class);
	String ip = "146.48.122.27";
	private transient String depotServiceAddress = "http://"+ip+":8980/dnet-sts-ds/services/DepotService";
	private transient String accessServiceAddress = "http://"+ip+":8780/dnet-sts-das/services/DataAccessService";
	private transient String downloadServiceAddress ="";// "http://localhost:8580/dnet-download/services/DownloadService";
	private transient String fesServiceAddress = "http://"+ip+":8680/dnet-fes/services/FeatureExtractionService";
	
	private transient String harvestingRsServiceAddress = "http://node2.d.openaire.research-infrastructures.eu:8680/dnet-harvesting/services/resultset";
	private transient IDepotService depotService;
	private transient IDataAccessService accessService;
	private transient IFeatureExtractionService fesService;
	private transient ResultSetService srcRsService;
	private transient ResultSetService rsService;
	private transient IDownloadService downService;
	private transient ServiceResolver resolver = new JaxwsServiceResolverImpl();
	private transient String[] pdfMimeType = {"application/pdf"};
	private transient String storeId = ""; //"844c37b6-2122-4fe8-bdf5-f56ab4830f5d_U3RvcmVEU1Jlc291cmNlcy9TdG9yZURTUmVzb3VyY2VUeXBl";
	private transient long storeSize = 50;
	private transient XMLSerializer<StoreRecord> recordHandler = new XMLSerializer<StoreRecord>(StoreRecord.class);
	private transient XPath xpath = XPathFactory.newInstance().newXPath();
	
	
	
	 

	private String[] id = {
			"oai:bieson.ub.uni-bielefeld.de:1081",
			"oai:bieson.ub.uni-bielefeld.de:838",
			"oai:bieson.ub.uni-bielefeld.de:1024",
			"oai:bieson.ub.uni-bielefeld.de:1064",
			"oai:bieson.ub.uni-bielefeld.de:1178",
			"oai:bieson.ub.uni-bielefeld.de:1170",
			"oai:bieson.ub.uni-bielefeld.de:1325",
			"oai:bieson.ub.uni-bielefeld.de:1384",
			"oai:bieson.ub.uni-bielefeld.de:1104",
			"oai:bieson.ub.uni-bielefeld.de:875",
			"oai:bieson.ub.uni-bielefeld.de:1276",
			"oai:bieson.ub.uni-bielefeld.de:1160",
			"oai:bieson.ub.uni-bielefeld.de:1397",
			"oai:bieson.ub.uni-bielefeld.de:1514",
			"oai:bieson.ub.uni-bielefeld.de:1538",
			"oai:bieson.ub.uni-bielefeld.de:1691",
			"oai:bieson.ub.uni-bielefeld.de:1553",
			"oai:bieson.ub.uni-bielefeld.de:1584",
			"oai:bieson.ub.uni-bielefeld.de:1473",
			"oai:bieson.ub.uni-bielefeld.de:1595",
			"oai:bieson.ub.uni-bielefeld.de:1542",
			"oai:bieson.ub.uni-bielefeld.de:1615",
			"oai:bieson.ub.uni-bielefeld.de:1686",
			"oai:bieson.ub.uni-bielefeld.de:1549",
			"oai:bieson.ub.uni-bielefeld.de:1600",
			"oai:bieson.ub.uni-bielefeld.de:1609",
			"oai:bieson.ub.uni-bielefeld.de:1616",
			"oai:bieson.ub.uni-bielefeld.de:1682",
			"oai:bieson.ub.uni-bielefeld.de:1548",
			"oai:bieson.ub.uni-bielefeld.de:1728",
			"oai:bieson.ub.uni-bielefeld.de:1627",
			"oai:bieson.ub.uni-bielefeld.de:1676",
			"oai:bieson.ub.uni-bielefeld.de:1693",
			"oai:bieson.ub.uni-bielefeld.de:1662",
			"oai:bieson.ub.uni-bielefeld.de:1698",
			"oai:bieson.ub.uni-bielefeld.de:1726",
			"oai:bieson.ub.uni-bielefeld.de:1667",
			"oai:bieson.ub.uni-bielefeld.de:1723",
			"oai:bieson.ub.uni-bielefeld.de:1721",
			"oai:bieson.ub.uni-bielefeld.de:1613",
			"oai:bieson.ub.uni-bielefeld.de:1685",
			"oai:bieson.ub.uni-bielefeld.de:1696",
			"oai:bieson.ub.uni-bielefeld.de:1494",
			"oai:bieson.ub.uni-bielefeld.de:1537",
			"oai:bieson.ub.uni-bielefeld.de:121",
			"oai:etheses.nottingham.ac.uk:652",
			"oai:etheses.nottingham.ac.uk:107", 
			"oai:DiVA.org:uu-1417", 
			"oai:DiVA.org:uu-72702",
			"oai:dspace.library.uu.nl:1874_1974",
			"oai:bieson.ub.uni-bielefeld.de:1555",
			"oai:bieson.ub.uni-bielefeld.de:1510",
			"oai:bieson.ub.uni-bielefeld.de:1647",
			"oai:bieson.ub.uni-bielefeld.de:1636",
			"oai:bieson.ub.uni-bielefeld.de:1683",
			"oai:bieson.ub.uni-bielefeld.de:1687",
			"oai:bieson.ub.uni-bielefeld.de:1552",
			"oai:bieson.ub.uni-bielefeld.de:1513",
			"oai:bieson.ub.uni-bielefeld.de:1576",
			"oai:bieson.ub.uni-bielefeld.de:1633",
			"oai:bieson.ub.uni-bielefeld.de:1577",
			"oai:bieson.ub.uni-bielefeld.de:1590",
			"oai:bieson.ub.uni-bielefeld.de:1669",
			"oai:bieson.ub.uni-bielefeld.de:1713",
			"oai:bieson.ub.uni-bielefeld.de:1535",
			"oai:bieson.ub.uni-bielefeld.de:1350",
			"oai:bieson.ub.uni-bielefeld.de:1465",
			"oai:bieson.ub.uni-bielefeld.de:1244",
			"oai:bieson.ub.uni-bielefeld.de:1385",
			"oai:bieson.ub.uni-bielefeld.de:1382",
			"oai:bieson.ub.uni-bielefeld.de:1395",
			"oai:bieson.ub.uni-bielefeld.de:1268a",
			"oai:bieson.ub.uni-bielefeld.de:1268b",
			"oai:bieson.ub.uni-bielefeld.de:1268c",
			"oai:bieson.ub.uni-bielefeld.de:1268d",
			"oai:bieson.ub.uni-bielefeld.de:1268e",
			"oai:bieson.ub.uni-bielefeld.de:1268f",
			"oai:bieson.ub.uni-bielefeld.de:1268g",
			"oai:bieson.ub.uni-bielefeld.de:1268h",
			"oai:bieson.ub.uni-bielefeld.de:1268i",
			"oai:bieson.ub.uni-bielefeld.de:1350",
			"oai:bieson.ub.uni-bielefeld.de:1317",
			"oai:bieson.ub.uni-bielefeld.de:1153",
			"oai:bieson.ub.uni-bielefeld.de:1183",
			"oai:bieson.ub.uni-bielefeld.de:1248",
			"oai:bieson.ub.uni-bielefeld.de:1275",
			"oai:bieson.ub.uni-bielefeld.de:1148",
			"oai:bieson.ub.uni-bielefeld.de:1199",
			"oai:bieson.ub.uni-bielefeld.de:1166",
			"oai:bieson.ub.uni-bielefeld.de:1115",
			"oai:bieson.ub.uni-bielefeld.de:1182",
			"oai:bieson.ub.uni-bielefeld.de:1236"
			};
	private String[] uri = {
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1081/pdf/asczyrba_diss.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2006/838/pdf/Taher_Leila_Thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1024/pdf/dissertation_bruning.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1064/pdf/thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1178/pdf/Dissertation_SMartinL.pdf.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1170/pdf/Dissertation_Revised.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1325/pdf/diss.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1384/pdf/Dissertation.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1104/pdf/2007.01.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2006/875/pdf/barnrich_dm_research.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1276/pdf/thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1160/pdf/Haasch_Dissertation.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1397/pdf/Dissertation_LiZhe.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1514/pdf/doctoratPublish.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1583/pdf/thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1691/pdf/Synopse_BieSOnx.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1553/pdf/PhDOlga.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1584/pdf/diss_Herms.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1473/pdf/thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1595/pdf/Dissertation_Vanselow_2009.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1542/pdf/000_titelei.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1615/pdf/diss.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1686/pdf/Thesis_Lohse.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1549/pdf/disMikhailova082009.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1600/pdf/Dissertation_Cynthia_Mira_Sharma.pdf.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1609/pdf/DissertationSHenkenjohannk.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1616/pdf/thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1682/pdf/Thesis_29.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1548/pdf/Thesis_2009_IMadeWiryana.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1728/pdf/bk_dissertation_2010.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1627/pdf/phd_thesis_wittler.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1676/pdf/429.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1693/pdf/PhD_Thesis_Ihsan.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1662/pdf/Dissertation_Kolja_Henckel.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1698/pdf/thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1726/pdf/Thesis.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1667/pdf/Doktorarbeit_FD.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1723/pdf/RubianoClaudia_disertation_e.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1721/pdf/Thesis_Liang_2010.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1613/pdf/Girndt_Responses_to_Racial.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1685/pdf/ManuscriptND.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1696/pdf/Dissertation_Fluegel_2010.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1494/pdf/Wolter_Diplomarbeit.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1537/pdf/Dissertation_Montforts.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2003/121/pdf/1_diss.pdf",
			"http://etheses.nottingham.ac.uk/652/1/thesis_small.pdf", 
			"http://etheses.nottingham.ac.uk/107/1/ASYATES_-_THESIS.pdf",
			"http://uu.diva-portal.org/smash/get/diva2:160941/FULLTEXT01",
			"http://uu.diva-portal.org/smash/get/diva2:100613/FULLTEXT02",
			"http://igitur-archive.library.uu.nl/math/2001-0219-164653/2000-31.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1555/pdf/thesis_Sandra_Freitag.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1510/pdf/Badura_Steinke.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1647/pdf/diss_froeben.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1636/pdf/Manuskript_Promotion_Ulrichs_100224.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1683/pdf/Dissertation_ASchaefers.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1687/pdf/Doktorarbeit-_Salvador_Millaleo.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1552/pdf/DOKTORARBEIT_Olaf_Kaup.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1513/pdf/Dissertation_Stefanie_Meyer.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1576/pdf/JSbsM.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1633/pdf/Sroczynski_Dissertation_DrPH.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1577/pdf/Thesis.Main.Plain.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1590/pdf/Dissertation_online_final.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1669/pdf/diss_gold.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2010/1713/pdf/Diss_Kirsten_Heitland.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1535/pdf/phdthesis_swrede.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1360/pdf/asbrock_dissertation.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2009/1465/pdf/Dissertation_Janine_Feldmann.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1244/pdf/Dissertation_JuergenReymann.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1385/pdf/Dissertation_Doreen_Asbrock.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1382/pdf/Diss_Rullkoetter08.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1395/pdf/Promotion_Jugend_und_Religion_Ulf_Elmhorst_2008.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/00_titelei.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/03_kap2.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/06_kap05.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/01_content.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/04_kap3.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/07_kap06.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/02_kap1.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/05_kap04.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1268/pdf/08_bibli.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1350/pdf/dissZakotnik.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1317/pdf/Dissertation_Abt_2008.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1153/pdf/CIC_QUI_2007.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1183/pdf/Hirofumi_Ishihara2007.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1248/pdf/Dissertation_MZT_Fliegner.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1275/pdf/Dissertation.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1148/pdf/Dissertation_R._Schmidt.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1199/pdf/Dissertation_Moellmann_2007.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1166/pdf/phd.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1115/pdf/SchoWie_26062007.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2007/1182/pdf/Dissertation_Veronica_Witte.pdf",
			"http://bieson.ub.uni-bielefeld.de/volltexte/2008/1236/pdf/DissertationDondrup.pdf"
			};
	//1600, 1726
	@Before
	public void setUp() throws DepotServiceException{
		// TODO run this method once, then put the storeId above in order to reuse it.
		ISBeansFactoryCnrApi beanFac = new ISBeansFactoryCnrApi();
		depotService = beanFac.getService(IDepotService.class, depotServiceAddress, depotServiceAddress + "?wsdl");
		accessService = beanFac.getService(IDataAccessService.class, accessServiceAddress, accessServiceAddress + "?wsdl");
		fesService = beanFac.getService(IFeatureExtractionService.class, fesServiceAddress, fesServiceAddress + "?wsdl");
		srcRsService = beanFac.getService(ResultSetService.class, harvestingRsServiceAddress, harvestingRsServiceAddress + "?wsdl");
		downService = beanFac.getService(IDownloadService.class, downloadServiceAddress, downloadServiceAddress + "?wsdl");
		assertNotNull(srcRsService);
		try {
			storeId = depotService.createStore(Arrays.asList(pdfMimeType), storeSize);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		assertNotNull(storeId);
		assertNotNull(fesService);
		log.debug("storeId: " + storeId);
		/*String rsad = "http://146.48.85.202:8280/dnet-harvesting/services/resultset";
	    ResultSetService rs = beanFac.getService(ResultSetService.class, rsad, rsad + "?wsdl");
	    
	    try {
			W3CEndpointReference epr = rs.createPushRS(240, 240);
			final ServiceResolver serviceResolver = new JaxwsServiceResolverImpl();
			final String rsId = serviceResolver.getResourceIdentifier(epr);
			List<String> li = new ArrayList<String>();
			for (int i=0; i<5;i ++) {
				li.add("dffffffffffffffffffffffffffffffffffffffffffffffdfdfdfdfdfdfdffddffdfdfdfd"+i);
				rs.populateRS(rsId, li);
				li = new ArrayList<String>();
				System.out.println(i+ ": "+ rs.getRSStatus(rsId));
				System.out.println("nrs:"+ rs.getNumberOfElements(rsId));
				System.out.println("res: "+ rs.getResult(rsId, i+1, rs.getNumberOfElements(rsId), "non-waiting"));
				Thread.sleep(50000);
			}	
			System.exit(1);
		} catch (ResultSetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    */
	}
	
	@Test
	public void testStoreExtract() throws XPathExpressionException,
		JAXBException, DepotServiceException, InterruptedException, 
		FeatureExtractionException, ResultSetException, DataAccessServiceException{
		
		testStoring();
		Thread.sleep(10000);
		testFullTextExtract();
	}
	
	@Test
	public void extraction() throws Exception {
		String stds = "ce75d7ee-2c02-4430-8422-ef6193d9b422_U3RvcmVEU1Jlc291cmNlcy9TdG9yZURTUmVzb3VyY2VUeXBl";
		
		try { 
			log.debug("Requesting Data Access Service for SDOs");
			W3CEndpointReference dasEPR = accessService.storeLookUpSDORS(stds);
			log.debug("RSEPR received from Store DAS Service:"+ dasEPR);
			log.debug("Sending request with DAS RS to FES");
			Feature f = new Feature();
			f.setName("fulltext");
			f.setStorageType(STORAGETYPE.INCREMENTAL);
			fesService.extract(f, dasEPR);
						
		} catch (Exception e) {
			log.error(e);
			throw new Exception(e);
		}
	}
	
	@Test
	public void checkDownloadFromSDO() throws XPathExpressionException, 
		JAXBException, DepotServiceException, InterruptedException, DataAccessServiceException, 
		ResultSetException, DownloadServiceException {
		
		//testStoring();
		storeId = "9bd89390-b121-4c3e-916c-06706b93c2a1_U3RvcmVEU1Jlc291cmNlcy9TdG9yZURTUmVzb3VyY2VUeXBl";
		W3CEndpointReference srcEpr = accessService.storeLookUpSDORS(storeId);
		assertNotNull(srcEpr);
		
		String rsId = resolver.getResourceIdentifier(srcEpr);
		rsService = resolver.getService(ResultSetService.class, srcEpr);
		int total = rsService.getNumberOfElements(rsId);
		System.out.println(total);
		List<String> results = rsService.getResult(rsId, 1, 6, "non-waiting");
		System.out.println(results.get(0));
		
		W3CEndpointReference depr = downService.downloadURLsFromXML(srcEpr, "//SDO_URI");
		Thread.sleep(5000);
		
		assertNotNull(depr);
		
		String rsId1 = resolver.getResourceIdentifier(depr);
		rsService = resolver.getService(ResultSetService.class, depr);
		int total1 = rsService.getNumberOfElements(rsId1);
		System.out.println(total1);
		List<String> results1 = rsService.getResult(rsId1, 1, 6, "non-waiting");
		System.out.println(results1.get(0));
		
		
		
		
	}
	
	//@Test
	public void testStoring() throws JAXBException, DepotServiceException, XPathExpressionException, InterruptedException{
		List<String> ls = new ArrayList<String>();
		for (int i = 0; i < id.length; i++){
			ls.add(getStoreRecord(id[i], uri[i]));	
		}
		
		String actionid = depotService.storeObjects(storeId, ls, "INCREMENTAL");
		String status = null;
		
		while( (status = getStatus(depotService.storingCallback(storeId, actionid, false))).equals("ONGOING") ){
			Thread.sleep(2000);
			log.debug("wait");
		}
		if (status.equals("DONE")){
			log.debug("stored successfully.");
		}else{
			log.debug("status is: " + status);
		}	
		
	}
	
	//@Test
	public void testFullTextExtract() throws DataAccessServiceException, FeatureExtractionException, ResultSetException, InterruptedException{
		W3CEndpointReference srcEpr = accessService.storeLookUpSDORS(storeId);
		
		assertNotNull(srcEpr);
		Feature f = new Feature();
		f.setName("fulltext");
		f.setStorageType(STORAGETYPE.INCREMENTAL);
		System.out.println("!!!!");
		//W3CEndpointReference sinkEpr  = srcEpr;
		W3CEndpointReference sinkEpr = fesService.extract(f, srcEpr);
		System.out.println("!!!!A");
		assertNotNull(sinkEpr);
		Thread.sleep(50000);
		String rsId = resolver.getResourceIdentifier(sinkEpr);
		rsService = resolver.getService(ResultSetService.class, sinkEpr);
		int total = rsService.getNumberOfElements(rsId);
		assertEquals(6, total);
		System.out.println("numofElements: " + total + " for rsId: " + rsId);
		int from = 1;
		int to = total;		
		List<String> results = null;
		int MAXTRIALS = 10;
		int trials = 0;
		while (results == null && trials < MAXTRIALS){
			results = rsService.getResult(rsId, from, to, null);
			if (results == null){
				log.debug("results is null");
				Thread.sleep(5000);
			}else{
				for (String s: results){
					log.debug(s);					
				}
			}
			
		}
//		while ( (results = rsService.getResult(rsId, from, to, null)).size() < total){
//			Thread.sleep(1000);
//			from = results.size();
//			to = total;
//			log.debug("status: " + rsService.getRSStatus(rsId));
//			allResults.addAll(results);
//		}
//		for (String sdo: allResults){
//			System.out.println(sdo);
//		}
	}


	
	//@Test
	public void testExtractedItem() throws DataAccessServiceException{
		// TODO customize the fulltextStoreId before running the test !!!
		String fulltextStoreId = "335a5544-689e-4c01-9d2a-1b376429756c_U3RvcmVEU1Jlc291cmNlcy9TdG9yZURTUmVzb3VyY2VUeXBl";
		List<String> sdoList = new LinkedList<String>();
		String sdo = null;
		for (int i = 0; i < id.length; i++){
			System.out.println("performing id: " + id[i]);
			sdo = accessService.getObjectSDO(id[i], fulltextStoreId);
			assertNotNull(sdo);
			System.out.println(sdo);
			sdoList.add(sdo);
		}
		assertEquals(6, sdoList.size());
		
	}
	
	//@Test
	public void testStoredItem() throws DataAccessServiceException, ResultSetException, InterruptedException, FeatureExtractionException{
		//String objId = "oai:bieson.ub.uni-bielefeld.de:121";
		//String objId = "oai:DiVA.org:uu-72702";
		//String objId = "oai:dspace.library.uu.nl:1874/1974";
		List<String> sdoList = new LinkedList<String>();
		String sdo = null;
		for (int i = 0; i < id.length; i++){
			sdo = accessService.getObjectSDO(id[i], storeId);
			assertNotNull(sdo);
			sdoList.add(sdo);
		}
		assertEquals(4, sdoList.size());
		W3CEndpointReference srcEpr = srcRsService.createPushRS(50000, 50000);		
		String rsId = resolver.getResourceIdentifier(srcEpr);
		rsService = resolver.getService(ResultSetService.class, srcEpr);
		rsService.populateRS(rsId, sdoList);
		int total = rsService.getNumberOfElements(rsId);
		assertEquals(4, total);
		rsService.closeRS(rsId);
		
		Feature f = new Feature();
		f.setName("fulltext");
		W3CEndpointReference sinkEpr = fesService.extract(f, srcEpr);
		assertNotNull(sinkEpr);
		rsId = resolver.getResourceIdentifier(sinkEpr);
		rsService = resolver.getService(ResultSetService.class, sinkEpr);
		total = rsService.getNumberOfElements(rsId);
		System.out.println("numOfElements from fes: " + total);
		int from = 1;
		int to = total;		
		List<String> allResults = new LinkedList<String>();
		List<String> results = new LinkedList<String>();
		while ( (results = rsService.getResult(rsId, from, to, null)).size() < total){
			Thread.sleep(1000);
			from = results.size();
			to = total;
			System.out.println("status: " + rsService.getRSStatus(rsId));
			allResults.addAll(results);
		}
		for (String sdoOut: allResults){
			System.out.println(sdoOut);
		}

		
	}
	
	
	
	private String getStoreRecord(String identifier, String uri) throws JAXBException{
		//List<String> recordList = new java.util.LinkedList<String>();
		StoreRecord record = new StoreRecord();
		record.setStoreRecordIdentifier(identifier);
		StoreObject obj = new StoreObject();
		obj.setDataType(DATATYPE.URI);
		obj.setStoreObject(uri);
		record.setStoreObject(obj);
		//recordList.add(recordHandler.getAsXml(record));
		return recordHandler.getAsXml(record);
	};
	
	private String getStatus(String aStatusProfile) throws XPathExpressionException{
		log.debug(aStatusProfile);
		InputSource inSource = new InputSource(new StringReader(aStatusProfile));
		return xpath.evaluate("/STORING_ACTION//STORING_STATUS/@value", inSource);
	}
	
}
