- From: Florent Batard via cvs-syncmail <cvsmail@w3.org>
- Date: Thu, 17 Jul 2008 13:40:26 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2006/unicorn/org/w3c/unicorn/tasklist
In directory hutz:/tmp/cvs-serv1523/org/w3c/unicorn/tasklist
Modified Files:
TaskListUnmarshallerBeans.java
Log Message:
Update of the unmarshaller for XMLBeans and level of execution
Index: TaskListUnmarshallerBeans.java
===================================================================
RCS file: /sources/public/2006/unicorn/org/w3c/unicorn/tasklist/TaskListUnmarshallerBeans.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- TaskListUnmarshallerBeans.java 16 Jul 2008 13:47:46 -0000 1.1
+++ TaskListUnmarshallerBeans.java 17 Jul 2008 13:40:24 -0000 1.2
@@ -1,4 +1,4 @@
-package org.w3c.unicorn.tasklist;
+ package org.w3c.unicorn.tasklist;
import java.io.IOException;
import java.net.URL;
@@ -12,23 +12,22 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.xmlbeans.impl.tool.XMLBean;
-import org.w3.unicorn.tasklist.ParamType;
+import org.apache.xmlbeans.XmlException;
+import org.w3.unicorn.tasklist.MappedType;
import org.w3.unicorn.tasklist.ParameterType;
import org.w3.unicorn.tasklist.ParametersType;
+import org.w3.unicorn.tasklist.TInputMethod;
import org.w3.unicorn.tasklist.TParamType;
import org.w3.unicorn.tasklist.TUi;
import org.w3.unicorn.tasklist.TaskType;
import org.w3.unicorn.tasklist.TasklistType;
import org.w3.unicorn.tasklist.ValueType;
-import org.w3.unicorn.tasklist.impl.TaskTypeImpl;
import org.w3c.unicorn.contract.CallMethod;
import org.w3c.unicorn.contract.CallParameter;
import org.w3c.unicorn.contract.EnumInputMethod;
import org.w3c.unicorn.contract.InputMethod;
import org.w3c.unicorn.contract.Observer;
import org.w3c.unicorn.exceptions.ParameterException;
-
import org.w3c.unicorn.tasklist.parameters.Mapping;
import org.w3c.unicorn.tasklist.parameters.Parameter;
import org.w3c.unicorn.tasklist.parameters.ParameterFactory;
@@ -43,13 +42,12 @@
private static final Log logger = LogFactory.getLog("org.w3c.unicorn.tasklist");
- protected Unmarshaller aUnmarshaller;
/**
* The tasklist corresponding to the xml file
*/
- private TLTNode taskRoot;
+ private Map<String, org.w3c.unicorn.tasklist.Task> mapOfTask;
/**
* The observers' list used to check some constraints on the tasks
@@ -61,7 +59,6 @@
public TaskListUnmarshallerBeans(final Map<String, Observer> mapOfObserver) {
TaskListUnmarshallerBeans.logger.trace("Constructor");
- this.taskRoot = new TLTNode();
this.mapOfObserver = mapOfObserver;
}
@@ -97,7 +94,7 @@
final TParamType.Enum aParamType = aParameterBeans.getType();
- Parameter aParameter = null; // à la base : Parameter
+ Parameter aParameter = null;
if (sObserver != null && !"".equals(sObserver)) {
aParameter = getParameterFromObserver(
@@ -107,12 +104,12 @@
sDefaultValues,
aParamType);
}
- /*else {
+ else {
// Values
final Map<String, Value> mapOfValue = new LinkedHashMap<String, Value>();
for (final ValueType aValue :
- aParameter.getValue()) {
+ aParameterBeans.getValueArray()) {
// name of the value
String sValueName = aValue.getName();
@@ -122,8 +119,8 @@
// Mappings of the value
final Map<String, List<Mapping>> mapOfMapping = new LinkedHashMap<String, List<Mapping>>();
- for (final Mapped aMappedJAXB : aValueJAXB.getMapped()) {
- final Mapping aMapping = this.createMapping(aMappedJAXB);
+ for (final MappedType aMappedBeans : aValue.getMappedArray()) {
+ final Mapping aMapping = this.createMapping(aMappedBeans);
if (aMapping != null) {
final String sObs = aMapping.getObserver().getID();
List<Mapping> listOfMapping = mapOfMapping.get(sObs);
@@ -142,12 +139,12 @@
}
aParameter = this.createParameter(
- aTParamType,
+ aParamType,
sName,
aTUi,
sDefaultValues,
mapOfValue);
- }*/
+ }
if (aParameter != null) {
aTaskCurrent.addParameter(aParameter);
@@ -158,7 +155,94 @@
}
-
+ /**
+ * Creates a usable mapping from a JAXB-generated one.
+ * @param aMappedJAXB the JAXB-generated mapping
+ * @return the created mapping
+ */
+ private Mapping createMapping (final MappedType aMapped) {
+ TaskListUnmarshallerBeans.logger.trace("createMapping");
+
+ // The mapped observer
+ final String sMappingObserver = aMapped.getObserver();
+ final Observer aObserverMapped = this.mapOfObserver.get(sMappingObserver);
+
+ if (aObserverMapped == null) {
+ TaskListUnmarshallerBeans.logger.error(
+ "The observer " + sMappingObserver +
+ " does not seem to exist... Skipping mapping.");
+ return null;
+ }
+
+ // the mapped parameter
+ final String sMappingParam = aMapped.getParam();
+ // the value mapped
+ String sMappingValue = aMapped.getValue();
+ if (sMappingValue == null) {
+ sMappingValue = "";
+ }
+
+ // TODO check if is useful to add input method in mapping
+ final List<EnumInputMethod> listOfEnumInputMethod = new ArrayList<EnumInputMethod>();
+
+ // The list of mapped input methods
+ final List<TInputMethod.Enum> listOfTInputMethodBeans = aMapped.getInputmethod();
+
+ // by default a parameter is mapped to all input methods
+ if (listOfTInputMethodBeans.size() == 0) {
+ listOfTInputMethodBeans.add(TInputMethod.DIRECT);
+ listOfTInputMethodBeans.add(TInputMethod.FILE);
+ listOfTInputMethodBeans.add(TInputMethod.URI);
+ }
+
+ /*
+ * For each JAXB input method, we check that the mapped observer:
+ * - can handle this input method
+ * - has a parameter with the corresponding name for this input
+ * method
+ * - can handle this value for this parameter
+ */
+
+ for (final TInputMethod.Enum aTInputMethod : listOfTInputMethodBeans) {
+ final EnumInputMethod aEnumInputMethod;
+ aEnumInputMethod = TaskListUnmarshallerBeans.getEnumInputMethod(aTInputMethod);
+ // the observer can handle this input method
+ if (aObserverMapped.getInputMethod(aEnumInputMethod) == null) {
+ TaskListUnmarshallerBeans.logger.warn(
+ sMappingObserver + " does not support " +
+ aEnumInputMethod.value() + " input method.");
+ continue;
+ }
+ final CallParameter aCallParameterMapped;
+ aCallParameterMapped = aObserverMapped.getInputMethod(aEnumInputMethod).getCallParameterByName(sMappingParam);
+ // the parameter exists
+ if (aCallParameterMapped == null) {
+ TaskListUnmarshallerBeans.logger.error(
+ sMappingObserver + " does not have " +
+ "a parameter named " + sMappingParam + ".");
+ continue;
+ }
+ // the value exists
+ if (!aCallParameterMapped.contains(sMappingValue)) {
+ TaskListUnmarshallerBeans.logger.error(
+ "Parameter " + sMappingParam +
+ " does not accept " + sMappingValue +
+ " as a value.");
+ continue;
+ }
+ listOfEnumInputMethod.add(aEnumInputMethod);
+ }
+
+ if (listOfEnumInputMethod.size() == 0) {
+ return null;
+ }
+
+ return new Mapping(
+ aObserverMapped,
+ sMappingParam,
+ sMappingValue/*,
+ listOfEnumInputMethod*/);
+ }
private Parameter getParameterFromObserver (
@@ -280,36 +364,78 @@
TaskListUnmarshallerBeans.logger.debug("Map of value : "+mapOfValue+".");
}
- /*final org.w3c.unicorn.tasklist.parameters.Parameter aParameter = ParameterFactory.getParameter(aTParamType);
+ final org.w3c.unicorn.tasklist.parameters.Parameter aParameter = ParameterFactory.getParameter(aTParamType);
if (null == aParameter) {
return null;
}
aParameter.setName(sName);
aParameter.setUiLevel(aTUi);
aParameter.setMapOfValue(mapOfValue);
- aParameter.setDefaultValues(sDefaultValues);*/
- return null; //aParameter;
+ aParameter.setDefaultValues(sDefaultValues);
+ return aParameter;
}
+ /**
+ * Wraps a TInputMethod instance on an EnumInputMethod
+ * @param aTInputMethod
+ * @return
+ */
+ private static EnumInputMethod getEnumInputMethod (final TInputMethod.Enum aTInputMethod) {
+ switch (aTInputMethod.intValue()) {
+ case TInputMethod.INT_DIRECT:
+ return EnumInputMethod.DIRECT;
+ case TInputMethod.INT_FILE:
+ return EnumInputMethod.UPLOAD;
+ case TInputMethod.INT_URI:
+ return EnumInputMethod.URI;
+ default:
+ return EnumInputMethod.URI;
+ }
+ }
-
- public TLTNode getTaskRoot() {
- return taskRoot;
+ public Map<String, org.w3c.unicorn.tasklist.Task> getMapOfTask() {
+ return this.mapOfTask;
}
public void addURL(URL aURL) throws IOException, JAXBException,
SAXException {
- // TODO Auto-generated method stub
+ TaskListUnmarshallerBeans.logger.trace("addURL");
+ if (TaskListUnmarshallerBeans.logger.isDebugEnabled()) {
+ TaskListUnmarshallerBeans.logger.debug("URL : "+aURL+".");
+ }
+ try {
+ this.aTaskList = (TasklistType) TasklistType.Factory.parse(aURL.openStream());
+ } catch (XmlException e) {
+ TaskListUnmarshallerBeans.logger.error("Parsing Error with XMLBeans", e);
+ e.printStackTrace();
+ }
+
}
public void unmarshal() throws Exception {
+ TaskListUnmarshallerBeans.logger.trace("unmarshal");
+
+ // creates the tasklist without computing references
+ for (final TaskType aTask : this.aTaskList.getTaskArray()) {
+ if (this.mapOfTask.containsKey(aTask.getId())) {
+ TaskListUnmarshallerBeans.logger.warn("Task with id "+aTask.getId()+" already defined.");
+ } else {
+ this.addTask(aTask);
+ }
+ }
+ // computes and replaces references by their corresponding observations
+ // and parameters
+ for (final org.w3c.unicorn.tasklist.Task aTask : this.mapOfTask.values()) {
+ TaskListUnmarshallerBeans.logger.debug("Expand task : "+aTask.getID()+".");
+ aTask.expand(this.mapOfTask);
+ }
}
Received on Thursday, 17 July 2008 13:41:02 UTC