Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Vocabulary.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Vocabulary.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Vocabulary.java	(revision 62097)
@@ -0,0 +1,71 @@
+package eu.dnetlib.domain.enabling;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import eu.dnetlib.domain.DriverResource;
+
+/**
+ * 
+ * The domain object for the Vocabulary resource data structure
+ * 
+ */
+@SuppressWarnings("serial")
+public class Vocabulary extends DriverResource {
+	private String name = null;
+	private Map<String, String> nameMap = null;
+	private Map<String, String> encodingMap = null;
+	
+	public Vocabulary(String name, Map<String, String> nameMap) {
+		this.setResourceType("VocabularyDSResourceType");
+		this.setResourceKind("VocabularyDSResources");
+		
+		this.name = name;
+		initializeMaps(nameMap);
+	}
+	
+	public Vocabulary(String name, Map<String, String> nameMap, Map<String, String> encodingMap) {
+		this.setResourceType("VocabularyDSResourceType");
+		this.setResourceKind("VocabularyDSResources");
+		
+		this.name = name;
+		this.nameMap = nameMap;
+		this.encodingMap = encodingMap;	
+	}
+	
+	public void initializeMaps(Map<String, String> nameMap) {
+		this.nameMap = nameMap;
+		this.encodingMap = new TreeMap<String, String>();
+		for (String name : nameMap.keySet()) {
+			encodingMap.put(nameMap.get(name), name);
+		}
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getEncoding(String englishName) {
+		return nameMap.get(englishName);
+	}
+	
+	public String getEnglishName(String encoding) {
+		return encodingMap.get(encoding);
+	}
+	
+	public List<String> getEnglishNames() {
+		return new ArrayList<String>(this.nameMap.keySet());
+	}
+	
+	public List<String> getEncodings() {
+		return new ArrayList<String>(this.encodingMap.keySet());
+	}
+
+	public Map<String, String> getAsMap() { return this.encodingMap; }
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/ListResourceProfilesType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/ListResourceProfilesType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/ListResourceProfilesType.java	(revision 62097)
@@ -0,0 +1,23 @@
+package eu.dnetlib.domain.enabling;
+
+public class ListResourceProfilesType {
+
+	protected String format;
+	protected String resourceType;
+
+	public String getFormat() {
+		return format;
+	}
+
+	public void setFormat(String format) {
+		this.format = format;
+	}
+
+	public String getResourceType() {
+		return resourceType;
+	}
+
+	public void setResourceType(String resourceType) {
+		this.resourceType = resourceType;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Notification.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Notification.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Notification.java	(revision 62097)
@@ -0,0 +1,124 @@
+package eu.dnetlib.domain.enabling;
+
+import java.io.ByteArrayInputStream;
+import java.util.Date;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.log4j.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+import eu.dnetlib.domain.ActionType;
+import eu.dnetlib.domain.ResourceType;
+
+public class Notification {
+	private static Logger logger = Logger.getLogger(Notification.class);
+	
+	private String subscriptionId = null;
+	private String message = null;
+	private String topic = null;
+	private String isId = null;
+	private Date date = new Date();
+	
+	private ActionType actionType = null;
+	private ResourceType resourceType = null;
+	private String resource = null;
+	private String resourceId = null;
+	
+	public Notification(String subscriptionId, String message, String topic,
+			String isId) throws Exception  {
+		super();
+		
+		this.subscriptionId = subscriptionId;
+		this.message = message;
+		this.topic = topic;
+		this.isId = isId;
+		
+		this.resource = message;
+		this.resourceId = this.getField(message, "RESOURCE_IDENTIFIER");
+		this.resourceType = ResourceType.valueOf(ResourceType.class, this.getField(message, "RESOURCE_TYPE").toUpperCase());
+		this.actionType = ActionType.valueOf(topic.split("\\.")[0]);
+	}
+
+	public Notification(String subscriptionId, String resource,
+			String resourceId, ResourceType resourceType, ActionType actionType) {
+		this.resource = resource;
+		this.resourceId = resourceId;
+		this.resourceType = resourceType;
+		this.actionType = actionType;
+		
+		this.subscriptionId = subscriptionId;
+		this.message = resource;
+		this.topic = actionType.getValue() + "." + resourceType.getValue();
+	}
+
+	public String getSubscriptionId() {
+		return subscriptionId;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public String getTopic() {
+		return topic;
+	}
+
+	public String getIsId() {
+		return isId;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public ActionType getActionType() {
+		return actionType;
+	}
+
+	public ResourceType getResourceType() {
+		return resourceType;
+	}
+
+	public String getResource() {
+		return resource;
+	}
+
+	public String getResourceId() {
+		return resourceId;
+	}
+
+	private String getField(String xml, String fieldName) throws Exception {
+		ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes());
+		DocumentBuilderFactory domFactory = DocumentBuilderFactory
+				.newInstance();
+
+		domFactory.setNamespaceAware(true); // never forget this!
+
+		try {
+			DocumentBuilder builder = domFactory.newDocumentBuilder();
+			Document doc = builder.parse(bis);
+			XPathFactory factory = XPathFactory.newInstance();
+			XPath xpath = factory.newXPath();
+
+			XPathExpression expression = xpath.compile("//*[local-name()='"
+					+ fieldName + "']");
+
+			Node node = (Node) expression.evaluate(doc, XPathConstants.NODE);
+			String value = node.getAttributes().getNamedItem("value").getTextContent();
+			
+			logger.debug("Field : " + fieldName + ":" + value);
+
+			return value;
+		} catch (ParserConfigurationException e) {
+			throw new Exception("XML Parser configuration Error", e);
+		}
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/CustomProperties.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/CustomProperties.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/CustomProperties.java	(revision 62097)
@@ -0,0 +1,38 @@
+package eu.dnetlib.domain.functionality.validator;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by nikonas on 29/3/16.
+ */
+public class CustomProperties{
+
+    private Map<String, String> properties;
+
+    public CustomProperties() {
+        this.properties = new HashMap<String, String>();
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+    public void setProperty(String key, String value) {
+        this.properties.put(key, value);
+    }
+
+    public String getProperty(String key) {
+        return this.properties.get(key);
+    }
+
+    public Boolean containsProperty(String key) {
+        return this.properties.containsKey(key);
+    }
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Subscription.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Subscription.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Subscription.java	(revision 62097)
@@ -0,0 +1,52 @@
+package eu.dnetlib.domain.enabling;
+
+import eu.dnetlib.domain.EPR;
+
+/**
+ * Represents a subscription used for communication with the IS_SN
+ * 
+ * @author christos
+ * 
+ */
+public class Subscription {
+	private String id = null;
+	private String topic = null;
+	private int timeToLive = 0;
+	private EPR epr = null;
+
+	public EPR getEpr() {
+		return epr;
+	}
+
+	public void setEpr(EPR epr) {
+		this.epr = epr;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getTopic() {
+		return topic;
+	}
+
+	public void setTopic(String topic) {
+		this.topic = topic;
+	}
+
+	public int getTimeToLive() {
+		return timeToLive;
+	}
+
+	public void setTimeToLive(int timeToLive) {
+		this.timeToLive = timeToLive;
+	}
+
+	public String toString() {
+		return topic;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/StoredJob.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/StoredJob.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/StoredJob.java	(revision 62097)
@@ -0,0 +1,163 @@
+package eu.dnetlib.domain.functionality.validator;
+
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class StoredJob extends JobForValidation{
+    private String contentJobStatus, usageJobStatus, started, ended, duration, error;
+    private String validationType, jobType, guidelinesShortName;
+
+    private String validationStatus;
+
+    private int recordsTested, id, contentJobScore, usageJobScore;
+
+    private Set<Integer> rules;
+    private List<JobResultEntry> resultEntries;
+    private Map<String, Integer> filteredScores;
+
+    public StoredJob() {
+        super();
+    }
+
+    public StoredJob(JobForValidation job) {
+        super(job);
+    }
+
+    public Map<String, Integer> getFilteredScores() {
+        return filteredScores;
+    }
+
+    public void setFilteredScores(Map<String, Integer> filteredScores) {
+        this.filteredScores = filteredScores;
+    }
+
+    public List<JobResultEntry> getResultEntries() {
+        return resultEntries;
+    }
+
+    public void setResultEntries(List<JobResultEntry> resultEntries) {
+        this.resultEntries = resultEntries;
+    }
+
+    public String getDuration() {
+        return duration;
+    }
+
+    public void setDuration(String duration) {
+        this.duration = duration;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getStarted() {
+        return started;
+    }
+
+    public void setStarted(String started) {
+        this.started = started;
+    }
+
+    public String getEnded() {
+        return ended;
+    }
+
+    public void setEnded(String ended) {
+        this.ended = ended;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public Set<Integer> getRules() {
+        return rules;
+    }
+
+    public void setRules(Set<Integer> rules) {
+        this.rules = rules;
+    }
+
+    public String getValidationType() {
+        return validationType;
+    }
+
+    public void setValidationType(String validationType) {
+        this.validationType = validationType;
+    }
+
+    public String getJobType() {
+        return jobType;
+    }
+
+    public void setJobType(String jobType) {
+        this.jobType = jobType;
+    }
+
+    public String getContentJobStatus() {
+        return contentJobStatus;
+    }
+
+    public void setContentJobStatus(String contentJobStatus) {
+        this.contentJobStatus = contentJobStatus;
+    }
+
+    public String getUsageJobStatus() {
+        return usageJobStatus;
+    }
+
+    public void setUsageJobStatus(String usageJobStatus) {
+        this.usageJobStatus = usageJobStatus;
+    }
+
+    public int getContentJobScore() {
+        return contentJobScore;
+    }
+
+    public void setContentJobScore(int contentJobScore) {
+        this.contentJobScore = contentJobScore;
+    }
+
+    public int getUsageJobScore() {
+        return usageJobScore;
+    }
+
+    public void setUsageJobScore(int usageJobScore) {
+        this.usageJobScore = usageJobScore;
+    }
+
+    public int getRecordsTested() {
+        return recordsTested;
+    }
+
+    public void setRecordsTested(int recordsTested) {
+        this.recordsTested = recordsTested;
+    }
+
+    public String getGuidelinesShortName() {
+        return guidelinesShortName;
+    }
+
+    public void setGuidelinesShortName(String guidelinesShortName) {
+        this.guidelinesShortName = guidelinesShortName;
+    }
+
+    public String getValidationStatus() {
+        return validationStatus;
+    }
+
+    public void setValidationStatus(String validationStatus) {
+        this.validationStatus = validationStatus;
+    }
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/StartPullRSType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/StartPullRSType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/StartPullRSType.java	(revision 62097)
@@ -0,0 +1,33 @@
+package eu.dnetlib.domain.enabling;
+
+public class StartPullRSType {
+
+	protected Integer keepAliveTime;
+	protected String styleSheet;
+	protected Integer total;
+
+	public Integer getKeepAliveTime() {
+		return keepAliveTime;
+	}
+
+	public void setKeepAliveTime(Integer keepAliveTime) {
+		this.keepAliveTime = keepAliveTime;
+	}
+
+	public String getStyleSheet() {
+		return styleSheet;
+	}
+
+	public void setStyleSheet(String styleSheet) {
+		this.styleSheet = styleSheet;
+	}
+
+	public Integer getTotal() {
+		return total;
+	}
+
+	public void setTotal(Integer total) {
+		this.total = total;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/CreatePullRSType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/CreatePullRSType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/CreatePullRSType.java	(revision 62097)
@@ -0,0 +1,33 @@
+package eu.dnetlib.domain.enabling;
+
+public class CreatePullRSType {
+
+	protected Integer keepAliveTime;
+	protected String styleSheet;
+	protected Integer total;
+
+	public Integer getKeepAliveTime() {
+		return keepAliveTime;
+	}
+
+	public void setKeepAliveTime(Integer keepAliveTime) {
+		this.keepAliveTime = keepAliveTime;
+	}
+
+	public String getStyleSheet() {
+		return styleSheet;
+	}
+
+	public void setStyleSheet(String styleSheet) {
+		this.styleSheet = styleSheet;
+	}
+
+	public Integer getTotal() {
+		return total;
+	}
+
+	public void setTotal(Integer total) {
+		this.total = total;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/RuleSet.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/RuleSet.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/RuleSet.java	(revision 62097)
@@ -0,0 +1,100 @@
+package eu.dnetlib.domain.functionality.validator;
+
+import java.util.List;
+import java.util.Set;
+
+public class RuleSet{
+
+	private static final long serialVersionUID = -8620509939907943297L;
+	private Integer id;
+	private String name, description, guidelinesAcronym, shortName;
+	private List<String> visibility;
+	
+	private List<Rule> contentRules;
+	private List<Rule> usageRules;
+	
+	private Set<Integer> contentRulesIds;
+	private Set<Integer> usageRulesIds;
+	
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+
+	public List<Rule> getContentRules() {
+		return contentRules;
+	}
+
+	public void setContentRules(List<Rule> contentRules) {
+		this.contentRules = contentRules;
+	}
+
+	public List<Rule> getUsageRules() {
+		return usageRules;
+	}
+
+	public void setUsageRules(List<Rule> usageRules) {
+		this.usageRules = usageRules;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public String getGuidelinesAcronym() {
+		return guidelinesAcronym;
+	}
+
+	public void setGuidelinesAcronym(String guidelinesAcronym) {
+		this.guidelinesAcronym = guidelinesAcronym;
+	}
+
+	public List<String> getVisibility() {
+		return visibility;
+	}
+
+	public void setVisibility(List<String> visibility) {
+		this.visibility = visibility;
+	}
+
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public Set<Integer> getContentRulesIds() {
+		return contentRulesIds;
+	}
+
+	public void setContentRulesIds(Set<Integer> contentRulesIds) {
+		this.contentRulesIds = contentRulesIds;
+	}
+
+	public Set<Integer> getUsageRulesIds() {
+		return usageRulesIds;
+	}
+
+	public void setUsageRulesIds(Set<Integer> usageRulesIds) {
+		this.usageRulesIds = usageRulesIds;
+	}
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/pom.xml
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/pom.xml	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/pom.xml	(revision 62097)
@@ -0,0 +1,49 @@
+<?xml version="1.0" ?>
+<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>uoa-domain</artifactId>
+    <packaging>jar</packaging>
+    <version>2.1.0</version>
+    <scm>
+        <developerConnection>
+            scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet45/modules/uoa-domain/tags/uoa-domain-2.1.0
+        </developerConnection>
+    </scm>
+    <properties>
+        <gwtVersion>2.7.0</gwtVersion>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>[0.0.0,)</version>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>[0.0.0,)</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-entitymanager</artifactId>
+            <version>3.5.6-Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-annotations</artifactId>
+            <version>3.5.6-Final</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.2.12</version>
+        </dependency>
+    </dependencies>
+</project>
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/JobResultEntry.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/JobResultEntry.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/JobResultEntry.java	(revision 62097)
@@ -0,0 +1,87 @@
+package eu.dnetlib.domain.functionality.validator;
+
+import java.util.List;
+
+public class JobResultEntry {
+
+	private String name, description;
+	private String successes;
+	private int weight;
+	private List<String> errors;
+	private int ruleId;
+	private boolean hasErrors, mandatory;
+	private String type;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getSuccesses() {
+		return successes;
+	}
+
+	public void setSuccesses(String successes) {
+		this.successes = successes;
+	}
+
+	public List<String> getErrors() {
+		return errors;
+	}
+
+	public void setErrors(List<String> errors) {
+		this.errors = errors;
+	}
+
+	public void setRuleId(int ruleId) {
+		this.ruleId = ruleId;
+	}
+
+	public int getRuleId() {
+		return ruleId;
+	}
+
+	public void setHasErrors(boolean hasErrors) {
+		this.hasErrors = hasErrors;
+	}
+
+	public boolean isHasErrors() {
+		return hasErrors;
+	}
+
+	public void setWeight(int weight) {
+		this.weight = weight;
+	}
+
+	public int getWeight() {
+		return weight;
+	}
+
+	public boolean isMandatory() {
+		return mandatory;
+	}
+
+	public void setMandatory(boolean mandatory) {
+		this.mandatory = mandatory;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfile.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfile.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfile.java	(revision 62097)
@@ -0,0 +1,423 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import eu.dnetlib.domain.SecureDriverResource;
+
+/**
+ * User's Profile class
+ * 
+ * @author <a href="mailto:kiatrop@di.uoa.gr">Katerina Iatropoulou</a>
+ * 
+ */
+
+public class UserProfile extends SecureDriverResource{
+	private static final long serialVersionUID = -1565597762736460041L;
+
+	// general info
+	private String email = null;
+	private String username = null;
+	private String firstname = null;
+	private String lastname = null;
+
+	private String institution = null;
+
+	private boolean active = false;
+	private String activationId = null;
+
+	// recommendations
+	private Set<String> recommendations = new HashSet<String>();
+	private Boolean recommendationSendEmail = null;
+	private Integer recommendationPeriod = null;
+	private Date lastNotificationDate = null;
+
+	// communities
+	private static Set<CommunityRegistration> communities = new HashSet<CommunityRegistration>();
+
+	// queries
+	private static List<SavedQuery> savedQueries = new ArrayList<SavedQuery>();
+	
+	// filter
+	private static SavedQuery filter = null;
+	
+	// list of documents
+	private List<String> documentIds = new ArrayList<String>();
+	
+	// a place to store images and other user data
+	private static UserStore store = null;
+	
+	private String userPhotoID = null;
+	
+
+	/**
+	 * The default constructor sets the resourceKind to
+	 * <b>UserDSResourceType</b>, resourceType to <b>UserDSResources</b> and
+	 * dateOfCreation to the current system date.
+	 */
+	public UserProfile() {
+		this.setResourceKind("UserDSResources");
+		this.setResourceType("UserDSResourceType");
+		recommendationSendEmail = Boolean.valueOf(false);
+	}
+
+	@Deprecated
+	public String getUserId() {
+		return this.getResourceId();
+	}
+
+	@Deprecated
+	public void setUserId(String userId) {
+		this.setResourceId(userId);
+	}
+
+	public String getActivationId() {
+		return activationId;
+	}
+
+	public void setActivationId(String activationId) {
+		this.activationId = activationId;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getPassword() {
+		return this.getSecurityProfile().getPassword();
+	}
+
+	public void setPassword(String password) {
+		this.getSecurityProfile().setPassword(password);
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public String getInstitution() {
+		return institution;
+	}
+
+	public void setInstitution(String institution) {
+		this.institution = institution;
+	}
+
+	public Set<String> getRecommendations() {
+		return recommendations;
+	}
+
+	public void setRecommendations(Set<String> recommendations) {
+		this.recommendations = recommendations;
+	}
+
+	public Date getLastNotificationDate() {
+		return this.lastNotificationDate;
+	}
+
+	public void setLastNotificationDate(Date lastNotificationDate) {
+		this.lastNotificationDate = lastNotificationDate;
+	}
+
+	public Set<CommunityRegistration> getCommunities() {
+		return communities;
+	}
+
+	public void setCommunities(Set<CommunityRegistration> communities) {
+		this.communities = communities;
+	}
+
+	public Date getRegistrationDate() {
+		return this.getDateOfCreation();
+	}
+
+	public void setRegistrationDate(Date registrationDate) {
+		this.setDateOfCreation(registrationDate);
+	}
+
+	public Integer getRecommendationPeriod() {
+		return recommendationPeriod;
+	}
+
+	public List<String> getRoles() {
+		return this.getSecurityProfile().getIdentities();
+	}
+
+	public void setRoles(List<String> roles) {
+		this.getSecurityProfile().setIdentities(new ArrayList<String>());
+
+		for (String role : roles) {
+			if (!this.getSecurityProfile().getIdentities().contains(role))
+				this.getSecurityProfile().getIdentities().add(role);
+		}
+	}
+
+	public List<SavedQuery> getSavedQueries() {
+		return savedQueries;
+	}
+
+	public void setSavedQueries(List<SavedQuery> savedQueries) {
+		this.savedQueries = savedQueries;
+	}
+
+	public boolean getActive() {
+		return active;
+	}
+
+	public void setActive(boolean active) {
+		this.active = active;
+	}
+
+	public Boolean getRecommendationSendEmail() {
+		if (recommendationSendEmail == null) {
+			recommendationSendEmail = Boolean.valueOf(true);
+		}
+		return recommendationSendEmail;
+	}
+
+	public void setRecommendationSendEmail(Boolean recommendationSendEmail) {
+		this.recommendationSendEmail = recommendationSendEmail;
+	}
+
+	public void setRecommendationPeriod(Integer recommendationPeriod) {
+		this.recommendationPeriod = recommendationPeriod;
+	}
+
+	public boolean hasSecurityProfile() {
+		return true;
+	}
+
+	public String toString() {
+		return this.getEmail();
+	}
+
+	public boolean getIsCollectionManager() {
+		return (this.getRoles().contains("collectionManager") || this
+				.getIsSuperUser());
+	}
+
+	public void setIsCollectionManager(boolean tonPoulo) {
+		// nothing
+	}
+
+	public boolean getIsCommunityManager() {
+		return (this.getRoles().contains("communityManager") || this
+				.getIsSuperUser());
+	}
+
+	public void setIsCommunityManager(boolean tonPoulo) {
+		// nothing
+	}
+
+	public boolean getIsUserManager() {
+		return (this.getRoles().contains("userManager") || this
+				.getIsSuperUser());
+	}
+
+	public void setIsUserManager(boolean value) {
+		// nothing
+	}
+
+	public boolean getIsSuperUser() {
+		return this.getRoles().contains("superUser");
+	}
+
+	public void setIsSuperUser(boolean tonPoulo) {
+		// nothing
+	}
+
+	public SavedQuery getFilter() {
+		return filter;
+	}
+
+	public void setFilter(SavedQuery filter) {
+		this.filter = filter;
+	}
+
+	public List<String> getDocumentIds() {
+		return documentIds;
+	}
+
+	public void setDocumentIds(List<String> documentIds) {
+		this.documentIds = documentIds;
+	}
+
+	public UserStore getStore() {
+		return store;
+	}
+
+	public void setStore(UserStore store) {
+		this.store = store;
+	}
+
+	public String getUserPhotoID() {
+		return userPhotoID;
+	}
+
+	public void setUserPhotoID(String userPhotoID) {
+		this.userPhotoID = userPhotoID;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((activationId == null) ? 0 : activationId.hashCode());
+		result = prime * result + (active ? 1231 : 1237);
+		result = prime * result
+				+ ((communities == null) ? 0 : communities.hashCode());
+		result = prime * result
+				+ ((documentIds == null) ? 0 : documentIds.hashCode());
+		result = prime * result + ((email == null) ? 0 : email.hashCode());
+		result = prime * result + ((filter == null) ? 0 : filter.hashCode());
+		result = prime * result
+				+ ((firstname == null) ? 0 : firstname.hashCode());
+		result = prime * result
+				+ ((institution == null) ? 0 : institution.hashCode());
+		result = prime
+				* result
+				+ ((lastNotificationDate == null) ? 0 : lastNotificationDate
+						.hashCode());
+		result = prime * result
+				+ ((lastname == null) ? 0 : lastname.hashCode());
+		result = prime
+				* result
+				+ ((recommendationPeriod == null) ? 0 : recommendationPeriod
+						.hashCode());
+		result = prime
+				* result
+				+ ((recommendationSendEmail == null) ? 0
+						: recommendationSendEmail.hashCode());
+		result = prime * result
+				+ ((recommendations == null) ? 0 : recommendations.hashCode());
+		result = prime * result
+				+ ((savedQueries == null) ? 0 : savedQueries.hashCode());
+		result = prime * result + ((store == null) ? 0 : store.hashCode());
+		result = prime * result
+				+ ((userPhotoID == null) ? 0 : userPhotoID.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		UserProfile other = (UserProfile) obj;
+		if (activationId == null) {
+			if (other.activationId != null)
+				return false;
+		} else if (!activationId.equals(other.activationId))
+			return false;
+		if (active != other.active)
+			return false;
+		if (communities == null) {
+			if (other.communities != null)
+				return false;
+		} else if (!communities.equals(other.communities))
+			return false;
+		if (documentIds == null) {
+			if (other.documentIds != null)
+				return false;
+		} else if (!documentIds.equals(other.documentIds))
+			return false;
+		if (email == null) {
+			if (other.email != null)
+				return false;
+		} else if (!email.equals(other.email))
+			return false;
+		if (username == null) {
+			if (other.username != null)
+				return false;
+		} else if (!username.equals(other.username))
+			return false;
+		if (filter == null) {
+			if (other.filter != null)
+				return false;
+		} else if (!filter.equals(other.filter))
+			return false;
+		if (firstname == null) {
+			if (other.firstname != null)
+				return false;
+		} else if (!firstname.equals(other.firstname))
+			return false;
+		if (institution == null) {
+			if (other.institution != null)
+				return false;
+		} else if (!institution.equals(other.institution))
+			return false;
+		if (lastNotificationDate == null) {
+			if (other.lastNotificationDate != null)
+				return false;
+		} else if (!lastNotificationDate.equals(other.lastNotificationDate))
+			return false;
+		if (lastname == null) {
+			if (other.lastname != null)
+				return false;
+		} else if (!lastname.equals(other.lastname))
+			return false;
+		if (recommendationPeriod == null) {
+			if (other.recommendationPeriod != null)
+				return false;
+		} else if (!recommendationPeriod.equals(other.recommendationPeriod))
+			return false;
+		if (recommendationSendEmail == null) {
+			if (other.recommendationSendEmail != null)
+				return false;
+		} else if (!recommendationSendEmail
+				.equals(other.recommendationSendEmail))
+			return false;
+		if (recommendations == null) {
+			if (other.recommendations != null)
+				return false;
+		} else if (!recommendations.equals(other.recommendations))
+			return false;
+		if (savedQueries == null) {
+			if (other.savedQueries != null)
+				return false;
+		} else if (!savedQueries.equals(other.savedQueries))
+			return false;
+		if (store == null) {
+			if (other.store != null)
+				return false;
+		} else if (!store.equals(other.store))
+			return false;
+		if (userPhotoID == null) {
+			if (other.userPhotoID != null)
+				return false;
+		} else if (!userPhotoID.equals(other.userPhotoID))
+			return false;
+		return true;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationResult.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationResult.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationResult.java	(revision 62097)
@@ -0,0 +1,152 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+/**
+ * This class represents a result of a notification event.
+ * @author thanos@di.uoa.gr
+ * @see eu.dnetlib.api.functionality.NotificationService
+ * @see eu.dnetlib.functionality.notification.executor.NotificationQueryExecutor
+ * @see NotificationQuery
+ * @see NotificationSchedule
+ * @see NotificationEvent
+ * @see NotificationSubscription
+ *
+ */
+public class NotificationResult implements Comparable<NotificationResult> {
+	private String queryId;
+	private Date date;
+	private String resultId;
+	private String name;
+	private int value;
+	
+	/**
+	 * Construct a new notification result.
+	 * @param queryId the unique identifier of the query of the event of this result
+	 * @param date the date of the event of this result
+	 * @param resultId the unique identifier of this result
+	 * @param name the name of this result
+	 * @param value the value of this result
+	 */
+	public NotificationResult(final String queryId, final Date date, final String resultId, final String name, final int value) {
+		this.queryId = queryId;
+		this.date = date;
+		this.resultId = resultId;
+		this.name = name;
+		this.value = value;
+	}
+	
+	/**
+	 * Construct a new notification result with query identifier, date, result identifier and result name set to null and value set to zero.
+	 */
+	public NotificationResult() {
+		this(null, null, null, null, 0);
+	}
+	
+	/**
+	 * Get the query of the event of this result.
+	 * @return the unique identifier of the query of the event of this result
+	 */
+	public String getQueryId() {
+		return queryId;
+	}
+	
+	/**
+	 * Set the query of the event of this result.
+	 * @param queryId the unique identifier of the query of the event of this result
+	 */
+	public void setQueryId(final String queryId) {
+		this.queryId = queryId;
+	}
+
+	/**
+	 * Get the date of the event of this result.
+	 * @return the date of the event of this result
+	 */
+	public Date getDate() {
+		return date;
+	}
+	
+	/**
+	 * Set the date of the event of this result.
+	 * @param date the date of the event of this result
+	 */
+	public void setDate(final Date date) {
+		this.date = date;
+	}
+	
+	/**
+	 * Get the result identifier.
+	 * @return the unique identifier of this result
+	 */
+	public String getResultId() {
+		return resultId;
+	}
+	
+	/**
+	 * Set the result identifier.
+	 * @param resultId the unique identifier of this result
+	 */
+	public void setResultId(final String resultId) {
+		this.resultId = resultId;
+	}
+	
+	/**
+	 * Get the name.
+	 * @return the name of this result
+	 */
+	public String getName() {
+		return name;
+	}
+	
+	/**
+	 * Set the name of this result.
+	 * @param name the name of this result
+	 */
+	public void setName(final String name) {
+		this.name = name;
+	}
+		
+	/**
+	 * Get the value of this result.
+	 * @return the value of this result
+	 */
+	public int getValue() {
+		return value;
+	}
+		
+	/**
+	 * Set the value of this result.
+	 * @param value the value of this result
+	 */
+	public void setValue(final int value) {
+		this.value = value;
+	}
+	
+	@Override
+	public int compareTo(final NotificationResult result) {
+		final int queryIdComparison = queryId.compareTo(result.queryId);
+		final int dateComparison = date.compareTo(result.date);
+		final int resultIdComparison = resultId.compareTo(result.resultId);
+		return (queryIdComparison == 0) ? ((dateComparison == 0) ? resultIdComparison : dateComparison) : queryIdComparison;
+	}
+	
+	@Override
+	public boolean equals(final Object object) {
+		if (!(object instanceof NotificationResult))
+			return false;
+		final NotificationResult result = (NotificationResult) object;
+		return ((queryId == null) ? (result.queryId == null) : queryId.equals(result.queryId)) && ((date == null) ? (result.date == null) : date.equals(result.date)) &&
+				((resultId == null) ? (result.resultId == null) : resultId.equals(result.resultId));
+	}
+	
+	@Override
+	public int hashCode() {
+		return ((queryId == null) ? 0 : queryId.hashCode()) + ((date == null) ? 0 : date.hashCode()) + ((resultId == null) ? 0 : resultId.hashCode());
+	}
+	
+	@Override
+	public String toString() {
+		return "(query: " + queryId + ", date: " + date + ", result: " + resultId + ")";
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Repository.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Repository.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Repository.java	(revision 62097)
@@ -0,0 +1,762 @@
+package eu.dnetlib.domain.data;
+
+import eu.dnetlib.domain.DriverResource;
+
+import java.util.*;
+
+/**
+ * The domain object for the Repository resource data structure
+ * 
+ */
+public class Repository extends DriverResource{
+	private static final long serialVersionUID = -7241644234046760972L;
+
+	// new
+	private String id;
+	private String officialName;
+	private String englishName;
+	private String websiteUrl;
+	private String logoUrl;
+	private String contactEmail;
+	private String countryName;
+	private String countryCode;
+	private String organization;
+	private Double latitude = 0.0;
+	private Double longitude = 0.0;
+	private Double timezone = 0.0;
+	private String namespacePrefix;
+	private String odNumberOfItems;
+	private String odNumberOfItemsDate;
+	private String odPolicies;
+	private String odLanguages;
+	private String odContentTypes;
+	private String collectedFrom;
+	private Boolean inferred = false;
+	private Boolean deletedByInference = false;
+	private Double trust = 0.9;
+	private String inferenceProvenance;
+	private Date dateOfValidation;
+	private String datasourceClass;
+	private String provenanceActionClass;
+	private Date dateOfCollection;
+	private String typology;
+	private String activationId;
+	private Boolean mergehomonyms = true;
+	private String description;
+	private Date releaseStartDate;
+	private Date releaseEndDate;
+	private String missionStatementUrl;
+	private Boolean dataProvider = false;
+	private Boolean serviceProvider = false;
+	private String databaseAccessType;
+	private String dataUploadType;
+	private String databaseAccessRestriction;
+	private String dataUploadRestriction;
+	private Boolean versioning = false;
+	private String citationGuidelineUrl;
+	private String qualityManagementKind;
+	private String pidSystems;
+	private String certificates;
+	private String aggregator;
+	private String issn;
+	private String eissn;
+	private String lissn;
+	private List<RepositoryInterface> interfaces = new ArrayList<RepositoryInterface>();
+
+	private String availableDiskSpace = null;
+	private String securityParameters = null;
+	private String protocol = null;
+	private String registeredBy = null;
+
+	private String datasourceType = null;
+	private String datasourceAggregatorId = null;
+	private String datasourceOriginalIdValue = null;
+	private String datasourceOriginalIdProvenance = null;
+	private Boolean datasourceAggregated = null;
+	private String datasourceComplianceDegreeValue = null;
+	private String datasourceComplianceDegreeEncoding = null;
+
+	private Integer numberOfObjects = Integer.valueOf(0);
+	private Integer maxSizeOfDatastructure = Integer.valueOf(0);
+	private Integer maxNumberOfDataStructures = Integer.valueOf(0);
+
+	private Boolean consentTermsOfUse;
+	private Boolean fullTextDownload;
+	private Date consentTermsOfUseDate;
+
+	private Boolean registered = false;
+
+	// QOS parameters
+//	private String availability = null;
+//	private String capacity = null;
+//	private Integer responseTime = null;
+//	private double throughput = 0.0D;
+
+	// status parameters
+//	private Integer handledDatastructure = null;
+//	private Integer usedDiskspace = null;
+//	private Date lastUpdate = null;
+
+	// blackboard
+//	private RepositoryBlackboard blackboard = null;
+
+	private Map<String, String> extraFields = new HashMap<String, String>();
+
+	// extra fields that need to be added to the XML schema
+	// private String administratorEmail = null;
+	// private String administratorName = null;
+	// private String administratorContactInfo = null;
+
+	// private List<RepositoryInterface> interfaces = new
+	// ArrayList<RepositoryInterface>();
+	private static List<DataCollectionType> dataCollectionTypes = new ArrayList<DataCollectionType>();
+
+
+	private PiwikInfo piwikInfo;
+
+	private List<String> environments = new ArrayList<String>();
+
+	public Repository() {
+		this.setDateOfCreation(new Date());
+		this.setResourceKind("RepositoryServiceResources");
+		this.setResourceType("RepositoryServiceResourceType");
+	}
+
+	public Map<String, String> getExtraFields() {
+		return extraFields;
+	}
+
+	public void setExtraFields(Map<String, String> extraFields) {
+		this.extraFields = extraFields;
+	}
+
+	public String getRegisteredBy() {
+		return registeredBy;
+	}
+
+	public void setRegisteredBy(String registeredBy) {
+		this.registeredBy = registeredBy;
+	}
+
+	public String getCountryName() {
+		return countryName;
+	}
+
+	public void setCountryName(String countryName) {
+		this.countryName = countryName;
+	}
+
+	public String getCountryCode() {
+		return countryCode;
+	}
+
+	public void setCountryCode(String countryCode) {
+		this.countryCode = countryCode;
+	}
+
+	public String getEnglishName() {
+		return englishName;
+	}
+
+	public void setEnglishName(String englishName) {
+		this.englishName = englishName;
+	}
+
+	
+//	public String getId() {
+//		return this.getResourceId();
+//	}
+//
+//	public void setId(String id) {
+//		this.setResourceId(id);
+//	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Integer getNumberOfObjects() {
+		return numberOfObjects;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public void setNumberOfObjects(Integer numberOfObjects) {
+		this.numberOfObjects = numberOfObjects;
+	}
+
+	public String getOfficialName() {
+		return officialName;
+	}
+
+	public void setOfficialName(String officialName) {
+		this.officialName = officialName;
+	}
+
+	public Date getRegistrationDate() {
+		return this.getDateOfCreation();
+	}
+
+	public void setRegistrationDate(Date registrationDate) {
+		this.setDateOfCreation(registrationDate);
+	}
+
+	public List<RepositoryInterface> getInterfaces() {
+		return interfaces;
+	}
+
+	public void setInterfaces(List<RepositoryInterface> interfaces) {
+		this.interfaces = interfaces;
+	}
+
+	public String getTypology() {
+		return typology;
+	}
+
+	public void setTypology(String typology) {
+		this.typology = typology;
+	}
+
+	public Double getLatitude() {
+		return latitude;
+	}
+
+	public Double getTimezone() {
+		return timezone;
+	}
+
+	public void setTimezone(Double timezone) throws IllegalArgumentException {
+		if (timezone < -12 || timezone > 12 || (timezone % 0.5) != 0) {
+			String t = String.valueOf(timezone);
+			throw new IllegalArgumentException(
+					"timezone must be in the range [-12.0, 12.0] and must me divided by 0.5. Value given is "
+							+ t);
+		}
+		this.timezone = timezone;
+	}
+	public boolean equals(Object o) {
+		if (!(o instanceof Repository))
+			return false;
+		else
+			return this.equals((Repository) o);
+	}
+
+	public boolean equals(Repository r) {
+		// TODO: fill with required fields...
+
+		if (this.getEnglishName() != null && r.getEnglishName() == null) {
+			return false;
+		} else if (this.getEnglishName() == null
+				&& r.getEnglishName() != null) {
+			return false;
+		} else if (this.getEnglishName() != null
+				&& r.getEnglishName() != null) {
+			return this.getEnglishName().equals(r.getEnglishName());
+		}
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+        return officialName.hashCode();
+	}
+
+	public String getAvailableDiskSpace() {
+		return availableDiskSpace;
+	}
+
+	public void setAvailableDiskSpace(String availableDiskSpace) {
+		this.availableDiskSpace = availableDiskSpace;
+	}
+
+	public String getSecurityParameters() {
+		return securityParameters;
+	}
+
+	public void setSecurityParameters(String securityParameters) {
+		this.securityParameters = securityParameters;
+	}
+
+	public Integer getMaxSizeOfDatastructure() {
+		return maxSizeOfDatastructure;
+	}
+
+	public void setMaxSizeOfDatastructure(Integer maxSizeOfDatastructure) {
+		this.maxSizeOfDatastructure = maxSizeOfDatastructure;
+	}
+
+	public Integer getMaxNumberOfDataStructures() {
+		return maxNumberOfDataStructures;
+	}
+
+	public void setMaxNumberOfDataStructures(Integer maxNumberOfDataStructures) {
+		this.maxNumberOfDataStructures = maxNumberOfDataStructures;
+	}
+
+
+	public Boolean isVerified() {
+		return extraFields.containsKey("VERIFIED")
+				&& extraFields.get("VERIFIED").toLowerCase().equals("yes");
+	}
+
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+
+	public String getProtocol() {
+		return protocol;
+	}
+
+	public void setDatasourceType(String datasourceType) {
+		this.datasourceType = datasourceType;
+	}
+
+	public String getDatasourceType() {
+		return datasourceType;
+	}
+
+	public Boolean getDatasourceAggregated() {
+		return datasourceAggregated;
+	}
+
+	public void setDatasourceAggregated(Boolean datasourceAggregated) {
+		this.datasourceAggregated = datasourceAggregated;
+	}
+
+	public String getDatasourceComplianceDegreeValue() {
+		return datasourceComplianceDegreeValue;
+	}
+
+	public void setDatasourceComplianceDegreeValue(
+			String datasourceComplianceDegreeValue) {
+		this.datasourceComplianceDegreeValue = datasourceComplianceDegreeValue;
+	}
+
+	public String getDatasourceComplianceDegreeEncoding() {
+		return datasourceComplianceDegreeEncoding;
+	}
+
+	public void setDatasourceComplianceDegreeEncoding(
+			String datasourceComplianceDegreeEncoding) {
+		this.datasourceComplianceDegreeEncoding = datasourceComplianceDegreeEncoding;
+	}
+
+	public void setDatasourceAggregatorId(String datasourceAggregatorId) {
+		this.datasourceAggregatorId = datasourceAggregatorId;
+	}
+
+	public String getDatasourceAggregatorId() {
+		return datasourceAggregatorId;
+	}
+
+	public void setDatasourceOriginalIdValue(String datasourceOriginalIdValue) {
+		this.datasourceOriginalIdValue = datasourceOriginalIdValue;
+	}
+
+	public String getDatasourceOriginalIdValue() {
+		return datasourceOriginalIdValue;
+	}
+
+	public void setDatasourceOriginalIdProvenance(
+			String datasourceOriginalIdProvenance) {
+		this.datasourceOriginalIdProvenance = datasourceOriginalIdProvenance;
+	}
+
+	public String getDatasourceOriginalIdProvenance() {
+		return datasourceOriginalIdProvenance;
+	}
+
+	public List<DataCollectionType> getDataCollectionTypes() {
+		return dataCollectionTypes;
+	}
+
+	public void setDataCollectionTypes(
+			List<DataCollectionType> dataCollectionTypes) {
+		this.dataCollectionTypes = dataCollectionTypes;
+	}
+
+	public void setEnvironments(List<String> environments) {
+		this.environments = environments;
+	}
+
+	public List<String> getEnvironments() {
+		return environments;
+	}
+
+	// new
+
+	public String getWebsiteUrl() {
+		return websiteUrl;
+	}
+
+	public void setWebsiteUrl(String websiteUrl) {
+		this.websiteUrl = websiteUrl;
+	}
+
+	public String getLogoUrl() {
+		return logoUrl;
+	}
+
+	public void setLogoUrl(String logoUrl) {
+		this.logoUrl = logoUrl;
+	}
+
+	public String getContactEmail() {
+		return contactEmail;
+	}
+
+	public void setContactEmail(String contactEmail) {
+		this.contactEmail = contactEmail;
+	}
+
+	public String getOrganization() {
+		return organization;
+	}
+
+	public void setOrganization(String organization) {
+		this.organization = organization;
+	}
+
+	public Double getLongitude() {
+		return longitude;
+	}
+
+	public void setLongitude(Double longitude) {
+		this.longitude = longitude;
+	}
+
+	public String getNamespacePrefix() {
+		return namespacePrefix;
+	}
+
+	public void setNamespacePrefix(String namespacePrefix) {
+		this.namespacePrefix = namespacePrefix;
+	}
+
+	public String getOdNumberOfItems() {
+		return odNumberOfItems;
+	}
+
+	public void setOdNumberOfItems(String odNumberOfItems) {
+		this.odNumberOfItems = odNumberOfItems;
+	}
+
+	public String getOdNumberOfItemsDate() {
+		return odNumberOfItemsDate;
+	}
+
+	public void setOdNumberOfItemsDate(String odNumberOfItemsDate) {
+		this.odNumberOfItemsDate = odNumberOfItemsDate;
+	}
+
+	public String getOdPolicies() {
+		return odPolicies;
+	}
+
+	public void setOdPolicies(String odPolicies) {
+		this.odPolicies = odPolicies;
+	}
+
+	public String getOdLanguages() {
+		return odLanguages;
+	}
+
+	public void setOdLanguages(String odLanguages) {
+		this.odLanguages = odLanguages;
+	}
+
+	public String getOdContentTypes() {
+		return odContentTypes;
+	}
+
+	public void setOdContentTypes(String odContentTypes) {
+		this.odContentTypes = odContentTypes;
+	}
+
+	public String getCollectedFrom() {
+		return collectedFrom;
+	}
+
+	public void setCollectedFrom(String collectedFrom) {
+		this.collectedFrom = collectedFrom;
+	}
+
+	public Boolean getInferred() {
+		return inferred;
+	}
+
+	public void setInferred(Boolean inferred) {
+		this.inferred = inferred;
+	}
+
+	public Boolean getDeletedByInference() {
+		return deletedByInference;
+	}
+
+	public void setDeletedByInference(Boolean deletedByInference) {
+		this.deletedByInference = deletedByInference;
+	}
+
+	public Double getTrust() {
+		return trust;
+	}
+
+	public void setTrust(Double trust) {
+		this.trust = trust;
+	}
+
+	public String getInferenceProvenance() {
+		return inferenceProvenance;
+	}
+
+	public void setInferenceProvenance(String inferenceProvenance) {
+		this.inferenceProvenance = inferenceProvenance;
+	}
+
+	public Date getDateOfValidation() {
+		return dateOfValidation;
+	}
+
+	public void setDateOfValidation(Date dateOfValidation) {
+		this.dateOfValidation = dateOfValidation;
+	}
+
+	public String getDatasourceClass() {
+		return datasourceClass;
+	}
+
+	public void setDatasourceClass(String datasourceClass) {
+		this.datasourceClass = datasourceClass;
+	}
+
+	public String getProvenanceActionClass() {
+		return provenanceActionClass;
+	}
+
+	public void setProvenanceActionClass(String provenanceActionClass) {
+		this.provenanceActionClass = provenanceActionClass;
+	}
+
+	public Date getDateOfCollection() {
+		return dateOfCollection;
+	}
+
+	public void setDateOfCollection(Date dateOfCollection) {
+		this.dateOfCollection = dateOfCollection;
+	}
+
+	public String getActivationId() {
+		return activationId;
+	}
+
+	public void setActivationId(String activationId) {
+		this.activationId = activationId;
+	}
+
+	public Boolean getMergehomonyms() {
+		return mergehomonyms;
+	}
+
+	public void setMergehomonyms(Boolean mergehomonyms) {
+		this.mergehomonyms = mergehomonyms;
+	}
+
+	public Date getReleaseStartDate() {
+		return releaseStartDate;
+	}
+
+	public void setReleaseStartDate(Date releaseStartDate) {
+		this.releaseStartDate = releaseStartDate;
+	}
+
+	public Date getReleaseEndDate() {
+		return releaseEndDate;
+	}
+
+	public void setReleaseEndDate(Date releaseEndDate) {
+		this.releaseEndDate = releaseEndDate;
+	}
+
+	public String getMissionStatementUrl() {
+		return missionStatementUrl;
+	}
+
+	public void setMissionStatementUrl(String missionStatementUrl) {
+		this.missionStatementUrl = missionStatementUrl;
+	}
+
+	public Boolean getDataProvider() {
+		return dataProvider;
+	}
+
+	public void setDataProvider(Boolean dataProvider) {
+		this.dataProvider = dataProvider;
+	}
+
+	public Boolean getServiceProvider() {
+		return serviceProvider;
+	}
+
+	public void setServiceProvider(Boolean serviceProvider) {
+		this.serviceProvider = serviceProvider;
+	}
+
+	public String getDatabaseAccessType() {
+		return databaseAccessType;
+	}
+
+	public void setDatabaseAccessType(String databaseAccessType) {
+		this.databaseAccessType = databaseAccessType;
+	}
+
+	public String getDataUploadType() {
+		return dataUploadType;
+	}
+
+	public void setDataUploadType(String dataUploadType) {
+		this.dataUploadType = dataUploadType;
+	}
+
+	public String getDatabaseAccessRestriction() {
+		return databaseAccessRestriction;
+	}
+
+	public void setDatabaseAccessRestriction(String databaseAccessRestriction) {
+		this.databaseAccessRestriction = databaseAccessRestriction;
+	}
+
+	public String getDataUploadRestriction() {
+		return dataUploadRestriction;
+	}
+
+	public void setDataUploadRestriction(String dataUploadRestriction) {
+		this.dataUploadRestriction = dataUploadRestriction;
+	}
+
+	public Boolean getVersioning() {
+		return versioning;
+	}
+
+	public void setVersioning(Boolean versioning) {
+		this.versioning = versioning;
+	}
+
+	public String getCitationGuidelineUrl() {
+		return citationGuidelineUrl;
+	}
+
+	public void setCitationGuidelineUrl(String citationGuidelineUrl) {
+		this.citationGuidelineUrl = citationGuidelineUrl;
+	}
+
+	public String getQualityManagementKind() {
+		return qualityManagementKind;
+	}
+
+	public void setQualityManagementKind(String qualityManagementKind) {
+		this.qualityManagementKind = qualityManagementKind;
+	}
+
+	public String getPidSystems() {
+		return pidSystems;
+	}
+
+	public void setPidSystems(String pidSystems) {
+		this.pidSystems = pidSystems;
+	}
+
+	public String getCertificates() {
+		return certificates;
+	}
+
+	public void setCertificates(String certificates) {
+		this.certificates = certificates;
+	}
+
+	public String getAggregator() {
+		return aggregator;
+	}
+
+	public void setAggregator(String aggregator) {
+		this.aggregator = aggregator;
+	}
+
+	public String getIssn() {
+		return issn;
+	}
+
+	public void setIssn(String issn) {
+		this.issn = issn;
+	}
+
+	public String getEissn() {
+		return eissn;
+	}
+
+	public void setEissn(String eissn) {
+		this.eissn = eissn;
+	}
+
+	public String getLissn() {
+		return lissn;
+	}
+
+	public void setLissn(String lissn) {
+		this.lissn = lissn;
+	}
+
+	public void setLatitude(Double latitude) {
+		this.latitude = latitude;
+	}
+
+	public Boolean isRegistered() {
+		return registered;
+	}
+
+	public void setRegistered(Boolean registered) {
+		this.registered = registered;
+	}
+
+	public PiwikInfo getPiwikInfo() {
+		return piwikInfo;
+	}
+
+	public void setPiwikInfo(PiwikInfo piwikInfo) {
+		this.piwikInfo = piwikInfo;
+	}
+
+	public Boolean getConsentTermsOfUse() {
+		return consentTermsOfUse;
+	}
+
+	public void setConsentTermsOfUse(Boolean consentTermsOfUse) {
+		this.consentTermsOfUse = consentTermsOfUse;
+	}
+
+	public Boolean getFullTextDownload() {
+		return fullTextDownload;
+	}
+
+	public void setFullTextDownload(Boolean fullTextDownload) {
+		this.fullTextDownload = fullTextDownload;
+	}
+
+	public Date getConsentTermsOfUseDate() {
+		return consentTermsOfUseDate;
+	}
+
+	public void setConsentTermsOfUseDate(Date consentTermsOfUseDate) {
+		this.consentTermsOfUseDate = consentTermsOfUseDate;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationEvent.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationEvent.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationEvent.java	(revision 62097)
@@ -0,0 +1,93 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+/**
+ * This class represents an event generated by a notification query.
+ * @author thanos@di.uoa.gr
+ * @see eu.dnetlib.api.functionality.NotificationService
+ * @see eu.dnetlib.functionality.notification.executor.NotificationQueryExecutor
+ * @see NotificationQuery
+ * @see NotificationSchedule
+ * @see NotificationResult
+ * @see NotificationSubscription
+ * 
+ */
+public class NotificationEvent implements Comparable<NotificationEvent> {
+	private String queryId;
+	private Date date;
+
+	/**
+	 * Construct a new notification event.
+	 * @param queryId the unique identifier of the query that generated this event
+	 * @param date the date the event was generated
+	 */
+	public NotificationEvent(final String queryId, final Date date) {
+		this.queryId = queryId;
+		this.date = date;
+	}
+	
+	/**
+	 * Construct a new notification event with query identifier and date set to null.
+	 */
+	public NotificationEvent() {
+		this(null, null);
+	}
+	
+	/**
+	 * Get the query of this event.
+	 * @return the unique identifier of the query of this event
+	 */
+	public String getQueryId() {
+		return queryId;
+	}
+
+	/**
+	 * Set the query of this event. 
+	 * @param queryId the unique identifier of the query of this event
+	 */
+	public void setQueryId(final String queryId) {
+		this.queryId = queryId;
+	}
+	
+	/**
+	 * Get the date of this event.
+	 * @return the date of this event 
+	 */
+	public Date getDate() {
+		return date;
+	}
+
+	/**
+	 * Set the date of this event.
+	 * @param date the date of this event
+	 */
+	public void setDate(final Date date) {
+		this.date = date;
+	}
+		
+	@Override
+	public int compareTo(final NotificationEvent event) {
+		final int queryIdComparison = queryId.compareTo(event.queryId);
+		final int dateComparison = date.compareTo(event.date);
+		return (queryIdComparison == 0) ? dateComparison : queryIdComparison;
+	}
+	
+	@Override
+	public boolean equals(final Object object) {
+		if (!(object instanceof NotificationEvent))
+			return false;
+		final NotificationEvent event = (NotificationEvent) object;
+		return ((queryId == null) ? (event.queryId == null) : queryId.equals(event.queryId)) && ((date == null) ? (event.date == null) : date.equals(event.date));
+	}
+	
+	@Override
+	public int hashCode() {
+		return ((queryId == null) ? 0 : queryId.hashCode()) + ((date == null) ? 0 : (date.hashCode()));
+	}
+	
+	@Override
+	public String toString() {
+		return "(query: " + queryId + ", date: " + date + ")";
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/PiwikInfo.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/PiwikInfo.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/PiwikInfo.java	(revision 62097)
@@ -0,0 +1,139 @@
+package eu.dnetlib.domain.data;
+
+import java.util.Date;
+
+/**
+ * Created by stefania on 12/19/16.
+ */
+public class PiwikInfo{
+
+    private String repositoryId;
+    private String openaireId;
+    private String repositoryName;
+    private String country;
+    private String siteId;
+    private String authenticationToken;
+    private Date creationDate;
+    private String requestorName;
+    private String requestorEmail;
+    private boolean validated;
+    private Date validationDate;
+    private String comment;
+
+    public PiwikInfo() {
+
+    }
+
+    public PiwikInfo(String repositoryId, String openaireId, String repositoryName, String country, String siteId,
+                     String authenticationToken, Date creationDate, String requestorName, String requestorEmail,
+                     boolean validated, Date validationDate, String comment) {
+        this.repositoryId = repositoryId;
+        this.openaireId = openaireId;
+        this.repositoryName = repositoryName;
+        this.country = country;
+        this.siteId = siteId;
+        this.authenticationToken = authenticationToken;
+        this.creationDate = creationDate;
+        this.requestorName = requestorName;
+        this.requestorEmail = requestorEmail;
+        this.validated = validated;
+        this.validationDate = validationDate;
+        this.comment = comment;
+    }
+
+    public String getRepositoryId() {
+        return repositoryId;
+    }
+
+    public void setRepositoryId(String repositoryId) {
+        this.repositoryId = repositoryId;
+    }
+
+    public String getOpenaireId() {
+        return openaireId;
+    }
+
+    public void setOpenaireId(String openaireId) {
+        this.openaireId = openaireId;
+    }
+
+    public String getRepositoryName() {
+        return repositoryName;
+    }
+
+    public void setRepositoryName(String repositoryName) {
+        this.repositoryName = repositoryName;
+    }
+
+    public String getCountry() {
+        return country;
+    }
+
+    public void setCountry(String country) {
+        this.country = country;
+    }
+
+    public String getSiteId() {
+        return siteId;
+    }
+
+    public void setSiteId(String siteId) {
+        this.siteId = siteId;
+    }
+
+    public String getAuthenticationToken() {
+        return authenticationToken;
+    }
+
+    public void setAuthenticationToken(String authenticationToken) {
+        this.authenticationToken = authenticationToken;
+    }
+
+    public Date getCreationDate() {
+        return creationDate;
+    }
+
+    public void setCreationDate(Date creationDate) {
+        this.creationDate = creationDate;
+    }
+
+    public String getRequestorName() {
+        return requestorName;
+    }
+
+    public void setRequestorName(String requestorName) {
+        this.requestorName = requestorName;
+    }
+
+    public String getRequestorEmail() {
+        return requestorEmail;
+    }
+
+    public void setRequestorEmail(String requestorEmail) {
+        this.requestorEmail = requestorEmail;
+    }
+
+    public boolean isValidated() {
+        return validated;
+    }
+
+    public void setValidated(boolean validated) {
+        this.validated = validated;
+    }
+
+    public Date getValidationDate() {
+        return validationDate;
+    }
+
+    public void setValidationDate(Date validationDate) {
+        this.validationDate = validationDate;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ResultPage.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ResultPage.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ResultPage.java	(revision 62097)
@@ -0,0 +1,102 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.List;
+
+/**
+ * This class represents a single page of results which is part of a multi-page sequence.
+ * @author thanos
+ * @see eu.dnetlib.api.functionality.NotificationService
+ * @see eu.dnetlib.functionality.notification.executor.NotificationQueryExecutor
+ *
+ */
+public class ResultPage {
+	private int limit;
+	private int offset;
+	private String[] columns;
+	private List<String[]> rows;
+	
+	/**
+	 * Construct a new result page.
+	 * @param limit the limit of this result page
+	 * @param offset the offset of this result page
+	 * @param columns the column names of this result page
+	 * @param rows the rows of this result page
+	 */
+	public ResultPage(final int limit, final int offset, final String[] columns, final List<String[]> rows) {
+		this.limit = limit;
+		this.offset = offset;
+		this.columns = columns;
+		this.rows = rows;
+	}
+	
+	/**
+	 * Construct a new result page with limit and offset set to zero and columns and rows set to null.
+	 */
+	public ResultPage() {
+		this(0, 0, null, null);
+	}
+	
+	/**
+	 * Get the limit.
+	 * @return the limit of this result page
+	 */
+	public int getLimit() {
+		return limit;
+	}
+	
+	/**
+	 * Set the limit.
+	 * @param limit the limit of this result page
+	 */
+	public void setLimit(final int limit) {
+		this.limit = limit;
+	}
+	
+	/**
+	 * Get the offset.
+	 * @return the offset of this result page
+	 */
+	public int getOffset() {
+		return offset;
+	}
+	
+	/**
+	 * Set the offset.
+	 * @param offset the offset of this result page
+	 */
+	public void setOffset(final int offset) {
+		this.offset = offset;
+	}
+	
+	/**
+	 * Get the columns.
+	 * @return the column names of this result page
+	 */
+	public String[] getColumns() {
+		return columns;
+	}
+	
+	/**
+	 * Set the columns.
+	 * @param columns the column names of this result page 
+	 */
+	public void setColumns(final String[] columns) {
+		this.columns = columns;
+	}
+	
+	/**
+	 * Get the rows.
+	 * @return the list containing the rows of this result page
+	 */
+	public List<String[]> getRows() {
+		return rows;
+	}
+	
+	/**
+	 * Set the rows.
+	 * @param rows the list containing the rows of this result page
+	 */
+	public void setRows(final List<String[]> rows) {
+		this.rows = rows;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryInterface.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryInterface.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryInterface.java	(revision 62097)
@@ -0,0 +1,218 @@
+package eu.dnetlib.domain.data;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RepositoryInterface{
+
+    private static final long serialVersionUID = 8013272950607614479L;
+
+    // FOR VALIDATOR
+    private String desiredCompatibilityLevel;
+    private String complianceName;
+    private String upgradeToV3;
+    private boolean deleteApi;
+    private String accessSet;
+    private String accessFormat;
+    private String metadataIdentifierPath;
+    private String lastCollectionDate;
+    private String nextScheduledExecution;
+
+    private String status;
+    private String collectedFrom;
+
+    // FOR DATASOURCE MANAGER SERVICE
+    private String id;
+    private String typology;
+    private String compliance;
+    private String contentDescription;
+    private String accessProtocol;
+    private String baseUrl;
+    private boolean active = false;
+    private boolean removable = true;
+    private Map<String, String> accessParams = new HashMap<String, String>();
+    private Map<String, String> extraFields = new HashMap<String, String>();
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTypology() {
+        return typology;
+    }
+
+    public void setTypology(String typology) {
+        this.typology = typology;
+    }
+
+    public String getCompliance() {
+        return compliance;
+    }
+
+    public void setCompliance(String compliance) {
+        this.compliance = compliance;
+    }
+
+    public String getContentDescription() {
+        return contentDescription;
+    }
+
+    public void setContentDescription(String contentDescription) {
+        this.contentDescription = contentDescription;
+    }
+
+    public String getAccessProtocol() {
+        return accessProtocol;
+    }
+
+    public void setAccessProtocol(String accessProtocol) {
+        this.accessProtocol = accessProtocol;
+    }
+
+    public String getBaseUrl() {
+        return baseUrl;
+    }
+
+    public void setBaseUrl(String baseUrl) {
+        this.baseUrl = baseUrl;
+    }
+
+    public boolean isActive() {
+        return active;
+    }
+
+    public void setActive(boolean active) {
+        this.active = active;
+    }
+
+    public boolean isRemovable() {
+        return removable;
+    }
+
+    public void setRemovable(boolean removable) {
+        this.removable = removable;
+    }
+
+    public Map<String, String> getAccessParams() {
+        return accessParams;
+    }
+
+    public void setAccessParams(Map<String, String> accessParams) {
+        this.accessParams = accessParams;
+    }
+
+    public Map<String, String> getExtraFields() {
+        return extraFields;
+    }
+
+    public void setExtraFields(Map<String, String> extraFields) {
+        this.extraFields = extraFields;
+    }
+
+    public String getAccessSet() {
+        this.accessSet = accessParams.get("set");
+        return accessSet;
+    }
+
+    public void setAccessSet(String accessSet) {
+        this.accessSet = accessSet;
+        this.accessParams.put("set", accessSet);
+    }
+
+    public void removeAccessSet() {
+        accessParams.remove("set");
+    }
+
+    public String getAccessFormat() {
+        this.accessFormat = accessParams.get("format");
+        return accessFormat;
+    }
+
+    public void setAccessFormat(String accessFormat) {
+        this.accessFormat = accessFormat;
+        this.accessParams.put("format", accessFormat);
+    }
+
+    public String getLastCollectionDate() {
+        this.lastCollectionDate = extraFields.get("last_collection_date");
+        return lastCollectionDate;
+    }
+
+    public void setLastCollectionDate(String lastCollectionDate) {
+        this.lastCollectionDate = lastCollectionDate;
+        this.extraFields.put("last_collection_date", lastCollectionDate);
+    }
+
+    public String getStatus() {
+        this.status = extraFields.get("status");
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+        this.extraFields.put("status", status);
+    }
+
+    public String getNextScheduledExecution() {
+        return nextScheduledExecution;
+    }
+
+    public void setNextScheduledExecution(String nextScheduledExecution) {
+        this.nextScheduledExecution = nextScheduledExecution;
+    }
+
+    public String getMetadataIdentifierPath() {
+        this.metadataIdentifierPath = extraFields.get("metadata_identifier_path");
+        return metadataIdentifierPath;
+    }
+
+    public void setMetadataIdentifierPath(String metadataIdentifierPath) {
+        this.metadataIdentifierPath = metadataIdentifierPath;
+        this.extraFields.put("metadata_identifier_path", metadataIdentifierPath);
+    }
+
+    public String getUpgradeToV3() {
+        return upgradeToV3;
+    }
+
+    public void setUpgradeToV3(String upgradeToV3) {
+        this.upgradeToV3 = upgradeToV3;
+    }
+
+    public boolean isDeleteApi() {
+        return deleteApi;
+    }
+
+    public void setDeleteApi(boolean deleteApi) {
+        this.deleteApi = deleteApi;
+    }
+
+    public String getDesiredCompatibilityLevel() {
+        return desiredCompatibilityLevel;
+    }
+
+    public void setDesiredCompatibilityLevel(String desiredCompatibilityLevel) {
+        this.desiredCompatibilityLevel = desiredCompatibilityLevel;
+    }
+
+    public String getComplianceName() {
+        return complianceName;
+    }
+
+    public void setComplianceName(String complianceName) {
+        this.complianceName = complianceName;
+    }
+
+    public String getCollectedFrom() {
+        return collectedFrom;
+    }
+
+    public void setCollectedFrom(String collectedFrom) {
+        this.collectedFrom = collectedFrom;
+    }
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/MDFormatSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/MDFormatSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/MDFormatSearchCriteria.java	(revision 62097)
@@ -0,0 +1,24 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+public class MDFormatSearchCriteria extends SearchCriteriaImpl implements 
+	SearchCriteria {
+
+	String MDFormatName = null;
+	
+	public String getMDFormatName() {
+		return MDFormatName;
+	}
+
+	public void setMDFormatName(String formatName) {
+		MDFormatName = formatName;
+	}
+
+	@Override
+	public boolean matches(Object o) {
+		throw new UnsupportedOperationException();
+	}
+
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositorySearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositorySearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositorySearchCriteria.java	(revision 62097)
@@ -0,0 +1,224 @@
+package eu.dnetlib.domain.data;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+public class RepositorySearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+	private Boolean haveDocuments = null;
+	private String protocolType = null;
+	private String adminInfo = null;
+	private String officialName = null;
+	private String registeredBy = null;
+	private String country = null;
+	private Boolean verified = false;
+
+	public String getRegisteredBy() {
+		return registeredBy;
+	}
+
+	public void setRegisteredBy(String registeredBy) {
+		this.registeredBy = registeredBy;
+	}
+
+	public String getCountry() {
+		return country;
+	}
+
+	public void setCountry(String country) {
+		this.country = country;
+	}
+
+	public String getProtocolType() {
+		return protocolType;
+	}
+
+	public void setProtocolType(String protocolType) {
+		this.protocolType = protocolType;
+	}
+
+	public Boolean getHaveDocuments() {
+		return haveDocuments;
+	}
+
+	public void setHaveDocuments(Boolean haveDocuments) {
+		this.haveDocuments = haveDocuments;
+	}
+
+	public String getAdminInfo() {
+		return adminInfo;
+	}
+
+	public void setAdminInfo(String adminInfo) {
+		this.adminInfo = adminInfo;
+	}
+
+	public boolean equals(Object o) {
+		return this.equals((RepositorySearchCriteria) o);
+	}
+
+	public boolean equals(RepositorySearchCriteria c) {
+		if (!super.equals(c))
+			return false;
+
+		if (this.getHaveDocuments() != null && c.getHaveDocuments() == null)
+			return false;
+		else if (this.getHaveDocuments() == null
+				&& c.getHaveDocuments() != null)
+			return false;
+		else if (this.getHaveDocuments() != null
+				&& c.getHaveDocuments() != null)
+			return this.haveDocuments == c.haveDocuments;
+
+		if (this.getProtocolType() != null) {
+			if (c.getProtocolType() == null
+					|| !this.getProtocolType().equals(c.getProtocolType()))
+				return false;
+		} else if (c.getProtocolType() != null)
+			return false;
+
+		if (this.getAdminInfo() != null) {
+			if (c.getAdminInfo() == null
+					|| !this.getAdminInfo().equals(c.getAdminInfo()))
+				return false;
+		} else if (c.getAdminInfo() != null)
+			return false;
+
+		if (this.getOfficialName() != null) {
+			if (c.getOfficialName() == null
+					|| !this.getOfficialName().equals(c.getOfficialName()))
+				return false;
+		} else if (c.getOfficialName() != null)
+			return false;
+		
+		if (this.getCountry() != null) {
+			if (c.getCountry() == null || !this.getCountry().equals(c.getCountry()))
+				return false;
+		} else if (c.getCountry() != null)
+			return false;
+		
+		if (this.isVerified() != null) {
+			if (c.isVerified() == null || !this.isVerified().equals(c.isVerified()))
+				return false;
+		} else if (c.isVerified() != null)
+			return false;
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int code = super.hashCode();
+
+		if (haveDocuments != null)
+			code |= haveDocuments.hashCode();
+
+		if (protocolType != null) {
+			code |= protocolType.hashCode();
+		}
+
+		if (adminInfo != null) {
+			code |= adminInfo.hashCode();
+		}
+
+		if (officialName != null) {
+			code |= officialName.hashCode();
+		}
+		
+		if (country != null)
+			code |= country.hashCode();
+		
+		if (verified != null)
+			code |= verified.hashCode();
+
+		return code;
+	}
+
+	public boolean matches(Object o) {
+		if (!(o instanceof Repository)) {
+			return false;
+		}
+
+		Repository repository = (Repository) o;
+
+		if (this.getContains() != null) {
+			if (repository.getOfficialName() == null
+					|| !repository.getOfficialName().toLowerCase().contains(
+							this.getContains().toLowerCase()))
+				return false;
+		}
+
+		if (this.getStartsWith() != null) {
+			if (repository.getOfficialName() == null
+					|| !repository.getOfficialName().toLowerCase().startsWith(
+							this.getStartsWith().toLowerCase()))
+				return false;
+		}
+
+		if (this.getEndsWith() != null) {
+			if (repository.getOfficialName() == null
+					|| !repository.getOfficialName().toLowerCase().endsWith(
+							this.getEndsWith().toLowerCase()))
+				return false;
+		}
+
+		if (this.getHaveDocuments() != null) {
+			if (repository.getNumberOfObjects() == null
+					|| (repository.getNumberOfObjects() > 0) != this
+							.getHaveDocuments())
+
+				return false;
+		}
+
+		if (this.getOfficialName() != null) {
+			if (!this.getOfficialName().equals(repository.getOfficialName()))
+				return false;
+		}
+		
+		if (this.getRegisteredBy() != null) {
+			if (!this.getRegisteredBy().equals(repository.getRegisteredBy()))
+				return false;
+		}
+		
+		if (this.getCountry() != null) {
+			if (!this.getCountry().equals(repository.getCountryName()))
+				return false;
+		}
+		
+		if (this.isVerified() != null) {
+			if (!this.isVerified().equals(repository.isVerified()))
+				return false;
+		}
+
+		return true;
+	}
+
+	public boolean isOAICompliant(Repository repository) {
+		boolean retval = false;
+		for (RepositoryInterface ri : repository.getInterfaces()) {
+			if (ri.getAccessProtocol() != null
+					&& ri.getAccessProtocol().equals("OAI")) {
+				retval = true;
+				break;
+			}
+		}
+
+		return retval;
+	}
+
+	public String getOfficialName() {
+		return officialName;
+	}
+
+	public void setOfficialName(String officialName) {
+		this.officialName = officialName;
+	}
+
+	public Boolean isVerified() {
+		return verified;
+	}
+
+	public void setVerified(Boolean verified) {
+		this.verified = verified;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeedSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeedSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeedSearchCriteria.java	(revision 62097)
@@ -0,0 +1,53 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+public class RSSFeedSearchCriteria extends SearchCriteriaImpl implements SearchCriteria {
+
+	private String cqlQuery = null;
+	private String userId = null;
+	
+	public RSSFeedSearchCriteria() {
+		
+	}
+	
+	public RSSFeedSearchCriteria(String cqlQuery) {
+		super();
+		this.cqlQuery = cqlQuery;
+	}
+
+	public boolean matches(Object o) {
+		RSSFeed rf = (RSSFeed)o;
+		if( cqlQuery != null ) {
+			if( rf.getQueryCql() == null )
+				return false;
+			if( rf.getQueryCql().equals(cqlQuery) == false )
+				return false;
+		}
+		if( userId != null ){
+			if( rf.getUsedId() == null )
+				return false;
+			if( rf.getUsedId().equals(userId) == false )			
+				return false;
+		}
+		return true;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getCqlQuery() {
+		return cqlQuery;
+	}
+
+	public void setCqlQuery(String cqlQuery) {
+		this.cqlQuery = cqlQuery;
+	}
+
+}

Property changes on: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeedSearchCriteria.java
___________________________________________________________________
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FormattedSearchResult.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FormattedSearchResult.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FormattedSearchResult.java	(revision 62097)
@@ -0,0 +1,36 @@
+package eu.dnetlib.domain.data;
+
+public class FormattedSearchResult {
+
+	// String containing the formatted results of search
+	private String formattedResult;
+
+	// the total number of records in the index
+	// for the given query
+	private int resultsNumber;
+
+	public FormattedSearchResult() {
+	}
+
+	public FormattedSearchResult(String formattedResult, int resultsNumber) {
+		this.formattedResult = formattedResult;
+		this.resultsNumber = resultsNumber;
+	}
+
+	public String getFormattedResult() {
+		return formattedResult;
+	}
+
+	public int getResultsNumber() {
+		return resultsNumber;
+	}
+
+	public void setFormattedResult(String formattedResult) {
+		this.formattedResult = formattedResult;
+	}
+
+	public void setResultsNumber(int resultsNumber) {
+		this.resultsNumber = resultsNumber;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/PlainTextDisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/PlainTextDisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/PlainTextDisplayType.java	(revision 62097)
@@ -0,0 +1,33 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public class PlainTextDisplayType extends DisplayType {
+	
+	public PlainTextDisplayType(String field) {
+		super(field);
+	}
+	
+	public PlainTextDisplayType(String field, Map<Locale, String> descriptionMap) {
+		super(field);
+		setDescriptionMap(descriptionMap);
+	}
+	
+/*	@Override
+	public int getDisplayMessage(StringBuilder builder, Document document, 
+			String fieldValue) {
+		String finalValue = replaceFieldValueExpression(document, getDescription(), fieldValue);
+		builder.append(finalValue);
+		return finalValue.length();
+	}
+
+	@Override
+	int getDisplayMessage(StringBuilder builder, Document document,
+			String fieldValue, String secondaryLink) {
+		String finalValue = replaceFieldValueExpression(document, secondaryLink, fieldValue);
+		builder.append(finalValue);
+		return finalValue.length();
+	}
+*/	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SearchResult.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SearchResult.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SearchResult.java	(revision 62097)
@@ -0,0 +1,127 @@
+package eu.dnetlib.domain.data;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 
+ * @author kiatrop
+ *
+ */
+
+/**
+ * Contains the results of a query together with 
+ * information about the returned locale,
+ * the total number of records , the current page, the page size  
+ */
+public class SearchResult {
+	//the cql query
+	private String query;	
+	//the locale
+	private String locale;	
+	//the total number of records in the index
+	//for the given query
+	private int total;
+	//the current page of results
+	private int page;
+	//the current number of records in the current page
+	private int size;
+	//refine fields
+	private Collection<String> fields;
+	
+	//search results in xml
+	private List<String> searchResults;
+	
+	//refine - browse results in xml
+	private List<String> browseResults;
+	
+	public SearchResult() {
+	}
+	
+	public SearchResult(String query, String locale, int total, 
+			int page, int size, List<String> searchResults) {
+		this(query, locale, total, page, size, searchResults, null, null);
+	}
+	
+	public SearchResult(String query, String locale, Collection<String> fields,
+			List<String> browseResults) {
+		this(query, locale, 0, 0, 0, null, browseResults, fields);
+	}
+	
+	public SearchResult(String query, String locale, int total, int page, int size, 
+			List<String> searchResults, List<String> browseResults,  Collection<String> fields) {
+		this.query = query;
+		this.locale = locale;
+		this.total = total;
+		this.page = page;
+		this.size = size;
+		this.fields = fields;
+		
+		this.searchResults = searchResults;
+		this.browseResults = browseResults;
+	}
+
+	public String getQuery() {
+		return query;
+	}
+
+	public void setQuery(String query) {
+		this.query = query;
+	}
+
+	public String getLocale() {
+		return locale;
+	}
+
+	public void setLocale(String locale) {
+		this.locale = locale;
+	}
+
+	public int getTotal() {
+		return total;
+	}
+
+	public void setTotal(int total) {
+		this.total = total;
+	}
+
+	public int getPage() {
+		return page;
+	}
+
+	public void setPage(int page) {
+		this.page = page;
+	}
+
+	public int getSize() {
+		return size;
+	}
+
+	public void setSize(int size) {
+		this.size = size;
+	}
+
+	public Collection<String> getFields() {
+		return fields;
+	}
+
+	public void setFields(Collection<String> fields) {
+		this.fields = fields;
+	}
+
+	public List<String> getSearchResults() {
+		return searchResults;
+	}
+
+	public void setSearchResults(List<String> searchResults) {
+		this.searchResults = searchResults;
+	}
+
+	public List<String> getBrowseResults() {
+		return browseResults;
+	}
+
+	public void setBrowseResults(List<String> browseResults) {
+		this.browseResults = browseResults;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionInterface.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionInterface.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionInterface.java	(revision 62097)
@@ -0,0 +1,37 @@
+package eu.dnetlib.domain.data;
+
+
+public class DataCollectionInterface {
+
+	private DataCollectionAccessProtocol protocol = null;
+	private String baseUrl;
+	private String format;
+	private String filter;
+	
+	public DataCollectionAccessProtocol getProtocol() {
+		return protocol;
+	}
+	public void setProtocol(DataCollectionAccessProtocol protocol) {
+		this.protocol = protocol;
+	}
+	public String getBaseUrl() {
+		return baseUrl;
+	}
+	public void setBaseUrl(String baseUrl) {
+		this.baseUrl = baseUrl;
+	}
+	public String getFormat() {
+		return format;
+	}
+	public void setFormat(String format) {
+		this.format = format;
+	}
+	public String getFilter() {
+		return filter;
+	}
+	public void setFilter(String filter) {
+		this.filter = filter;
+	}
+
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AlertTemplate.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AlertTemplate.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AlertTemplate.java	(revision 62097)
@@ -0,0 +1,127 @@
+package eu.dnetlib.domain.functionality;
+
+import java.net.URL;
+
+/**
+ * This class represents a template for alert messages.
+ * @author thanos
+ * @see eu.dnetlib.api.functionality.AlertService
+ * @see eu.dnetlib.functionality.alert.alerter.Alerter
+ * @see AlertTopic
+ * @see AlertSubscription
+ *
+ */
+public class AlertTemplate implements Comparable<AlertTemplate> {
+	private String templateId;
+	private String title;
+	private String message;
+	private URL link;
+	
+	/**
+	 * Construct a new alert template.
+	 * @param templateId the unique identifier of this template
+	 * @param title the title of the alerts generated by this template
+	 * @param message the message of the alerts generated by this template
+	 * @param link the link of the alerts generated by this template
+	 */
+	public AlertTemplate(final String templateId, final String title, final String message, final URL link) {
+		this.templateId = templateId;
+		this.title = title;
+		this.message = message;
+		this.link = link;
+	}
+	
+	/**
+	 * Construct a new alert template with template identifier, title, message and link set to null.
+	 */
+	public AlertTemplate() {
+		this(null, null, null, null);
+	}
+
+	/**
+	 * Get the unique identifier of this template.
+	 * @return the unique identifier of this template
+	 */
+	public String getTemplateId() {
+		return templateId;
+	}
+	
+	/**
+	 * Set the unique identifier of this template.
+	 * @param templateId the unique identifier of this template
+	 */
+	public void setTemplateId(final String templateId) {
+		this.templateId = templateId;
+	}
+	
+	/**
+	 * Get the title.
+	 * @return the title of this template
+	 */
+	public String getTitle() {
+		return title;
+	}
+	
+	/**
+	 * Set the title.
+	 * @param title the title of this template
+	 */
+	public void setTitle(final String title) {
+		this.title = title;
+	}
+	
+	/**
+	 * Get the message.
+	 * @return the message of this template
+	 */
+	public String getMessage() {
+		return message;
+	}
+	
+	/**
+	 * Set the message.
+	 * @param message the message of this template
+	 */
+	public void setMessage(final String message) {
+		this.message = message;
+	}
+	
+	/**
+	 * Get the link.
+	 * @return the link of this template
+	 */
+	public URL getLink() {
+		return link;
+	}
+	
+	/**
+	 * Set the link.
+	 * @param link the link of this template
+	 */
+	public void setLink(final URL link) {
+		this.link = link;
+	}
+	
+	@Override
+	public int compareTo(final AlertTemplate template) {
+		return templateId.compareTo(template.templateId);
+	}
+	
+	@Override
+	public boolean equals(final Object object) {
+		if (!(object instanceof AlertTemplate))
+			return false;
+		final AlertTemplate template = (AlertTemplate) object;
+		return (templateId == null) ? (template.templateId == null) : templateId.equals(template.templateId);
+	}
+	
+	@Override
+	public int hashCode() {
+		return (templateId == null) ? 0 : templateId.hashCode();
+	}
+	
+	@Override
+	public String toString() {
+		return templateId;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryAccessProtocol.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryAccessProtocol.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryAccessProtocol.java	(revision 62097)
@@ -0,0 +1,33 @@
+package eu.dnetlib.domain.data;
+
+public class RepositoryAccessProtocol {
+	private String value;
+    private String username;    
+    private String password;
+    private String filter;
+    
+	public String getValue() {
+		return value;
+	}
+	public void setValue(String value) {
+		this.value = value;
+	}
+	public String getUsername() {
+		return username;
+	}
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	public String getPassword() {
+		return password;
+	}
+	public void setPassword(String password) {
+		this.password = password;
+	}
+	public String getFilter() {
+		return filter;
+	}
+	public void setFilter(String filter) {
+		this.filter = filter;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryBlackboard.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryBlackboard.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryBlackboard.java	(revision 62097)
@@ -0,0 +1,36 @@
+package eu.dnetlib.domain.data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RepositoryBlackboard {
+
+	private String lastrequest = "";
+	private String lastresponse = "";
+	private List<RepositoryBlackboardMessage> messages = new ArrayList<RepositoryBlackboardMessage>();
+
+	public String getLastrequest() {
+		return lastrequest;
+	}
+
+	public void setLastrequest(String lastrequest) {
+		this.lastrequest = lastrequest;
+	}
+
+	public String getLastresponse() {
+		return lastresponse;
+	}
+
+	public void setLastresponse(String lastresponse) {
+		this.lastresponse = lastresponse;
+	}
+
+	public List<RepositoryBlackboardMessage> getMessages() {
+		return messages;
+	}
+
+	public void setMessages(List<RepositoryBlackboardMessage> messages) {
+		this.messages = messages;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationQuery.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationQuery.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationQuery.java	(revision 62097)
@@ -0,0 +1,128 @@
+package eu.dnetlib.domain.functionality;
+
+import java.net.URI;
+
+/**
+ * This class represents a query of the notification service.
+ * @author thanos@di.uoa.gr
+ * @see eu.dnetlib.api.functionality.NotificationService
+ * @see eu.dnetlib.functionality.notification.executor.NotificationQueryExecutor
+ * @see NotificationSchedule
+ * @see NotificationEvent
+ * @see NotificationResult
+ * @see NotificationSubscription
+ * 
+ */
+public class NotificationQuery implements Comparable<NotificationQuery> {
+	private String queryId;
+	private String queryLanguage;
+	private URI sourceUri;
+	private String queryString;
+	
+	/**
+	 * Construct a new notification query.
+	 * @param queryId unique identifier of this query
+	 * @param queryLanguage the language in which the query is expressed, determines which executor to use
+	 * @param sourceUri the URI of the data source that can answer the query
+	 * @param queryString the actual query
+	 */
+	public NotificationQuery(final String queryId, final String queryLanguage, final URI sourceUri, final String queryString) {
+		this.queryId = queryId;
+		this.queryLanguage = queryLanguage;
+		this.sourceUri = sourceUri;
+		this.queryString = queryString;
+	}
+	
+	/**
+	 * Construct a new notification query with query identifier, query language, source URI and query string set to null. 
+	 */
+	public NotificationQuery() {
+		this(null, null, null, null);
+	}
+
+	/**
+	 * Get the unique identifier of this query.
+	 * @return the unique identifier of this query
+	 */
+	public String getQueryId() {
+		return queryId;
+	}
+	
+	/**
+	 * Set the unique identifier of this query.
+	 * @param queryId the unique identifier of this query
+	 */
+	public void setQueryId(final String queryId) {
+		this.queryId = queryId;
+	}
+	
+	/**
+	 * Get the query language of this query.
+	 * @return the query language of this query
+	 */
+	public String getQueryLanguage() {
+		return queryLanguage;
+	}
+	
+	/**
+	 * Set the the query language of this query
+	 * @param queryLanguage the query language of this query
+	 */
+	public void setQueryLanguage(final String queryLanguage) {
+		this.queryLanguage = queryLanguage;
+	}
+	
+	/**
+	 * Get the source URI of this query.
+	 * @return the URI of the data source of this query
+	 */
+	public URI getSourceUri() {
+		return sourceUri;
+	}
+
+	/**
+	 * Set the source URI of this query.
+	 * @param sourceUri the URI of the data source of this query
+	 */
+	public void setSourceUri(final URI sourceUri) {
+		this.sourceUri = sourceUri;
+	}
+	
+	/**
+	 * Get the query string of this query.
+	 * @return the query string of this query
+	 */
+	public String getQueryString() {
+		return queryString;
+	}
+	
+	/**
+	 * Set the query string of this query.
+	 * @param queryString the query string of this query
+	 */
+	public void setQueryString(final String queryString) {
+		this.queryString = queryString;
+	}
+	
+	@Override
+	public int compareTo(final NotificationQuery query) {
+		return queryId.compareTo(query.queryId);
+	}
+	@Override
+	public boolean equals(final Object object) {
+		if (!(object instanceof NotificationQuery))
+			return false;
+		final NotificationQuery query = (NotificationQuery) object;
+		return (queryId == null) ? (query.queryId == null) : queryId.equals(query.queryId);
+	}
+	
+	@Override
+	public int hashCode() {
+		return (queryId == null) ? 0 : queryId.hashCode();
+	}
+	
+	@Override
+	public String toString() {
+		return queryId;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionType.java	(revision 62097)
@@ -0,0 +1,36 @@
+package eu.dnetlib.domain.data;
+
+public class DataCollectionType {
+
+	private DataCollectionInterface dataCollectionInterface;
+	private String id;
+	private String label;
+	private String group;
+	public DataCollectionInterface getDataCollectionInterface() {
+		return dataCollectionInterface;
+	}
+	public void setDataCollectionInterface(
+			DataCollectionInterface dataCollectionInterface) {
+		this.dataCollectionInterface = dataCollectionInterface;
+	}
+	public String getId() {
+		return id;
+	}
+	public void setId(String id) {
+		this.id = id;
+	}
+	public String getLabel() {
+		return label;
+	}
+	public void setLabel(String label) {
+		this.label = label;
+	}
+	public String getGroup() {
+		return group;
+	}
+	public void setGroup(String group) {
+		this.group = group;
+	}
+	
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionAccessProtocol.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionAccessProtocol.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/DataCollectionAccessProtocol.java	(revision 62097)
@@ -0,0 +1,28 @@
+package eu.dnetlib.domain.data;
+
+public class DataCollectionAccessProtocol {
+	
+	private String value;
+    private String username;
+    private String password;
+    
+	public String getValue() {
+		return value;
+	}
+	public void setValue(String value) {
+		this.value = value;
+	}
+	public String getUsername() {
+		return username;
+	}
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	public String getPassword() {
+		return password;
+	}
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationSubscription.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationSubscription.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationSubscription.java	(revision 62097)
@@ -0,0 +1,112 @@
+package eu.dnetlib.domain.functionality;
+
+import java.net.URL;
+
+/**
+ * This class represents a subscription of an alert service to a notification query. 
+ * @author thanos@di.uoa.gr
+ * @see eu.dnetlib.api.functionality.NotificationService
+ * @see eu.dnetlib.functionality.notification.executor.NotificationQueryExecutor
+ * @see NotificationQuery
+ * @see NotificationSchedule
+ * @see NotificationEvent
+ * @see NotificationResult
+ * 
+ */
+public class NotificationSubscription implements Comparable<NotificationSubscription> {
+	private String queryId;
+	private URL alertService;
+	private boolean enabled;
+	
+	/**
+	 * Construct a new notification subscription.
+	 * @param queryId the unique identifier of the query of this subscription
+	 * @param alertService the URL of the alert service of this subscription
+	 * @param enabled true if this subscription is currently enabled, false if it currently disabled
+	 */
+	public NotificationSubscription(final String queryId, final URL alertService, final boolean enabled) {
+		this.queryId = queryId;
+		this.alertService = alertService;
+		this.enabled = enabled;
+	}
+		
+	/**
+	 * Construct a new notification subscription with query identifier and alert service set to null and enabled set to false.
+	 */
+	public NotificationSubscription() {
+		this(null, null, false);
+	}
+		
+	/**
+	 * Get the query of this subscription.
+	 * @return the unique identifier of the query of this subscription
+	 */
+	public String getQueryId() {
+		return queryId;
+	}
+	
+	/**
+	 * Set the query of this subscription.
+	 * @param queryId the unique identifier of the query of this subscription
+	 */
+	public void setQueryId(final String queryId) {
+		this.queryId = queryId;
+	}
+	
+	/**
+	 * Get the alert service of this subscription.
+	 * @return the URL of the alert service of this subscription
+	 */
+	public URL getAlertService() {
+		return alertService;
+	}
+	
+	/**
+	 * Set the alert service of this subscription.
+	 * @param alertService the URL of the alert service of this subscription
+	 */
+	public void setAlertService(final URL alertService) {
+		this.alertService = alertService;
+	}
+	
+	/**
+	 * Check if this subscription is enabled.
+	 * @return true if this subscription is currently enabled, false otherwise
+	 */
+	public boolean isEnabled() {
+		return enabled;
+	}
+	
+	/**
+	 * Set the enabled status of this subscription.
+	 * @param enabled true to enable this subscription, false to disable it
+	 */
+	public void setEnabled(final boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	@Override
+	public int compareTo(final NotificationSubscription subscription) {
+		final int queryIdComparison = queryId.compareTo(subscription.queryId);
+		final int alertServiceComparison = alertService.toString().compareTo(subscription.alertService.toString());
+		return (queryIdComparison == 0) ? alertServiceComparison : queryIdComparison;
+	}
+
+	@Override
+	public boolean equals(final Object object) {
+		if (!(object instanceof NotificationSubscription))
+			return false;
+		final NotificationSubscription subscription = (NotificationSubscription) object;
+		return ((queryId == null) ? (subscription.queryId == null) : queryId.equals(subscription.queryId)) && ((alertService == null) ? (subscription.alertService == null) : alertService.equals(subscription.alertService));
+	}
+	
+	@Override
+	public int hashCode() {
+		return ((queryId == null) ? 0 : queryId.hashCode()) + ((alertService == null) ? 0 : alertService.hashCode());
+	}
+	
+	@Override
+	public String toString() {
+		return "(query: " + queryId + ", alert service: " + alertService + ")";
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ConversionStatus.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ConversionStatus.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ConversionStatus.java	(revision 62097)
@@ -0,0 +1,76 @@
+package eu.dnetlib.domain.functionality;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class ConversionStatus {
+		
+	public enum Status {
+		ON_QUEUE, IN_PROGRESS, CANCELLED, COMPLETED;
+	}
+	
+	private String conversionId = null;
+	private String fileUrl = null;
+	private String format = null;
+	private String convertedFileUrl = null;
+	private Status status = null;
+	
+	public ConversionStatus() { }
+
+	/**
+	 * Returns the conversion id
+	 * @return
+	 */
+	public String getConversionId() {
+		return conversionId;
+	}
+	public void setConversionId(String conversionId) {
+		this.conversionId = conversionId;
+	}
+	
+	/**
+	 * Returns the url where the file can be found (the jumpoff url 
+	 * or the url of the source)
+	 * @return
+	 */
+	public String getFileUrl() {
+		return fileUrl;
+	}
+	public void setFileUrl(String fileUrl) {
+		this.fileUrl = fileUrl;
+	}
+	
+	/**
+	 * Returns the desired format
+	 * @return
+	 */
+	public String getFormat() {
+		return format;
+	}
+	public void setFormat(String format) {
+		this.format = format;
+	}
+	
+	/**
+	 * Returns the url where the converted file is.
+	 * @return
+	 */
+	public String getConvertedFileUrl() {
+		return convertedFileUrl;
+	}
+	public void setConvertedFileUrl(String convertedFileUrl) {
+		this.convertedFileUrl = convertedFileUrl;
+	}
+	
+	/**
+	 * Returns the status of the conversion job. Can be ON_QUEUE,
+	 * IN_PROCESS, CANCELLED, COMPLETED.
+	 * @return
+	 */
+	public Status getStatus() {
+		return status;
+	}
+	public void setStatus(Status status) {
+		this.status = status;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Searchable.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Searchable.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Searchable.java	(revision 62097)
@@ -0,0 +1,194 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public class Searchable {
+	
+	public enum Type { PLAIN, DATE };
+	
+	private String name;
+	private Type type;
+	private String indexType;
+
+	private boolean hidden;
+	
+	private Map<Locale,String> descriptionMap;
+	private Map<Locale,String> shortDescriptionMap;
+	
+	private boolean inSearch;
+	private boolean inRefine;
+	private boolean inBrowse;
+	
+	private int searchRank;
+	private int refineRank;
+	private int browseRank;
+
+	private String searchVocabulary;
+	private String browseVocabulary;
+	
+	public Searchable(Type type) {
+		this.name = null;
+		this.type = type;
+		this.indexType = null;
+		
+		this.descriptionMap = null;
+		this.shortDescriptionMap = null;
+		
+		this.hidden = false;
+		
+		this.inSearch = false;
+		this.inRefine = false;
+		this.inBrowse = false;
+		
+		this.searchRank = -1;
+		this.refineRank = -1;
+		this.browseRank = -1;
+		
+		this.searchVocabulary = null;
+		this.browseVocabulary = null;
+
+	}
+	
+	@Override
+	public String toString() {
+		return "Searchable " + this.name + " [ \n" +
+		" Type = " + this.type + "\n" +
+		" Descr = " + this.descriptionMap + 
+		" short description = " + this.shortDescriptionMap + " \n" +
+		" Index = " + this.indexType + "\n " +
+		" Search available " + this.inSearch + " and rank " + searchRank + "\n" +  
+		" Refine available " + this.inRefine + " and rank " + refineRank + "\n" + 
+		" Browse available " + this.inBrowse + " and rank " + browseRank + "]";
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+	public String getIndexType() {
+		return indexType;
+	}
+
+	public void setIndexType(String indexType) {
+		this.indexType = indexType;
+	}
+
+	public void setDescriptionMap(Map<Locale, String> descriptionMap) {
+		this.descriptionMap = descriptionMap;
+	}
+	public Map<Locale, String> getDescriptionMap() {
+		return descriptionMap;
+	}
+
+/*	public String getDescription(){
+		String localeDescription = descriptionMap.get(LocaleHolder.getLocale());
+		if (localeDescription != null) {
+			return localeDescription;
+		}
+		return descriptionMap.get(new Locale("en", "GB"));
+	}
+*/
+	
+	public Map<Locale, String> getShortDescriptionMap() {
+		return shortDescriptionMap;
+	}
+
+	public void setShortDescriptionMap(Map<Locale, String> shortDescriptionMap) {
+		this.shortDescriptionMap = shortDescriptionMap;
+	}
+
+/*	public String getShortDescription() {
+		String localeDescription = shortDescriptionMap.get(LocaleHolder.getLocale());
+		if (localeDescription != null) {
+			return localeDescription;
+		}
+		return shortDescriptionMap.get(new Locale("en", "GB"));
+	}
+*/
+
+	public boolean isInSearch() {
+		return inSearch;
+	}
+
+	public void setInSearch(boolean inSearch) {
+		this.inSearch = inSearch;
+	}
+
+	public boolean isInRefine() {
+		return inRefine;
+	}
+
+	public void setInRefine(boolean inRefine) {
+		this.inRefine = inRefine;
+	}
+
+	public boolean isInBrowse() {
+		return inBrowse;
+	}
+
+	public void setInBrowse(boolean inBrowse) {
+		this.inBrowse = inBrowse;
+	}
+
+	public int getSearchRank() {
+		return searchRank;
+	}
+
+	public void setSearchRank(int searchRank) {
+		this.searchRank = searchRank;
+	}
+
+	public int getRefineRank() {
+		return refineRank;
+	}
+
+	public void setRefineRank(int refineRank) {
+		this.refineRank = refineRank;
+	}
+
+	public int getBrowseRank() {
+		return browseRank;
+	}
+
+	public void setBrowseRank(int browseRank) {
+		this.browseRank = browseRank;
+	}
+
+	public String getSearchVocabulary() {
+		return searchVocabulary;
+	}
+
+	public void setSearchVocabulary(String searchVocabulary) {
+		this.searchVocabulary = searchVocabulary;
+	}
+
+	public String getBrowseVocabulary() {
+		return browseVocabulary;
+	}
+
+	public void setBrowseVocabulary(String browseVocabulary) {
+		this.browseVocabulary = browseVocabulary;
+	}
+
+	public void setHidden(boolean hidden) {
+		this.hidden = hidden;
+	}
+
+	public boolean isHidden() {
+		return hidden;
+	}
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DisplayType.java	(revision 62097)
@@ -0,0 +1,97 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public abstract class DisplayType {
+
+//	private final Pattern pattern = Pattern.compile("\\$\\{(\\w*)\\}");
+	private Map<Locale, String> descriptionMap = null;
+	private String field = null;
+	
+	public DisplayType(String field) {
+		setField(field);
+	}
+	
+	public DisplayType(String field, Map<Locale, String> descriptionMap) {
+		setField(field);
+		setDescriptionMap(descriptionMap);
+	}
+	
+/*	abstract int getDisplayMessage(StringBuilder builder, Document document, 
+			String fieldValue);
+	
+	abstract int getDisplayMessage(StringBuilder builder, Document document, 
+			String fieldValue, String secondaryLink);
+
+	String replaceFieldValueExpression(Document document, String expression, String fieldValue) {
+		if (expression == null) {
+			return fieldValue;
+		}
+		
+		Matcher matcher = pattern.matcher(expression);
+		
+		if (!matcher.find()) {
+			return expression;
+			
+		} else {
+			StringBuffer sb = new StringBuffer();
+			do {
+				String field = matcher.group(0).
+					substring(2, matcher.group(0).length() - 1);
+				String replacement = "";
+				
+				if (!field.equals(getField())){
+					List<String> values = document.getMap()
+						.get(field);
+			
+					for (String s:values) {
+						replacement += s + " ";
+					}
+				} else {
+					replacement = fieldValue;
+				}
+				
+				matcher.appendReplacement(sb, replacement.trim());
+			
+			} while(matcher.find());
+			
+			matcher.appendTail(sb);
+
+			return sb.toString().trim();
+		}
+	}
+*/
+	
+/*	public String getDescription() {
+		System.out.println(descriptionMap);
+		if (descriptionMap != null) {
+			String description = descriptionMap.get(LocaleHolder.getLocale());
+			System.out.println(description);
+			if (description == null) {
+				return descriptionMap.get(new Locale("en", "GB"));
+			}
+			return description;
+			
+		} else {
+			return null;
+			
+		}
+	}
+*/
+	public Map<Locale, String> getDescriptionMap() {
+		return descriptionMap;
+	}
+	
+	public void setDescriptionMap(Map<Locale, String> descriptionMap) {
+		this.descriptionMap = descriptionMap;
+	}
+
+	public String getField() {
+		return field;
+	}
+
+	public void setField(String field) {
+		this.field = field;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ExternalUrlDisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ExternalUrlDisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ExternalUrlDisplayType.java	(revision 62097)
@@ -0,0 +1,56 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public class ExternalUrlDisplayType extends DriverUrlDisplayType {
+	
+	public ExternalUrlDisplayType(String field) {
+		super(field, "redirect", "url");
+	}
+	
+	public ExternalUrlDisplayType(String field, Map<Locale, String> descriptionMap) {
+		super(field, descriptionMap, "redirect", "url");
+	}
+
+/*	private StringBuilder generateHref(String fieldValue, StringBuilder builder) {
+		String encodedFieldValue = null;
+		try {
+			encodedFieldValue = URLEncoder.encode(fieldValue, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			encodedFieldValue = fieldValue;
+		}
+		return builder.append("<a class=\"externallink\" href=\"").append(this.getAction())
+						.append(".action?").append(this.getParameter())
+						.append("=").append(encodedFieldValue)
+						.append("\" target=\"_blank\"")
+						.append(">");
+	}
+
+	@Override
+	public int getDisplayMessage(StringBuilder builder, Document document, 
+			String fieldValue) {
+		String finalValue = replaceFieldValueExpression(document,
+				getDescription(), fieldValue);
+		builder = generateHref(fieldValue, builder);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+		
+	}
+
+	@Override
+	int getDisplayMessage(StringBuilder builder, Document document,
+			String fieldValue, String secondaryLink) {
+		String finalValue = replaceFieldValueExpression(document,
+				secondaryLink, fieldValue);
+		builder = generateHref(fieldValue, builder);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+	}
+	
+	*/
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SearchDisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SearchDisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SearchDisplayType.java	(revision 62097)
@@ -0,0 +1,58 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public class SearchDisplayType extends DriverUrlDisplayType {
+
+	private String label;
+	
+	public SearchDisplayType(String field, String label) {
+		super(field, "showResults", "query");
+		this.setLabel(label);
+	}
+	
+	public SearchDisplayType(String field, String label, Map<Locale, String> descriptionMap) {
+		super(field, descriptionMap, "showResults", "query");
+		this.setLabel(label);
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+	/*	private StringBuilder generateHref(String fieldValue, StringBuilder builder) {
+		return builder.append("<a class=\"searchlink\" href='")
+				.append(this.getAction()).append(".action?")
+				.append(this.getParameter()).append("=(").append(getLabel())
+				.append("=").append("\"").append(fieldValue).append("\"")
+				.append(")'>");
+	}
+
+	@Override
+	public int getDisplayMessage(StringBuilder builder, Document document,
+			String fieldValue) {
+		String finalValue = replaceFieldValueExpression(document, getDescription(), fieldValue);
+		builder = generateHref(fieldValue, builder);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+	}
+
+	@Override
+	int getDisplayMessage(StringBuilder builder, Document document,
+			String fieldValue, String secondaryLink) {
+		String finalValue = replaceFieldValueExpression(document,
+				secondaryLink, fieldValue);
+		builder = generateHref(fieldValue, builder);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+	}
+*/
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CollectionSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CollectionSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CollectionSearchCriteria.java	(revision 62097)
@@ -0,0 +1,170 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+public class CollectionSearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+
+	private String parentId = null;
+	private Boolean root = null;
+	private Boolean isPrivate = null;
+	private String ownerId = null;
+	private String name = null;
+	private Boolean isContainer = null;
+
+	public Boolean getIsContainer() {
+		return isContainer;
+	}
+
+	public void setIsContainer(Boolean isContainer) {
+		this.isContainer = isContainer;
+	}
+
+	public String getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	public Boolean getRoot() {
+		return root;
+	}
+
+	public void setRoot(Boolean root) {
+		this.root = root;
+	}
+
+	public boolean matches(Object o) {
+		Collection collection = (Collection) o;
+
+		if (this.getContains() != null) {
+			if (collection.getName() == null
+					|| !collection.getName().toLowerCase().contains(
+							this.getContains().toLowerCase()))
+				return false;
+		}
+
+		if (this.getStartsWith() != null) {
+			if (collection.getName() == null
+					|| !collection.getName().toLowerCase().startsWith(
+							this.getStartsWith().toLowerCase()))
+				return false;
+		}
+
+		if (this.getEndsWith() != null) {
+			if (collection.getName() == null
+					|| !collection.getName().toLowerCase().endsWith(
+							this.getEndsWith().toLowerCase()))
+				return false;
+		}
+
+		if (this.getParentId() != null) {
+			if (collection.getFather() == null
+					|| !collection.getFather().equals(this.getParentId()))
+				return false;
+		}
+
+		if (this.getRoot() != null) {
+			if ((collection.getFather() == null) != this.getRoot())
+				return false;
+		}
+		
+		if (this.getIsContainer() != null) {
+			if (!this.getIsContainer().equals(collection.isContainer()))
+				return false;
+		}
+
+		if (this.getOwnerId() != null) {
+			if (!this.getOwnerId().equals(collection.getOwner()))
+				return false;
+		}
+
+
+		return true;
+	}
+
+	public Boolean getIsPrivate() {
+		return isPrivate;
+	}
+
+	public void setIsPrivate(Boolean isPrivate) {
+		this.isPrivate = isPrivate;
+	}
+
+	public String getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(String ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result
+				+ ((isContainer == null) ? 0 : isContainer.hashCode());
+		result = prime * result
+				+ ((isPrivate == null) ? 0 : isPrivate.hashCode());
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		result = prime * result + ((ownerId == null) ? 0 : ownerId.hashCode());
+		result = prime * result
+				+ ((parentId == null) ? 0 : parentId.hashCode());
+		result = prime * result + ((root == null) ? 0 : root.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		CollectionSearchCriteria other = (CollectionSearchCriteria) obj;
+		if (isContainer == null) {
+			if (other.isContainer != null)
+				return false;
+		} else if (!isContainer.equals(other.isContainer))
+			return false;
+		if (isPrivate == null) {
+			if (other.isPrivate != null)
+				return false;
+		} else if (!isPrivate.equals(other.isPrivate))
+			return false;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		if (ownerId == null) {
+			if (other.ownerId != null)
+				return false;
+		} else if (!ownerId.equals(other.ownerId))
+			return false;
+		if (parentId == null) {
+			if (other.parentId != null)
+				return false;
+		} else if (!parentId.equals(other.parentId))
+			return false;
+		if (root == null) {
+			if (other.root != null)
+				return false;
+		} else if (!root.equals(other.root))
+			return false;
+		return true;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentDescription.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentDescription.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentDescription.java	(revision 62097)
@@ -0,0 +1,44 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class DocumentDescription {
+	
+	private String view;
+	
+	private List<DocumentField> documentFields = 
+		new ArrayList<DocumentField>();
+	
+	public DocumentDescription(String view) {
+		this.view = view;
+	}
+	
+ 	public void putDocumentField(DocumentField documentField){
+		documentFields.add(documentField);
+	}
+
+	public List<DocumentField> getDocumentFields(){
+		return documentFields;
+	}
+
+	public DocumentField getTitleField() {
+		return documentFields.get(0);
+	}
+	
+	public List<DocumentField> getNonTitleFields() {
+		if (documentFields.size() < 2) {
+			return null;
+		}		
+		return documentFields.subList(1, documentFields.size());
+	}
+
+	public String getView() {
+		return view;
+	}
+
+	public void setView(String view) {
+		this.view = view;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentField.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentField.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentField.java	(revision 62097)
@@ -0,0 +1,240 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import eu.dnetlib.domain.data.Document;
+
+public class DocumentField {
+
+	public enum Cutpoint {
+		LINE, VALUE, PART;
+	}
+
+	private String name = null;
+	private Map<Locale, String> descriptionMap = null;
+	private Boolean forceDescription = null;
+	private Map<Locale, String> secondaryLinkMap;
+	private String vocabulary = null;
+	private List<DisplayType> displays = new ArrayList<DisplayType>();
+	private int maxCharacters = Integer.MAX_VALUE;
+	private Cutpoint cutpoint = Cutpoint.LINE;
+	private String cssClass = null;
+	
+	public DocumentField() {
+
+	}
+
+	public DocumentField(String name, Map<Locale, String> description, String vocabulary,
+			List<DisplayType> displays, String cssClass) {
+		this.name = name;
+		this.setDescriptionMap(description);
+		this.vocabulary = vocabulary;
+		this.displays.addAll(displays);
+		this.cssClass = cssClass;
+	}
+
+	public DocumentField(String name, Map<Locale, String>  description, String vocabulary,
+			List<DisplayType> displays, String cssClass, int maxCharacters) {
+		this.name = name;
+		this.setDescriptionMap(description);
+		this.vocabulary = vocabulary;
+		this.displays.addAll(displays);
+		this.cssClass = cssClass;
+		if (maxCharacters < 1) {
+			throw new RuntimeException(
+					"The maximum number of characters must be greater than 0.");
+		} else {
+			this.maxCharacters = maxCharacters;
+		}
+	}
+
+	public DocumentField(String name, Map<Locale, String> description, String vocabulary,
+			List<DisplayType> displays, String cssClass, Cutpoint cutpoint,
+			int maxCharacters) {
+		this.name = name;
+		this.setDescriptionMap(description);
+		this.vocabulary = vocabulary;
+		this.displays.addAll(displays);
+		this.cssClass = cssClass;
+		this.cutpoint = cutpoint;
+		if (maxCharacters < 1) {
+			throw new RuntimeException(
+					"The maximum number of characters must be greater than 0.");
+		} else {
+			this.maxCharacters = maxCharacters;
+		}
+	}
+
+/*	public List<List<String>> getMessage(Document document) {
+
+		List<List<String>> messages = new ArrayList<List<String>>();
+		int characterCount = 0;
+
+		List<String> fieldValues = document.getFieldValues(name);
+		if (fieldValues.isEmpty() && this.forceDescription != null
+				&& forceDescription.equals(true)) {
+
+			String fieldName = getDescription().substring(2, getDescription().length() - 1);
+			fieldValues = document.getFieldValues(fieldName);
+			List<DisplayType> simpleDisplay = new ArrayList<DisplayType>();
+			simpleDisplay.add(new PlainTextDisplayType(fieldName));
+			generateValues(fieldName, fieldValues, characterCount, document,
+					simpleDisplay, messages);
+		} else {
+			generateValues(name, fieldValues, characterCount, document,
+					displays, messages);
+		}
+
+		return messages;
+	}
+
+	public void generateValues(String fieldName, List<String> fieldValues,
+			int characterCount, Document document, List<DisplayType> displays,
+			List<List<String>> messages) {
+
+		for (int i = 0; i < fieldValues.size()
+				&& (characterCount < maxCharacters); i++) {
+			
+			List<String> values = new ArrayList<String>();
+			String value = document.getFieldValues(fieldName).get(i);
+			
+			for (DisplayType type : displays) {
+				StringBuilder builder = new StringBuilder();
+	
+				boolean useSecondaryLink = false;
+				if (messages.size() > 0 && getSecondaryLink()!= null && !getSecondaryLink().isEmpty()) {
+					useSecondaryLink = true;
+				}
+				
+				int messageSize = 0;
+				if (useSecondaryLink == true) {
+					messageSize = type.getDisplayMessage(builder, document,
+						value, getSecondaryLink());
+				} else {
+					messageSize = type.getDisplayMessage(builder, document,
+							value);
+				}
+				
+				if (characterCount + messageSize > maxCharacters) {
+					switch (cutpoint) {
+					case LINE:
+						values.add(builder.toString());
+						break;
+					case VALUE:
+						if (characterCount <= maxCharacters) {
+							values.add(builder.toString());
+						}
+						break;
+					case PART:
+						String s = builder.toString();
+						s = s.substring(0, maxCharacters - characterCount)
+								+ "...";
+						values.add(s);
+						break;
+					}
+				} else {
+					values.add(builder.toString());
+				}
+
+				characterCount += messageSize;
+			}		
+			messages.add(values);
+		}
+	}
+
+	public String getDescription(Document document) {
+		return getDescription();
+	}
+
+	public String getDescription(){
+		String localeDescription = descriptionMap.get(LocaleHolder.getLocale());
+		if (localeDescription != null) {
+			return localeDescription;
+		}
+		return descriptionMap.get(new Locale("en", "GB"));
+	}
+*/
+	public void setSecondaryLinkMap(Map<Locale, String> secondaryLinkMap) {
+		this.secondaryLinkMap = secondaryLinkMap;
+	}
+
+	public String getCssClass(Document document) {
+		return getCssClass();
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getVocabulary() {
+		return vocabulary;
+	}
+
+	public void setVocabulary(String vocabulary) {
+		this.vocabulary = vocabulary;
+	}
+
+	public List<DisplayType> getDisplays() {
+		return displays;
+	}
+
+	public void setDisplays(List<DisplayType> displays) {
+		this.displays = displays;
+	}
+
+	public void setMaxCharacters(int maxCharacters) {
+		this.maxCharacters = maxCharacters;
+	}
+
+	public int getMaxCharacters() {
+		return maxCharacters;
+	}
+
+	public Cutpoint getCutpoint() {
+		return cutpoint;
+	}
+
+	public void setCutpoint(Cutpoint cutpoint) {
+		this.cutpoint = cutpoint;
+	}
+
+	public String getCssClass() {
+		return cssClass;
+	}
+
+	public void setCssClass(String cssClass) {
+		this.cssClass = cssClass;
+	}
+
+	public void setDescriptionMap(Map<Locale, String> descriptionMap) {
+		this.descriptionMap = descriptionMap;
+	}
+
+	public Map<Locale, String> getDescriptionMap() {
+		return descriptionMap;
+	}
+	
+	public Map<Locale, String> getSecondaryLinkMap() {
+		return secondaryLinkMap;
+	}
+
+/*	public String getSecondaryLink() {
+		return secondaryLinkMap.get(LocaleHolder.getLocale());
+	}
+*/	
+	public Boolean getForceDescription() {
+		return forceDescription;
+	}
+
+	public void setForceDescription(Boolean forceDescription) {
+		this.forceDescription = forceDescription;
+	}
+
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SearchableDate.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SearchableDate.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SearchableDate.java	(revision 62097)
@@ -0,0 +1,90 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class SearchableDate extends Searchable{
+	
+	private TreeMap<Integer, Map<Locale,String>> periodBackMap = null; 
+	private int fromYear = -1;
+	private int toYear = -1;
+
+	public SearchableDate() {
+		super(Type.DATE);
+		setPeriodBackMap(new TreeMap<Integer, Map<Locale, String>>());
+	}
+	
+	public int getFromYear() {
+		return fromYear;
+	}
+
+	public void setFromYear(int fromYear) {
+		this.fromYear = fromYear;
+	}
+
+	public int getToYear() {
+		return toYear;
+	}
+
+	public void setToYear(int toYear) {
+		this.toYear = toYear;
+	}
+	
+	public TreeMap<Integer, Map<Locale, String>> getPeriodBackMap() {
+		return periodBackMap;
+	}
+
+	public void setPeriodBackMap(TreeMap<Integer, Map<Locale, String>> periodBackMap) {
+		this.periodBackMap = periodBackMap;
+	}
+
+	/*	public TreeMap<Integer, String> getPeriodBack() {
+		TreeMap<Integer, String> periodBack = new TreeMap<Integer, String>();
+		for (Integer integer:periodBackMap.keySet()){
+			String description = periodBackMap.get(integer).get(LocaleHolder.getLocale());
+			if (description == null) {
+				description = periodBackMap.get(integer).get(new Locale("en", "GB"));
+			}
+			periodBack.put(integer, description);
+		}
+		
+		return periodBack;
+	}
+
+	public long[] getRanges(){
+		if (getPeriodBack().values() == null || 
+				getPeriodBack().values().isEmpty()) {
+			return null;
+		}
+		
+		long[] ranges = new long[getPeriodBack().keySet().size()];
+		int i = 0;
+		for (Integer range:getPeriodBack().keySet()){
+			ranges[i] = range;
+			i++;
+		}
+		
+		return ranges;
+	}
+*/	
+	public List<String> getYears() {
+		List<String> years = new ArrayList<String>();
+		
+		for (int i=fromYear; i< toYear+1; i++){
+			years.add(i+"");
+		}	
+		
+		return years;
+	}
+
+/*	@Override
+	public String toString() {
+		return  super.toString() +
+		", for years " +  getYears() + ", period_back: " +
+		getPeriodBack();
+	}
+*/	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UrlDisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UrlDisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UrlDisplayType.java	(revision 62097)
@@ -0,0 +1,16 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public abstract class UrlDisplayType extends DisplayType{
+
+	public UrlDisplayType(String field) {
+		super(field);
+	}
+	
+	public UrlDisplayType(String field, Map<Locale, String> descriptionMap) {
+		super(field, descriptionMap);
+	}
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationComparator.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationComparator.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationComparator.java	(revision 62097)
@@ -0,0 +1,11 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Comparator;
+
+public class RecommendationComparator implements Comparator<Recommendation> {
+    
+    public int compare( Recommendation o1, Recommendation o2 ) {
+        return o1.getDateOfCreation().compareTo( o2.getDateOfCreation() );
+    }
+    
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/QueryHashSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/QueryHashSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/QueryHashSearchCriteria.java	(revision 62097)
@@ -0,0 +1,103 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+
+public class QueryHashSearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+	
+	private String cqlQuery = null;
+	private String userId = null;
+	private int hashValue = 0;	
+
+	public void setUserId( String id ){
+		this.userId = id;
+	}
+
+	public String getUserId(){
+		return userId;
+	}
+	
+	public void setHashValue( int val ){
+		this.hashValue = val;
+	}
+	
+	public int getHashValue(){
+		return this.hashValue;
+	}
+	
+	public boolean matches(Object o) {
+		QueryHash queryHash = (QueryHash) o;
+		
+		if ( this.getUserId() != null ) {
+			if ( queryHash.getUserId() == null ){ 					
+				return false;
+			}else if ( this.getUserId().equals( queryHash.getUserId() ) == true ) {
+				return true;
+			} else {
+				return false;
+			}
+		}	
+		
+		if ( this.getCqlQuery() != null ) {
+			if ( queryHash.getCqlQuery() == null ){ 					
+				return false;
+			}else if ( this.getCqlQuery().equals( queryHash.getCqlQuery() ) == true ) {
+				return true;
+			} else {
+				return false;
+			}
+		}
+				
+		return true;
+	}
+
+	public boolean equals(Object o) {
+		return this.equals((QueryHashSearchCriteria) o);
+	}
+	
+	public boolean equals(QueryHashSearchCriteria crit) {
+		if (!super.equals(crit))
+			return false;
+		
+		if( this.userId != null && crit.getUserId() != null ) {
+			if( this.userId.endsWith( crit.getUserId() ) ){
+				if( this.hashValue == crit.getHashValue() ){
+					return true;
+				}else{
+					return false;
+				}
+			} else {
+				return false;
+			}
+		} else if( this.userId == null && crit.getUserId() == null ){
+			if( this.hashValue == crit.getHashValue() ){
+				return true;
+			}else{
+				return false;
+			}
+		}else 			
+			return false;
+	}
+	
+	public int hashCode() {
+		int code = super.hashCode();		
+		
+		if (userId != null)
+			code |= userId.hashCode();
+		
+		code |= this.hashValue;
+		
+		return code;
+	}
+
+	public void setCqlQuery(String cqlQuery) {
+		this.cqlQuery = cqlQuery;
+	}
+
+	public String getCqlQuery() {
+		return cqlQuery;
+	}
+}
+
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SwitchDocumentField.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SwitchDocumentField.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SwitchDocumentField.java	(revision 62097)
@@ -0,0 +1,86 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import eu.dnetlib.domain.data.Document;
+
+public class SwitchDocumentField extends DocumentField {
+
+	private String conditionField;
+	private Map<String, DocumentField> documentFieldMap = new HashMap<String, DocumentField>();
+	private Logger logger = Logger.getLogger(SwitchDocumentField.class);
+
+	public SwitchDocumentField(String conditionField) {
+		this.conditionField = conditionField;
+	}
+
+	public void addSwitchDisplayField(String conditionFieldValue, DocumentField documentField) {
+		documentFieldMap.put(conditionFieldValue, documentField);
+	}
+	
+	public DocumentField getDocumentField(String conditionFieldValue){
+		return  documentFieldMap.get(conditionFieldValue);
+	}
+	
+	@Override
+	public String getCssClass(Document document) {
+		List<String> fieldValues = document.getMap().get(conditionField);
+		if (fieldValues != null) {
+			String fieldValue = fieldValues.get(0);
+			if (fieldValue != null) {
+				DocumentField documentField = documentFieldMap.get(fieldValue);
+				return documentField.getCssClass();
+			}
+			logger.warn("FieldValues were empty for document");
+		}
+		logger.warn("FieldValues were null for document");
+		return null;
+	}
+	
+/*	@Override
+	public String getDescription(Document document) {
+		List<String> fieldValues = document.getMap().get(conditionField);
+		if (fieldValues != null) {
+			String fieldValue = fieldValues.get(0);
+			if (fieldValue != null) {
+				DocumentField documentField = documentFieldMap.get(fieldValue);
+				return documentField.getDescription(); 
+			}
+			logger.warn("FieldValues were empty for document");
+		}
+		logger.warn("FieldValues were null for document");
+		return null;		
+	}
+	
+	@Override
+	public List<List<String>> getMessage(Document document) {	
+		List<String> fieldValues = document.getMap().get(conditionField);
+		if (fieldValues != null) {
+			String fieldValue = fieldValues.get(0);
+			if (fieldValue != null) {
+				DocumentField documentField = documentFieldMap.get(fieldValue);
+				return documentField.getMessage(document);
+			}
+			logger.warn("FieldValues were empty for document");
+		}
+		logger.warn("FieldValues were null for document");
+		return new ArrayList<List<String>>();
+	}
+*/
+	public void setConditionField(String conditionField) {
+		this.conditionField = conditionField;
+	}
+
+	public String getConditionField() {
+		return conditionField;
+	}
+
+	public Map<String, DocumentField> getDocumentFieldMap() {
+		return documentFieldMap;
+	}
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityRegistration.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityRegistration.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityRegistration.java	(revision 62097)
@@ -0,0 +1,81 @@
+package eu.dnetlib.domain.functionality;
+
+
+public class CommunityRegistration {
+	private int id = 0;
+	private String communityId = null;
+	private boolean alertOnChange = false;
+	private Boolean includeInQueries = false;
+
+	public boolean isAlertOnChange() {
+		return alertOnChange;
+	}
+
+	public void setAlertOnChange(boolean alertOnChange) {
+		this.alertOnChange = alertOnChange;
+	}
+
+	public String getCommunityId() {
+		return communityId;
+	}
+
+	public void setCommunityId(String communityId) {
+		this.communityId = communityId;
+	}
+
+	public Boolean getIncludeInQueries() {
+		return includeInQueries;
+	}
+
+	public void setIncludeInQueries(Boolean includeInQueries) {
+		this.includeInQueries = includeInQueries;
+	}
+	
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + (alertOnChange ? 1231 : 1237);
+		result = prime * result
+				+ ((communityId == null) ? 0 : communityId.hashCode());
+		result = prime * result + id;
+		result = prime
+				* result
+				+ ((includeInQueries == null) ? 0 : includeInQueries.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		CommunityRegistration other = (CommunityRegistration) obj;
+		if (alertOnChange != other.alertOnChange)
+			return false;
+		if (communityId == null) {
+			if (other.communityId != null)
+				return false;
+		} else if (!communityId.equals(other.communityId))
+			return false;
+		if (id != other.id)
+			return false;
+		if (includeInQueries == null) {
+			if (other.includeInQueries != null)
+				return false;
+		} else if (!includeInQueries.equals(other.includeInQueries))
+			return false;
+		return true;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DriverUrlDisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DriverUrlDisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DriverUrlDisplayType.java	(revision 62097)
@@ -0,0 +1,41 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public abstract class DriverUrlDisplayType extends UrlDisplayType{
+
+	private String action;
+	private String parameter;
+	
+	public DriverUrlDisplayType(String field, String action, 
+			String parameter) {
+		super(field);
+		setAction(action);
+		setParameter(parameter);
+	}
+	
+	public DriverUrlDisplayType(String field, Map<Locale, String> descriptionMap, String action, 
+			String parameter) {
+		super(field, descriptionMap);
+		setAction(action);
+		setParameter(parameter);
+	}
+	
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public String getParameter() {
+		return parameter;
+	}
+
+	public void setParameter(String parameter) {
+		this.parameter = parameter;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileComparator.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileComparator.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileComparator.java	(revision 62097)
@@ -0,0 +1,12 @@
+package eu.dnetlib.domain.functionality;
+
+
+
+import java.util.Comparator;
+
+public class UserProfileComparator implements Comparator<UserProfile>{
+
+	public int compare(UserProfile o1, UserProfile o2) {
+		return o1.getEmail().compareTo(o2.getEmail());
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Post.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Post.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Post.java	(revision 62097)
@@ -0,0 +1,112 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+/**
+ * This class represents a forum post.
+ * @author thanos@di.uoa.gr
+ *
+ */
+public class Post implements Comparable<Post> {
+	private long postId;
+	private String userId;
+	private Date creationDate;
+	private String content;
+
+	/**
+	 * Default constructor.
+	 *
+	 */
+	public Post() {}
+	
+	/**
+	 * Full constructor.
+	 * @param postId the id of this post
+	 * @param userId the id of the user that created this post
+	 * @param creationDate the date that this post was created
+	 * @param content the content of this post
+	 */
+	public Post(long postId, String userId, Date creationDate, String content) {
+		this.postId = postId;
+		this.userId = userId;
+		this.creationDate = creationDate;
+		this.content = content;
+	}
+	
+	/**
+	 * Constructor used for creating a new post; sets post id to null and creation date to current date.
+	 * @param userId the id of the user that created this post
+	 * @param content the content of this post
+	 */
+	public Post(String userId, String content) {
+		this(0L, userId, new Date(), content);
+	}
+	
+	/**
+	 * Get the post id.
+	 * @return the id of this post
+	 */
+	public long getPostId() {
+		return postId;
+	}
+
+	/**
+	 * Set the post id.
+	 * @param postId the new id of this post
+	 */
+	public void setPostId(long postId) {
+		this.postId = postId;
+	}
+	
+	/**
+	 * Get the user id.
+	 * @return the id of the user that created this post
+	 */
+	public String getUserId() {
+		return userId;
+	}
+	
+	/**
+	 * Set the user id.
+	 * @param userId the id of the new user that created this post
+	 */
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+	/**
+	 * Get the creation date.
+	 * @return the date that this post was created
+	 */
+	public Date getCreationDate() {
+		return creationDate;
+	}
+	
+	/**
+	 * Set the creation date.
+	 * @param creationDate the new date that this post was created
+	 */
+	public void setCreationDate(Date creationDate) {
+		this.creationDate = creationDate;
+	}
+	
+	/**
+	 * Get the content.
+	 * @return the content of this post
+	 */
+	public String getContent() {
+		return content;
+	}
+	
+	/**
+	 * Set the content.
+	 * @param content the new content of this post
+	 */
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public int compareTo(Post post) {
+		return -post.getCreationDate().compareTo(creationDate);
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileSearchCriteria.java	(revision 62097)
@@ -0,0 +1,242 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+/**
+ * This class represents the search criteria that will be used to lookup for user profiles
+ *
+ */
+
+public class UserProfileSearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+	private String belongsToCommunity = null;
+	private String email = null;
+	private String activationId = null;
+	private Boolean active = null;
+	private List<String> identities = new ArrayList<String>();
+	private List<CommunityRegistration> communityRegs = new ArrayList<CommunityRegistration>();
+
+	public String getActivationId() {
+		return activationId;
+	}
+
+	public void setActivationId(String activationId) {
+		this.activationId = activationId;
+	}
+
+	public Boolean getActive() {
+		return active;
+	}
+
+	public void setActive(Boolean active) {
+		this.active = active;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getBelongsToCommunity() {
+		return belongsToCommunity;
+	}
+
+	public void setBelongsToCommunity(String belongsToCommunity) {
+		this.belongsToCommunity = belongsToCommunity;
+	}
+
+	/**
+	 * Checks if the given object matches the search criteria. If the object that is 
+	 * passed as parameter is not of type UserProfile, then <code>matches()</code> will return false. 
+	 * @return returns true if the object matches the search criteria
+	 */
+	public boolean matches(Object o) {
+		if (!(o instanceof UserProfile))
+			return false;
+		UserProfile profile = (UserProfile) o;
+
+		if (this.getContains() != null) {
+			if (profile.getEmail() == null
+					|| !profile.getEmail().toLowerCase().contains(
+							this.getContains().toLowerCase()))
+				return false;
+		}
+
+		if (this.getStartsWith() != null) {
+			if (profile.getEmail() == null
+					|| !profile.getEmail().toLowerCase().startsWith(
+							this.getStartsWith().toLowerCase()))
+				return false;
+		}
+
+		if (this.getEndsWith() != null) {
+			if (profile.getEmail() == null
+					|| !profile.getEmail().toLowerCase().endsWith(
+							this.getEndsWith().toLowerCase()))
+				return false;
+		}
+
+		if (this.getEmail() != null) {
+			if (profile.getEmail() == null
+					|| !profile.getEmail().equals(this.getEmail()))
+				return false;
+		}
+
+		if (this.getActivationId() != null) {
+			if (profile.getActivationId() == null
+					|| !profile.getActivationId()
+							.equals(this.getActivationId()))
+				return false;
+		}
+
+		if (this.getActive() != null) {
+			if ( profile.getActive() != this.getActive())
+				return false;
+		}
+
+		if (this.getBelongsToCommunity() != null) {
+			if (profile.getCommunities() == null
+					|| profile.getCommunities().size() == 0)
+				return false;
+			else {
+				boolean found = false;
+
+				for (CommunityRegistration commReg : profile.getCommunities()) {
+					if (commReg.getCommunityId().equals(
+							this.getBelongsToCommunity())) {
+						found = true;
+
+						break;
+					}
+				}
+
+				if (!found)
+					return false;
+			}
+		}
+
+		return true;
+	}
+
+	public boolean equals(Object o) {
+		if (!(o instanceof UserProfileSearchCriteria))
+			return false;
+		else
+			return this.equals((UserProfileSearchCriteria) o);
+	}
+
+	public boolean equals(UserProfileSearchCriteria crit) {
+		if (!super.equals(crit))
+			return false;
+
+		if (active != null && crit.active != null) {
+			if (!active.equals(crit.active))
+				return false;
+		} else if ((active == null && crit.active != null)
+				|| (active != null && crit.active == null)) {
+			return false;
+		}
+
+		if (activationId != null && crit.activationId != null) {
+			if (!activationId.equals(crit.activationId))
+				return false;
+		} else if ((activationId == null && crit.activationId != null)
+				|| (activationId != null && crit.activationId == null)) {
+			return false;
+		}
+
+		if (email != null && crit.email != null) {
+			if (!email.equals(crit.email))
+				return false;
+		} else if ((email == null && crit.email != null)
+				|| (email != null && crit.email == null)) {
+			return false;
+		}
+
+		if (belongsToCommunity != null && crit.belongsToCommunity != null) {
+			if (!belongsToCommunity.equals(crit.belongsToCommunity))
+				return false;
+		} else if ((belongsToCommunity == null && crit.belongsToCommunity != null)
+				|| (belongsToCommunity != null && crit.belongsToCommunity == null)) {
+			return false;
+		}
+
+		//check identities		
+		if (identities.size() != crit.getIdentities().size()) //different size
+		{
+			return false;
+		} else {
+			//check each identity
+			for (String identity : identities) {
+				if (!crit.getIdentities().contains(identity)) {
+					return false;
+				}
+			}
+		}
+
+		if (this.communityRegs.size() != crit.getCommunityRegs().size())
+
+		{
+			return false;
+		}
+
+		for (CommunityRegistration comReg : this.communityRegs) {
+			if (!crit.getCommunityRegs().contains(comReg)) {
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	public int hashCode() {
+		int code = super.hashCode();
+
+		if (belongsToCommunity != null)
+			code |= belongsToCommunity.hashCode();
+
+		if (email != null)
+			code |= email.hashCode();
+
+		if (activationId != null)
+			code |= activationId.hashCode();
+
+		if (active != null)
+			code |= active.hashCode();
+
+		return code;
+	}
+
+	public List<String> getIdentities() {
+		return identities;
+	}
+
+	public void setIdentities(List<String> identities) {
+		this.identities = identities;
+	}
+
+	public List<CommunityRegistration> getCommunityRegs() {
+		return communityRegs;
+	}
+
+	public void setCommunityRegs(List<CommunityRegistration> communityRegs) {
+		this.communityRegs = communityRegs;
+	}
+	
+	public static void main(String[] args) {
+		UserProfileSearchCriteria crit = new UserProfileSearchCriteria();
+		UserProfile user = new UserProfile();
+		
+		crit.setEmail("aaa");
+		user.setEmail("aaa");
+		
+		System.out.println(crit.matches(user));
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryBlackboardMessage.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryBlackboardMessage.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryBlackboardMessage.java	(revision 62097)
@@ -0,0 +1,81 @@
+package eu.dnetlib.domain.data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RepositoryBlackboardMessage {
+	private String id = "";
+	private final Action action;
+	private final ActionStatus actionStatus;
+	private final List<String> parameters = new ArrayList<String>();
+
+	public RepositoryBlackboardMessage(String id, Action action,
+			ActionStatus actionStatus) {
+		this.id = id;
+		this.action = action;
+		this.actionStatus = actionStatus;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public Action getAction() {
+		return action;
+	}
+
+	public ActionStatus getActionStatus() {
+		return actionStatus;
+	}
+
+	public List<String> getParameters() {
+		return parameters;
+	}
+
+	public static enum Action {
+		CREATE("CREATE"), DELETE("DELETE"), UPDATE("UPDATE"), MANAGE("MANAGE"), 
+			RELEASE("RELEASE"), CANCEL("CANCEL");
+
+		private final String value;
+
+		Action(String value) {
+			this.value = value;
+		}
+
+		public String getValue() {
+			return this.value;
+		}
+
+		public static Action getAction(String str) {
+			for (Action act : Action.values()) {
+				if (act.getValue().equals(str))
+					return act;
+			}
+			throw new IllegalArgumentException("cannot find Action " + str);
+		}
+	}
+
+	public static enum ActionStatus {
+		DONE("DONE"), ONGOING("ONGOING"), FAILED("FAILED"), WAITING("WAITING"), 
+			ASSIGNED("ASSIGNED");
+
+		private final String value;
+
+		ActionStatus(String value) {
+			this.value = value;
+		}
+
+		public String getValue() {
+			return value;
+		}
+
+		public static ActionStatus getActionStatus(String str) {
+			for (ActionStatus act : ActionStatus.values()) {
+				if (act.getValue().equals(str))
+					return act;
+			}
+			throw new IllegalArgumentException("cannot find ActionStatus "
+					+ str);
+		}
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Rating.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Rating.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Rating.java	(revision 62097)
@@ -0,0 +1,102 @@
+package eu.dnetlib.domain.functionality;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * This class represents the rating of a document (average or by a user).
+ * @author thanos@di.uoa.gr
+ *
+ */
+@SuppressWarnings("unused")
+@Entity
+public class Rating {
+	private static final float MAX_SCORE = 5;
+	@Id @GeneratedValue 
+	private long id;
+	@Column(nullable = false)
+	private String userId;
+	@Column(nullable = false)
+	private String documentId;
+	@Column(nullable = false)
+	private float score;
+	
+	/**
+	 * Create a new rating with document and user set to null and score set to 0.
+	 *
+	 */
+	public Rating() {
+		this(null, null, 0.0f);
+	}
+	
+	/**
+	 * Create a new rating for the specified document and user with the specified score.
+	 * @param userId the id of the user
+	 * @param documentId the id of the document
+	 * @param score the rating score
+	 */
+	public Rating(String userId, String documentId, float score) {
+		this.userId = userId;
+		this.documentId = documentId;
+		this.score = (score > MAX_SCORE) ? MAX_SCORE : (score < 0 ? 0 : score); 
+	}
+	
+	/**
+	 * Create a new document average rating for the specified document with the specified score (user id is set to null).
+	 * @param documentId the id of the document
+	 * @param score the rating score
+	 */
+	public Rating(String documentId, float score) {
+		this(null, documentId, score);
+	}
+	
+	/**
+	 * Get the user id.
+	 * @return the id of the user
+	 */
+	public String getUserId() {
+		return userId;
+	}
+	
+	/**
+	 * Set the user id.
+	 * @param userId the new user id
+	 */
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+	/**
+	 * Get the document id.
+	 * @return the id of the document
+	 */
+	public String getDocumentId() {
+		return documentId;
+	}
+	
+	/**
+	 * Set the document id.
+	 * @param documentId the new document id
+	 */
+	public void setDocumentId(String documentId) {
+		this.documentId = documentId;
+	}
+	
+	/**
+	 * Get the score.
+	 * @return the rating score
+	 */
+	public float getScore() {
+		return score;
+	}
+	
+	/**
+	 * Set the score.
+	 * @param score the new score
+	 */
+	public void setScore(float score) {
+		this.score = (score > MAX_SCORE) ? MAX_SCORE : (score < 0 ? 0 : score);
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Hint.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Hint.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Hint.java	(revision 62097)
@@ -0,0 +1,20 @@
+package eu.dnetlib.domain.data;
+
+public class Hint { 
+	private String alternateTerm = null; 
+	private boolean autoFollowHint = false;
+	
+	public String getAlternateTerm() {
+		return alternateTerm;
+	}
+	public void setAlternateTerm(String alternateTerm) {
+		this.alternateTerm = alternateTerm;
+	}
+	public boolean isAutoFollowHint() {
+		return autoFollowHint;
+	}
+	public void setAutoFollowHint(boolean autoFollowHint) {
+		this.autoFollowHint = autoFollowHint;
+	}
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SuggestiveResult.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SuggestiveResult.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SuggestiveResult.java	(revision 62097)
@@ -0,0 +1,31 @@
+package eu.dnetlib.domain.data;
+
+import eu.dnetlib.domain.EPR;
+
+
+public class SuggestiveResult {
+	
+	private EPR epr = null;
+	private String alternativeTerm = null;
+	private boolean autofollow = false;
+	
+	public EPR getEpr() {
+		return epr;
+	}
+	public void setEpr(EPR epr) {
+		this.epr = epr;
+	}
+	public String getAlternativeTerm() {
+		return alternativeTerm;
+	}
+	public void setAlternativeTerm(String alternativeTerm) {
+		this.alternativeTerm = alternativeTerm;
+	}
+	public boolean isAutofollow() {
+		return autofollow;
+	}
+	public void setAutofollow(boolean autofollow) {
+		this.autofollow = autofollow;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/BrowseData.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/BrowseData.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/BrowseData.java	(revision 62097)
@@ -0,0 +1,89 @@
+package eu.dnetlib.domain.data;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+public class BrowseData {
+
+	private HashMap<String, FieldData> data = null;
+	
+	public BrowseData() {
+		data = new HashMap<String, FieldData>();
+	}
+	
+	public HashMap<String, FieldData> getData() {
+		return data;
+	}
+
+	public void setData(HashMap<String, FieldData> data) {
+		this.data = data;
+	}
+	
+	public void addFieldEntry(String field, String value, int count) {
+		
+		// lowercase field!
+		field = field.toLowerCase();
+
+		FieldData fieldData = data.get(field);		
+		if(fieldData == null){
+			fieldData = new FieldData();
+		}
+
+		FieldRow row = new FieldRow(value, count);
+		fieldData.getFieldRowList().add(row);
+		
+		data.put(field, fieldData);
+	}
+	
+	public void append(BrowseData browseData) {		
+		for(String field: browseData.getFields()) {			
+			// lowercase field!
+			field = field.toLowerCase();
+			
+			FieldData fieldData = data.get(field);		
+			if(fieldData == null){
+				fieldData = new FieldData();
+				data.put(field, fieldData);
+			}
+
+			fieldData.getFieldRowList().addAll
+					(browseData.getData().get(field).getFieldRowList());
+		}
+	}
+	
+	public Set<String> getFields() {
+		return data.keySet();
+	}
+	
+	
+	public List<String> getFieldValues(String field) {
+		FieldData fd = data.get(field.toLowerCase());
+		if (fd == null) {
+			return Collections.emptyList();
+		} else {
+			return fd.getValues(); 
+		}
+	}
+	
+	public List<Integer> getFieldCounts(String field) {
+		FieldData fd = data.get(field.toLowerCase());
+		if (fd == null) {
+			return Collections.emptyList();
+		} else {
+			return fd.getCount();
+		}
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		
+		for (FieldData field : data.values()) {
+			buffer.append(field);
+		}
+		
+		return buffer.toString();
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Document.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Document.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/Document.java	(revision 62097)
@@ -0,0 +1,53 @@
+/**
+ *
+ */
+package eu.dnetlib.domain.data;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author kiatrop
+ *
+ */
+public class Document {
+
+	private Map<String, List<String>> map = null;
+
+	public Document() {
+		map = new HashMap<String, List<String>>();
+	}
+	
+	public Document(Map<String, List<String>> map) {
+		this.map = map;
+	}
+
+	public Set<String> getFieldNames() {
+		return map.keySet();
+	}
+
+	public Map<String, List<String>> getMap() {
+		return map;
+	}
+
+	public void setMap(Map<String, List<String>> map) {
+		this.map = map;
+	}
+
+	public void addFieldValue(String fieldname, String value) {
+		List<String> values = map.get(fieldname);
+		if (values == null) {
+			values = new ArrayList<String>();
+			map.put(fieldname, values);
+		}
+		values.add(value);
+	}
+
+	public List<String> getFieldValues(String fieldname) {
+		return map.get(fieldname);
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FieldRow.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FieldRow.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FieldRow.java	(revision 62097)
@@ -0,0 +1,43 @@
+package eu.dnetlib.domain.data;
+
+public class FieldRow {
+	
+	private String value;
+	private Integer count;
+	
+	public FieldRow(String value, Integer count) {
+		this.value = value;
+		this.count = count;
+	}
+	
+	public FieldRow() {
+		
+	}
+	
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	public Integer getCount() {
+		return count;
+	}
+	
+	public void setCount(Integer count) {
+		this.count = count;
+	}
+
+	@Override
+	public String toString() {	
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(value).append(" : ").append(count);
+		
+		return buffer.toString();
+	}
+
+}
+
+
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationServiceProfile.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationServiceProfile.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationServiceProfile.java	(revision 62097)
@@ -0,0 +1,15 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+import eu.dnetlib.domain.DriverServiceProfile;
+
+public class RecommendationServiceProfile extends DriverServiceProfile {
+
+	private static final long serialVersionUID = 131769612060109646L;
+
+	public RecommendationServiceProfile() {
+		super("ServiceResources", "RecommendationServiceResourceType", new Date());
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserStore.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserStore.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserStore.java	(revision 62097)
@@ -0,0 +1,52 @@
+package eu.dnetlib.domain.functionality;
+
+public class UserStore {
+	
+	private String storeServiceURL;
+    private String storeID;
+    
+	public String getStoreServiceURL() {
+		return storeServiceURL;
+	}
+	public void setStoreServiceURL(String storeServiceURL) {
+		this.storeServiceURL = storeServiceURL;
+	}
+	public String getStoreID() {
+		return storeID;
+	}
+	public void setStoreID(String storeID) {
+		this.storeID = storeID;
+	}
+	
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((storeID == null) ? 0 : storeID.hashCode());
+		result = prime * result
+				+ ((storeServiceURL == null) ? 0 : storeServiceURL.hashCode());
+		return result;
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		UserStore other = (UserStore) obj;
+		if (storeID == null) {
+			if (other.storeID != null)
+				return false;
+		} else if (!storeID.equals(other.storeID))
+			return false;
+		if (storeServiceURL == null) {
+			if (other.storeServiceURL != null)
+				return false;
+		} else if (!storeServiceURL.equals(other.storeServiceURL))
+			return false;
+		return true;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FieldData.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FieldData.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/FieldData.java	(revision 62097)
@@ -0,0 +1,35 @@
+package eu.dnetlib.domain.data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FieldData {
+
+	private List<FieldRow> fieldRowList = new ArrayList<FieldRow>();
+
+	public List<FieldRow> getFieldRowList() {
+		return fieldRowList;
+	}
+
+	public void setFieldRowList(List<FieldRow> fieldRowList) {
+		this.fieldRowList = fieldRowList;
+	}
+
+	public List<String> getValues() {
+		List<String> values = new ArrayList<String>();		
+		for(FieldRow row: fieldRowList){
+			values.add(row.getValue());
+		}
+		
+		return values;
+	}
+
+	public List<Integer> getCount() {
+		List<Integer> counts = new ArrayList<Integer>();		
+		for(FieldRow row: fieldRowList){
+			counts.add(row.getCount());
+		}
+		
+		return counts;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SimilarDocument.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SimilarDocument.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/SimilarDocument.java	(revision 62097)
@@ -0,0 +1,24 @@
+package eu.dnetlib.domain.data;
+
+public class SimilarDocument {
+
+	private String id;
+	private float score;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public float getScore() {
+		return score;
+	}
+
+	public void setScore(float score) {
+		this.score = score;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/StoreObjectInfo.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/StoreObjectInfo.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/StoreObjectInfo.java	(revision 62097)
@@ -0,0 +1,22 @@
+package eu.dnetlib.domain.data;
+
+public class StoreObjectInfo {
+	private StoreInfo storeInfo = null;
+	private String objectId = null;
+
+	public StoreInfo getStoreInfo() {
+		return storeInfo;
+	}
+
+	public void setStoreInfo(StoreInfo storeInfo) {
+		this.storeInfo = storeInfo;
+	}
+
+	public String getObjectId() {
+		return objectId;
+	}
+
+	public void setObjectId(String objectId) {
+		this.objectId = objectId;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/StoreInfo.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/StoreInfo.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/StoreInfo.java	(revision 62097)
@@ -0,0 +1,22 @@
+package eu.dnetlib.domain.data;
+
+public class StoreInfo {
+	private String serviceUrl = null;
+	private String storeId = null;
+
+	public String getServiceUrl() {
+		return serviceUrl;
+	}
+
+	public void setServiceUrl(String serviceUrl) {
+		this.serviceUrl = serviceUrl;
+	}
+
+	public String getStoreId() {
+		return storeId;
+	}
+
+	public void setStoreId(String storeId) {
+		this.storeId = storeId;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/MDFormatDataStructure.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/MDFormatDataStructure.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/MDFormatDataStructure.java	(revision 62097)
@@ -0,0 +1,39 @@
+package eu.dnetlib.domain.data;
+
+import java.util.HashMap;
+import java.util.List;
+
+import eu.dnetlib.domain.DriverResource;
+import eu.dnetlib.domain.functionality.LayoutField;
+
+@SuppressWarnings("serial")
+public class MDFormatDataStructure extends DriverResource {
+
+	private String resourceName;
+	private HashMap<String, List<LayoutField>> layouts;
+
+	public MDFormatDataStructure() {
+
+		this.setResourceType("MDFormatDSResourceType");
+		this.setResourceKind("MDFormatDSResources");
+
+		this.resourceName = null;
+		this.layouts = new HashMap<String, List<LayoutField>>();
+	}
+
+	public String getResourceName() {
+		return resourceName;
+	}
+
+	public void setResourceName(String resourceName) {
+		this.resourceName = resourceName;
+	}
+
+	public HashMap<String, List<LayoutField>> getLayouts() {
+		return layouts;
+	}
+
+	public void setLayouts(HashMap<String, List<LayoutField>> layouts) {
+		this.layouts = layouts;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Thread.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Thread.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Thread.java	(revision 62097)
@@ -0,0 +1,147 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * This class represents a forum thread.
+ * @author thanos@di.uoa.gr
+ *
+ */
+public class Thread {
+	private long threadId;
+	private String communityId;
+	private String userId;
+	private Date creationDate;
+	private String topic;
+	private List<Post> posts = new ArrayList<Post>();
+	
+	/**
+	 * Default constructor.
+	 *
+	 */
+	public Thread() {}
+	
+	/**
+	 * Full constructor.
+	 * @param threadId the id of this thread
+	 * @param communityId the id of the community this thread belongs to
+	 * @param userId the id of the user that created this thread
+	 * @param creationDate the date that this thread was created
+	 * @param topic the topic of this thread
+	 */
+	public Thread(long threadId, String communityId, String userId, Date creationDate, String topic) {
+		this.threadId = threadId;
+		this.communityId = communityId;
+		this.userId = userId;
+		this.creationDate = creationDate;
+		this.topic = topic;
+	}
+	
+	/**
+	 * Constructor used for creating a new thread; sets thread id to null and creation date to current date.
+	 * @param communityId the id of the community this thread belongs to
+	 * @param userId the id of the user that created this thread
+	 * @param topic the topic of this thread
+	 */
+	public Thread(String communityId, String userId, String topic) {
+		this(0L, communityId, userId, new Date(), topic);
+	}
+	
+	/**
+	 * Get the thread id.
+	 * @return the id of this thread
+	 */
+	public long getThreadId() {
+		return threadId;
+	}
+	
+	/**
+	 * Set the thread id.
+	 * @param threadId the new id of this thread
+	 */
+	public void setThreadId(long threadId) {
+		this.threadId = threadId;
+	}
+	
+	/**
+	 * Get the community id.
+	 * @return the id of the community this thread belongs to
+	 */
+	public String getCommunityId() {
+		return communityId;
+	}
+	
+	/**
+	 * Set the community id.
+	 * @param communityId the id of the new community this thread belongs to
+	 */
+	public void setCommunityId(String communityId) {
+		this.communityId = communityId;
+	}
+	
+	/**
+	 * Get the user id.
+	 * @return the id of the user that created this thread
+	 */
+	public String getUserId() {
+		return userId;
+	}
+	
+	/**
+	 * Set the user id.
+	 * @param userId the id of the new user that created this thread
+	 */
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+	/**
+	 * Get the creation date.
+	 * @return the date that this thread was created
+	 */
+	public Date getCreationDate() {
+		return creationDate;
+	}
+	
+	/**
+	 * Set the creation date.
+	 * @param creationDate the new date that this thread was created
+	 */
+	public void setCreationDate(Date creationDate) {
+		this.creationDate = creationDate;
+	}
+	
+	/**
+	 * Get the topic.
+	 * @return the topic of this thread
+	 */
+	public String getTopic() {
+		return topic;
+	}
+	
+	/**
+	 * Set the topic.
+	 * @param topic the new topic of this thread
+	 */
+	public void setTopic(String topic) {
+		this.topic = topic;
+	}
+	
+	/**
+	 * Get the posts.
+	 * @return the posts of this thread
+	 */
+	public List<Post> getPosts() {
+		return posts;
+	}
+	
+	/**
+	 * Set the posts.
+	 * @param posts the new posts of this thread
+	 */
+	public void setPosts(List<Post> posts) {
+		this.posts = posts;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Community.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Community.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Community.java	(revision 62097)
@@ -0,0 +1,149 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import eu.dnetlib.domain.DriverResource;
+
+/**
+ * The domain object for the Community resource data structure
+ *
+ */
+
+public class Community extends DriverResource {
+	private static final long serialVersionUID = -8513176941362373935L;
+	
+	private String name = null;
+    private String description = null;
+    private String owner = null;
+    private Set<String> collections = new HashSet<String>();
+    private Set<String> managers = new HashSet<String>();
+    private Set<String> recommendations = new HashSet<String>();
+    private Set<String> authoritativeDocuments = new HashSet<String>();
+    
+    /**
+	 * The default constructor sets the resourceKind to <b>CommunityDSResources</b>, 
+	 * resourceType to <b>CommunityDSResourceType</b> and dateOfCreation to the current system date.
+	 */
+    public Community() {
+    	this.setResourceKind("CommunityDSResources");
+    	this.setResourceType("CommunityDSResourceType");
+    	this.setDateOfCreation(new Date());
+    }
+
+	@Deprecated
+    public String getCommunityId() {
+        return getResourceId();
+    }
+
+	@Deprecated
+    public void setCommunityId(String id) {
+        this.setResourceId(id);
+    }
+
+    
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    
+    public String getOwner() {
+        return owner;
+    }
+
+    public void setOwner(String owner) {
+        this.owner = owner;
+    }
+
+    
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    
+    public Set<String> getCollections() {
+        return collections;
+    }
+
+    public void setCollections(Set<String> collections) {
+        this.collections = collections;
+    }
+
+    
+    public Set<String> getManagers() {
+        return managers;
+    }
+
+    public void setManagers(Set<String> managers) {
+        this.managers = managers;
+    }
+    
+    private boolean equals(Community c) {
+        return (this.getName() != null) 
+        && (c.getName() != null)
+        && (this.getName().equals(c.getName()));
+    }
+    
+    
+	public Set<String> getRecommendations() {
+		return recommendations;
+	}
+
+	public void setRecommendations(Set<String> recommendations) {
+		this.recommendations = recommendations;
+	}
+
+	public Set<String> getAuthoritativeDocuments() {
+		return authoritativeDocuments;
+	}
+	
+	public void setAuthoritativeDocuments(Set<String> authoritativeDocuments) {
+		this.authoritativeDocuments = authoritativeDocuments;
+	}
+	
+    @Override
+    public boolean equals(Object o) {
+    	if (!(o instanceof Community))
+    		return false;
+    	else
+    		return this.equals((Community) o);
+    }
+    
+    @Override
+    public int hashCode() {
+        if (this.getName() != null) {
+            return this.getName().hashCode();
+        } else {
+            return 0;
+        }
+    }
+    
+    public String getShortDescription() {
+    	String desc = null;
+    	
+    	if (this.description != null) {
+    		if (description.length() > 100) {
+    			desc = description.substring(0, 100);
+    			
+    			desc += "...";
+    		} else {
+    			desc = description;
+    		}
+    	}
+    	
+    	return desc;
+    }
+    
+    public void setShortDescription(String value) {
+    }
+    
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileServiceProfile.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileServiceProfile.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UserProfileServiceProfile.java	(revision 62097)
@@ -0,0 +1,14 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+import eu.dnetlib.domain.DriverServiceProfile;
+
+public class UserProfileServiceProfile extends DriverServiceProfile {
+	private static final long serialVersionUID = 1003330679801258669L;
+
+	public UserProfileServiceProfile() {
+		super("ServiceResources", "UserInterfaceServiceResourceType", new Date());
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Record1.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Record1.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Record1.java	(revision 62097)
@@ -0,0 +1,32 @@
+package eu.dnetlib.domain.functionality;
+
+public class Record1 {
+
+	protected int ord;
+	protected String content;
+	protected String label;
+
+	public int getOrd() {
+		return ord;
+	}
+
+	public void setOrd(int ord) {
+		this.ord = ord;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunitySearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunitySearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunitySearchCriteria.java	(revision 62097)
@@ -0,0 +1,49 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+
+/**
+ * The search criteria class for looking community profiles
+ *
+ */
+public class CommunitySearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+
+	public boolean matches(Object o) {
+		if (!(o instanceof Community))
+			return false;
+		
+		Community community = (Community) o;
+		
+		if (this.getContains() != null) {
+			if (community.getName() == null || 
+					!community.getName().toLowerCase().contains(this.getContains().toLowerCase()))
+				return false;
+		}
+		
+		if (this.getStartsWith() != null) {
+			if (community.getName() == null || 
+					!community.getName().toLowerCase().startsWith(this.getStartsWith().toLowerCase()))
+				return false;
+		}
+		
+		if (this.getEndsWith() != null) {
+			if (community.getName() == null || 
+					!community.getName().toLowerCase().endsWith(this.getEndsWith().toLowerCase()))
+				return false;
+		}
+		
+		return true;
+	}
+	
+	public boolean equals(Object o) {
+		return super.equals(o);
+	}
+	
+	public int hashCode() {
+		return super.hashCode();
+	}
+}
+
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryComparator.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryComparator.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/data/RepositoryComparator.java	(revision 62097)
@@ -0,0 +1,11 @@
+package eu.dnetlib.domain.data;
+
+import java.util.Comparator;
+
+public class RepositoryComparator implements Comparator<Repository> {
+
+	public int compare(Repository o1, Repository o2) {
+		return o1.getOfficialName().compareToIgnoreCase(o2.getOfficialName());
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/SecurityProfile.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/SecurityProfile.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/SecurityProfile.java	(revision 62097)
@@ -0,0 +1,99 @@
+package eu.dnetlib.domain.enabling;
+
+import eu.dnetlib.domain.DriverResource;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 
+ * The domain object for the SecurityProfile resource data structure
+ * 
+ */
+public class SecurityProfile extends DriverResource{
+	private static final long serialVersionUID = 6533097295469183688L;
+
+	private String driverResourceId;
+	private List<String> identities = new ArrayList<String>();
+	private String password = null;
+
+	public SecurityProfile() {
+		this.setResourceKind("SecurityProfileDSResources");
+		this.setResourceType("SecurityProfileDSResourceType");
+	}
+
+	@Deprecated
+	public String getId() {
+		return this.getResourceId();
+	}
+
+	@Deprecated
+	public void setId(String id) {
+		this.setResourceId(id);
+	}
+
+	public List<String> getIdentities() {
+		return identities;
+	}
+
+	public void setIdentities(List<String> identities) {
+		this.identities = identities;
+	}
+
+	public String getDriverResourceId() {
+		return driverResourceId;
+	}
+
+	public void setDriverResourceId(String recourceId) {
+		this.driverResourceId = recourceId;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime
+				* result
+				+ ((driverResourceId == null) ? 0 : driverResourceId.hashCode());
+		result = prime * result
+				+ ((identities == null) ? 0 : identities.hashCode());
+		result = prime * result
+				+ ((password == null) ? 0 : password.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		SecurityProfile other = (SecurityProfile) obj;
+		if (driverResourceId == null) {
+			if (other.driverResourceId != null)
+				return false;
+		} else if (!driverResourceId.equals(other.driverResourceId))
+			return false;
+		if (identities == null) {
+			if (other.identities != null)
+				return false;
+		} else if (!identities.equals(other.identities))
+			return false;
+		if (password == null) {
+			if (other.password != null)
+				return false;
+		} else if (!password.equals(other.password))
+			return false;
+		return true;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/VocabularySearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/VocabularySearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/VocabularySearchCriteria.java	(revision 62097)
@@ -0,0 +1,32 @@
+package eu.dnetlib.domain.enabling;
+
+import eu.dnetlib.domain.SearchCriteria;
+
+public class VocabularySearchCriteria implements SearchCriteria {
+	private String name = null;
+
+	public VocabularySearchCriteria() {
+	}
+	
+	public VocabularySearchCriteria(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public boolean matches(Object o) {
+		Vocabulary vocab = (Vocabulary) o;
+
+		if (this.name != null) {
+			return this.name.equals(vocab.getName());
+		}
+		
+		return true;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ActionType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ActionType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ActionType.java	(revision 62097)
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package eu.dnetlib.domain;
+
+public enum ActionType {
+	CREATE("CREATE"),
+	UPDATE("UPDATE"),
+	DELETE("DELETE");
+	
+	private final String value;
+
+	ActionType(String str) {
+		this.value = str;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	@Override
+	public String toString() {
+		return this.getValue();
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/SecurityProfileSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/SecurityProfileSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/SecurityProfileSearchCriteria.java	(revision 62097)
@@ -0,0 +1,41 @@
+package eu.dnetlib.domain.enabling;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+public class SecurityProfileSearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+
+	private List<String> driverResourceIds = new ArrayList<String>();
+
+	public boolean matches(Object o) {
+		if (!(o instanceof SecurityProfile)) {
+			return false;
+		}
+
+		SecurityProfile profile = (SecurityProfile) o;
+
+		if (driverResourceIds != null) {
+			for (String driverResourceId : driverResourceIds)
+				if (driverResourceId != null) {
+					if (profile.getDriverResourceId() == null
+							|| !profile.getDriverResourceId().equals(
+									driverResourceId))
+						return false;
+				}
+		}
+
+		return true;
+	}
+
+	public List<String> getDriverResourceIds() {
+		return driverResourceIds;
+	}
+
+	public void setDriverResourceIds(List<String> driverResourceIds) {
+		this.driverResourceIds = driverResourceIds;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Record1.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Record1.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/Record1.java	(revision 62097)
@@ -0,0 +1,24 @@
+package eu.dnetlib.domain.enabling;
+
+public class Record1 {
+
+	protected String status;
+	protected int total;
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public int getTotal() {
+		return total;
+	}
+
+	public void setTotal(int total) {
+		this.total = total;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/PreparePullRSType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/PreparePullRSType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/enabling/PreparePullRSType.java	(revision 62097)
@@ -0,0 +1,33 @@
+package eu.dnetlib.domain.enabling;
+
+public class PreparePullRSType {
+
+	protected Integer keepAliveTime;
+	protected String styleSheet;
+	protected Integer total;
+
+	public Integer getKeepAliveTime() {
+		return keepAliveTime;
+	}
+
+	public void setKeepAliveTime(Integer keepAliveTime) {
+		this.keepAliveTime = keepAliveTime;
+	}
+
+	public String getStyleSheet() {
+		return styleSheet;
+	}
+
+	public void setStyleSheet(String styleSheet) {
+		this.styleSheet = styleSheet;
+	}
+
+	public Integer getTotal() {
+		return total;
+	}
+
+	public void setTotal(Integer total) {
+		this.total = total;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UpdateCollectionType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UpdateCollectionType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/UpdateCollectionType.java	(revision 62097)
@@ -0,0 +1,106 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.List;
+
+public class UpdateCollectionType {
+
+	protected Boolean cContainer;
+	protected List<Record1> cDesc;
+	protected Boolean cFrozen;
+	protected String cImage;
+	protected String cMemCond;
+	protected String cName;
+	protected String cOwner;
+	protected Boolean cPrivate;
+	protected String cSource;
+	protected String cSubject;
+	protected Boolean cVisible;
+
+	public Boolean getCContainer() {
+		return cContainer;
+	}
+
+	public void setCContainer(Boolean container) {
+		cContainer = container;
+	}
+
+	public List<Record1> getCDesc() {
+		return cDesc;
+	}
+
+	public void setCDesc(List<Record1> desc) {
+		cDesc = desc;
+	}
+
+	public Boolean getCFrozen() {
+		return cFrozen;
+	}
+
+	public void setCFrozen(Boolean frozen) {
+		cFrozen = frozen;
+	}
+
+	public String getCImage() {
+		return cImage;
+	}
+
+	public void setCImage(String image) {
+		cImage = image;
+	}
+
+	public String getCMemCond() {
+		return cMemCond;
+	}
+
+	public void setCMemCond(String memCond) {
+		cMemCond = memCond;
+	}
+
+	public String getCName() {
+		return cName;
+	}
+
+	public void setCName(String name) {
+		cName = name;
+	}
+
+	public String getCOwner() {
+		return cOwner;
+	}
+
+	public void setCOwner(String owner) {
+		cOwner = owner;
+	}
+
+	public Boolean getCPrivate() {
+		return cPrivate;
+	}
+
+	public void setCPrivate(Boolean private1) {
+		cPrivate = private1;
+	}
+
+	public String getCSource() {
+		return cSource;
+	}
+
+	public void setCSource(String source) {
+		cSource = source;
+	}
+
+	public String getCSubject() {
+		return cSubject;
+	}
+
+	public void setCSubject(String subject) {
+		cSubject = subject;
+	}
+
+	public Boolean getCVisible() {
+		return cVisible;
+	}
+
+	public void setCVisible(Boolean visible) {
+		cVisible = visible;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ResourceType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ResourceType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ResourceType.java	(revision 62097)
@@ -0,0 +1,39 @@
+package eu.dnetlib.domain;
+
+public enum ResourceType {
+	USERDSRESOURCETYPE("UserDSResourceType"),
+	COMMUNITYDSRESOURCETYPE("CommunityDSResourceType"),
+	COLLECTIONDSRESOURCETYPE("CollectionDSResourceType"),
+	RECOMMENDATIONDSRESOURCETYPE("RecommendationDSResourceType"),
+	REPOSITORYSERVICERESOURCETYPE("RepositoryServiceResourceType"),
+	VOCABULARYDSRESOURCETYPE("VocabularyDSResourceType"),
+	SECURITYPROFILEDSRESOURCETYPE("SecurityProfileDSResourceType"),
+	MDFORMATRESOURCETYPE("MDFormatDSResourceType"),
+	QUERYHASHRESOURCETYPE("QueryHashDSResourceType"),
+	WEBLAYOUTRESOURCETYPE("WebInterfaceLayoutResourceType"),
+	INDEXDSRESOURCETYPE("IndexDSResourceType"),
+	RSSFEEDRESOURCETYPE("RSSFeedDSResourceType"),
+	
+	CSHARVESTERSERVICERESOURCETYPE("CSHarvesterServiceResourceType"),
+	STATSMANAGERSERVICERESOURCETYPE("StatsManagerServiceResourceType"),
+	LOCALDOWNLOADMANAGERSERVICERESOURCETYPE("LocalDownloadManagerServiceResourceType"),
+	VALIDATORSERVICERESOURCETYPE("ValidatorServiceResourceType"),
+    SEARCHSERVICERESOURCETYPE("SearchServiceResourceType"),
+	
+	ANY("*");
+	
+	private final String value;
+	
+	ResourceType(String str) {
+		this.value = str;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	@Override
+	public String toString() {
+		return this.getValue();
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverServiceProfile.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverServiceProfile.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverServiceProfile.java	(revision 62097)
@@ -0,0 +1,141 @@
+package eu.dnetlib.domain;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import eu.dnetlib.domain.enabling.SecurityProfile;
+
+public abstract class DriverServiceProfile extends DriverResource {
+	private static final long serialVersionUID = -3603230835510580092L;
+
+	private String parentId = null;
+	private String parentType = null;
+	
+	private List<String> protocolNames = new ArrayList<String>();
+	private List<String> protocolAddresses = new ArrayList<String>();
+	
+	private String typology = null;
+	private int maxDatastructureSize = 0;
+	private int maxDatastructureNumber = 0;
+	private int availabeDiskSpace = 0;
+	
+	private String availability = null;
+	private String capacity = null;
+	private int responseTime = 0;
+	private double throughput = 0;
+	
+	private SecurityProfile securityProfile = null;
+	
+	public DriverServiceProfile(String ResourceKind, String resourceType, 
+			Date dateOfCreation) {
+		
+		this.setResourceKind(ResourceKind);
+		this.setResourceType(resourceType);
+		this.setDateOfCreation(dateOfCreation);
+	}
+	
+	public SecurityProfile getSecurityProfile() {
+		return securityProfile;
+	}
+
+	public void setSecurityProfile(SecurityProfile securityProfile) {
+		this.securityProfile = securityProfile;
+	}
+	
+	public int getAvailabeDiskSpace() {
+		return availabeDiskSpace;
+	}
+
+	public void setAvailabeDiskSpace(int availabeDiskSpace) {
+		this.availabeDiskSpace = availabeDiskSpace;
+	}
+
+	public String getAvailability() {
+		return availability;
+	}
+
+	public void setAvailability(String availability) {
+		this.availability = availability;
+	}
+
+	public String getCapacity() {
+		return capacity;
+	}
+
+	public void setCapacity(String capacity) {
+		this.capacity = capacity;
+	}
+
+	public int getMaxDatastructureNumber() {
+		return maxDatastructureNumber;
+	}
+
+	public void setMaxDatastructureNumber(int maxDatastructureNumber) {
+		this.maxDatastructureNumber = maxDatastructureNumber;
+	}
+
+	public int getMaxDatastructureSize() {
+		return maxDatastructureSize;
+	}
+
+	public void setMaxDatastructureSize(int maxDatastructureSize) {
+		this.maxDatastructureSize = maxDatastructureSize;
+	}
+
+	public String getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	public String getParentType() {
+		return parentType;
+	}
+
+	public void setParentType(String parentType) {
+		this.parentType = parentType;
+	}
+
+	public List<String> getProtocolAddresses() {
+		return protocolAddresses;
+	}
+
+	public void setProtocolAddresses(List<String> protocolAddresses) {
+		this.protocolAddresses = protocolAddresses;
+	}
+
+	public List<String> getProtocolNames() {
+		return protocolNames;
+	}
+
+	public void setProtocolNames(List<String> protocolNames) {
+		this.protocolNames = protocolNames;
+	}
+
+	public int getResponseTime() {
+		return responseTime;
+	}
+
+	public void setResponseTime(int responseTime) {
+		this.responseTime = responseTime;
+	}
+
+	public double getThroughput() {
+		return throughput;
+	}
+
+	public void setThroughput(double throughput) {
+		this.throughput = throughput;
+	}
+
+	public String getTypology() {
+		return typology;
+	}
+
+	public void setTypology(String typology) {
+		this.typology = typology;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SearchCriteriaImpl.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SearchCriteriaImpl.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SearchCriteriaImpl.java	(revision 62097)
@@ -0,0 +1,97 @@
+package eu.dnetlib.domain;
+
+
+/**
+ * An abstract class implementation for the SearchCriteria interface
+ *
+ */
+
+public abstract class SearchCriteriaImpl implements SearchCriteria {
+    protected String startsWith = null;
+    protected String endsWith = null;
+    protected String contains = null;
+    
+	public String getContains() {
+		return contains;
+	}
+	public void setContains(String contains) {
+		this.contains = contains;
+	}
+	public String getEndsWith() {
+		return endsWith;
+	}
+	public void setEndsWith(String endsWith) {
+		this.endsWith = endsWith;
+	}
+	public String getStartsWith() {
+		return startsWith;
+	}
+	public void setStartsWith(String startsWith) {
+		this.startsWith = startsWith;
+	}
+	
+	public String toString() {
+		String s = "";
+		
+		if (contains != null) {
+			s += "contains: " + contains;
+		}
+		
+		if (startsWith != null) {
+			s += " startsWith: " + startsWith;
+		}
+		
+		if (endsWith != null) {
+			s += " endsWith: " + endsWith;
+		}
+		
+		return "[" + s + "]";
+	}
+	
+	public boolean equals(Object o) {
+		if (!(o instanceof SearchCriteriaImpl))
+			return false;
+		else
+			return this.equals((SearchCriteriaImpl) o);
+	}
+	
+	public boolean equals(SearchCriteriaImpl crit) {
+		if (contains != null && crit.contains != null) {
+			if (!contains.equals(crit.contains))
+				return false;
+		} else if ( (contains == null && crit.contains != null) || (contains != null && crit.contains == null)) {
+			return false;
+		}
+
+		if (startsWith != null && crit.startsWith != null) {
+			if (!startsWith.equals(crit.startsWith))
+				return false;
+		} else if ( (startsWith == null && crit.startsWith != null) || (startsWith != null && crit.startsWith == null)) {
+			return false;
+		}
+
+		if (endsWith != null && crit.endsWith != null) {
+			if (!endsWith.equals(crit.endsWith))
+				return false;
+		} else if ( (endsWith == null && crit.endsWith != null) || (endsWith != null && crit.endsWith == null)) {
+			return false;
+		}
+		
+		return true;
+	}
+	
+	public int hashCode() {
+		int code = 0;
+		
+		if (contains != null)
+			code |= contains.hashCode();
+		
+		if (startsWith != null)
+			code |= startsWith.hashCode();
+		
+		if (endsWith != null)
+			code |= endsWith.hashCode();
+		
+		return code;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ServiceIdentity.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ServiceIdentity.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/ServiceIdentity.java	(revision 62097)
@@ -0,0 +1,37 @@
+package eu.dnetlib.domain;
+
+/**
+ * Identifies the service's version. Version syntax:
+ * ${NAME}-${MAJOR}.${MINOR}.${MICRO}[-${LABEL}]
+ */
+public class ServiceIdentity {
+
+	private String name = null;
+	private String major = null;
+	private String minor = null;
+	private String micro = null;
+	private String label = null;
+	
+	public ServiceIdentity(String name, String major, String minor,
+			String micro, String label) {
+		super();
+		this.name = name;
+		this.major = major;
+		this.minor = minor;
+		this.micro = micro;
+		this.label = label;
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer buffer = new StringBuffer();
+		
+		buffer.append(name).append("-").append(major).append(".").append(minor);
+		buffer.append(".").append(micro);
+		
+		if (label != null)
+			buffer.append("-").append(label);
+		
+		return buffer.toString();
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverResource.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverResource.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverResource.java	(revision 62097)
@@ -0,0 +1,113 @@
+package eu.dnetlib.domain;
+
+import java.util.Date;
+
+/**
+ * The base class for all domain objects in the driver domain. This class groups
+ * all common information, such as the <i>resourceId</id> and the
+ * <i>resourceUri</id>.
+ * 
+ */
+public abstract class DriverResource{
+	private static final long serialVersionUID = 1583061448986459014L;
+
+	private String resourceId = null;
+	private String resourceUri = null;
+	private String resourceKind = null;
+	private String resourceType = null;
+	private Date dateOfCreation = null;
+
+	public Date getDateOfCreation() {
+		return dateOfCreation;
+	}
+
+	public void setDateOfCreation(Date dateOfCreation) {
+		this.dateOfCreation = dateOfCreation;
+	}
+
+	public String getResourceId() {
+		return resourceId;
+	}
+
+	public void setResourceId(String resourceId) {
+		this.resourceId = resourceId;
+	}
+
+	public String getResourceKind() {
+		return resourceKind;
+	}
+
+	public void setResourceKind(String resourceKind) {
+		this.resourceKind = resourceKind;
+	}
+
+	public String getResourceType() {
+		return resourceType;
+	}
+
+	public void setResourceType(String resourceType) {
+		this.resourceType = resourceType;
+	}
+
+	public String getResourceUri() {
+		return resourceUri;
+	}
+
+	public void setResourceUri(String resourceUri) {
+		this.resourceUri = resourceUri;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((dateOfCreation == null) ? 0 : dateOfCreation.hashCode());
+		result = prime * result
+				+ ((resourceId == null) ? 0 : resourceId.hashCode());
+		result = prime * result
+				+ ((resourceKind == null) ? 0 : resourceKind.hashCode());
+		result = prime * result
+				+ ((resourceType == null) ? 0 : resourceType.hashCode());
+		result = prime * result
+				+ ((resourceUri == null) ? 0 : resourceUri.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		DriverResource other = (DriverResource) obj;
+		if (dateOfCreation == null) {
+			if (other.dateOfCreation != null)
+				return false;
+		} else if (!dateOfCreation.equals(other.dateOfCreation))
+			return false;
+		if (resourceId == null) {
+			if (other.resourceId != null)
+				return false;
+		} else if (!resourceId.equals(other.resourceId))
+			return false;
+		if (resourceKind == null) {
+			if (other.resourceKind != null)
+				return false;
+		} else if (!resourceKind.equals(other.resourceKind))
+			return false;
+		if (resourceType == null) {
+			if (other.resourceType != null)
+				return false;
+		} else if (!resourceType.equals(other.resourceType))
+			return false;
+		if (resourceUri == null) {
+			if (other.resourceUri != null)
+				return false;
+		} else if (!resourceUri.equals(other.resourceUri))
+			return false;
+		return true;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/Rule.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/Rule.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/Rule.java	(revision 62097)
@@ -0,0 +1,137 @@
+package eu.dnetlib.domain.functionality.validator;
+
+
+public class Rule{
+
+	// for XML//
+	public static String XPATH = "xpath";
+	public static String SUCCESS = "success";
+
+	// for cardinality rule
+	public static String GREATER_THAN = "greater_than";
+	public static String LESS_THAN = "less_than";
+
+	// for regular expresion
+	public static String REGEXP = "regexp";
+
+	// for vocabulary
+	public static String TERMS = "terms";
+
+	private int id;
+	private String name = null;
+	private String description = null;
+	private String type = null;
+	private boolean mandatory = false;
+	private int weight = 0;
+	private String provider_information = null;
+	private String job_type = null;
+	private String entity_type = null;
+	private boolean for_cris = false;
+
+//	protected Properties pros;
+//
+//	public Rule() {
+//	}
+//
+//	public Properties getConfiguration() {
+//		return pros;
+//	}
+//
+//	public void setConfiguration(Properties pros) {
+//		this.pros = pros;
+//	}
+
+	protected CustomProperties pros;
+
+	public Rule() {
+	}
+
+	public CustomProperties getConfiguration() {
+		return pros;
+	}
+
+	public void setConfiguration(CustomProperties pros) {
+		this.pros = pros;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public boolean isMandatory() {
+		return mandatory;
+	}
+
+	public void setMandatory(boolean mandatory) {
+		this.mandatory = mandatory;
+	}
+
+	public boolean isFor_cris() {
+		return for_cris;
+	}
+
+	public void setFor_cris(boolean for_cris) {
+		this.for_cris = for_cris;
+	}
+
+	public int getWeight() {
+		return weight;
+	}
+
+	public void setWeight(int weight) {
+		this.weight = weight;
+	}
+
+	public String getProvider_information() {
+		return provider_information;
+	}
+
+	public void setProvider_information(String provider_information) {
+		this.provider_information = provider_information;
+	}
+
+	public String getJob_type() {
+		return job_type;
+	}
+
+	public void setJob_type(String job_type) {
+		this.job_type = job_type;
+	}
+
+	public String getEntity_type() {
+		return entity_type;
+	}
+
+	public void setEntity_type(String entity_type) {
+		this.entity_type = entity_type;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/JobForValidation.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/JobForValidation.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/validator/JobForValidation.java	(revision 62097)
@@ -0,0 +1,211 @@
+package eu.dnetlib.domain.functionality.validator;
+
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+public class JobForValidation{
+	private String officialName, baseUrl, userEmail, validationSet, datasourceId,
+			interfaceId, desiredCompatibilityLevel, activationId, repoType,
+			interfaceIdOld, groupByXpath, metadataPrefix;
+	private int records;
+	
+	private boolean registration,updateExisting;
+
+	private boolean cris = false ;
+	private boolean crisReferentialChecks;
+	
+	private Set<String> selectedCrisEntities;
+	private Set<Integer> selectedContentRules;
+	private Set<Integer> selectedUsageRules;
+	
+	private List<String> adminEmails = new ArrayList<String>();
+
+	public JobForValidation() {
+		super();
+	}
+
+	public JobForValidation(JobForValidation oldJob) {
+		super();
+		this.setBaseUrl(oldJob.getBaseUrl());
+		this.setRecords(oldJob.getRecords());
+		this.setValidationSet(oldJob.getValidationSet());
+		this.setGroupByXpath(oldJob.getGroupByXpath());
+		this.setActivationId(oldJob.getActivationId());
+		this.setMetadataPrefix(oldJob.getMetadataPrefix());
+		this.setUserEmail(oldJob.getUserEmail());
+		this.setDesiredCompatibilityLevel(oldJob.getDesiredCompatibilityLevel());
+	}
+	public int getRecords() {
+		return records;
+	}
+
+	public void setRecords(int records) {
+		this.records = records;
+	}
+
+	public String getMetadataPrefix() {
+		return metadataPrefix;
+	}
+
+	public void setMetadataPrefix(String metadataPrefix) {
+		this.metadataPrefix = metadataPrefix;
+	}
+
+	public String getGroupByXpath() {
+		return groupByXpath;
+	}
+	
+	public void setGroupByXpath(String groupByXpath) {
+		this.groupByXpath = groupByXpath;
+	}
+
+	public boolean isCris() {
+		return cris;
+	}
+
+	public void setCris(boolean cris) {
+		this.cris = cris;
+	}
+
+	public boolean isCrisReferentialChecks() {
+		return crisReferentialChecks;
+	}
+
+	public void setCrisReferentialChecks(boolean crisReferentialChecks) {
+		this.crisReferentialChecks = crisReferentialChecks;
+	}
+
+	public Set<String> getSelectedCrisEntities() {
+		return selectedCrisEntities;
+	}
+
+	public void setSelectedCrisEntities(Set<String> selectedCrisEntities) {
+		this.selectedCrisEntities = selectedCrisEntities;
+	}
+
+	public String getInterfaceIdOld() {
+		return interfaceIdOld;
+	}
+
+	public void setInterfaceIdOld(String interfaceIdOld) {
+		this.interfaceIdOld = interfaceIdOld;
+	}
+
+	public boolean isRegistration() {
+		return registration;
+	}
+
+	public void setRegistration(boolean registration) {
+		this.registration = registration;
+	}
+
+	public boolean isUpdateExisting() {
+		return updateExisting;
+	}
+
+	public void setUpdateExisting(boolean updateExisting) {
+		this.updateExisting = updateExisting;
+	}
+
+	public String getOfficialName() {
+		return officialName;
+	}
+
+	public void setOfficialName(String officialName) {
+		this.officialName = officialName;
+	}
+
+	public String getBaseUrl() {
+		return baseUrl;
+	}
+
+	public void setBaseUrl(String baseUrl) {
+		this.baseUrl = baseUrl;
+	}
+
+
+	public String getUserEmail() {
+		return userEmail;
+	}
+
+	public void setUserEmail(String userEmail) {
+		this.userEmail = userEmail;
+	}
+
+	public String getValidationSet() {
+		return validationSet;
+	}
+
+	public void setValidationSet(String validationSet) {
+		this.validationSet = validationSet;
+	}
+
+	public String getDatasourceId() {
+		return datasourceId;
+	}
+
+	public void setDatasourceId(String datasourceId) {
+		this.datasourceId = datasourceId;
+	}
+
+	public String getInterfaceId() {
+		return interfaceId;
+	}
+
+	public void setInterfaceId(String interfaceId) {
+		this.interfaceId = interfaceId;
+	}
+
+
+	public String getDesiredCompatibilityLevel() {
+		return desiredCompatibilityLevel;
+	}
+
+	public void setDesiredCompatibilityLevel(String desiredCompatibilityLevel) {
+		this.desiredCompatibilityLevel = desiredCompatibilityLevel;
+	}
+
+	public String getActivationId() {
+		return activationId;
+	}
+
+	public void setActivationId(String activationId) {
+		this.activationId = activationId;
+	}
+
+	public String getRepoType() {
+		return repoType;
+	}
+
+	public void setRepoType(String repoType) {
+		this.repoType = repoType;
+	}
+
+	public List<String> getAdminEmails() {
+		return adminEmails;
+	}
+
+	public void setAdminEmails(List<String> adminEmails) {
+		this.adminEmails = adminEmails;
+	}
+
+	public Set<Integer> getSelectedUsageRules() {
+		return selectedUsageRules;
+	}
+
+	public void setSelectedUsageRules(Set<Integer> selectedUsageRules) {
+		this.selectedUsageRules = selectedUsageRules;
+	}
+
+	public Set<Integer> getSelectedContentRules() {
+		return selectedContentRules;
+	}
+
+	public void setSelectedContentRules(Set<Integer> selectedContentRules) {
+		this.selectedContentRules = selectedContentRules;
+	}
+
+	
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationSchedule.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationSchedule.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/NotificationSchedule.java	(revision 62097)
@@ -0,0 +1,145 @@
+package eu.dnetlib.domain.functionality;
+
+/**
+ * This class represents an execution schedule for a notification query. 
+ * @author thanos
+ * @see eu.dnetlib.api.functionality.NotificationService
+ * @see eu.dnetlib.functionality.notification.executor.NotificationQueryExecutor
+ * @see NotificationQuery
+ * @see NotificationEvent
+ * @see NotificationResult
+ * @see NotificationSubscription
+ *
+ */
+public class NotificationSchedule implements Comparable<NotificationSchedule> {
+	private String queryId;
+	private Float triggerThreshold;
+	private boolean percentileThreshold;
+	private long executionPeriod;
+	private boolean enabled;
+	
+	/**
+	 * Construct a new notification schedule.
+	 * @param queryId the unique identifier of the query of this schedule
+	 * @param triggerThreshold the trigger threshold of this schedule or null if no threshold applies
+	 * @param percentileThreshold true if trigger threshold is percentile threshold, false otherwise
+	 * @param executionPeriod the execution period of this schedule expressed in minutes
+	 * @param enabled true if this topic is currently enabled, false if it currently disabled
+	 */
+	public NotificationSchedule(final String queryId, final Float triggerThreshold, final boolean percentileThreshold, final long executionPeriod, final boolean enabled) {
+		this.queryId = queryId;
+		this.triggerThreshold = triggerThreshold;
+		this.percentileThreshold = percentileThreshold;
+		this.executionPeriod = executionPeriod;
+		this.enabled = enabled;
+	}
+	
+	/**
+	 * Construct a new notification query with query identifier and trigger threshold set to null, percentile threshold and enabled set to false and execution period set to zero.
+	 */
+	public NotificationSchedule() {
+		this(null, null, false, 0L, false);
+	}
+
+	/**
+	 * Get the query of this schedule.
+	 * @return the unique identifier of the query of this schedule
+	 */
+	public String getQueryId() {
+		return queryId;
+	}
+
+	/**
+	 * Set the query of this schedule.
+	 * @param queryId the unique identifier of the query of this schedule
+	 */
+	public void setQueryId(final String queryId) {
+		this.queryId = queryId;
+	}
+
+	/**
+	 * Get the trigger threshold of this schedule.
+	 * @return the trigger threshold of this schedule
+	 */
+	public Float getTriggerThreshold() {
+		return triggerThreshold;
+	}
+
+	/**
+	 * Set the trigger threshold of this schedule.
+	 * @param triggerThreshold the the trigger threshold of this schedule
+	 */
+	public void setTriggerThreshold(final Float triggerThreshold) {
+		this.triggerThreshold = triggerThreshold;
+	}
+
+	/**
+	 * Check if the trigger threshold of this schedule  is percentile.
+	 * @return true if the trigger threshold of this topic is percentile, false otherwise
+	 */
+	public boolean isPercentileThreshold() {
+		return percentileThreshold;
+	}
+
+	/**
+	 * Set the percentile status of the trigger threshold of this schedule.
+	 * @param percentileThreshold true to set a percentile trigger threshold to this schedule, false otherwise
+	 */
+	public void setPercentileThreshold(final boolean percentileThreshold) {
+		this.percentileThreshold = percentileThreshold;
+	}
+
+	/**
+	 * Get the execution period of this schedule.
+	 * @return the the execution period of this schedule
+	 */
+	public long getExecutionPeriod() {
+		return executionPeriod;
+	}
+
+	/**
+	 * Set the execution period of this schedule.
+	 * @param executionPeriod the execution period of this schedule
+	 */
+	public void setExecutionPeriod(final long executionPeriod) {
+		this.executionPeriod = executionPeriod;
+	}
+
+	/**
+	 * Check if this schedule is enabled.
+	 * @return true if this schedule is currently enabled, false otherwise
+	 */
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	/**
+	 * Set the enabled status of this schedule.
+	 * @param enabled true to enable this schedule, false to disable it
+	 */
+	public void setEnabled(final boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	@Override
+	public int compareTo(final NotificationSchedule schedule) {
+		return queryId.compareTo(schedule.queryId);
+	}
+	@Override
+	public boolean equals(final Object object) {
+		if (!(object instanceof NotificationSchedule))
+			return false;
+		final NotificationSchedule schedule = (NotificationSchedule) object;
+		return (queryId == null) ? (schedule.queryId == null) : queryId.equals(schedule.queryId);
+	}
+	
+	@Override
+	public int hashCode() {
+		return (queryId == null) ? 0 : queryId.hashCode();
+	}
+	
+	@Override
+	public String toString() {
+		return queryId;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AlertSubscription.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AlertSubscription.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AlertSubscription.java	(revision 62097)
@@ -0,0 +1,198 @@
+package eu.dnetlib.domain.functionality;
+
+import java.net.URI;
+import java.net.URL;
+
+/**
+ * This class represents a subscription to a topic of the alert service.
+ * @author thanos@di.uoa.gr
+ * @see eu.dnetlib.api.functionality.AlertService
+ * @see eu.dnetlib.functionality.alert.alerter.Alerter
+ * @see AlertTopic
+ * @see AlertTemplate
+ *
+ */
+public class AlertSubscription implements Comparable<AlertSubscription> {
+	private String templateId;
+	private URL notificationService;
+	private String queryId;
+	private String resultId;
+	private String alertMode;
+	private URI subscriber;
+	private boolean enabled;
+	
+	/**
+	 * Construct a new alert subscription.
+	 * @param templateId the unique identifier of the template of the topic of this subscription
+	 * @param notificationService the URL of notification service of the topic of this subscription
+	 * @param queryId the unique identifier of the notification service of the topic of this subscription
+	 * @param resultId the unique identifier of the notification result of the topic of this subscription
+	 * @param alertMode the alert mode of this subscription
+	 * @param subscriber the URI of the subscriber of this topic
+	 * @param enabled true if this subscription is currently enabled, false if it is currently disabled
+	 */
+	public AlertSubscription(final String templateId, final URL notificationService, final String queryId, final String resultId, final String alertMode, final URI subscriber, final boolean enabled) {
+		this.templateId = templateId;
+		this.notificationService = notificationService;
+		this.queryId = queryId;
+		this.resultId = resultId;
+		this.alertMode = alertMode;
+		this.subscriber = subscriber;
+		this.enabled = enabled;
+	}
+	
+	/**
+	 * Construct a new alert subscription with template identifier, notification service, query identifier, result identifier, alert mode and subscriber set to null and enabled set to false.
+	 */
+	public AlertSubscription() {
+		this(null, null, null, null, null, null, false);
+	}
+	
+	/**
+	 * Get the template of the topic of this subscription.
+	 * @return the unique identifier of the template of the topic of this subscription 
+	 */
+	public String getTemplateId() {
+		return templateId;
+	}
+
+	/**
+	 * Set the template of the topic of this subscription.
+	 * @param templateId the unique identifier of the template of the topic of this subscription
+	 */
+	public void setTemplateId(final String templateId) {
+		this.templateId = templateId;
+	}
+
+	/**
+	 * Get the notification service of the topic of this subscription.
+	 * @return the URL of the notification service of the topic of this subscription
+	 */
+	public URL getNotificationService() {
+		return notificationService;
+	}
+
+	/**
+	 * Set the notification service of the topic of this subscription.
+	 * @param notificationService the URL of the notification service of the topic of this subscription
+	 */
+	public void setNotificationService(final URL notificationService) {
+		this.notificationService = notificationService;
+	}
+
+	/**
+	 * Set the notification query of the topic of this subscription.
+	 * @return the unique identifier of the notification query of the topic of this subscription
+	 */
+	public String getQueryId() {
+		return queryId;
+	}
+
+	/**
+	 * Set the notification query of the topic of this subscription.
+	 * @param queryId the unique identifier of the notification query of the topic of this subscription
+	 */
+	public void setQueryId(final String queryId) {
+		this.queryId = queryId;
+	}
+
+	/**
+	 * Get the notification result of the topic of this subscription.
+	 * @return the resultId the unique identifier of the notification result of the topic of this subscription
+	 */
+	public String getResultId() {
+		return resultId;
+	}
+
+	/**
+	 * Set the notification result of the topic of this subscription.
+	 * @param resultId the unique identifier of the notification result of the topic of this subscription
+	 */
+	public void setResultId(final String resultId) {
+		this.resultId = resultId;
+	}
+
+	/**
+	 * Get the alert mode of this subscription.
+	 * @return the alert mode of this subscription
+	 */
+	public String getAlertMode() {
+		return alertMode;
+	}
+
+	/**
+	 * Set the alert mode of this subscription
+	 * @param alertMode the alert mode of this subscription
+	 */
+	public void setAlertMode(final String alertMode) {
+		this.alertMode = alertMode;
+	}
+
+	/**
+	 * Get the subscriber of this subscription.
+	 * @return the URI of the subscriber of this subscription
+	 */
+	public URI getSubscriber() {
+		return subscriber;
+	}
+
+	/**
+	 * Set the subscriber of this subscription.
+	 * @param subscriber the URI of the subscriber of this subscription
+	 */
+	public void setSubscriber(final URI subscriber) {
+		this.subscriber = subscriber;
+	}
+
+	/**
+	 * Check if this subscription is enabled.
+	 * @return true if this subscription is currently enabled, false otherwise
+	 */
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	/**
+	 * Set the enabled status of this subscription.
+	 * @param enabled true to enable this subscription, false to disable it
+	 */
+	public void setEnabled(final boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	@Override
+	public int compareTo(final AlertSubscription subscription) {
+		final int templateIdComparison = templateId.compareTo(subscription.templateId);
+		final int notificationServiceComparison = notificationService.toString().compareTo(subscription.notificationService.toString());
+		final int queryIdComparison = queryId.compareTo(subscription.queryId);
+		final int resultIdComparison = resultId.compareTo(subscription.resultId);
+		final int alertModeComparison = alertMode.compareTo(subscription.alertMode);
+		final int subscriberComparison = subscriber.compareTo(subscription.subscriber);
+		return (templateIdComparison == 0) ? ((notificationServiceComparison == 0) ? ((queryIdComparison == 0) ? ((resultIdComparison == 0) ? ((alertModeComparison == 0) ? subscriberComparison : alertModeComparison) :
+				resultIdComparison) : queryIdComparison) : notificationServiceComparison) : templateIdComparison;
+	}
+	
+	@Override
+	public boolean equals(final Object object) {
+		if (!(object instanceof AlertSubscription))
+			return false;
+		final AlertSubscription subscription = (AlertSubscription) object;
+		return ((templateId == null) ? (subscription.templateId == null) : templateId.equals(subscription.templateId)) &&
+				((notificationService == null) ? (subscription.notificationService == null) : notificationService.equals(subscription.notificationService)) &&
+				((queryId == null) ? (subscription.queryId == null) : queryId.equals(subscription.queryId)) &&
+				((resultId == null) ? (subscription.resultId == null) : resultId.equals(subscription.resultId)) &&
+				((alertMode == null) ? (subscription.alertMode == null) : alertMode.equals(subscription.alertMode)) &&
+				((subscriber == null) ? (subscription.subscriber == null) : subscriber.equals(subscription.subscriber));
+	}
+	
+	@Override
+	public int hashCode() {
+		return ((templateId == null) ? 0 : templateId.hashCode()) + ((notificationService == null) ? 0 : notificationService.hashCode()) + ((queryId == null) ? 0 : queryId.hashCode()) +
+				((resultId == null) ? 0 : resultId.hashCode()) + ((alertMode == null) ? 0 : alertMode.hashCode()) + ((subscriber == null) ? 0 : subscriber.hashCode());
+	}
+	
+	@Override
+	public String toString() {
+		return "(template: " + templateId + ", notification service: " + notificationService + ", query: " + queryId + ", result: " + resultId + ", alert mode: " + alertMode + ", subscriber: " + subscriber + ")";
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ObjectPage.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ObjectPage.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/ObjectPage.java	(revision 62097)
@@ -0,0 +1,133 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.SortedSet;
+
+/**
+ * This class represents a single page of objects which is part of a multi-page sequence.
+ * @author thanos
+ * @see eu.dnetlib.api.functionality.NotificationService
+ * @see eu.dnetlib.api.functionality.AlertService
+ * @param <E> the type of the objects contained in this page
+ * 
+ */
+public class ObjectPage<E> {
+	private int pageNumber;
+	private int pageSize;
+	private int totalObjects;
+	private SortedSet<E> objects;
+
+	/**
+	 * Construct a new object page.
+	 * @param pageNumber the number of this page
+	 * @param pageSize the size of this page
+	 * @param totalObjects the total number of available objects
+	 * @param objects the objects contained in this page
+	 */
+	public ObjectPage(final int pageNumber, final int pageSize, final int totalObjects, final SortedSet<E> objects) {
+		this.pageNumber = pageNumber;
+		this.pageSize = pageSize;
+		this.totalObjects = totalObjects;
+		this.objects = objects;
+	}
+	
+	/**
+	 * Construct a new object page with page number, page size and total objects set to zero and objects set to null.
+	 */
+	public ObjectPage() {
+		this(0, 0, 0, null);
+	}
+
+	/**
+	 * Get the page number.
+	 * @return the page number of this object page
+	 */
+	public int getPageNumber() {
+		return pageNumber;
+	}
+	
+	/**
+	 * Set the page number.
+	 * @param pageNumber the page number of this object page
+	 */
+	public void setPageNumber(final int pageNumber) {
+		this.pageNumber = pageNumber;
+	}
+
+	/**
+	 * Get the page size.
+	 * @return the page size of this object page
+	 */
+	public int getPageSize() {
+		return pageSize;
+	}
+	
+	/**
+	 * Set the page size.
+	 * @param pageSize the page size of this object page
+	 */
+	public void setPageSize(final int pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	/**
+	 * Get the total objects.
+	 * @return the total objects of this page
+	 */
+	public int getTotalObjects() {
+		return totalObjects;
+	}
+	
+	/**
+	 * Set the total objects.
+	 * @param totalObjects the total objects of this page
+	 */
+	public void setTotalObjects(final int totalObjects) {
+		this.totalObjects = totalObjects;
+	}
+
+	/**
+	 * Get the objects.
+	 * @return the objects of this page
+	 */
+	public SortedSet<E> getObjects() {
+		return objects;
+	}
+	
+	/**
+	 * Set the objects.
+	 * @param objects the objects of this page
+	 */
+	public void setObjects(SortedSet<E> objects) {
+		this.objects = objects;
+	}
+	
+	/**
+	 * Get the first object.
+	 * @return the number of the first object of this page
+	 */
+	public int getFrom() {
+		return pageNumber * pageSize;
+	}
+	
+	/**
+	 * Get the last object.
+	 * @return the number of the last object of this page
+	 */
+	public int getTo() {
+		final int to = (pageNumber + 1) * pageSize;
+		return (to > totalObjects) ? totalObjects : to;
+	}
+	
+	/**
+	 * Get the total pages.
+	 * @return the total number of available pages
+	 */
+	public int getTotalPages() {
+		return (int) Math.ceil((float) totalObjects / pageSize);
+	}
+	
+	@Override
+	public String toString() {
+		return getFrom() + " - " + getTo() + " of " + totalObjects + " (page " + pageNumber + " of " + getTotalPages() + ", page size " + pageSize + ")";
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceSearchCriteria.java	(revision 62097)
@@ -0,0 +1,42 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+public class WebInterfaceSearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+
+	private String layoutName = null;
+
+	public boolean equals(Object o) {
+		return this.equals((WebInterfaceSearchCriteria) o);
+	}
+
+	public boolean equals(WebInterfaceSearchCriteria criteria) {
+		boolean equal = super.equals(criteria);
+
+		if (layoutName != null)
+			equal |= this.layoutName.equals(criteria.layoutName);
+
+		return equal;
+	}
+
+	@Override
+	public boolean matches(Object o) {
+		WebInterfaceLayout layout = (WebInterfaceLayout) o;
+
+		if (this.getLayoutName() != null)
+			return layout.getName().equals(this.getLayoutName());
+
+		return true;
+	}
+
+	public String getLayoutName() {
+		return layoutName;
+	}
+
+	public void setLayoutName(String layoutName) {
+		this.layoutName = layoutName;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Collection.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Collection.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Collection.java	(revision 62097)
@@ -0,0 +1,254 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import eu.dnetlib.domain.DriverResource;
+
+/**
+ * 
+ * The domain object for the Collection resource data structure
+ * 
+ */
+public class Collection extends DriverResource {
+	private static final long serialVersionUID = 6325631170397780724L;
+
+	private String Name = null;  // +
+	private String Owner = null; // +
+	private String Father = null;  // -
+	private List<String> description = new ArrayList<String>(); // +
+	private String Subject = null; // -
+	private boolean Private = true;
+	private boolean Visible = false;
+	private boolean Container = false;
+	private Set<String> Children = new HashSet<String>(); // -
+	private String Query = null;  // + (timi an container = false)
+	private int DocumentCount = 0; 
+	private Date LastUpdateDate = null; // -
+	private boolean Frozen = false;
+	private String iconUrl = null;  // -
+	private String retrievalCondition = null;
+	private List<String> documentsInBasket = new ArrayList<String>();
+	
+	public String getRetrievalCondition() {
+		return retrievalCondition;
+	}
+
+	public void setRetrievalCondition(String retrievalCondition) {
+		this.retrievalCondition = retrievalCondition;
+	}
+
+	/**
+	 * The default constructor sets the resourceKind to <b>CollectionDSResources</b>, 
+	 * resourceType to <b>CollectionDSResourceType</b> and dateOfCreation to the current system date.
+	 */
+	public Collection() {
+		this.setResourceKind("CollectionDSResources");
+		this.setResourceType("CollectionDSResourceType");
+		this.setDateOfCreation(new Date());
+	}
+	
+	@Deprecated
+	public String getId() {
+		return this.getResourceId();
+	}
+	@Deprecated
+	public void setId(String id) {
+		this.setResourceId(id);
+	}
+	public String getIconUrl() {
+		return iconUrl;
+	}
+	public void setIconUrl(String iconUrl) {
+		this.iconUrl = iconUrl;
+	}
+	public Set<String> getChildren() {
+		return Children;
+	}
+	public void setChildren(Set<String> children) {
+		Children = children;
+	}
+	public boolean isContainer() {
+		return Container;
+	}
+	public void setContainer(boolean container) {
+		Container = container;
+	}
+	public int getDocumentCount() {
+		return DocumentCount;
+	}
+	public void setDocumentCount(int documentCount) {
+		DocumentCount = documentCount;
+	}
+	public String getFather() {
+		return Father;
+	}
+	public void setFather(String father) {
+		Father = father;
+	}
+	public boolean isFrozen() {
+		return Frozen;
+	}
+	public void setFrozen(boolean frozen) {
+		Frozen = frozen;
+	}
+	public Date getLastUpdateDate() {
+		return LastUpdateDate;
+	}
+	public void setLastUpdateDate(Date lastUpdateDate) {
+		LastUpdateDate = lastUpdateDate;
+	}
+	public String getName() {
+		return Name;
+	}
+	public void setName(String name) {
+		Name = name;
+	}
+	public String getOwner() {
+		return Owner;
+	}
+	public void setOwner(String owner) {
+		Owner = owner;
+	}
+	public boolean isPrivate() {
+		return Private;
+	}
+	public void setPrivate(boolean private1) {
+		Private = private1;
+	}
+	public String getQuery() {
+		return Query;
+	}
+	public void setQuery(String query) {
+		Query = query;
+	}
+	public String getSubject() {
+		return Subject;
+	}
+	public void setSubject(String subject) {
+		Subject = subject;
+	}
+	public boolean isVisible() {
+		return Visible;
+	}
+	public void setVisible(boolean visible) {
+		Visible = visible;
+	}
+	public List<String> getDescription() {
+		return description;
+	}
+	public void setDescription(List<String> description) {
+		this.description = description;
+	}
+
+	public List<String> getDocumentsInBasket() {
+		return documentsInBasket;
+	}
+
+	public void setDocumentsInBasket(List<String> documentsInBasket) {
+		this.documentsInBasket = documentsInBasket;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result
+				+ ((Children == null) ? 0 : Children.hashCode());
+		result = prime * result + (Container ? 1231 : 1237);
+		result = prime * result + DocumentCount;
+		result = prime * result + ((Father == null) ? 0 : Father.hashCode());
+		result = prime * result + (Frozen ? 1231 : 1237);
+		result = prime * result
+				+ ((LastUpdateDate == null) ? 0 : LastUpdateDate.hashCode());
+		result = prime * result + ((Name == null) ? 0 : Name.hashCode());
+		result = prime * result + ((Owner == null) ? 0 : Owner.hashCode());
+		result = prime * result + (Private ? 1231 : 1237);
+		result = prime * result + ((Query == null) ? 0 : Query.hashCode());
+		result = prime * result + ((Subject == null) ? 0 : Subject.hashCode());
+		result = prime * result + (Visible ? 1231 : 1237);
+		result = prime * result
+				+ ((description == null) ? 0 : description.hashCode());
+		result = prime * result + ((iconUrl == null) ? 0 : iconUrl.hashCode());
+		result = prime
+				* result
+				+ ((retrievalCondition == null) ? 0 : retrievalCondition
+						.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Collection other = (Collection) obj;
+		if (Children == null) {
+			if (other.Children != null)
+				return false;
+		} else if (!Children.equals(other.Children))
+			return false;
+		if (Container != other.Container)
+			return false;
+		if (DocumentCount != other.DocumentCount)
+			return false;
+		if (Father == null) {
+			if (other.Father != null)
+				return false;
+		} else if (!Father.equals(other.Father))
+			return false;
+		if (Frozen != other.Frozen)
+			return false;
+		if (LastUpdateDate == null) {
+			if (other.LastUpdateDate != null)
+				return false;
+		} else if (!LastUpdateDate.equals(other.LastUpdateDate))
+			return false;
+		if (Name == null) {
+			if (other.Name != null)
+				return false;
+		} else if (!Name.equals(other.Name))
+			return false;
+		if (Owner == null) {
+			if (other.Owner != null)
+				return false;
+		} else if (!Owner.equals(other.Owner))
+			return false;
+		if (Private != other.Private)
+			return false;
+		if (Query == null) {
+			if (other.Query != null)
+				return false;
+		} else if (!Query.equals(other.Query))
+			return false;
+		if (Subject == null) {
+			if (other.Subject != null)
+				return false;
+		} else if (!Subject.equals(other.Subject))
+			return false;
+		if (Visible != other.Visible)
+			return false;
+		if (description == null) {
+			if (other.description != null)
+				return false;
+		} else if (!description.equals(other.description))
+			return false;
+		if (iconUrl == null) {
+			if (other.iconUrl != null)
+				return false;
+		} else if (!iconUrl.equals(other.iconUrl))
+			return false;
+		if (retrievalCondition == null) {
+			if (other.retrievalCondition != null)
+				return false;
+		} else if (!retrievalCondition.equals(other.retrievalCondition))
+			return false;
+		return true;
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeed.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeed.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeed.java	(revision 62097)
@@ -0,0 +1,60 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+import java.util.HashMap;
+
+import eu.dnetlib.domain.DriverResource;
+
+public class RSSFeed extends DriverResource {
+	private static final long serialVersionUID = -8055604767449235236L;
+	   
+	private String usedId;
+	private String queryCql;
+	private HashMap<String,Boolean> documentIds = new HashMap<String,Boolean>(); 
+	private Date lastTimeUsed;
+	
+    /**
+     * The default constructor sets the resourceKind to <b>RSSFeedDSResources</b>, 
+     * resourceType to <b>RSSFeedDSResourceType</b> and dateOfCreation to the current system date.
+     */
+    public RSSFeed() {
+        this.setResourceKind("RSSFeedDSResources");
+        this.setResourceType("RSSFeedDSResourceType");
+        this.setDateOfCreation(new Date());        
+    }
+
+	public HashMap<String, Boolean> getDocumentIds() {
+		return documentIds;
+	}
+
+	public void setDocumentIds(HashMap<String, Boolean> documentIds) {
+		this.documentIds = documentIds;
+	}
+
+	public Date getLastTimeUsed() {
+		return lastTimeUsed;
+	}
+
+	public void setLastTimeUsed(Date lastTimeUsed) {
+		this.lastTimeUsed = lastTimeUsed;
+	}
+
+	public String getQueryCql() {
+		return queryCql;
+	}
+
+	public void setQueryCql(String queryCql) {
+		this.queryCql = queryCql;
+	}
+
+	public String getUsedId() {
+		return usedId;
+	}
+
+	public void setUsedId(String usedId) {
+		this.usedId = usedId;
+	}
+        
+    
+    
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeedComparator.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeedComparator.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RSSFeedComparator.java	(revision 62097)
@@ -0,0 +1,12 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Comparator;
+
+public class RSSFeedComparator implements Comparator<RSSFeed> {
+
+	public int compare( RSSFeed o1, RSSFeed o2 ) {
+        return o1.getDateOfCreation().compareTo( o2.getDateOfCreation() );
+    }
+    	
+}
+
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Recommendation.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Recommendation.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Recommendation.java	(revision 62097)
@@ -0,0 +1,166 @@
+package eu.dnetlib.domain.functionality;
+
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import eu.dnetlib.domain.DriverResource;
+
+/**
+ * The domain object for the Recommendation resource data structure
+ *
+ */
+public class Recommendation extends DriverResource {
+
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = -8055604728449435236L;
+	
+	public static final String ANOUCHMENT_TYPE = "Announcement";
+    public static final String COMMUNITY_TYPE = "Community";
+    public static final String USER_TYPE = "USER";
+    public static final String QUERY_TYPE = "Query";
+    private String content = null;
+    private Date generationDate = null;
+    private Date expirationDate = null;
+    private String type = null;
+    private Set<String> communityIds = new HashSet<String>();
+    private Set<String> userIds = new HashSet<String>();
+    private boolean active;
+    private int index;
+    private boolean showTitle;
+    private String title;
+
+    /**
+     * The default constructor sets the resourceKind to <b>RecommendationDSResources</b>, 
+     * resourceType to <b>RecommendationDSResourceType</b> and dateOfCreation to the current system date.
+     */
+    public Recommendation() {
+        this.setResourceKind("RecommendationDSResources");
+        this.setResourceType("RecommendationDSResourceType");
+        this.setDateOfCreation(new Date());
+        index = 0;
+        active = true;
+        this.showTitle = true;
+        this.title = "";
+        this.content = "";
+        this.type = Recommendation.ANOUCHMENT_TYPE;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String t) {
+        this.type = t;
+    }
+
+    @Deprecated
+    public String getId() {
+        return this.getResourceId();
+    }
+
+    @Deprecated
+    public void setId(String id) {
+        this.setResourceId(id);
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String text) {
+        content = text;
+    }
+
+    public Date getExpirationDate() {
+        return expirationDate;
+    }
+
+    public void setExpirationDate(Date expirationDate) {
+        this.expirationDate = expirationDate;
+    }
+
+    public void setGenerationDate(Date generationDate) {
+        this.generationDate = generationDate;
+    }
+
+    public Date getGenerationDate() {
+        return generationDate;
+    }
+
+    public Set<String> getCommunityIds() {
+        return communityIds;
+    }
+
+    public void setCommunityIds(Set<String> communityIds) {
+        this.communityIds = communityIds;
+    }
+
+    public Set<String> getUserIds() {
+        return userIds;
+    }
+
+    public void setUserIds(Set<String> userIds) {
+        this.userIds = userIds;
+    }
+
+    /**
+     * @return the active
+     */
+    public boolean isActive() {
+        return active;
+    }
+
+    /**
+     * @param active the active to set
+     */
+    public void setActive(boolean active) {
+        this.active = active;
+    }
+
+    /**
+     * @return the index
+     */
+    public int getIndex() {
+        return index;
+    }
+
+    /**
+     * @param index the index to set
+     */
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+    public boolean isShowTitle() {
+        return showTitle;
+    }
+
+    public void setShowTitle(boolean showTitle) {
+        this.showTitle = showTitle;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+/*
+	@Override
+	public int compareTo(Object arg0) {
+		Recommendation r = (Recommendation)arg0;
+		if( r.getIndex() > this.getIndex() )
+			return -1;
+		else if ( r.getIndex() == this.getIndex() )
+			return 0;
+		else {
+			return 1;
+		}		
+	}
+	*/
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceServiceProfile.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceServiceProfile.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceServiceProfile.java	(revision 62097)
@@ -0,0 +1,16 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+import eu.dnetlib.domain.DriverServiceProfile;
+
+public class WebInterfaceServiceProfile extends DriverServiceProfile {
+
+	private static final long serialVersionUID = -6866028072976712196L;
+
+	public WebInterfaceServiceProfile() {
+		super("ServiceResources", "UserInterfaceServiceResourceType",
+				new Date());
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Announcement.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Announcement.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Announcement.java	(revision 62097)
@@ -0,0 +1,8 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.DriverResource;
+
+public class Announcement extends DriverResource {
+	private static final long serialVersionUID = 2243923727646205055L;
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CollectionComparator.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CollectionComparator.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CollectionComparator.java	(revision 62097)
@@ -0,0 +1,10 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Comparator;
+
+public class CollectionComparator implements Comparator<Collection> {
+
+	public int compare(Collection o1, Collection o2) {
+		return o1.getName().compareToIgnoreCase(o2.getName());
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceLayout.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceLayout.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/WebInterfaceLayout.java	(revision 62097)
@@ -0,0 +1,190 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import eu.dnetlib.domain.DriverResource;
+
+@SuppressWarnings("serial")
+public class WebInterfaceLayout extends DriverResource {
+
+	private String name;
+	private String mdFormatName;
+	private String indexLayoutName;
+	private String cssFile;
+	private Locale defaultLocale;
+	
+	private List<Locale> supportedLocales;
+	
+	private boolean viewCollections;
+	private boolean viewCommunities;
+	private boolean viewRepositories;
+	private boolean viewAnnouncements;
+	private boolean viewUserProfile;
+	private boolean viewSimilarDocuments;
+	private boolean viewEPublications;
+	
+	private List<Searchable> searchFields;
+	
+	private List<String> baseCollections;
+	
+	private Map<String, DocumentDescription> documentDescriptions;
+	
+	public WebInterfaceLayout(String name, 
+			String mdFormatName, String indexLayoutName) {
+		super();
+		this.name = name;
+		this.mdFormatName = mdFormatName;
+		this.indexLayoutName = indexLayoutName;
+		this.searchFields = new ArrayList<Searchable>();
+		
+		viewCollections = true;
+		viewCommunities = true;
+		viewRepositories = true;
+		viewAnnouncements = true;
+		viewSimilarDocuments = true;
+		viewUserProfile = true;
+		setViewEPublications(true);
+		setDocumentDescriptions(new HashMap<String, DocumentDescription>());
+		
+		baseCollections = new ArrayList<String>();
+		supportedLocales = new ArrayList<Locale>();
+		
+		this.setResourceKind("WebInterfaceLayoutResources");
+		this.setResourceType("WebInterfaceLayoutResourceType");
+		this.setDateOfCreation(new Date());
+	}
+
+	public String getIndexLayoutName() {
+		return indexLayoutName;
+	}
+
+	public void setIndexLayoutName(String indexLayoutName) {
+		this.indexLayoutName = indexLayoutName;
+	}
+
+	public String getMdFormatName() {
+		return mdFormatName;
+	}
+
+	public void setMdFormatName(String mdFormatName) {
+		this.mdFormatName = mdFormatName;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public List<Searchable> getSearchFields() {
+		return searchFields;
+	}
+
+	public void setSearchFields(List<Searchable> searchFields) {
+		this.searchFields = searchFields;
+	}
+
+	public String getCssFile() {
+		return cssFile;
+	}
+
+	public void setCssFile(String cssFile) {
+		this.cssFile = cssFile;
+	}
+
+	public void setBaseCollections(List<String> baseCollections) {
+		this.baseCollections = baseCollections;
+	}
+
+	public List<String> getBaseCollections() {
+		return baseCollections;
+	}
+
+	public boolean isViewCollections() {
+		return viewCollections;
+	}
+
+	public void setViewCollections(boolean viewCollections) {
+		this.viewCollections = viewCollections;
+	}
+
+	public boolean isViewCommunities() {
+		return viewCommunities;
+	}
+
+	public void setViewCommunities(boolean viewCommunities) {
+		this.viewCommunities = viewCommunities;
+	}
+
+	public boolean isViewRepositories() {
+		return viewRepositories;
+	}
+
+	public void setViewRepositories(boolean viewRepositories) {
+		this.viewRepositories = viewRepositories;
+	}
+
+	public boolean isViewAnnouncements() {
+		return viewAnnouncements;
+	}
+
+	public void setViewAnnouncements(boolean viewAnnouncements) {
+		this.viewAnnouncements = viewAnnouncements;
+	}
+
+	public Map<String, DocumentDescription> getDocumentDescriptions() {
+		return documentDescriptions;
+	}
+
+	public void setDocumentDescriptions(
+			Map<String, DocumentDescription> documentDescriptions) {
+		this.documentDescriptions = documentDescriptions;
+	}
+
+	public void setViewUserProfile(boolean viewUserProfile) {
+		this.viewUserProfile = viewUserProfile;
+	}
+
+	public boolean isViewUserProfile() {
+		return viewUserProfile;
+	}
+
+	public void setViewSimilarDocuments(boolean viewSimilarDocuments) {
+		this.viewSimilarDocuments = viewSimilarDocuments;
+	}
+
+	public boolean isViewSimilarDocuments() {
+		return viewSimilarDocuments;
+	}
+
+	public void setDefaultLocale(Locale defaultLocale) {
+		this.defaultLocale = defaultLocale;
+	}
+
+	public Locale getDefaultLocale() {
+		return defaultLocale;
+	}
+
+	public void setSupportedLocales(List<Locale> supportedLocales) {
+		this.supportedLocales = supportedLocales;
+	}
+
+	public List<Locale> getSupportedLocales() {
+		return supportedLocales;
+	}
+
+	public void setViewEPublications(boolean viewEPublications) {
+		this.viewEPublications = viewEPublications;
+	}
+
+	public boolean isViewEPublications() {
+		return viewEPublications;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/InternalUrlDisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/InternalUrlDisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/InternalUrlDisplayType.java	(revision 62097)
@@ -0,0 +1,45 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public class InternalUrlDisplayType extends DriverUrlDisplayType{
+	
+	public InternalUrlDisplayType(String field, Map<Locale, String> descriptionMap, 
+			String action, String parameter) {
+		super(field, descriptionMap, action, parameter);
+	}
+
+/*	private StringBuilder generateHref(String fieldValue, StringBuilder builder) {
+		return builder.append("<a href=\"").append(this.getAction())
+						.append(".action?").append(this.getParameter())
+						.append("=").append(fieldValue).append("\">");
+	}
+
+	@Override
+	public int getDisplayMessage(StringBuilder builder, Document document, 
+			String fieldValue) {
+		String finalValue = replaceFieldValueExpression(document,
+				getDescription(), fieldValue);
+		builder = generateHref(fieldValue, builder);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+			
+	}
+
+	@Override
+	int getDisplayMessage(StringBuilder builder, Document document,
+			String fieldValue, String secondaryLink) {
+		String finalValue = replaceFieldValueExpression(document,
+				secondaryLink, fieldValue);
+		builder = generateHref(fieldValue, builder);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+		
+	}
+*/
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentExternalUrlDisplayType.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentExternalUrlDisplayType.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/DocumentExternalUrlDisplayType.java	(revision 62097)
@@ -0,0 +1,56 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Locale;
+import java.util.Map;
+
+public class DocumentExternalUrlDisplayType extends ExternalUrlDisplayType{
+
+	public DocumentExternalUrlDisplayType(String field, Map<Locale, String> descriptionMap) {
+		super(field, descriptionMap);
+	}
+	
+/*	private StringBuilder generateHref(String fieldValue, StringBuilder builder,
+			Document document) {
+		String encodedFieldValue = null;
+		try {
+			encodedFieldValue = URLEncoder.encode(fieldValue, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			encodedFieldValue = fieldValue;
+		}
+
+		return builder.append("<a class=\"externallink\" href=\"").append(this.getAction())
+						.append(".action?").append(this.getParameter())
+						.append("=").append(encodedFieldValue)
+						.append("&docId=").append(document.getFieldValues("id").get(0))
+						.append("\" target=\"_blank\"").append(">");
+	}
+	
+	@Override
+	public int getDisplayMessage(StringBuilder builder, Document document, 
+			String fieldValue) {
+		String finalValue = replaceFieldValueExpression(document,
+				getDescription(), fieldValue);
+		builder = generateHref(fieldValue, builder, document);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+		
+	}
+	
+	public int getDisplayMessage(StringBuilder builder, Document document, 
+			String fieldValue, String secondaryLink) {
+		
+		String finalValue = replaceFieldValueExpression(document,
+				secondaryLink, fieldValue);
+		builder = generateHref(fieldValue, builder, document);
+		builder.append(finalValue);
+		builder.append("</a>");
+
+		return finalValue.length();
+		
+	}
+*/	
+}
+
+
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SecureDriverResource.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SecureDriverResource.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SecureDriverResource.java	(revision 62097)
@@ -0,0 +1,42 @@
+package eu.dnetlib.domain;
+
+import eu.dnetlib.domain.enabling.SecurityProfile;
+
+public abstract class SecureDriverResource extends DriverResource {
+	private SecurityProfile securityProfile = new SecurityProfile();
+	private static final long serialVersionUID = -3196808530359828895L;
+
+	public SecurityProfile getSecurityProfile() {
+		return securityProfile;
+	}
+
+	public void setSecurityProfile(SecurityProfile securityProfile) {
+		this.securityProfile = securityProfile;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result
+				+ ((securityProfile == null) ? 0 : securityProfile.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		SecureDriverResource other = (SecureDriverResource) obj;
+		if (securityProfile == null) {
+			if (other.securityProfile != null)
+				return false;
+		} else if (!securityProfile.equals(other.securityProfile))
+			return false;
+		return true;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/SearchCriteria.java	(revision 62097)
@@ -0,0 +1,9 @@
+package eu.dnetlib.domain;
+
+/**
+ * This interface is used to define search criteria in order to search for resources in the IS_Lookup.
+ * Provides only one method, <code>matches(Object)</code>
+ */
+public interface SearchCriteria {
+	public boolean matches(Object o);
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/deploy.info
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/deploy.info	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/deploy.info	(revision 62097)
@@ -0,0 +1,10 @@
+{
+  "type_source": "SVN", 
+  "goal": "package -U -T 4C source:jar", 
+  "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet45/modules/uoa-domain/trunk", 
+  "deploy_repository": "dnet45-snapshots", 
+  "version": "4", 
+  "mail": "antleb@di.uoa.gr, kiatrop@di.uoa.gr", 
+  "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots", 
+  "name": "uoa-domain"
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/RecommendationSearchCriteria.java	(revision 62097)
@@ -0,0 +1,198 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+
+public class RecommendationSearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+	
+	private Date expiredBefore = null;
+	private Date expiredAfter = null;
+	private String recommendationType = null;
+	private String communityId = null;
+	private String userId = null;
+	private Boolean active = null;
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+
+	public String getCommunityId() {
+		return communityId;
+	}
+
+	public void setCommunityId(String communityId) {
+		this.communityId = communityId;
+	}
+
+	public String getRecommendationType() {
+		return recommendationType;
+	}
+
+	public void setRecommendationType(String recommendationType) {
+		this.recommendationType = recommendationType;
+	}
+
+	public Date getExpiredAfter() {
+		return expiredAfter;
+	}
+
+	public void setExpiredAfter(Date expiredAfter) {
+		this.expiredAfter = expiredAfter;
+	}
+
+	public Date getExpiredBefore() {
+		return expiredBefore;
+	}
+
+	public void setExpiredBefore(Date expiredBefore) {
+		this.expiredBefore = expiredBefore;
+	}
+
+	public boolean matches(Object o) {
+		Recommendation recommendation = (Recommendation) o;
+		
+		if (this.getCommunityId() != null) {
+			if (recommendation.getCommunityIds() == null || 
+					recommendation.getCommunityIds().size() == 0)
+				return false;
+			else {
+				boolean found = false;
+				
+				for (String id:recommendation.getCommunityIds()) {
+					if (id.equals(this.getCommunityId())) {
+						found = true;
+						
+						break;
+					}
+				}
+				
+				if (!found)
+					return false;
+			}
+		}
+		
+		if (this.getUserId() != null) {
+			if (recommendation.getUserIds() == null || 
+					recommendation.getUserIds().size() == 0)
+				return false;
+			else {
+				boolean found = false;
+				
+				for (String id:recommendation.getUserIds()) {
+					if (id.equals(this.getUserId())) {
+						found = true;
+						
+						break;
+					}
+				}
+				
+				if (!found)
+					return false;
+			}
+		}
+		
+		if (this.getExpiredAfter() != null) {
+			if (recommendation.getExpirationDate() == null || 
+					recommendation.getExpirationDate().before(this.getExpiredAfter()))
+				return false;
+		}
+		
+		if (this.getExpiredBefore() != null) {
+			if (recommendation.getExpirationDate() == null || 
+					recommendation.getExpirationDate().after(this.getExpiredBefore()))
+				return false;
+		}
+		
+		if (this.getRecommendationType() != null) {
+			if (recommendation.getType() == null || 
+					!recommendation.getType().toLowerCase().equals(this.getRecommendationType().toLowerCase()))
+				return false;
+		}
+		
+		if (this.active != null) {
+			if (recommendation.isActive() != this.active) {
+				return false;
+			}
+		}
+		
+		return true;
+	}
+	
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result + ((active == null) ? 0 : active.hashCode());
+		result = prime * result
+				+ ((communityId == null) ? 0 : communityId.hashCode());
+		result = prime * result
+				+ ((expiredAfter == null) ? 0 : expiredAfter.hashCode());
+		result = prime * result
+				+ ((expiredBefore == null) ? 0 : expiredBefore.hashCode());
+		result = prime
+				* result
+				+ ((recommendationType == null) ? 0 : recommendationType
+						.hashCode());
+		result = prime * result + ((userId == null) ? 0 : userId.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		RecommendationSearchCriteria other = (RecommendationSearchCriteria) obj;
+		if (active == null) {
+			if (other.active != null)
+				return false;
+		} else if (!active.equals(other.active))
+			return false;
+		if (communityId == null) {
+			if (other.communityId != null)
+				return false;
+		} else if (!communityId.equals(other.communityId))
+			return false;
+		if (expiredAfter == null) {
+			if (other.expiredAfter != null)
+				return false;
+		} else if (!expiredAfter.equals(other.expiredAfter))
+			return false;
+		if (expiredBefore == null) {
+			if (other.expiredBefore != null)
+				return false;
+		} else if (!expiredBefore.equals(other.expiredBefore))
+			return false;
+		if (recommendationType == null) {
+			if (other.recommendationType != null)
+				return false;
+		} else if (!recommendationType.equals(other.recommendationType))
+			return false;
+		if (userId == null) {
+			if (other.userId != null)
+				return false;
+		} else if (!userId.equals(other.userId))
+			return false;
+		return true;
+	}
+
+	public void setActive(Boolean active) {
+		this.active = active;
+	}
+
+	public Boolean getActive() {
+		return active;
+	}
+}
+
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityComparator.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityComparator.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityComparator.java	(revision 62097)
@@ -0,0 +1,23 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Comparator;
+
+/**
+ * This class implements a comparator for communities.
+ * @author thanos@di.uoa.gr
+ *
+ */
+public class CommunityComparator implements Comparator<Community> {
+
+	/**
+	 * Compare two communities by name ignoring case.
+	 * @param community0 the first community to be compared
+	 * @param community1 the second community to be compared
+	 * @return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second
+	 */
+	@Override
+	public int compare(Community community0, Community community1) {
+		return community0.getName().compareToIgnoreCase(community1.getName());
+	}
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/QueryHash.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/QueryHash.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/QueryHash.java	(revision 62097)
@@ -0,0 +1,66 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+import java.util.Hashtable;
+
+import eu.dnetlib.domain.DriverResource;
+
+@SuppressWarnings("serial")
+public class QueryHash extends DriverResource {
+	private String userId;
+	private int hashValue;
+	private String cqlQuery;	
+	private Hashtable<String, Boolean> queryResults;
+	
+	public QueryHash() {
+		this.setResourceKind("QueryHashDSResources");
+		this.setResourceType("QueryHashDSResourceType");
+		this.setDateOfCreation( new Date() );
+		userId = "";
+		hashValue = -1;
+		this.queryResults = new Hashtable<String,Boolean >();
+	}
+	
+	@Deprecated
+	public String getId() {		
+		return this.getResourceId();
+	}
+
+	@Deprecated
+	public void setId( String id ) {
+		this.setResourceId(id);
+	}
+	
+	public String getCqlQuery() {
+		return this.cqlQuery;
+	}
+	
+	public void setCqlQuery( String query ) {
+		this.cqlQuery = query;
+	}
+	
+	public String getUserId() {
+		return this.userId;
+	}
+
+	public void setUserId( String id ) {
+		this.userId = id;
+	}
+
+	public int getHashValue() {
+		return this.hashValue;
+	}
+
+	public void setHashValue( int value ) {
+		this.hashValue = value;
+	}
+
+	public Hashtable<String, Boolean> getQueryResults() {
+		return queryResults;
+	}
+
+	public void setQueryResults(Hashtable<String, Boolean> queryResults) {
+		this.queryResults = queryResults;
+	}
+}
+
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SavedQuery.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SavedQuery.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/SavedQuery.java	(revision 62097)
@@ -0,0 +1,117 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SavedQuery {
+	private int id = 0;
+	private String cqlText = null;
+	private String refineText = null;
+	private List<String> collectionIds = new ArrayList<String>();
+	private List<String> communityIds = new ArrayList<String>();
+	private List<String> hashValues = new ArrayList<String>();
+	private boolean alertOnChange = false;
+	
+	public boolean isAlertOnChange() {
+		return alertOnChange;
+	}
+	public void setAlertOnChange(boolean alertOnChange) {
+		this.alertOnChange = alertOnChange;
+	}
+
+	public List<String> getHashValues() {
+		return hashValues;
+	}
+	public void setHashValues(List<String> hashValues) {
+		this.hashValues = hashValues;
+	}
+	
+	public int getId() {
+		return id;
+	}
+	public void setId(int id) {
+		this.id = id;
+	}
+	
+	public List<String> getCollectionIds() {
+		return collectionIds;
+	}
+	public void setCollectionIds(List<String> collectionIds) {
+		this.collectionIds = collectionIds;
+	}
+	public List<String> getCommunityIds() {
+		return communityIds;
+	}
+	public void setCommunityIds(List<String> communityIds) {
+		this.communityIds = communityIds;
+	}
+	public String getCqlText() {
+		return cqlText;
+	}
+	public void setCqlText(String cqlText) {
+		this.cqlText = cqlText;
+	}
+	public String getRefineText() {
+		return refineText;
+	}
+	public void setRefineText(String refineText) {
+		this.refineText = refineText;
+	}
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + (alertOnChange ? 1231 : 1237);
+		result = prime * result
+				+ ((collectionIds == null) ? 0 : collectionIds.hashCode());
+		result = prime * result
+				+ ((communityIds == null) ? 0 : communityIds.hashCode());
+		result = prime * result + ((cqlText == null) ? 0 : cqlText.hashCode());
+		result = prime * result
+				+ ((hashValues == null) ? 0 : hashValues.hashCode());
+		result = prime * result + id;
+		result = prime * result
+				+ ((refineText == null) ? 0 : refineText.hashCode());
+		return result;
+	}
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		SavedQuery other = (SavedQuery) obj;
+		if (alertOnChange != other.alertOnChange)
+			return false;
+		if (collectionIds == null) {
+			if (other.collectionIds != null)
+				return false;
+		} else if (!collectionIds.equals(other.collectionIds))
+			return false;
+		if (communityIds == null) {
+			if (other.communityIds != null)
+				return false;
+		} else if (!communityIds.equals(other.communityIds))
+			return false;
+		if (cqlText == null) {
+			if (other.cqlText != null)
+				return false;
+		} else if (!cqlText.equals(other.cqlText))
+			return false;
+		if (hashValues == null) {
+			if (other.hashValues != null)
+				return false;
+		} else if (!hashValues.equals(other.hashValues))
+			return false;
+		if (id != other.id)
+			return false;
+		if (refineText == null) {
+			if (other.refineText != null)
+				return false;
+		} else if (!refineText.equals(other.refineText))
+			return false;
+		return true;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Link.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Link.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/Link.java	(revision 62097)
@@ -0,0 +1,35 @@
+package eu.dnetlib.domain.functionality;
+
+public class Link {
+	
+	public enum Type { SEARCH, EXTERNAL, DRIVER };
+	
+	private Type type = null;
+	private String description = null;
+	private String value = null;
+	
+	public String getDescription() {
+		return description;
+	}
+	
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+	
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	public Type getType() {
+		return type;
+	}
+	
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/LayoutField.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/LayoutField.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/LayoutField.java	(revision 62097)
@@ -0,0 +1,59 @@
+package eu.dnetlib.domain.functionality;
+
+public class LayoutField {
+	
+	private String name = null;
+	private String xpath = null;
+	private String type = null;
+	private boolean indexable = false;
+	private boolean result = false;
+	private boolean stat = false;
+	private boolean tokenizable = false;
+	
+	public LayoutField() {
+		super();
+	}
+	
+	public boolean isIndexable() {
+		return indexable;
+	}
+	public void setIndexable(boolean indexable) {
+		this.indexable = indexable;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public boolean isResult() {
+		return result;
+	}
+	public void setResult(boolean result) {
+		this.result = result;
+	}
+	public boolean isStat() {
+		return stat;
+	}
+	public void setStat(boolean stat) {
+		this.stat = stat;
+	}
+	public boolean isTokenizable() {
+		return tokenizable;
+	}
+	public void setTokenizable(boolean tokenizable) {
+		this.tokenizable = tokenizable;
+	}
+	public String getType() {
+		return type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+	public String getXpath() {
+		return xpath;
+	}
+	public void setXpath(String xpath) {
+		this.xpath = xpath;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityServiceProfile.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityServiceProfile.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/CommunityServiceProfile.java	(revision 62097)
@@ -0,0 +1,15 @@
+package eu.dnetlib.domain.functionality;
+
+import java.util.Date;
+
+import eu.dnetlib.domain.DriverServiceProfile;
+
+public class CommunityServiceProfile extends DriverServiceProfile {
+
+	private static final long serialVersionUID = -7681096203717237115L;
+
+	public CommunityServiceProfile() {
+		super("ServiceResources", "CommunityServiceResourceType", new Date());
+	}
+	
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AnnouncementSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AnnouncementSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/functionality/AnnouncementSearchCriteria.java	(revision 62097)
@@ -0,0 +1,13 @@
+package eu.dnetlib.domain.functionality;
+
+import eu.dnetlib.domain.SearchCriteria;
+import eu.dnetlib.domain.SearchCriteriaImpl;
+
+public class AnnouncementSearchCriteria extends SearchCriteriaImpl implements
+		SearchCriteria {
+
+	public boolean matches(Object o) {
+		throw new UnsupportedOperationException();
+	}
+
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/EPR.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/EPR.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/EPR.java	(revision 62097)
@@ -0,0 +1,92 @@
+package eu.dnetlib.domain;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class EPR {
+	/** The w3c epr. Kept to avoid parsing/creating it if not needed. */
+	private String epr = null;
+	
+	/** The reference parameters of the w3c epr */
+	private Map<String, String> parameters = new HashMap<String, String>();
+	
+	/** The address of the w3c epr */
+	private String address = null;
+	
+	/** Service name of the w3c epr */
+	private String serviceName = null;
+	
+	/** Endpoint name of the w3c epr */
+	private String endpointName = null;
+	
+	public String getParameter(String name) {
+		return parameters.get(name);
+	}
+	
+	public void setParameter(String name, String value) {
+		this.epr = null;
+		this.parameters.put(name, value);
+	}
+	
+	public String[] getParameterNames() {
+		return parameters.keySet().toArray(new String[] {});
+	}
+	
+	public void removeParameter(String name) {
+		this.epr = null;
+		
+		this.parameters.remove(name);
+	}
+	
+	public void clearParameters() {
+		this.epr = null;
+		
+		this.parameters.clear();
+	}
+
+	public String getEpr() {
+		return epr;
+	}
+
+	public void setEpr(String epr) {
+		this.epr = epr;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.epr = null;
+		
+		this.address = address;
+	}
+	
+	public String getServiceName() {
+		return serviceName;
+	}
+
+	public void setServiceName(String serviceName) {
+		this.serviceName = serviceName;
+	}
+
+	public String getEndpointName() {
+		return endpointName;
+	}
+
+	public void setEndpointName(String endpointName) {
+		this.endpointName = endpointName;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder builder = new StringBuilder();
+		
+		builder.append("[address: ").append(address).append(", serviceName: ");
+		builder.append(serviceName).append(", endpointName: ");
+		builder.append(endpointName).append(", parameters: ");
+		builder.append(parameters.toString()).append("]");
+		
+		return builder.toString();
+	}
+}
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverServiceProfileSearchCriteria.java
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverServiceProfileSearchCriteria.java	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/java/eu/dnetlib/domain/DriverServiceProfileSearchCriteria.java	(revision 62097)
@@ -0,0 +1,67 @@
+package eu.dnetlib.domain;
+
+
+
+
+public class DriverServiceProfileSearchCriteria extends SearchCriteriaImpl
+	implements SearchCriteria {
+	
+	private String resourceType = null;
+	private String resourceKind = null;
+	private Boolean includePending = null;
+	private String parentId = null;
+	private String parentType = null;
+	private String resourceUri = null;
+
+	public String getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	public String getParentType() {
+		return parentType;
+	}
+
+	public void setParentType(String parentType) {
+		this.parentType = parentType;
+	}
+
+	public String getResourceUri() {
+		return resourceUri;
+	}
+
+	public void setResourceUri(String resourceUri) {
+		this.resourceUri = resourceUri;
+	}
+
+	public Boolean getIncludePending() {
+		return includePending;
+	}
+
+	public void setIncludePending(Boolean includePending) {
+		this.includePending = includePending;
+	}
+
+	public String getResourceType() {
+		return resourceType;
+	}
+
+	public void setResourceType(String serviceType) {
+		this.resourceType = serviceType;
+	}
+
+	public boolean matches(Object o) {
+		throw new UnsupportedOperationException();
+	}
+
+	public String getResourceKind() {
+		return resourceKind;
+	}
+
+	public void setResourceKind(String resourceKind) {
+		this.resourceKind = resourceKind;
+	}
+}
Index: modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/resources/eu/dnetlib/repoManagerDomain.gwt.xml
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/resources/eu/dnetlib/repoManagerDomain.gwt.xml	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0/src/main/resources/eu/dnetlib/repoManagerDomain.gwt.xml	(revision 62097)
@@ -0,0 +1,4 @@
+<module>
+    <inherits name="com.google.gwt.user.User"/>
+    <source path="domain"/>
+</module>
\ No newline at end of file
Index: modules/uoa-domain/tags/uoa-domain-2.1.0
===================================================================
--- modules/uoa-domain/tags/uoa-domain-2.1.0	(nonexistent)
+++ modules/uoa-domain/tags/uoa-domain-2.1.0	(revision 62097)

Property changes on: modules/uoa-domain/tags/uoa-domain-2.1.0
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,7 ##
+*.iml
+.project
+.classpath
+target
+.settings
+*.iml
+.idea
