Index: modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/plugins/ProtocolDescriptor.java
===================================================================
--- modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/plugins/ProtocolDescriptor.java	(nonexistent)
+++ modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/plugins/ProtocolDescriptor.java	(revision 45407)
@@ -0,0 +1,39 @@
+package eu.dnetlib.msro.workers.aggregation.collect.plugins;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.springframework.beans.factory.annotation.Required;
+
+@XmlRootElement
+public class ProtocolDescriptor {
+
+	private String name;
+	private List<ProtocolParameter> params = new ArrayList<ProtocolParameter>();
+
+	public ProtocolDescriptor() {
+	}
+
+	public ProtocolDescriptor(final String name, final List<ProtocolParameter> params) {
+		this.name = name;
+		this.params = params;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	@Required
+	public void setName(final String name) {
+		this.name = name;
+	}
+
+	public List<ProtocolParameter> getParams() {
+		return params;
+	}
+
+	public void setParams(final List<ProtocolParameter> params) {
+		this.params = params;
+	}
+}
Index: modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/plugins/ProtocolParameter.java
===================================================================
--- modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/plugins/ProtocolParameter.java	(nonexistent)
+++ modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/plugins/ProtocolParameter.java	(revision 45407)
@@ -0,0 +1,84 @@
+package eu.dnetlib.msro.workers.aggregation.collect.plugins;
+
+import org.springframework.beans.factory.annotation.Required;
+
+import eu.dnetlib.msro.workers.aggregation.collect.functions.NullFunction;
+import eu.dnetlib.rmi.data.ProtocolParameterType;
+import eu.dnetlib.rmi.data.functions.ParamValuesFunction;
+
+public class ProtocolParameter {
+
+	private String name;
+	private boolean optional = false;
+	private ProtocolParameterType type = ProtocolParameterType.TEXT;
+	private String regex = null;
+	private Class<? extends ParamValuesFunction> populateFunction = NullFunction.class;
+	private boolean functionPopulated = false;
+
+	public ProtocolParameter() {}
+
+	public ProtocolParameter(final String name, final boolean optional, final ProtocolParameterType type, final String regex) {
+		this(name, optional, type, regex, null);
+	}
+
+	public ProtocolParameter(final String name, final boolean optional, final ProtocolParameterType type, final String regex,
+			final Class<? extends ParamValuesFunction> populateFunction) {
+		this.name = name;
+		this.optional = optional;
+		this.type = type;
+		this.regex = regex;
+		this.populateFunction = populateFunction;
+		functionPopulated = this.populateFunction != null;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	@Required
+	public void setName(final String name) {
+		this.name = name;
+	}
+
+	public boolean isOptional() {
+		return optional;
+	}
+
+	public void setOptional(final boolean optional) {
+		this.optional = optional;
+	}
+
+	public ProtocolParameterType getType() {
+		return type;
+	}
+
+	public void setType(final ProtocolParameterType type) {
+		this.type = type;
+	}
+
+	public String getRegex() {
+		return regex;
+	}
+
+	public void setRegex(final String regex) {
+		this.regex = regex;
+	}
+
+	public Class<? extends ParamValuesFunction> getPopulateFunction() {
+		return populateFunction;
+	}
+
+	public void setPopulateFunction(final Class<? extends ParamValuesFunction> populateFunction) {
+		this.populateFunction = populateFunction;
+		functionPopulated = this.populateFunction != null;
+	}
+
+	public boolean isFunctionPopulated() {
+		return functionPopulated;
+	}
+
+	public void setFunctionPopulated(final boolean functionPopulated) {
+		this.functionPopulated = functionPopulated;
+	}
+
+}
Index: modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/functions/NullFunction.java
===================================================================
--- modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/functions/NullFunction.java	(nonexistent)
+++ modules/dnet-simple-aggregation-worker/trunk/src/main/java/eu/dnetlib/msro/workers/aggregation/collect/functions/NullFunction.java	(revision 45407)
@@ -0,0 +1,17 @@
+package eu.dnetlib.msro.workers.aggregation.collect.functions;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import eu.dnetlib.rmi.data.ProtocolParameterValue;
+import eu.dnetlib.rmi.data.functions.ParamValuesFunction;
+
+public class NullFunction implements ParamValuesFunction {
+
+	@Override
+	public List<ProtocolParameterValue> findValues(final String baseUrl, final Map<String, String> params) {
+		return new ArrayList<>();
+	}
+
+}
