Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstores.st
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstores.st	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstores.st	(revision 47871)
@@ -0,0 +1,15 @@
+$inspector/master(it={
+
+<h2>ObjectStores</h2>
+
+<table>
+  <tr>
+    <th>Size</th>
+    <th>ID</th>  
+    <th>Interpretation</th>    
+  </tr>
+  $objectstores:{
+      <tr><td>$it.size$</td><td><a href="objectstore.do?id=$it.id$">$it.id$</a></td><td>$it.interpretation$</td></tr>
+  }$
+</table>
+})$
\ No newline at end of file
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/test/schemas/ObjectStoreDSResourceType.xsd
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/test/schemas/ObjectStoreDSResourceType.xsd	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/test/schemas/ObjectStoreDSResourceType.xsd	(revision 47871)
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+    <xs:complexType name="BODYType">
+        <xs:sequence>
+            <xs:element name="CONFIGURATION" type="CONFIGURATIONType"/>
+            <xs:element name="STATUS" type="STATUSType"/>
+            <xs:element ref="SECURITY_PARAMETERS"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="CONFIGURATIONType">
+        <xs:all>
+            <xs:element ref="OBJECTSTORE_INTERPRETATION"/>            
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="DATE_OF_CREATIONType">
+        <xs:attribute name="value" type="xs:dateTime" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="HEADERType">
+        <xs:all>
+            <xs:element name="RESOURCE_IDENTIFIER" type="RESOURCE_IDENTIFIERType"/>
+            <xs:element name="RESOURCE_TYPE" type="RESOURCE_TYPEType"/>
+            <xs:element name="RESOURCE_KIND" type="RESOURCE_KINDType"/>
+            <xs:element name="RESOURCE_URI" type="RESOURCE_URIType"/>
+            <xs:element name="DATE_OF_CREATION" type="DATE_OF_CREATIONType"/>
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="RESOURCE_IDENTIFIERType">
+        <xs:attribute name="value" type="xs:string" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="RESOURCE_KINDType">
+        <xs:attribute name="value" use="required">
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="ObjectStoreDSResources"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:element name="RESOURCE_PROFILE">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="HEADER" type="HEADERType"/>
+                <xs:element name="BODY" type="BODYType"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:complexType name="RESOURCE_TYPEType">
+        <xs:attribute name="value" use="required">
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="ObjectStoreDSResourceType"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="RESOURCE_URIType">
+        <xs:attribute name="value" type="xs:string" use="required"/>
+    </xs:complexType>
+    <xs:element name="SECURITY_PARAMETERS" type="xs:string"/>
+    <xs:complexType name="STATUSType">
+        <xs:all>
+            <xs:element ref="PENULTIMATE_STORAGE_DATE"/>
+            <xs:element ref="LAST_STORAGE_DATE"/>
+            <xs:element name="FETCHING_FREQUENCY"/>
+            <xs:element ref="COUNT_STORE"/>
+            <xs:element ref="STORE_SIZE"/>
+            <xs:element name="STATISTICS_FIELDS" type="STATISTICS_FIELDSType"/>
+        </xs:all>
+    </xs:complexType>
+    <xs:element name="OBJECTSTORE_INTERPRETATION" type="xs:string"/>
+    <xs:element name="PENULTIMATE_STORAGE_DATE" type="xs:string"/>
+    <xs:element name="LAST_STORAGE_DATE" type="xs:string"/>
+    <xs:element name="FETCHING_FREQUENCY" type="xs:string"/>
+    <xs:complexType name="VFIELDType">
+        <xs:sequence>
+            <xs:element name="VALUE" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:string" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="FIELDType">
+        <xs:attribute name="name" type="xs:string" use="required"/>
+    </xs:complexType>
+    <xs:element name="COUNT_STORE" type="xs:int"/>
+    <xs:element name="STORE_SIZE" type="xs:int"/>
+    <xs:complexType name="STATISTICS_FIELDSType">
+        <xs:sequence>
+            <xs:element name="FIELD" type="VFIELDType" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+</xs:schema>
\ No newline at end of file
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/pom.xml
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/pom.xml	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/pom.xml	(revision 47871)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<parent>
+		<groupId>eu.dnetlib</groupId>
+		<artifactId>dnet45-parent</artifactId>
+		<version>1.0.0</version>
+	</parent>
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>eu.dnetlib</groupId>
+	<artifactId>dnet-modular-objectstore-service</artifactId>
+	<packaging>jar</packaging>
+	<version>4.2.1</version>
+	<scm>
+	  <developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1</developerConnection>
+	</scm>
+	<dependencies>
+		<dependency>
+			<groupId>eu.dnetlib</groupId>
+			<artifactId>dnet-objectstore-rmi</artifactId>
+			<version>[2.0.0,3.0.0)</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.dnetlib</groupId>
+			<artifactId>cnr-resultset-service</artifactId>
+			<version>[2.0.0,3.0.0)</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.dnetlib</groupId>
+			<artifactId>cnr-resultset-client</artifactId>
+			<version>[2.0.0,3.0.0)</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.dnetlib</groupId>
+			<artifactId>cnr-blackboard-common</artifactId>
+			<version>[2.0.0,3.0.0)</version>
+		</dependency>
+		<dependency>
+			<groupId>eu.dnetlib</groupId>
+			<artifactId>cnr-inspector</artifactId>
+			<version>[1.0.0,2.0.0)</version>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>${junit.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>apache</groupId>
+			<artifactId>commons-net</artifactId>
+			<version>2.2</version>
+		</dependency>
+		<dependency>
+			<groupId>apache</groupId>
+			<artifactId>commons-net-ftp</artifactId>
+			<version>2.0</version>
+		</dependency>
+
+	</dependencies>
+</project>
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/deploy.info
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/deploy.info	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/deploy.info	(revision 47871)
@@ -0,0 +1 @@
+{"type_source": "SVN", "goal": "package -U -T 4C source:jar", "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-modular-objectstore-service/trunk/", "deploy_repository": "dnet45-snapshots", "version": "4", "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots", "name": "dnet-modular-objectstore-service"}
\ No newline at end of file
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/connector/ObjectStore.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/connector/ObjectStore.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/connector/ObjectStore.java	(revision 47871)
@@ -0,0 +1,131 @@
+package eu.dnetlib.data.objectstore.modular.connector;
+
+import eu.dnetlib.data.objectstore.modular.ObjectStoreRecord;
+import eu.dnetlib.data.objectstore.rmi.MetadataObjectRecord;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.resultset.ResultSetListener;
+
+/**
+ * The Interface ObjectStore.
+ */
+public interface ObjectStore {
+
+	/**
+	 * Gets the id of the objectStore.
+	 *
+	 * @return the id
+	 */
+	String getId();
+
+	/**
+	 * Gets the interpretation the objectStore.
+	 *
+	 * @return the interpretation
+	 */
+	String getInterpretation();
+
+	/**
+	 * Feed record into the objectstore.
+	 *
+	 * @param records
+	 *            the records
+	 * @param incremental
+	 *            the incremental
+	 * @return the int
+	 */
+	int feed(Iterable<ObjectStoreRecord> records, boolean incremental) throws ObjectStoreServiceException;
+
+	/**
+	 * Feed metadata record into the objectStore.
+	 *
+	 * @param records
+	 *            the records
+	 * @param incremental
+	 *            the incremental
+	 * @return the int
+	 */
+	int feedMetadataRecord(Iterable<MetadataObjectRecord> records, boolean incremental) throws ObjectStoreServiceException;
+
+	/**
+	 * Feed a single object record into the objectStore.
+	 *
+	 * @param record
+	 *            the record
+	 * @return the string
+	 */
+	String feedObjectRecord(ObjectStoreRecord record) throws ObjectStoreServiceException;
+
+	/**
+	 * Deliver Object from the objectStore.
+	 *
+	 * @param from
+	 *            : start date which you want to filter
+	 * @param until
+	 *            : end date which you want to filter
+	 * @return the result set listener
+	 */
+	ResultSetListener deliver(Long from, Long until) throws ObjectStoreServiceException;
+
+	/**
+	 * Deliver ids.
+	 *
+	 * @param ids
+	 *            the ids
+	 * @return the result set listener
+	 */
+	ResultSetListener deliverIds(Iterable<String> ids) throws ObjectStoreServiceException;
+
+	/**
+	 * Deliver object.
+	 *
+	 * @param objectId
+	 *            the object id
+	 * @return the object store file
+	 * @throws ObjectStoreServiceException
+	 */
+	ObjectStoreFile deliverObject(String objectId) throws ObjectStoreServiceException;
+
+	/**
+	 * Gets the size.
+	 *
+	 * @return the size
+	 */
+	int getSize() throws ObjectStoreServiceException;
+
+	/**
+	 * Delete object.
+	 *
+	 * @param objectId
+	 *            the object id
+	 */
+	void deleteObject(String objectId) throws ObjectStoreServiceException;
+
+	/**
+	 * Gets the object.
+	 *
+	 * @param recordId
+	 *            the record id
+	 * @return the object
+	 */
+	String getObject(String recordId) throws ObjectStoreServiceException;
+
+	/**
+	 * Find if exist an ID startingwith the string startId.
+	 *
+	 * @param startId
+	 *            the start id
+	 * @return if exist or less an id
+	 */
+	boolean existIDStartsWith(String startId) throws ObjectStoreServiceException;
+
+	/**
+	 * drop the content of the ObjectStore
+	 * THIS METHOD DELETE ALL THE CONTENT INSIDE THE OBJECTSTORE PAY ATTENTION WHEN YOU CALL IT
+	 *
+	 * @return if the content has been refreshed
+	 * @throws ObjectStoreServiceException
+	 */
+	boolean dropContent() throws ObjectStoreServiceException;
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/connector/ObjectStoreDao.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/connector/ObjectStoreDao.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/connector/ObjectStoreDao.java	(revision 47871)
@@ -0,0 +1,72 @@
+package eu.dnetlib.data.objectstore.modular.connector;
+
+import java.util.List;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+
+/**
+ * The Interface ObjectStoreDao.
+ */
+public interface ObjectStoreDao {
+
+	/**
+	 * Gets an Object Store with the given identifier.
+	 * <p>
+	 * If an Object Store with the given identifier does not exist, a new one is created.
+	 * </p>
+	 *
+	 * @param obsId
+	 *            the object store identifier
+	 * @return the object store
+	 * @throws ObjectStoreServiceException
+	 */
+	ObjectStore getObjectStore(String obsId) throws ObjectStoreServiceException;
+
+	/**
+	 * List all the Object stores.
+	 *
+	 * @return the list of object store ids
+	 */
+	List<String> listObjectStores();
+
+	/**
+	 * Creates an Object Store with the given identifier.
+	 * <p>
+	 * If an Object Store with the given identifier already exists this method does nothing.
+	 * </p>
+	 *
+	 * @param obsId            	the object store identifier
+	 * @param interpretation    the interpretation of the store
+	 * @param basePath 			the base path to store the object Store in case of file system implementation
+	 * @return true, if successful
+	 * @throws ObjectStoreServiceException
+	 */
+	boolean createObjectStore(String obsId, String interpretation, String basePath) throws ObjectStoreServiceException;
+
+	/**
+	 * Upddate an Object Store metadata with the given identifier.
+	 * <p>
+	 * If an Object Store with the given identifier does not exist, a new one is created.
+	 * </p>
+	 *
+	 * @param obsId
+	 *            the object store identifier
+	 * @param interpretation
+	 *            the interpretation of the store
+	 * @return true, if successful
+	 */
+	boolean updateObjectStore(String obsId, String interpretation);
+
+	/**
+	 * Delete object store.
+	 *
+	 * @param obsId
+	 *            the object store identifier
+	 * @return true, if successful
+	 * @throws ObjectStoreServiceException
+	 */
+	boolean deleteObjectStore(String obsId) throws ObjectStoreServiceException;
+
+	boolean dropContent(String obsId) throws ObjectStoreServiceException;
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreDeliver.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreDeliver.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreDeliver.java	(revision 47871)
@@ -0,0 +1,128 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import javax.annotation.Resource;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+
+import eu.dnetlib.data.objectstore.modular.connector.ObjectStoreDao;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.resultset.ResultSetFactory;
+import eu.dnetlib.enabling.resultset.client.ResultSetClientFactory;
+import org.springframework.beans.factory.annotation.Required;
+
+/**
+ * The Class ModularObjectStoreDeliver is responsible of delivering data from the object Store.
+ */
+public class ModularObjectStoreDeliver {
+
+	/** The dao. */
+	private ObjectStoreDao dao;
+
+	/** The result set factory. */
+	@Resource
+	private ResultSetFactory resultSetFactory;
+
+	/** The result set client factory. */
+	private ResultSetClientFactory resultSetClientFactory;
+
+	/**
+	 * Gets the dao.
+	 *
+	 * @return the dao
+	 */
+	public ObjectStoreDao getDao() {
+		return dao;
+	}
+
+	/**
+	 * Sets the dao.
+	 *
+	 * @param dao
+	 *            the new dao
+	 */
+	@Required
+	public void setDao(final ObjectStoreDao dao) {
+		this.dao = dao;
+	}
+
+	/**
+	 * Deliver.
+	 *
+	 * @param objectStoreID
+	 *            the object store id
+	 * @param from
+	 *            the from
+	 * @param until
+	 *            the until
+	 * @return the w3 c endpoint reference
+	 * @throws ObjectStoreServiceException
+	 */
+	public W3CEndpointReference deliver(final String objectStoreID, final Long from, final Long until) throws ObjectStoreServiceException {
+		return resultSetFactory.createResultSet(dao.getObjectStore(objectStoreID).deliver(from, until));
+	}
+
+	/**
+	 * Deliver ids.
+	 *
+	 * @param objectStoreID
+	 *            the object store id
+	 * @param eprId
+	 *            the epr id
+	 * @return the w3 c endpoint reference
+	 * @throws ObjectStoreServiceException
+	 */
+	public W3CEndpointReference deliverIds(final String objectStoreID, final W3CEndpointReference eprId) throws ObjectStoreServiceException {
+
+		Iterable<String> ids = resultSetClientFactory.getClient(eprId);
+		return resultSetFactory.createResultSet(dao.getObjectStore(objectStoreID).deliverIds(ids));
+	}
+
+	/**
+	 * Exist id starts with.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param startId
+	 *            the start id
+	 * @return true, if successful
+	 * @throws ObjectStoreServiceException
+	 */
+	public boolean existIDStartsWith(final String obsId, final String startId) throws ObjectStoreServiceException {
+		return dao.getObjectStore(obsId).existIDStartsWith(startId);
+	}
+
+	/**
+	 * Deliver object.
+	 *
+	 * @param objectStoreID
+	 *            the object store id
+	 * @param objectId
+	 *            the object id
+	 * @return the object store file
+	 * @throws ObjectStoreServiceException
+	 */
+	public ObjectStoreFile deliverObject(final String objectStoreID, final String objectId) throws ObjectStoreServiceException {
+		return dao.getObjectStore(objectStoreID).deliverObject(objectId);
+	}
+
+	/**
+	 * Gets the result set client factory.
+	 *
+	 * @return the result set client factory
+	 */
+	public ResultSetClientFactory getResultSetClientFactory() {
+		return resultSetClientFactory;
+	}
+
+	/**
+	 * Sets the result set client factory.
+	 *
+	 * @param resultSetClientFactory
+	 *            the new result set client factory
+	 */
+	@Required
+	public void setResultSetClientFactory(final ResultSetClientFactory resultSetClientFactory) {
+		this.resultSetClientFactory = resultSetClientFactory;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/CreateObjectStoreAction.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/CreateObjectStoreAction.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/CreateObjectStoreAction.java	(revision 47871)
@@ -0,0 +1,62 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The Class CreateObjectStoreAction is responsible to execute the blacboard action of type CREATE.
+ */
+public class CreateObjectStoreAction extends AbstractObjectStoreAction {
+
+	private static final Log log = LogFactory.getLog(CreateObjectStoreAction.class);
+
+	/** The profile creator. */
+	private ObjectStoreProfileCreator profileCreator;
+
+	/**
+	 * Gets the profile creator.
+	 *
+	 * @return the profile creator
+	 */
+	public ObjectStoreProfileCreator getProfileCreator() {
+		return profileCreator;
+	}
+
+	/**
+	 * Sets the profile creator.
+	 *
+	 * @param profileCreator the new profile creator
+	 */
+	public void setProfileCreator(final ObjectStoreProfileCreator profileCreator) {
+		this.profileCreator = profileCreator;
+	}
+
+	@Override
+	protected void executeAsync(final BlackboardServerHandler handler, final BlackboardJob job) {
+		try {
+			final String interpretation = job.getParameters().get("interpretation");
+			final String basePath = job.getParameters().get("basePath");
+			if (StringUtils.isBlank(basePath)) {
+				throw new ObjectStoreServiceException("missing basePath param");
+			}
+
+			final String objID = profileCreator.registerProfile(interpretation);
+			try {
+				getDao().createObjectStore(objID, interpretation, basePath);
+			} catch (Throwable e) {
+				log.warn("cannot created objectStore, deleting profile");
+				profileCreator.deleteProfile(objID);
+				throw new ObjectStoreServiceException(e);
+			}
+			job.getParameters().put("objectStoreId", objID);
+			completeWithSuccess(handler, job);
+		} catch (Exception e) {
+			completeWithFail(handler, job, e);
+		}
+
+	}
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreProfileCreator.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreProfileCreator.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreProfileCreator.java	(revision 47871)
@@ -0,0 +1,127 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import eu.dnetlib.enabling.is.registry.rmi.ISRegistryException;
+import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
+import eu.dnetlib.enabling.locators.UniqueServiceLocator;
+import eu.dnetlib.soap.EndpointReferenceBuilder;
+import org.antlr.stringtemplate.StringTemplate;
+import org.springframework.beans.factory.annotation.Required;
+
+import javax.xml.ws.Endpoint;
+
+// TODO: Auto-generated Javadoc
+
+/**
+ * The Class ObjectStoreProfileCreator is responsible of creating profile of the ObjectStore
+ */
+public class ObjectStoreProfileCreator {
+
+    /**
+     * service locator.
+     */
+    private UniqueServiceLocator serviceLocator;
+
+    /**
+     * objectstore ds template.
+     */
+    private StringTemplate objectstoreDsTemplate;
+
+    /**
+     * service endpoint.
+     */
+    private Endpoint endpoint;
+
+    /**
+     * endpoint builder.
+     */
+    private EndpointReferenceBuilder<Endpoint> eprBuilder;
+
+    /**
+     * Register profile.
+     *
+     * @param interpretation the interpretation
+     * @return the string
+     * @throws ISRegistryException the IS registry exception
+     */
+    public String registerProfile(final String interpretation)
+            throws ISRegistryException {
+        // XXX: mini hack
+        StringTemplate template = new StringTemplate(
+                objectstoreDsTemplate.getTemplate());
+        template.setAttribute("serviceUri", eprBuilder.getAddress(endpoint));
+        template.setAttribute("interpretation", interpretation);
+
+        return serviceLocator.getService(ISRegistryService.class, true).registerProfile(template.toString());
+    }
+
+    public void deleteProfile(final String profileId) throws ISRegistryException {
+        serviceLocator.getService(ISRegistryService.class).deleteProfile(profileId);
+    }
+
+    /**
+     * Gets the endpoint.
+     *
+     * @return the endpoint
+     */
+    public Endpoint getEndpoint() {
+        return endpoint;
+    }
+
+    /**
+     * Sets the endpoint.
+     *
+     * @param endpoint the new endpoint
+     */
+    @Required
+    public void setEndpoint(final Endpoint endpoint) {
+        this.endpoint = endpoint;
+    }
+
+    /**
+     * Gets the epr builder.
+     *
+     * @return the epr builder
+     */
+    public EndpointReferenceBuilder<Endpoint> getEprBuilder() {
+        return eprBuilder;
+    }
+
+    /**
+     * Sets the epr builder.
+     *
+     * @param eprBuilder the new epr builder
+     */
+    @Required
+    public void setEprBuilder(final EndpointReferenceBuilder<Endpoint> eprBuilder) {
+        this.eprBuilder = eprBuilder;
+    }
+
+    /**
+     * Gets the objectstore ds template.
+     *
+     * @return the objectstore ds template
+     */
+    public StringTemplate getObjectstoreDsTemplate() {
+        return objectstoreDsTemplate;
+    }
+
+    /**
+     * Sets the objectstore ds template.
+     *
+     * @param objectstoreDsTemplate the new objectstore ds template
+     */
+    @Required
+    public void setObjectstoreDsTemplate(final StringTemplate objectstoreDsTemplate) {
+        this.objectstoreDsTemplate = objectstoreDsTemplate;
+    }
+
+    public UniqueServiceLocator getServiceLocator() {
+        return serviceLocator;
+    }
+
+    @Required
+    public void setServiceLocator(final UniqueServiceLocator serviceLocator) {
+        this.serviceLocator = serviceLocator;
+    }
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/DropContentObjectStoreAction.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/DropContentObjectStoreAction.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/DropContentObjectStoreAction.java	(revision 47871)
@@ -0,0 +1,25 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
+
+/**
+ * Created by sandro on 2/26/16.
+ */
+public class DropContentObjectStoreAction extends AbstractObjectStoreAction {
+
+	@Override
+	protected void executeAsync(final BlackboardServerHandler handler, final BlackboardJob job) throws ObjectStoreServiceException {
+		try {
+			final String objID = job.getParameters().get("obsID");
+
+			final boolean status = getDao().dropContent(objID);
+			job.getParameters().put("dropStatus", "" + status);
+			completeWithSuccess(handler, job);
+		} catch (Exception e) {
+			completeWithFail(handler, job, e);
+		}
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreActions.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreActions.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreActions.java	(revision 47871)
@@ -0,0 +1,22 @@
+package eu.dnetlib.data.objectstore.modular;
+
+/**
+ * The Enumeration of the blacboard action of the  ObjectStore.
+ */
+public enum ObjectStoreActions {
+	
+	/** The create. */
+	CREATE,
+	/**
+	 * The delete.
+	 */
+	DELETE,
+	/**
+	 * The feed.
+	 */
+	FEED,
+	/**
+	 * The feedobject.
+	 */
+	FEEDOBJECT, DROP_CONTENT
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/DeleteObjectStoreAction.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/DeleteObjectStoreAction.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/DeleteObjectStoreAction.java	(revision 47871)
@@ -0,0 +1,55 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
+import eu.dnetlib.enabling.locators.UniqueServiceLocator;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * The Class DeleteObjectStoreAction is responsible to execute the blacboard action of type DELETE.
+ */
+public class DeleteObjectStoreAction extends AbstractObjectStoreAction {
+
+	/**
+	 * The profile creator.
+	 */
+
+	private ObjectStoreProfileCreator profileCreator;
+
+	@Autowired
+	private UniqueServiceLocator serviceLocator;
+
+	@Override
+	protected void executeAsync(final BlackboardServerHandler handler, final BlackboardJob job) throws ObjectStoreServiceException {
+		try {
+			final String objID = job.getParameters().get("obsID");
+			serviceLocator.getService(ISRegistryService.class).deleteProfile(objID);
+			getDao().deleteObjectStore(objID);
+			completeWithSuccess(handler, job);
+
+		} catch (Exception e) {
+			completeWithFail(handler, job, e);
+		}
+	}
+
+	/**
+	 * Gets the profile creator.
+	 *
+	 * @return the profile creator
+	 */
+	public ObjectStoreProfileCreator getProfileCreator() {
+		return profileCreator;
+	}
+
+	/**
+	 * Sets the profile creator.
+	 *
+	 * @param profileCreator the new profile creator
+	 */
+	public void setProfileCreator(ObjectStoreProfileCreator profileCreator) {
+		this.profileCreator = profileCreator;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/FeedObjectStoreAction.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/FeedObjectStoreAction.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/FeedObjectStoreAction.java	(revision 47871)
@@ -0,0 +1,92 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.data.objectstore.rmi.Protocols;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
+import org.springframework.beans.factory.annotation.Required;
+
+
+/**
+ * The Class FeedObjectStoreAction to execute the blacboard action of type FEED.
+ */
+public class FeedObjectStoreAction extends AbstractObjectStoreAction {
+
+	/** The profile creator. */
+	private ObjectStoreProfileCreator profileCreator;
+
+	/** The store feeder. */
+	private ModularObjectStoreFeeder storeFeeder;
+
+	@Override
+	protected void executeAsync(final BlackboardServerHandler handler, final BlackboardJob job) throws ObjectStoreServiceException {
+		try {
+			final String objStoreID = job.getParameters().get("obsID");
+			final String objID = job.getParameters().get("objID");
+			final String URI = job.getParameters().get("URI");
+			final String eprRs = job.getParameters().get("epr");
+			final String protocolString = job.getParameters().get("protocol");
+
+			final Protocols protocol;
+			if (protocolString == null)
+				protocol = Protocols.None;
+			else
+				protocol = Protocols.valueOf(job.getParameters().get("protocol"));
+			final String mime = job.getParameters().get("mime");
+			final String login = job.getParameters().get("login");
+			final String password = job.getParameters().get("password");
+
+			if (URI != null && URI.length() > 0) {
+				storeFeeder.feedObject(objStoreID, objID, URI, protocol, login,
+						password, mime);
+			} else if (eprRs != null && eprRs.length() > 0) {
+				storeFeeder
+						.feed(objStoreID, eprRs, protocol, login, password, mime);
+			}
+			completeWithSuccess(handler, job);
+		} catch (Exception e) {
+			completeWithFail(handler, job, e);
+		}
+	}
+
+
+
+	/**
+	 * Gets the profile creator.
+	 *
+	 * @return the profile creator
+	 */
+	public ObjectStoreProfileCreator getProfileCreator() {
+		return profileCreator;
+	}
+
+	/**
+	 * Sets the profile creator.
+	 *
+	 * @param profileCreator the new profile creator
+	 */
+	@Required
+	public void setProfileCreator(ObjectStoreProfileCreator profileCreator) {
+		this.profileCreator = profileCreator;
+	}
+
+	/**
+	 * Gets the store feeder.
+	 *
+	 * @return the store feeder
+	 */
+	public ModularObjectStoreFeeder getStoreFeeder() {
+		return storeFeeder;
+	}
+
+	/**
+	 * Sets the store feeder.
+	 *
+	 * @param storeFeeder the new store feeder
+	 */
+	@Required
+	public void setStoreFeeder(ModularObjectStoreFeeder storeFeeder) {
+		this.storeFeeder = storeFeeder;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/AbstractObjectStoreAction.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/AbstractObjectStoreAction.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/AbstractObjectStoreAction.java	(revision 47871)
@@ -0,0 +1,77 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+import eu.dnetlib.data.objectstore.modular.connector.ObjectStoreDao;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardServerAction;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The Class AbstractObjectStoreAction.
+ */
+public abstract class AbstractObjectStoreAction implements BlackboardServerAction<ObjectStoreActions> {
+
+	/**
+	 * Logger
+	 */
+	private static final Log log = LogFactory.getLog(AbstractObjectStoreAction.class);
+	private final Executor executor = Executors.newCachedThreadPool();
+	/** The object store dao. */
+	private ObjectStoreDao dao;
+
+	protected abstract void executeAsync(final BlackboardServerHandler handler, final BlackboardJob job) throws ObjectStoreServiceException;
+
+	@Override
+	public void execute(final BlackboardServerHandler handler, final BlackboardJob job) {
+		executor.execute(new Runnable() {
+
+			@Override
+			public void run() {
+				try {
+					handler.ongoing(job);
+					executeAsync(handler, job);
+				} catch (ObjectStoreServiceException e) {
+					handler.failed(job, e);
+				}
+			}
+		});
+	}
+
+	protected void completeWithSuccess(final BlackboardServerHandler handler, final BlackboardJob job) {
+		// Don't change this synchronization rule
+		synchronized (this) {
+			handler.done(job);
+		}
+	}
+
+	protected void completeWithFail(final BlackboardServerHandler handler, final BlackboardJob job, final Throwable e) {
+		// Don't change this synchronization rule
+		synchronized (this) {
+			handler.failed(job, e);
+		}
+	}
+
+	/**
+	 * Gets the dao.
+	 *
+	 * @return the dao
+	 */
+	public ObjectStoreDao getDao() {
+		return dao;
+	}
+
+	/**
+	 * Sets the dao.
+	 *
+	 * @param dao the new dao
+	 */
+	public void setDao(ObjectStoreDao dao) {
+		this.dao = dao;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/FeedCompleteObjectAction.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/FeedCompleteObjectAction.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/FeedCompleteObjectAction.java	(revision 47871)
@@ -0,0 +1,50 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardJob;
+import eu.dnetlib.enabling.tools.blackboard.BlackboardServerHandler;
+import org.springframework.beans.factory.annotation.Required;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class FeedCompleteObjectAction is responsible to execute the blacboard action of type FEED OBJECT which is Metadata created for WOS case of openaire.
+ */
+public class FeedCompleteObjectAction extends AbstractObjectStoreAction {
+
+	/** The store feeder. */
+	private ModularObjectStoreFeeder storeFeeder;
+
+	@Override
+	protected void executeAsync(final BlackboardServerHandler handler, final BlackboardJob job) throws ObjectStoreServiceException {
+		try {
+			final String objStoreID = job.getParameters().get("obsID");
+			final String eprRs = job.getParameters().get("epr");
+			final String mime = job.getParameters().get("mime");
+			int count = storeFeeder.feedMetadataObjectRecord(objStoreID, eprRs, mime);
+			job.getParameters().put("total", "" + count);
+			completeWithSuccess(handler, job);
+		} catch (Exception e) {
+			completeWithFail(handler, job, e);
+		}
+	}
+
+	/**
+	 * Gets the store feeder.
+	 *
+	 * @return the store feeder
+	 */
+	public ModularObjectStoreFeeder getStoreFeeder() {
+		return storeFeeder;
+	}
+
+	/**
+	 * Sets the store feeder.
+	 *
+	 * @param storeFeeder the new store feeder
+	 */
+	@Required
+	public void setStoreFeeder(final ModularObjectStoreFeeder storeFeeder) {
+		this.storeFeeder = storeFeeder;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreFeeder.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreFeeder.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreFeeder.java	(revision 47871)
@@ -0,0 +1,239 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import eu.dnetlib.data.objectstore.modular.connector.ObjectStore;
+import eu.dnetlib.data.objectstore.modular.connector.ObjectStoreDao;
+import eu.dnetlib.data.objectstore.rmi.MetadataObjectRecord;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.data.objectstore.rmi.Protocols;
+import eu.dnetlib.enabling.is.registry.rmi.ISRegistryService;
+import eu.dnetlib.enabling.locators.UniqueServiceLocator;
+import eu.dnetlib.enabling.resultset.client.ResultSetClientFactory;
+import eu.dnetlib.miscutils.datetime.DateUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Required;
+
+/**
+ * The Class ModularObjectStoreFeeder, responsible to feed data into the object Store
+ */
+public class ModularObjectStoreFeeder {
+
+	private static final Log log = LogFactory.getLog(ModularObjectStoreFeeder.class);
+
+	/** The dao of the objectStore. */
+	private ObjectStoreDao dao;
+
+	/** The result set client factory. */
+	private ResultSetClientFactory resultSetClientFactory;
+
+	/** The service locator. */
+	private UniqueServiceLocator serviceLocator;
+
+	/**
+	 * Gets the dao.
+	 *
+	 * @return the dao
+	 */
+	public ObjectStoreDao getDao() {
+		return dao;
+	}
+
+	/**
+	 * Sets the dao.
+	 *
+	 * @param dao
+	 *            the new dao
+	 */
+	@Required
+	public void setDao(final ObjectStoreDao dao) {
+		this.dao = dao;
+	}
+
+	/**
+	 * Gets the result set client factory.
+	 *
+	 * @return the result set client factory
+	 */
+	public ResultSetClientFactory getResultSetClientFactory() {
+		return resultSetClientFactory;
+	}
+
+	/**
+	 * Sets the result set client factory.
+	 *
+	 * @param resultSetClientFactory
+	 *            the new result set client factory
+	 */
+
+	@Required
+	public void setResultSetClientFactory(final ResultSetClientFactory resultSetClientFactory) {
+		this.resultSetClientFactory = resultSetClientFactory;
+	}
+
+	/**
+	 * Feed metadata object record.
+	 *
+	 * @param objectStoreID
+	 *            the object store id
+	 * @param rsEpr
+	 *            the rs epr
+	 * @param mime
+	 *            the mime
+	 * @throws ObjectStoreServiceException
+	 */
+	public int feedMetadataObjectRecord(final String objectStoreID, final String rsEpr, final String mime) throws ObjectStoreServiceException {
+
+		final Iterable<String> records = resultSetClientFactory.getClient(rsEpr);
+		Iterable<MetadataObjectRecord> toIngest = Iterables.transform(records, new Function<String, MetadataObjectRecord>() {
+
+			@Override
+			public MetadataObjectRecord apply(final String input) {
+				MetadataObjectRecord record = MetadataObjectRecord.initFromJson(input);
+				if (record != null) {
+					record.setMime(mime);
+				} else {
+					log.error("An input record is null :" + input);
+				}
+				return record;
+			}
+		});
+		ObjectStore store = dao.getObjectStore(objectStoreID);
+		int size = store.feedMetadataRecord(toIngest, true);
+		touch(objectStoreID, size);
+		return size;
+	}
+
+	/**
+	 * Feed object in the object store starting from an EPR of objectMetadata
+	 *
+	 * @param obsId
+	 *            the objectStore id
+	 * @param rsEpr
+	 *            the result set Endpoint-reference
+	 * @param protocol
+	 *            the protocol
+	 * @param login
+	 *            the login
+	 * @param password
+	 *            the password
+	 * @param mime
+	 *            the mime type
+	 * @throws ObjectStoreServiceException
+	 */
+	public void feed(final String obsId, final String rsEpr, final Protocols protocol, final String login, final String password, final String mime)
+			throws ObjectStoreServiceException {
+		final Iterable<String> records = resultSetClientFactory.getClient(rsEpr);
+		ObjectBroker objectBroker = new ObjectBroker(protocol, login, password, mime);
+		Iterable<ObjectStoreRecord> toIngest = Iterables.transform(records, objectBroker);
+		ObjectStore store = dao.getObjectStore(obsId);
+		int size = store.feed(toIngest, true);
+		touch(obsId, size);
+	}
+
+	/**
+	 * Feed a single object in the object Stroe.
+	 *
+	 * @param objectStoreID
+	 *            the object store id
+	 * @param objectID
+	 *            the object id
+	 * @param URIObject
+	 *            the URI of object
+	 * @param protocol
+	 *            the protocol
+	 * @param login
+	 *            the login
+	 * @param password
+	 *            the password
+	 * @param mime
+	 *            the mime type
+	 * @throws ObjectStoreServiceException
+	 */
+	public void feedObject(final String objectStoreID,
+			final String objectID,
+			final String URIObject,
+			final Protocols protocol,
+			final String login,
+			final String password,
+			final String mime) throws ObjectStoreServiceException {
+		ObjectStoreFile inputFile = new ObjectStoreFile();
+		inputFile.setURI(URIObject);
+		inputFile.setObjectID(objectID);
+		ObjectBroker objectBroker = new ObjectBroker(protocol, login, password, mime);
+		Iterable<ObjectStoreRecord> toIngest = Iterables.transform(Lists.newArrayList(inputFile.toJSON()), objectBroker);
+		ObjectStore store = dao.getObjectStore(objectStoreID);
+		int size = store.feed(toIngest, true);
+		touch(objectStoreID, size);
+	}
+
+	/**
+	 * Feed object record.
+	 *
+	 * @param objectStoreID
+	 *            the object store id
+	 * @param record
+	 *            the record
+	 * @return the string
+	 * @throws ObjectStoreServiceException
+	 */
+	public String feedObjectRecord(final String objectStoreID, final ObjectStoreRecord record) throws ObjectStoreServiceException {
+		ObjectStore store = dao.getObjectStore(objectStoreID);
+		return store.feedObjectRecord(record);
+	}
+
+	/**
+	 * Sets the last modified date in the profile.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param size
+	 *            the size
+	 */
+	public void touch(final String obsId, final int size) {
+		try {
+			final String now = DateUtils.now_ISO8601();
+
+			final String mdstoreXUpdate = "for $x in //RESOURCE_PROFILE[.//RESOURCE_IDENTIFIER/@value = '" + obsId + "']"
+					+ "return update value $x//LAST_STORAGE_DATE with '" + now + "'";
+
+			serviceLocator.getService(ISRegistryService.class, true).executeXUpdate(mdstoreXUpdate);
+
+			touchSize(obsId, size);
+		} catch (final Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	/**
+	 * Touch size.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param size
+	 *            the size
+	 */
+	public void touchSize(final String obsId, final int size) {
+		try {
+			final String mdstoreNumberXUpdate = "for $x in //RESOURCE_PROFILE[.//RESOURCE_IDENTIFIER/@value = '" + obsId + "']"
+					+ "return update value $x//COUNT_STORE with '" + size + "'";
+
+			serviceLocator.getService(ISRegistryService.class, true).executeXUpdate(mdstoreNumberXUpdate);
+		} catch (final Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public UniqueServiceLocator getServiceLocator() {
+		return serviceLocator;
+	}
+
+	@Required
+	public void setServiceLocator(final UniqueServiceLocator serviceLocator) {
+		this.serviceLocator = serviceLocator;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreConsistency.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreConsistency.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreConsistency.java	(revision 47871)
@@ -0,0 +1,102 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import eu.dnetlib.data.objectstore.modular.connector.ObjectStoreDao;
+import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;
+import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
+import eu.dnetlib.enabling.locators.UniqueServiceLocator;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Set;
+
+
+@Controller
+public class ObjectStoreConsistency {
+
+    private static final Log log = LogFactory.getLog(ObjectStoreConsistency.class);
+
+    @Autowired
+    private ObjectStoreDao objectStoreDao;
+
+    @Autowired
+    private UniqueServiceLocator serviceLocator;
+
+    private ObjectStoreIntegrityInfo integrityInfo;
+
+
+    @RequestMapping(value = "/ui/objectStore/infoConsistency.do")
+    @ResponseBody
+    public ObjectStoreIntegrityInfo getConsistencyInfo(final ModelMap map) {
+        return getIntegrityInfo();
+    }
+
+    public void refreshConsistency() {
+        try {
+            Set<String> profiles = listProfileIds();
+            Set<String> objectStore = listObjectStoreIds();
+            Set<String> objectStoreNotInProfile = Sets.newHashSet(objectStore);
+            objectStoreNotInProfile.removeAll(profiles);
+            Set<String> profilesNotInObjectStore = Sets.newHashSet(profiles);
+            profilesNotInObjectStore.removeAll(objectStore);
+            ObjectStoreIntegrityInfo info = new ObjectStoreIntegrityInfo();
+            info.setObjectStoreWithoutProfile(objectStoreNotInProfile);
+            info.setProfileWithoutObjectStore(profilesNotInObjectStore);
+            this.integrityInfo = info;
+        } catch (ISLookUpException e) {
+            log.error("Error on refreshing consistency of objectStore ", e);
+        }
+
+
+    }
+
+
+    private Set<String> listObjectStoreIds() {
+        return Sets.newHashSet(
+                Lists.transform(objectStoreDao.listObjectStores(), new Function<String, String>() {
+                    @Override
+                    public String apply(String input) {
+                        return StringUtils.substringBefore(input, "_");
+                    }
+                }));
+    }
+
+
+    private Set<String> listProfileIds() throws ISLookUpException {
+
+        final ISLookUpService lookupService = serviceLocator.getService(ISLookUpService.class);
+        final String query = "for $x in collection('/db/DRIVER/ObjectStoreDSResources/ObjectStoreDSResourceType') return $x//RESOURCE_IDENTIFIER/@value/string()";
+
+        List<String> resultList = lookupService.quickSearchProfile(query);
+
+
+        return Sets.newHashSet(Lists.transform(resultList, new Function<String, String>() {
+            @Override
+            public String apply(String input) {
+                return StringUtils.substringBefore(input, "_");
+            }
+        }));
+
+    }
+
+
+    public ObjectStoreIntegrityInfo getIntegrityInfo() {
+        if (integrityInfo == null) {
+            refreshConsistency();
+        }
+        return integrityInfo;
+    }
+
+    public void setIntegrityInfo(ObjectStoreIntegrityInfo integrityInfo) {
+        this.integrityInfo = integrityInfo;
+    }
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreIntegrityInfo.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreIntegrityInfo.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreIntegrityInfo.java	(revision 47871)
@@ -0,0 +1,30 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import java.util.Set;
+
+/**
+ * Created by Sandro La Bruzzo on 10/16/15.
+ */
+public class ObjectStoreIntegrityInfo {
+
+    private Set<String> objectStoreWithoutProfile;
+
+    private Set<String> profileWithoutObjectStore;
+
+
+    public Set<String> getObjectStoreWithoutProfile() {
+        return objectStoreWithoutProfile;
+    }
+
+    public void setObjectStoreWithoutProfile(Set<String> objectStoreWithoutProfile) {
+        this.objectStoreWithoutProfile = objectStoreWithoutProfile;
+    }
+
+    public Set<String> getProfileWithoutObjectStore() {
+        return profileWithoutObjectStore;
+    }
+
+    public void setProfileWithoutObjectStore(Set<String> profileWithoutObjectStore) {
+        this.profileWithoutObjectStore = profileWithoutObjectStore;
+    }
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/inspector/ObjectStoreInspector.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/inspector/ObjectStoreInspector.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/inspector/ObjectStoreInspector.java	(revision 47871)
@@ -0,0 +1,199 @@
+package eu.dnetlib.data.objectstore.modular.inspector;
+
+import static eu.dnetlib.miscutils.collections.MappedCollection.listMap;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import com.google.gson.Gson;
+
+import eu.dnetlib.data.objectstore.modular.connector.ObjectStore;
+import eu.dnetlib.data.objectstore.modular.connector.ObjectStoreDao;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.inspector.AbstractInspectorController;
+import eu.dnetlib.enabling.resultset.ResultSetListener;
+import eu.dnetlib.miscutils.collections.MappedCollection;
+import eu.dnetlib.miscutils.functional.UnaryFunction;
+
+/**
+ * The Class ObjectStoreInspector is the inspector controller of the objectStore.
+ */
+@Controller
+public class ObjectStoreInspector extends AbstractInspectorController {
+
+	// private static final Log log = LogFactory.getLog(ObjectStoreInspector.class);
+
+	/** The object store dao. */
+	@Autowired
+	private ObjectStoreDao objectStoreDao;
+
+	/**
+	 * The Class ObjectStoreDescription.
+	 */
+	class ObjectStoreDescription {
+
+		/** The id. */
+		private String id;
+
+		/** The size. */
+		private int size;
+
+		/**
+		 * Instantiates a new object store description.
+		 *
+		 * @param id
+		 *            the id
+		 * @param size
+		 *            the size
+		 */
+		public ObjectStoreDescription(final String id, final int size) {
+
+			this.id = id;
+			this.size = size;
+		}
+
+		/**
+		 * Gets the interpretation.
+		 *
+		 * @return the interpretation
+		 * @throws ObjectStoreServiceException
+		 */
+		public String getInterpretation() throws ObjectStoreServiceException {
+
+			ObjectStore objectStore = objectStoreDao.getObjectStore(id);
+			return objectStore.getInterpretation();
+		}
+
+		/**
+		 * Gets the id.
+		 *
+		 * @return the id
+		 */
+		public String getId() {
+			return id;
+		}
+
+		/**
+		 * Sets the id.
+		 *
+		 * @param id
+		 *            the new id
+		 */
+		public void setId(final String id) {
+			this.id = id;
+		}
+
+		/**
+		 * Gets the size.
+		 *
+		 * @return the size
+		 */
+		public int getSize() {
+			return size;
+		}
+
+		/**
+		 * Sets the size.
+		 *
+		 * @param size
+		 *            the new size
+		 */
+		public void setSize(final int size) {
+			this.size = size;
+		}
+	}
+
+	/**
+	 * Object stores.
+	 *
+	 * @param model
+	 *            the model
+	 */
+	@RequestMapping(value = "/inspector/objectstores.do")
+	public void objectStores(final Model model) {
+		List<String> objectStores = objectStoreDao.listObjectStores();
+		model.addAttribute("objectstores", MappedCollection.listMap(objectStores, new UnaryFunction<ObjectStoreDescription, String>() {
+
+			@Override
+			public ObjectStoreDescription evaluate(final String id) {
+				try {
+					ObjectStore objStore = objectStoreDao.getObjectStore(id);
+					return new ObjectStoreDescription(id, objStore.getSize());
+				} catch (ObjectStoreServiceException e) {
+					return null;
+				}
+			}
+		}));
+	}
+
+	/**
+	 * Object store.
+	 *
+	 * @param model
+	 *            the model
+	 * @param id
+	 *            the id
+	 * @param startParam
+	 *            the start param
+	 * @param regex
+	 *            the regex
+	 * @throws ObjectStoreServiceException
+	 */
+	@RequestMapping(value = "/inspector/objectstore.do", method = RequestMethod.GET)
+	public void objectStore(final Model model,
+			@RequestParam("id") final String id,
+			@RequestParam(value = "start", required = false) final Integer startParam,
+			@RequestParam(value = "regex", required = false) final String regex) throws ObjectStoreServiceException {
+		int pageSize = 10;
+		int start = 0;
+
+		if (startParam != null) {
+			start = startParam;
+		}
+		ObjectStore objctStore = objectStoreDao.getObjectStore(id);
+		ResultSetListener rs = objctStore.deliver((long) 0, System.currentTimeMillis());
+		List<String> page = rs.getResult((1 + start), (start + pageSize));
+		final Gson g = new Gson();
+		model.addAttribute("id", id);
+		model.addAttribute("start", start);
+		model.addAttribute("regex", regex);
+		model.addAttribute("nextPage", start + pageSize);
+		model.addAttribute("prevPage", Math.max(0, start - pageSize));
+		model.addAttribute("size", rs.getSize());
+		model.addAttribute("page", listMap(page, new UnaryFunction<ObjectStoreFile, String>() {
+
+			@Override
+			public ObjectStoreFile evaluate(final String json) {
+				return g.fromJson(json, ObjectStoreFile.class);
+			}
+		}));
+
+	}
+
+	/**
+	 * Gets the object store dao.
+	 *
+	 * @return the object store dao
+	 */
+	public ObjectStoreDao getObjectStoreDao() {
+		return objectStoreDao;
+	}
+
+	/**
+	 * Sets the object store dao.
+	 *
+	 * @param objectStoreDao
+	 *            the new object store dao
+	 */
+	public void setObjectStoreDao(final ObjectStoreDao objectStoreDao) {
+		this.objectStoreDao = objectStoreDao;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreService.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreService.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ModularObjectStoreService.java	(revision 47871)
@@ -0,0 +1,265 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import java.util.List;
+
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+
+import org.springframework.beans.factory.annotation.Required;
+
+import com.google.gson.Gson;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreService;
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreServiceException;
+import eu.dnetlib.enabling.tools.AbstractBaseService;
+import eu.dnetlib.enabling.tools.blackboard.NotificationHandler;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class ModularObjectStoreService is the implementation of the ObjectStoreService interface.
+ */
+public class ModularObjectStoreService extends AbstractBaseService implements ObjectStoreService {
+
+	/** The feeder. */
+	private ModularObjectStoreFeeder feeder;
+
+	/** The object store deliver. */
+	private ModularObjectStoreDeliver objectStoreDeliver;
+
+	/** The notification handler. */
+	private NotificationHandler notificationHandler;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see eu.dnetlib.data.objectstore.rmi.ObjectStoreService#deliverObjects(java.lang.String, java.lang.Double, java.lang.Double)
+	 */
+	/**
+	 * Deliver objects.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param from
+	 *            the from
+	 * @param until
+	 *            the until
+	 * @return the w3 c endpoint reference
+	 * @throws ObjectStoreServiceException
+	 *             the object store service exception
+	 */
+	@Override
+	public W3CEndpointReference deliverObjects(final String obsId, final Long from, final Long until) throws ObjectStoreServiceException {
+
+		return objectStoreDeliver.deliver(obsId, from, until);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see eu.dnetlib.data.objectstore.rmi.ObjectStoreService#deliverObjectsByIds(java.lang.String,
+	 * javax.xml.ws.wsaddressing.W3CEndpointReference)
+	 */
+	/**
+	 * Deliver objects by ids.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param eprId
+	 *            the epr id
+	 * @return the w3 c endpoint reference
+	 * @throws ObjectStoreServiceException
+	 *             the object store service exception
+	 */
+	@Override
+	public W3CEndpointReference deliverObjectsByIds(final String obsId, final W3CEndpointReference eprId) throws ObjectStoreServiceException {
+		return objectStoreDeliver.deliverIds(obsId, eprId);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see eu.dnetlib.data.objectstore.rmi.ObjectStoreService#deliverRecord(java.lang.String, java.lang.String)
+	 */
+	/**
+	 * Deliver record.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param objectId
+	 *            the object id
+	 * @return the string
+	 * @throws ObjectStoreServiceException
+	 *             the object store service exception
+	 */
+	@Override
+	public String deliverRecord(final String obsId, final String objectId) throws ObjectStoreServiceException {
+		return objectStoreDeliver.deliverObject(obsId, objectId).toJSON();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see eu.dnetlib.data.objectstore.rmi.ObjectStoreService#getListOfObjectStores()
+	 */
+	/**
+	 * Gets the list of object stores.
+	 *
+	 * @return the list of object stores
+	 */
+	@Override
+	public List<String> getListOfObjectStores() {
+		return objectStoreDeliver.getDao().listObjectStores();
+	}
+
+	/**
+	 * Gets the feeder.
+	 *
+	 * @return the feeder
+	 */
+	public ModularObjectStoreFeeder getFeeder() {
+		return feeder;
+	}
+
+	/**
+	 * Sets the feeder.
+	 *
+	 * @param feeder
+	 *            the new feeder
+	 */
+	@Required
+	public void setFeeder(final ModularObjectStoreFeeder feeder) {
+		this.feeder = feeder;
+	}
+
+	/**
+	 * Gets the notification handler.
+	 *
+	 * @return the notification handler
+	 */
+	public NotificationHandler getNotificationHandler() {
+		return notificationHandler;
+	}
+
+	/**
+	 * Sets the notification handler.
+	 *
+	 * @param notificationHandler
+	 *            the new notification handler
+	 */
+	@Required
+	public void setNotificationHandler(final NotificationHandler notificationHandler) {
+		this.notificationHandler = notificationHandler;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see eu.dnetlib.enabling.tools.AbstractBaseService#notify(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
+	 */
+	@Override
+	public void notify(final String subscriptionId, final String topic, final String isId, final String message) {
+		getNotificationHandler().notified(subscriptionId, topic, isId, message);
+	}
+
+	/**
+	 * Gets the object store deliver.
+	 *
+	 * @return the object store deliver
+	 */
+	public ModularObjectStoreDeliver getObjectStoreDeliver() {
+		return objectStoreDeliver;
+	}
+
+	/**
+	 * Sets the object store deliver.
+	 *
+	 * @param objectStoreDeliver
+	 *            the new object store deliver
+	 */
+	@Required
+	public void setObjectStoreDeliver(final ModularObjectStoreDeliver objectStoreDeliver) {
+		this.objectStoreDeliver = objectStoreDeliver;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see eu.dnetlib.data.objectstore.rmi.ObjectStoreService#feedObject(java.lang.String, java.lang.String)
+	 */
+	/**
+	 * Feed object.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param objectMetadata
+	 *            the object metadata
+	 * @throws ObjectStoreServiceException
+	 *             the object store service exception
+	 */
+	@Override
+	public void feedObject(final String obsId, final String objectMetadata) throws ObjectStoreServiceException {
+		Gson g = new Gson();
+		try {
+			ObjectStoreFile file = g.fromJson(objectMetadata, ObjectStoreFile.class);
+			feeder.feedObject(obsId, file.getObjectID(), file.getURI(), file.getAccessProtocol(), file.getUsernameAuth(), file.getPasswordAuth(),
+					file.getMimeType());
+
+		} catch (Exception e) {
+			throw new ObjectStoreServiceException(e.getMessage());
+		}
+
+	}
+
+	/**
+	 * Exist id starts with.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param startId
+	 *            the start id
+	 * @return true, if successful
+	 * @throws ObjectStoreServiceException
+	 *             the object store service exception
+	 */
+	public boolean existIDStartsWith(final String obsId, final String startId) throws ObjectStoreServiceException {
+		return objectStoreDeliver.existIDStartsWith(obsId, startId);
+	}
+
+	/**
+	 * Feed object.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @param record
+	 *            the record
+	 * @return the string
+	 * @throws ObjectStoreServiceException
+	 *             the object store service exception
+	 */
+	public String feedObject(final String obsId, final ObjectStoreRecord record) throws ObjectStoreServiceException {
+
+		try {
+
+			return feeder.feedObjectRecord(obsId, record);
+
+		} catch (Exception e) {
+			throw new ObjectStoreServiceException(e.getMessage());
+		}
+
+	}
+
+	/**
+	 * Gets the size.
+	 *
+	 * @param obsId
+	 *            the obs id
+	 * @return the size
+	 * @throws ObjectStoreServiceException
+	 *             the object store service exception
+	 */
+	@Override
+	public int getSize(final String obsId) throws ObjectStoreServiceException {
+		return objectStoreDeliver.getDao().getObjectStore(obsId).getSize();
+
+	}
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreRecord.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreRecord.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectStoreRecord.java	(revision 47871)
@@ -0,0 +1,55 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import java.io.InputStream;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
+
+/**
+ * The Class ObjectStoreRecord is a serialization of the object to be ingested in the objectStore
+ * metadata + inputstream of the data.
+ */
+public class ObjectStoreRecord {
+
+	/** The file metadata. */
+	private ObjectStoreFile fileMetadata;
+
+	/** The input stream. */
+	private InputStream inputStream;
+
+	/**
+	 * Gets the input stream.
+	 *
+	 * @return the input stream
+	 */
+	public InputStream getInputStream() {
+		return inputStream;
+	}
+
+	/**
+	 * Sets the input stream.
+	 *
+	 * @param inputStream the new input stream
+	 */
+	public void setInputStream(final InputStream inputStream) {
+		this.inputStream = inputStream;
+	}
+
+	/**
+	 * Gets the file metadata.
+	 *
+	 * @return the file metadata
+	 */
+	public ObjectStoreFile getFileMetadata() {
+		return fileMetadata;
+	}
+
+	/**
+	 * Sets the file metadata.
+	 *
+	 * @param fileMetadata the new file metadata
+	 */
+	public void setFileMetadata(final ObjectStoreFile fileMetadata) {
+		this.fileMetadata = fileMetadata;
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectBroker.java
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectBroker.java	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/java/eu/dnetlib/data/objectstore/modular/ObjectBroker.java	(revision 47871)
@@ -0,0 +1,240 @@
+package eu.dnetlib.data.objectstore.modular;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.SocketException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.net.ftp.FTPClient;
+
+import com.google.common.base.Function;
+
+import eu.dnetlib.data.objectstore.rmi.ObjectStoreFile;
+import eu.dnetlib.data.objectstore.rmi.Protocols;
+
+
+
+/**
+ * The Class ObjectBroker is responsible to retrieve content from URL.
+ */
+public class ObjectBroker implements Function<String, ObjectStoreRecord> {
+	private static final Log log = LogFactory.getLog(ObjectBroker.class);
+
+	/** The protocol. */
+	private Protocols protocol;
+
+	/** The login. */
+	private String login;
+
+	/** The password. */
+	private String password;
+
+	/** The mime. */
+	private String mime;
+
+	/**
+	 * Instantiates a new object broker.
+	 * 
+	 * @param protocol
+	 *            the protocol
+	 * @param login
+	 *            the login
+	 * @param password
+	 *            the password
+	 * @param mime
+	 *            the mime
+	 */
+	public ObjectBroker(final Protocols protocol, final String login, final String password, final String mime) {
+		this.protocol = protocol;
+		this.login = login;
+		this.password = password;
+		this.mime = mime;
+	}
+
+	/**
+	 * Gets the protocol.
+	 * 
+	 * @return the protocol
+	 */
+	public Protocols getProtocol() {
+		return protocol;
+	}
+
+	/**
+	 * Sets the protocol.
+	 * 
+	 * @param protocol
+	 *            the new protocol
+	 */
+	public void setProtocol(final Protocols protocol) {
+		this.protocol = protocol;
+	}
+
+	/**
+	 * Gets the login.
+	 * 
+	 * @return the login
+	 */
+	public String getLogin() {
+		return login;
+	}
+
+	/**
+	 * Sets the login.
+	 * 
+	 * @param login
+	 *            the new login
+	 */
+	public void setLogin(final String login) {
+		this.login = login;
+	}
+
+	/**
+	 * Gets the password.
+	 * 
+	 * @return the password
+	 */
+	public String getPassword() {
+		return password;
+	}
+
+	/**
+	 * Sets the password.
+	 * 
+	 * @param password
+	 *            the new password
+	 */
+	public void setPassword(final String password) {
+		this.password = password;
+	}
+
+	/**
+	 * Gets the mime.
+	 * 
+	 * @return the mime
+	 */
+	public String getMime() {
+		return mime;
+	}
+
+	/**
+	 * Sets the mime.
+	 * 
+	 * @param mime
+	 *            the new mime
+	 */
+	public void setMime(final String mime) {
+		this.mime = mime;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.common.base.Function#apply(java.lang.Object)
+	 */
+	@Override
+	public ObjectStoreRecord apply(final String jsonInput) {
+		if (jsonInput == null) return null;
+		ObjectStoreRecord objectStorerecord = new ObjectStoreRecord();
+
+		objectStorerecord.setFileMetadata(ObjectStoreFile.createObject(jsonInput));
+		Protocols currentProtocol = (objectStorerecord.getFileMetadata().getAccessProtocol() == Protocols.None) ? protocol : objectStorerecord
+				.getFileMetadata().getAccessProtocol();
+		objectStorerecord.getFileMetadata().setAccessProtocol(currentProtocol);
+		if ((objectStorerecord.getFileMetadata().getMimeType() == null) || (objectStorerecord.getFileMetadata().getMimeType().length() == 0)) {
+			objectStorerecord.getFileMetadata().setMimeType(mime);
+		}
+
+		switch (currentProtocol) {
+		case FTP:
+			FTPClient client = new FTPClient();
+			try {
+				URI uri = new URI(objectStorerecord.getFileMetadata().getURI());
+				client.connect(uri.getHost());
+				if ((objectStorerecord.getFileMetadata().getUsernameAuth() != null) && (objectStorerecord.getFileMetadata().getUsernameAuth().length() > 0)) {
+					client.login(objectStorerecord.getFileMetadata().getUsernameAuth(), objectStorerecord.getFileMetadata().getPasswordAuth());
+				} else {
+					client.login("ftp", "a@a");
+
+				}
+
+				final InputStream stream = client.retrieveFileStream(uri.getPath());
+				objectStorerecord.setInputStream(stream);
+				return objectStorerecord;
+
+			} catch (URISyntaxException e2) {
+				log.error(e2);
+				return null;
+			} catch (SocketException e) {
+				log.error(e);
+			} catch (IOException e) {
+				log.error(e);
+				return null;
+			}
+
+		case HTTP:
+			try {
+				HttpURLConnection conn = (HttpURLConnection) new URL(objectStorerecord.getFileMetadata().getURI()).openConnection();
+				InputStream in;
+				int http_status;
+				try {
+
+					http_status = conn.getResponseCode();
+
+					if ((http_status / 100) == 3) {
+						String newURL = conn.getHeaderField("Location");
+						conn.disconnect();
+						conn = (HttpURLConnection) new URL(newURL).openConnection();
+						http_status = conn.getResponseCode();
+						if ((http_status / 100) != 2) return null;
+					}
+					in = conn.getInputStream();
+					objectStorerecord.setInputStream(in);
+					return objectStorerecord;
+				} catch (Exception e) {
+					log.error(e);
+					return null;
+				}
+			} catch (MalformedURLException e1) {
+				log.error(e1);
+				return null;
+			} catch (IOException e1) {
+				log.error(e1);
+				return null;
+			}
+
+		case File_System:
+			File f = new File(objectStorerecord.getFileMetadata().getURI());
+			try {
+				InputStream myiInputStream = new FileInputStream(f);
+				objectStorerecord.setInputStream(myiInputStream);
+				return objectStorerecord;
+			} catch (FileNotFoundException e) {
+				try {
+					Thread.sleep(5000);
+					InputStream myiInputStream = new FileInputStream(f);
+					objectStorerecord.setInputStream(myiInputStream);
+					return objectStorerecord;
+				} catch (Exception e1) {
+					log.error(e1);
+					return null;
+				}
+			}
+		default:
+			break;
+		}
+
+		return null;
+
+	}
+
+}
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/applicationContext-dnet-modular-objectstore-service.xml
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/applicationContext-dnet-modular-objectstore-service.xml	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/applicationContext-dnet-modular-objectstore-service.xml	(revision 47871)
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:jaxws="http://cxf.apache.org/jaxws"
+       xmlns:p="http://www.springframework.org/schema/p"
+       xmlns:http="http://cxf.apache.org/transports/http/configuration" xmlns:t="http://dnetlib.eu/springbeans/t"
+       xmlns:template="http://dnetlib.eu/springbeans/template"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+
+
+                                    http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
+                            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
+
+                            http://dnetlib.eu/springbeans/template http://dnetlib.eu/springbeans/template.xsd">
+
+
+    <bean id="objectStoreService"
+          class="eu.dnetlib.data.objectstore.modular.ModularObjectStoreService"
+          init-method="start" destroy-method="stop"
+          p:feeder-ref="objectstoreFeeder"
+          p:objectStoreDeliver-ref="objectstoreDeliver"
+          p:notificationHandler-ref="objectstoreNotificationHandler"
+            />
+
+    <bean id="objectstoreFeeder"
+          class="eu.dnetlib.data.objectstore.modular.ModularObjectStoreFeeder"
+          p:dao-ref="${services.objectstore.dao}"
+          p:resultSetClientFactory-ref="objectstoreResultSetClientFactory"
+          p:serviceLocator-ref="uniqueServiceLocator"
+            />
+
+    <bean id="objectstoreDeliver"
+          class="eu.dnetlib.data.objectstore.modular.ModularObjectStoreDeliver"
+          p:dao-ref="${services.objectstore.dao}"
+          p:resultSetClientFactory-ref="objectstoreResultSetClientFactory"
+
+            />
+
+
+    <bean id="objectstoreResultSetClientFactory" parent="resultSetClientFactory"
+          p:pageSize="${services.objectstore.rsfactory.pagesize}"/>
+
+
+    <bean id="objectstoreProfileCreator" class="eu.dnetlib.data.objectstore.modular.ObjectStoreProfileCreator"
+          p:serviceLocator-ref="uniqueServiceLocator" p:objectstoreDsTemplate-ref="objectstoreDsTemplate"
+          p:endpoint-ref="objectStoreServiceEndpoint" p:eprBuilder-ref="jaxwsEndpointReferenceBuilder"/>
+
+    <bean id="objectstoreNotificationHandler"
+          class="eu.dnetlib.enabling.tools.blackboard.BlackboardServerExecutorNotificationHandler"
+          p:blackboardExecutor-ref="objectstoreBlackboardExecutor"/>
+
+    <bean id="objectstoreBlackboardExecutor"
+          class="eu.dnetlib.enabling.tools.blackboard.BlackboardServerActionExecutor"
+          p:blackboardHandler-ref="blackboardHandler"
+          p:actionType="eu.dnetlib.data.objectstore.modular.ObjectStoreActions"
+          p:incomplete="false">
+        <property name="actionMap">
+            <map>
+                <entry key="CREATE">
+                    <bean class="eu.dnetlib.data.objectstore.modular.CreateObjectStoreAction"
+                          p:profileCreator-ref="objectstoreProfileCreator" p:dao-ref="${services.objectstore.dao}"/>
+                </entry>
+                <entry key="DELETE">
+                    <bean class="eu.dnetlib.data.objectstore.modular.DeleteObjectStoreAction"
+                          p:profileCreator-ref="objectstoreProfileCreator" p:dao-ref="${services.objectstore.dao}"/>
+                </entry>
+                <entry key="DROP_CONTENT">
+                    <bean class="eu.dnetlib.data.objectstore.modular.DropContentObjectStoreAction"
+                          p:dao-ref="${services.objectstore.dao}"/>
+                </entry>
+
+                <entry key="FEED">
+                    <bean class="eu.dnetlib.data.objectstore.modular.FeedObjectStoreAction"
+                          p:profileCreator-ref="objectstoreProfileCreator"
+                          p:storeFeeder-ref="objectstoreFeeder"
+                          p:dao-ref="${services.objectstore.dao}"/>
+                </entry>
+
+                <entry key="FEEDOBJECT">
+                    <bean class="eu.dnetlib.data.objectstore.modular.FeedCompleteObjectAction"
+                          p:storeFeeder-ref="objectstoreFeeder"
+                          p:dao-ref="${services.objectstore.dao}"/>
+                </entry>
+            </map>
+        </property>
+    </bean>
+
+
+    <bean id="objectStoreLocator" class="eu.dnetlib.enabling.tools.StaticServiceLocator"
+          p:service-ref="objectStoreService"/>
+
+
+    <bean id="objectstoreDsTemplate"
+          class="eu.dnetlib.springutils.stringtemplate.StringTemplateFactory"
+          p:template="classpath:/eu/dnetlib/data/objectstore/objectstoreds-template.xml"
+          scope="prototype"/>
+
+
+    <!-- endpoints -->
+    <jaxws:endpoint id="objectStoreServiceEndpoint"
+                    implementor="#objectStoreService" implementorClass="eu.dnetlib.data.objectstore.rmi.ObjectStoreService"
+                    address="/objectStore"/>
+
+    <template:instance name="serviceRegistrationManager"
+                       t:serviceRegistrationManagerClass="eu.dnetlib.enabling.tools.registration.ValidatingServiceRegistrationManagerImpl"
+                       t:name="objectStoreServiceRegistrationManager" t:service="objectStoreService"
+                       t:endpoint="objectStoreServiceEndpoint" t:jobScheduler="jobScheduler"
+                       t:serviceRegistrator="blackboardServiceRegistrator"/>
+
+
+</beans>
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/inspector/webContext-objectstore-inspector.xml
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/inspector/webContext-objectstore-inspector.xml	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/inspector/webContext-objectstore-inspector.xml	(revision 47871)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+	xmlns:util="http://www.springframework.org/schema/util"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+                http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
+
+	<bean id="objectstoreInspectorGroup"
+		class="eu.dnetlib.enabling.inspector.StaticEntryPointDescriptorGroup"
+		p:name="objectstore">
+		<property name="descriptors">
+			<list>
+				<bean class="eu.dnetlib.enabling.inspector.StaticEntryPointDescriptor"
+					p:name="objectstores" p:relativeUrl="objectstores.do" />
+			</list>
+		</property>
+	</bean>
+
+</beans>
+
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/objectstoreds-template.xml
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/objectstoreds-template.xml	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/objectstoreds-template.xml	(revision 47871)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RESOURCE_PROFILE>
+    <HEADER>
+        <RESOURCE_IDENTIFIER value=""/>
+        <RESOURCE_TYPE value="ObjectStoreDSResourceType"/>
+        <RESOURCE_KIND value="ObjectStoreDSResources"/>
+        <RESOURCE_URI value="$serviceUri$?wsdl"/>
+        <DATE_OF_CREATION value=""/>
+    </HEADER>
+    <BODY>
+        <CONFIGURATION>
+            <OBJECTSTORE_INTERPRETATION>$interpretation$</OBJECTSTORE_INTERPRETATION>
+        </CONFIGURATION>
+        <STATUS>
+            <PENULTIMATE_STORAGE_DATE></PENULTIMATE_STORAGE_DATE>
+            <LAST_STORAGE_DATE></LAST_STORAGE_DATE>
+            <FETCHING_FREQUENCY/>
+            <COUNT_STORE>0</COUNT_STORE>
+            <STORE_SIZE>0</STORE_SIZE>
+            <STATISTICS_FIELDS/>
+        </STATUS>
+        <SECURITY_PARAMETERS></SECURITY_PARAMETERS>
+    </BODY>
+</RESOURCE_PROFILE>
\ No newline at end of file
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/applicationContext-dnet-modular-objectstore-service.properties
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/applicationContext-dnet-modular-objectstore-service.properties	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/data/objectstore/applicationContext-dnet-modular-objectstore-service.properties	(revision 47871)
@@ -0,0 +1,2 @@
+services.objectstore.dao=gridFSObjectstoreDao
+services.objectstore.rsfactory.pagesize=20
\ No newline at end of file
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstore.st
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstore.st	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstore.st	(revision 47871)
@@ -0,0 +1,43 @@
+$inspector/master(it={
+
+<style type="text/css">
+ .mdstoreRecords li.record {
+   display: block;
+   border-top: 1px solid #ccc;
+ }
+ 
+ .mdstoreRecords ul.nav li {
+   display: inline;
+ }
+</style>
+<br>
+<h2>ObjectStore details</h2>
+<p>
+</p>
+
+
+
+<p>Show from: $start$ (<a href="?id=$id$&start=$prevPage$&regex=$regex$">prev</a>) out of $size$ (<a href="?id=$id$&start=$nextPage$&regex=$regex$">next</a>)</p>
+
+<ul class="mdstoreRecords">
+$page:{
+  <li class="record">
+   <ul class="nav">
+     <li><a href="mdstoreDeleteRecord.do?id=$id$&start=$start$&index=$i0$">delete</a></li>
+   </ul>
+   	<div>
+   		<table>
+   			<tr><td>Object Identifier :</td><td>$it.objectID$</td></tr>
+   			<tr><td>Mime type :</td><td>$it.mimeType$</td></tr>
+   			<tr><td>URL :</td><td><a href="$it.URI$">Download</a></td></tr>
+   			<tr><td>Original Metadata Identifier :</td><td>$it.MetadataRelatedID$</tr>
+   			<tr><td>Original URL :</td><td><a href="$it.downloadedURL$">$it.downloadedURL$</a></tr>
+   			<tr><td>md5Sum :</td><td>$it.md5Sum$</td></tr>
+   			<tr><td>file size :</td><td>$it.fileSizeKB$ kb</td></tr>
+   		</table>
+   		
+   	</div>
+  </li>
+}$
+</ul>
+})$
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstoreEditResult.st
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstoreEditResult.st	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/enabling/views/inspector/objectstoreEditResult.st	(revision 47871)
@@ -0,0 +1,30 @@
+$inspector/master(it={
+
+<style type="text/css">
+ #record {
+  height: 60em;
+  width: 100%;
+  border: 1px solid #B0B0FF;
+  padding: 4px;
+ }
+</style>
+
+<h2>Low level edit mdstore record:</h2>
+
+<ul>
+  <li><a href="javascript:document.forms[0].submit()">save</a></li>
+</ul>
+
+<p> It will <b>not</b> trigger a mdstore modification date. </p>
+
+<form action="mdstoreSaveRecord.do" method="POST">
+<input type="hidden" name="id" value="$id$"/>
+<input type="hidden" name="start" value="$start$"/>
+
+<textarea id="record" name="record">
+$record$
+</textarea>
+
+</form>
+
+})$
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/test/schemas/LinkedDataDSResourceType.xsd
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/test/schemas/LinkedDataDSResourceType.xsd	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1/src/main/resources/eu/dnetlib/test/schemas/LinkedDataDSResourceType.xsd	(revision 47871)
@@ -0,0 +1,105 @@
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+    <xs:complexType name="DATA_SOURCEType">
+        <xs:sequence>
+            <xs:element name="DATA_SOURCE" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="SOURCE_METADATA_FORMATSType">
+        <xs:sequence>
+            <xs:element name="SOURCE_METADATA_FORMAT" minOccurs="0" maxOccurs="unbounded" type="METADATA_FORMATType"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="METADATA_FORMATType">
+        <xs:attribute name="name" type="xs:string"/>
+        <xs:attribute name="interpretation" type="xs:string"/>
+        <xs:attribute name="layout" type="xs:string"/>
+    </xs:complexType>
+    <xs:complexType name="SCHEDULINGType">
+        <xs:all>
+            <xs:element name="CRON" minOccurs="0" type="CRONType"/>
+            <xs:element name="EVENT" minOccurs="0" type="EVENTType"/>
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="CRONType">
+        <xs:sequence>
+            <xs:element name="WHEN" type="xs:string"/>
+            <xs:element name="MININTERVAL" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="EVENTType">
+        <xs:sequence>
+            <xs:element name="TOPIC" type="xs:string"/>
+            <xs:element name="XPATH" type="xs:string" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="STATUSType">
+        <xs:all>
+            <xs:element name="LAST_UPDATE_DATE" type="xs:string"/>
+            <xs:element name="LAST_UPDATE_STATUS" type="xs:string"/>
+            <xs:element name="LAST_UPDATE_ERROR_MESSAGE" type="xs:string"/>
+        </xs:all>
+    </xs:complexType>
+    <xs:element name="RESOURCE_PROFILE">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="HEADER" type="HEADERType"/>
+                <xs:element name="BODY" type="BODYType"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    <xs:complexType name="RESOURCE_TYPEType">
+        <xs:attribute name="value" use="required">
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="LinkedDataDSResourceType"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="RESOURCE_URIType">
+        <xs:attribute name="value" type="xs:string" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="RESOURCE_KINDType">
+        <xs:attribute name="value" use="required">
+            <xs:simpleType>
+                <xs:restriction base="xs:string">
+                    <xs:enumeration value="LinkedDataDSResources"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+    </xs:complexType>
+    <xs:complexType name="RESOURCE_IDENTIFIERType">
+        <xs:attribute name="value" type="xs:string" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="DATE_OF_CREATIONType">
+        <xs:attribute name="value" type="xs:dateTime" use="required"/>
+    </xs:complexType>
+    <xs:complexType name="HEADERType">
+        <xs:all>
+            <xs:element name="RESOURCE_IDENTIFIER" type="RESOURCE_IDENTIFIERType"/>
+            <xs:element name="RESOURCE_TYPE" type="RESOURCE_TYPEType"/>
+            <xs:element name="RESOURCE_KIND" type="RESOURCE_KINDType"/>
+            <xs:element name="RESOURCE_URI" type="RESOURCE_URIType"/>
+            <xs:element name="DATE_OF_CREATION" type="DATE_OF_CREATIONType"/>
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="CONFIGURATIONType">
+        <xs:all>
+            <xs:element name="REPOSITORY_SERVICE_IDENTIFIER" type="xs:string" minOccurs="0"/>
+            <xs:element name="LINKEDDATA_MANAGER_SERVICE_IDENTIFIER" type="xs:string"/>
+            <xs:element name="LINKEDDATA_MANAGER_SERVICE_URI" type="xs:string"/>
+            <xs:element name="SOURCE_METADATA_FORMATS" type="SOURCE_METADATA_FORMATSType"/>
+            <xs:element name="SINK_METADATA_FORMAT" type="METADATA_FORMATType"/>
+            <xs:element name="DATA_SOURCES" type="DATA_SOURCEType"/>
+            <xs:element name="DATA_SINK" type="xs:string"/>            
+            <xs:element name="SCHEDULING" type="SCHEDULINGType"/>
+        </xs:all>
+    </xs:complexType>
+    <xs:complexType name="BODYType">
+        <xs:sequence>
+            <xs:element name="CONFIGURATION" type="CONFIGURATIONType"/>
+            <xs:element name="STATUS" type="STATUSType"/>
+            <xs:element name="SECURITY_PARAMETERS" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+</xs:schema>
Index: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1
===================================================================
--- modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1	(nonexistent)
+++ modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1	(revision 47871)

Property changes on: modules/dnet-modular-objectstore-service/tags/dnet-modular-objectstore-service-4.2.1
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,6 ##
+.project
+.classpath
+target
+testbin
+.settings
+*.iml
