- From: Jean-Guilhem Rouel via cvs-syncmail <cvsmail@w3.org>
- Date: Fri, 28 Aug 2009 12:40:11 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2006/unicorn/src/org/w3c/unicorn/contract
In directory hutz:/tmp/cvs-serv22368/src/org/w3c/unicorn/contract
Added Files:
EnumInputMethod.java CallParameter.java WADLUnmarshaller.java
Observer.java WADLUnmarshallerXPath.java InputMethod.java
CallMethod.java
Log Message:
Merging dev2 in HEAD
--- NEW FILE: EnumInputMethod.java ---
// $Id: EnumInputMethod.java,v 1.2 2009/08/28 12:40:09 jean-gui Exp $
// Author: Damien LEROY
// (c) COPYRIGHT MIT, ERCIM and Keio, 2006.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.unicorn.contract;
/**
* Enumeration for the input methods
*
* @author Damien LEROY
*/
public enum EnumInputMethod {
URI("uri"), UPLOAD("upload"), DIRECT("direct");
private final String sValue;
private EnumInputMethod(final String sValue) {
this.sValue = sValue;
}
public final String value() {
return this.sValue;
}
public static EnumInputMethod fromValue(final String sValue) {
for (final EnumInputMethod aEnumInputMethod : EnumInputMethod.values()) {
if (aEnumInputMethod.sValue.equals(sValue)) {
return aEnumInputMethod;
}
}
throw new IllegalArgumentException("Unknow input method : "
+ sValue.toString() + ".");
}
}
--- NEW FILE: Observer.java ---
// $Id: Observer.java,v 1.2 2009/08/28 12:40:09 jean-gui Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2006.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.unicorn.contract;
import java.util.List;
import java.util.Map;
import javax.activation.MimeType;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.unicorn.exceptions.UnknownParserException;
import org.w3c.unicorn.util.LocalizedString;
import org.w3c.unicorn.util.Property;
/**
* Observer<br />
* Created: May 22, 2006 2:56:07 PM<br />
*
* @author Jean-Guilhem Rouel
*/
public class Observer {
/**
* Use to log any information during use of this class.
*/
private static final Log logger = LogFactory.getLog(Observer.class);
/**
* ID of the observer
*/
private String sID;
/**
* Name of the observer
*/
private LocalizedString aLocalizedStringName = null;
/**
* Description of the observer
*/
private LocalizedString aLocalizedStringDescription = null;
/**
* An help for the location of the observer
*/
private LocalizedString aLocalizedStringHelpLocation = null;
/**
* A string provider for the observer
*/
private LocalizedString aLocalizedStringProvider = null;
/**
* The name of the language for the observer
*/
private String sParamLangName = null;
/**
* The response type of the observer
*/
private String responseType = null;
/**
* List of method who can be used to call this observer.
*/
private List<CallMethod> listOfCallMethod;
/**
* Map of input method handle by this observer.
*/
private Map<EnumInputMethod, InputMethod> mapOfInputMethod;
private List<MimeType> supportedMimeTypes;
/**
* Creates the observer
*
*/
public Observer() {
Observer.logger.trace("Constructor");
}
public String getID() {
return this.sID;
}
public String getName(final String sLang) {
return this.aLocalizedStringName.getLocalization(sLang);
}
public String getDescription(final String sLang) {
return this.aLocalizedStringDescription.getLocalization(sLang);
}
public String getHelpLocation(final String sLang) {
return this.aLocalizedStringHelpLocation.getLocalization(sLang);
}
public String getProvider(final String sLang) {
return this.aLocalizedStringProvider.getLocalization(sLang);
}
public String getParamLangName() {
return this.sParamLangName;
}
/*
* (non-Javadoc)
*
* @see org.w3c.unicorn.contract.Observer#getMethods()
*/
public List<CallMethod> getListOfCallMethod() {
return this.listOfCallMethod;
}
public void setID(final String sID) {
this.sID = sID;
}
public void setName(final LocalizedString aLocalizedString) {
this.aLocalizedStringName = aLocalizedString;
}
public void setDescription(final LocalizedString aLocalizedString) {
this.aLocalizedStringDescription = aLocalizedString;
}
public void setHelpLocation(final LocalizedString aLocalizedString) {
this.aLocalizedStringHelpLocation = aLocalizedString;
}
public void setProvider(final LocalizedString aLocalizedString) {
this.aLocalizedStringProvider = aLocalizedString;
}
public void setParamLangName(final String sParamLangName) {
this.sParamLangName = sParamLangName;
}
/*
* (non-Javadoc)
*
* @see org.w3c.unicorn.contract.Observer#setMethods(java.util.ArrayList)
*/
public void setListOfCallMethod(final List<CallMethod> listOfCallMethod) {
this.listOfCallMethod = listOfCallMethod;
}
/**
* Prints the object
*/
@Override
public String toString() {
final int sbSize = 1000;
final String sVariableSeparator = "\n";
final StringBuffer aStringBuffer = new StringBuffer(sbSize);
aStringBuffer.append("ID:").append(this.sID);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("Name:").append(this.aLocalizedStringName);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("Description:").append(
this.aLocalizedStringDescription);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("HelpLocation:").append(
this.aLocalizedStringHelpLocation);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("Provider:").append(this.aLocalizedStringProvider);
aStringBuffer.append(sVariableSeparator);
// aStringBuffer.append("Description:[").append(this.aObserverDescription).append("]");
// aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("Methods:[").append(this.listOfCallMethod).append(
"]");
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("InputMethods:[").append(this.mapOfInputMethod)
.append("]");
return aStringBuffer.toString();
}
public final Map<EnumInputMethod, InputMethod> getMapOfInputMethod() {
return this.mapOfInputMethod;
}
public void setMapOfInputMethod(
final Map<EnumInputMethod, InputMethod> mapOfInputMethod) {
this.mapOfInputMethod = mapOfInputMethod;
}
public void addInputMethod(final EnumInputMethod aEnumInputMethod,
final InputMethod aInputMethod) {
this.mapOfInputMethod.put(aEnumInputMethod, aInputMethod);
}
/*
* (non-Javadoc)
*
* @see org.w3c.unicorn.contract.Observer#getInputMethod(org.w3c.unicorn.contract.methods.EnumInputMethod)
*/
public InputMethod getInputMethod(final EnumInputMethod aEnumInputMethod) {
return this.mapOfInputMethod.get(aEnumInputMethod);
}
public InputMethod getBestInputMethod(final EnumInputMethod preferred) {
// First try to get what caller would like
InputMethod im = getInputMethod(preferred);
if (im != null) {
return im;
}
// If not possible, grab another one
for (final EnumInputMethod aEIM : EnumInputMethod.values()) {
im = getInputMethod(aEIM);
if (im != null) {
return im;
}
}
// we should not arrive here (that would mean an observer doesn't
// have any input method
return null;
}
public CallMethod getCallMethod(final EnumInputMethod aEnumInputMethod) {
return this.getInputMethod(aEnumInputMethod).getCallMethod();
}
public void addMimeType(final MimeType aMimeType) {
this.supportedMimeTypes.add(aMimeType);
}
/**
* Returns <code>true</code> if the mime-type is supported by this
* observer
*
* @param aMimeType
* mime-type to check
* @return whether or not the mime-type is handled
*/
public boolean canHandleMimeType(final MimeType aMimeType) {
// return this.supportedMimeTypes.contains(aMimeType);
// equals and thus contains doesn't work :(
for (final MimeType mt : this.supportedMimeTypes) {
if (mt.match(aMimeType)) {
return true;
}
}
return false;
}
public void setSupportedMimeTypes(List<MimeType> mimeTypes) {
this.supportedMimeTypes = mimeTypes;
}
public List<MimeType> getSupportedMimeTypes() {
return this.supportedMimeTypes;
}
public String getResponseType() {
return responseType;
}
public void setResponseType(String responseType) throws UnknownParserException {
if (!Property.getProps("responseParsers.properties").containsKey(responseType))
throw new UnknownParserException("Unknown parser: " + responseType + ". Check observer contract or responseParsers.properties.");
this.responseType = responseType;
}
}
--- NEW FILE: CallParameter.java ---
// $Id: CallParameter.java,v 1.2 2009/08/28 12:40:09 jean-gui Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2006.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.unicorn.contract;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* CallParameter<br />
* Created: May 22, 2006 3:26:19 PM<br />
*/
public class CallParameter {
/**
* Object for complex logging purpose
*/
private static final Log logger = LogFactory
.getLog(CallParameter.class);
// Attributes of the parameter
/**
* Name of the parameter
*/
private String sName = null;
/**
* Style of the parameter
*/
private String sStyle = null;
/**
* ID of the parameter
*/
private String sID = null;
/**
* Type of the parameter
*/
private String sType = null;
/**
* Default value for the parameter
*/
private String sDefaultValue;
/**
* Defines whether or not the parameter is mandatory
*/
private boolean bRequired; // Is this parameter mandatory
/**
* Defines whether or not the parameter can be repeated
*/
private boolean bRepeating; // Can this parameter be repeated
/**
* Indicates if the parameter can be manually set or not
*/
private String sFixed = null; // Indicates if the parameter can be
// manually set or not
/**
* Defines the path of the parameter
*/
private String sPath = null;
/**
* Possible values for this parameter
*/
private List<String> listOfPossibleValue = null;
/**
* Constructor for a parameter
*
* @param sName
* Name of the parameter
* @param listOfPossibleValue
* all the possibles values
* @param sFixed
* Indicates if the parameter can be manually set or not
*/
public CallParameter(final String sName, final List<String> listOfValue,
final String sFixed, final boolean bRequired,
final boolean bRepeating) {
super();
CallParameter.logger
.trace("Constructor(String, List<String>, String, boolean, boolean)");
if (CallParameter.logger.isDebugEnabled()) {
CallParameter.logger.debug("Name : " + sName + ".");
CallParameter.logger.debug("List of value : " + listOfValue + ".");
CallParameter.logger.debug("Fixed : " + sFixed + ".");
CallParameter.logger.debug("Required : " + bRequired + ".");
CallParameter.logger.debug("Repeating : " + bRepeating + ".");
}
this.sName = sName;
this.listOfPossibleValue = listOfValue;
this.sFixed = sFixed;
this.bRequired = bRequired;
this.bRepeating = bRepeating;
}
/**
* Various constructor with only the name and default value
*
* @param sName
* name of the parameter
*/
public CallParameter(final String sName) {
this(sName, new ArrayList<String>(), null, false, false);
CallParameter.logger.trace("Constructor(String)");
}
/**
* Various constructor with empty name
*/
public CallParameter() {
this("", new ArrayList<String>(), null, false, false);
CallParameter.logger.trace("Constructor()");
}
// ===================
// ===== GETTERS =====
// ===================
public String getName() {
return this.sName;
}
public String getStyle() {
return this.sStyle;
}
public String getID() {
return this.sID;
}
public String getType() {
return this.sType;
}
public String getDefaultValue() {
return this.sDefaultValue;
}
public boolean isRequired() {
return this.bRequired;
}
public boolean isRepeating() {
return this.bRepeating;
}
public boolean isFixed() {
return this.sFixed != null;
}
public String getFixed() {
return this.sFixed;
}
public String getPath() {
return this.sPath;
}
public List<String> getListOfPossibleValue() {
return listOfPossibleValue;
}
// ==================
// ===== SETTERS ====
// ==================
public void setName(final String sName) {
this.sName = sName;
}
public void setStyle(String style) {
this.sStyle = style;
}
public void setID(String sid) {
this.sID = sid;
}
public void setType(String type) {
this.sType = type;
}
public void setDefaultValue(String defaultValue) {
this.sDefaultValue = defaultValue;
}
public void setRequired(final boolean bRequired) {
this.bRequired = bRequired;
}
public void setRepeating(final boolean bRepeating) {
this.bRepeating = bRepeating;
}
public void setFixed(final String sFixed) {
this.sFixed = sFixed;
}
public void setPath(final String sPath) {
this.sPath = sPath;
}
public void setPossibleValues(final List<String> listOfValue) {
this.listOfPossibleValue = listOfValue;
}
public void addValue(final String sValue) {
if (this.listOfPossibleValue == null) {
this.listOfPossibleValue = new ArrayList<String>();
}
this.listOfPossibleValue.add(sValue);
}
public Object getValue(final int iPosition) {
return this.listOfPossibleValue.get(iPosition);
}
public boolean contains(final String sValue) {
return this.listOfPossibleValue.contains(sValue)
|| (this.listOfPossibleValue.size() == 1 && this.listOfPossibleValue
.contains(""));
}
/**
* Prints the object
*/
@Override
public String toString() {
final int iSize = 1000;
final String sVariableSeparator = "\n";
final StringBuffer aStringBuffer = new StringBuffer(iSize);
aStringBuffer.append("[begin CallParameter]\n");
aStringBuffer.append("name:=").append(sName);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("id:=").append(sID);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("possibleValues:=").append(listOfPossibleValue);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("fixed:=").append(sFixed);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("required:=").append(bRequired);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("repeating:=").append(bRepeating);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("style:=").append(sStyle);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("path:=").append(sPath);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("style:=").append(sStyle);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("default:=").append(sDefaultValue);
aStringBuffer.append("[end CallParameter]\n");
return aStringBuffer.toString();
}
}
--- NEW FILE: CallMethod.java ---
// $Id: CallMethod.java,v 1.2 2009/08/28 12:40:09 jean-gui Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2006.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.unicorn.contract;
import java.net.URL;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* CallMethod Created: May 23, 2006 11:46:50 AM
*/
public class CallMethod {
/**
* Object for complex logging purpose
*/
private static final Log logger = LogFactory
.getLog(CallMethod.class);
/**
* URL for the call
*/
private URL aURL;
// GET or POST
/**
* The url to call
*/
private String sName;
/**
* The name to call
*/
private String sID;
/**
* the ID of the call
*/
private boolean bPost;
/**
* whether the call is sent or not
*/
private Map<String, CallParameter> mapOfCallParameter;
/**
* Set the parameter for the object call
*
* @param aURL
* the url to call
* @param bPost
* whether or not the call is post
* @param sName
* the name to call
* @param sID
* the id of the call
* @param mapOfCallParameter
* the parameter of the call
*/
public CallMethod(final URL aURL, final boolean bPost, final String sName,
final String sID,
final Map<String, CallParameter> mapOfCallParameter) {
CallMethod.logger.trace("Constructor");
if (CallMethod.logger.isDebugEnabled()) {
CallMethod.logger.debug("URL : " + aURL + ".");
CallMethod.logger.debug("Post : " + bPost + ".");
CallMethod.logger.debug("Name : " + sName + ".");
CallMethod.logger.debug("ID : " + sID + ".");
CallMethod.logger.debug("Map of call parameter : "
+ mapOfCallParameter + ".");
}
this.aURL = aURL;
this.mapOfCallParameter = mapOfCallParameter;
this.bPost = bPost;
this.sName = sName;
this.sID = sID;
}
/**
* Returns all the parameters of the call
*
* @return Returns the parameters.
*/
public Map<String, CallParameter> getMapOfCallParameter() {
return this.mapOfCallParameter;
}
/**
* Add a parameter to the call
*
* @param aCallParameter
* a parameter to add
*/
public void addParameter(final CallParameter aCallParameter) {
this.mapOfCallParameter.put(aCallParameter.getName(), aCallParameter);
}
/**
* Gets the parameter by its name
*
* @param sName
* name of the parameter to get
* @return the Call parameter researched
*/
public CallParameter getCallParameterByName(final String sName) {
return this.mapOfCallParameter.get(sName);
}
/**
* Returns if the call is post
*
* @return Returns the post.
*/
public boolean isPost() {
return this.bPost;
}
/**
* Returns the URI
*
* @return Returns the uri.
*/
public URL getURL() {
return this.aURL;
}
/**
* Returns the ID
*
* @return Returns the id.
*/
public String getID() {
return this.sID;
}
/**
* Get the name of the call
*
* @return the name of the call
*/
public String getName() {
return this.sName;
}
/**
* Print the object
*/
@Override
public String toString() {
final int iSize = 1000;
final String sVariableSeparator = "\n";
final StringBuffer aStringBuffer = new StringBuffer(iSize);
aStringBuffer.append("uri=").append(this.aURL);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("id=").append(this.sID);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("post=").append(this.bPost);
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("parameters=\n");
aStringBuffer.append(this.mapOfCallParameter)
.append(sVariableSeparator);
return aStringBuffer.toString();
}
}
--- NEW FILE: WADLUnmarshallerXPath.java ---
// $Id: WADLUnmarshallerXPath.java,v 1.2 2009/08/28 12:40:09 jean-gui Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2006.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.unicorn.contract;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.activation.MimeType;
import javax.activation.MimeTypeParseException;
import javax.xml.namespace.NamespaceContext;
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.XPathExpressionException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.unicorn.util.LocalizedString;
import org.xml.sax.SAXException;
import com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl;
/**
* WADLUnmarshallerXPath<br />
* Created: May 22, 2006 6:01:14 PM<br />
*
* @author Jean-Guilhem ROUEL
*/
public class WADLUnmarshallerXPath implements WADLUnmarshaller {
/**
* Object for complex logging purpose
*/
private static final Log logger = LogFactory.getLog(WADLUnmarshaller.class);
/**
* Namespace for the context
*/
private static NamespaceContext aNamespaceContext;
/**
* List of the different call method
*/
private List<CallMethod> listOfCallMethod = new ArrayList<CallMethod>();
/**
* Factory to build Document
*/
private DocumentBuilderFactory aDocumentBuilderFactory;
/**
* Document builder
*/
private DocumentBuilder aDocumentBuilder;
/**
* Document XML
*/
private Document aDocument;
/**
* Path for the document
*/
private XPath aXPath;
/**
* Description of a observer to complete with information from a WADL file.
*/
private String sID = new String();
private LocalizedString aLocalizedStringName = new LocalizedString();
private LocalizedString aLocalizedStringDescription = new LocalizedString();
private LocalizedString aLocalizedStringHelpLocation = new LocalizedString();
private LocalizedString aLocalizedStringProvider = new LocalizedString();
private List<MimeType> listOfMimeType = new ArrayList<MimeType>();
private String responseType;
/**
* name of parameter lang if observer has one
*/
private String nameOfLangParameter = null;
/**
* Map of different input method handle by the observer.
*/
private Map<EnumInputMethod, InputMethod> mapOfInputMethod = new LinkedHashMap<EnumInputMethod, InputMethod>();
/**
* Create the object to Unmarshall WADL with XPATH
*
* @throws ParserConfigurationException
*/
public WADLUnmarshallerXPath() throws ParserConfigurationException {
WADLUnmarshallerXPath.logger.trace("Constructor");
this.aDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
this.aDocumentBuilder = this.aDocumentBuilderFactory
.newDocumentBuilder();
this.aXPath = new XPathFactoryImpl().newXPath();
this.aXPath
.setNamespaceContext(WADLUnmarshallerXPath.getNamespaceContext());
}
/**
* Get the document from an URL
*
* @throws SAXException
*/
public void addURL(final URL aURL) throws IOException {
WADLUnmarshallerXPath.logger.trace("addURL");
WADLUnmarshallerXPath.logger.trace("URL : " + aURL + ".");
try {
this.aDocument = this.aDocumentBuilder.parse(aURL.openStream());
} catch (SAXException e) {
WADLUnmarshallerXPath.logger.error(
"Parsing error with SAX in WADLUnmarshaller", e);
e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see org.w3c.unicorn.contract.WADLUnmarshaller#unmarshal(java.net.URL)
*/
public void unmarshal() throws XPathExpressionException,
ParserConfigurationException, SAXException, IOException,
MimeTypeParseException {
WADLUnmarshallerXPath.logger.trace("unmarshal");
this.parseDocsHeader();
this.parseMethods();
}
/**
* Parse the header of the WADL file
*
* @throws XPathExpressionException
* error in the XPATH browsing of the document
* @throws MimeTypeParseException
* error in the mime-type of the document
*/
private void parseDocsHeader() throws XPathExpressionException,
MimeTypeParseException {
final Node aNodeResource = this.aDocument.getElementsByTagName(
"resources").item(0);
XPathExpression aXPathExpression = this.aXPath
.compile("//resource/doc");
NodeList aNodeListResult = (NodeList) aXPathExpression.evaluate(
aNodeResource, XPathConstants.NODESET);
for (int i = 0; i < aNodeListResult.getLength(); i++) {
Node nodeDoc = aNodeListResult.item(i);
String vText = nodeDoc.getTextContent();
// browse the attributes of a document
String vTitle = null;
String vLang = null;
NamedNodeMap nnm = nodeDoc.getAttributes();
for (int j = 0; j < nnm.getLength(); j++) {
String attrName = nnm.item(j).getNodeName();
String attrValue = nnm.item(j).getNodeValue();
if ("title".equals(attrName)) {
vTitle = attrValue;
} else if ("xml:lang".equals(attrName)) {
vLang = attrValue;
}
}
if ("name".equals(vTitle)) {
aLocalizedStringName.addLocalization(vLang, vText);
} else if ("description".equals(vTitle)) {
aLocalizedStringDescription.addLocalization(vLang, vText);
} else if ("help".equals(vTitle)) {
aLocalizedStringHelpLocation.addLocalization(vLang, vText);
} else if ("provider".equals(vTitle)) {
aLocalizedStringProvider.addLocalization(vLang, vText);
} else if ("paramLang".equals(vTitle)) {
nameOfLangParameter = vText;
} else if ("mimetype".equals(vTitle)) {
listOfMimeType.add(new MimeType(vText));
} else if ("reference".equals(vTitle)) {
sID = vText;
} else if ("responseType".equals(vTitle)) {
responseType = vText;
}
}
}
/**
* Parse all the methods of the document
*
* @throws ParserConfigurationException
* Error in the configuration of the parser
* @throws SAXException
* error in the XML DOM
* @throws IOException
* error in the input/output
* @throws XPathExpressionException
* error in the evaluation of the XPATH query
*/
private void parseMethods() throws ParserConfigurationException,
SAXException, IOException, XPathExpressionException {
WADLUnmarshallerXPath.logger.trace("parseMethods");
// base uri
final Node aNodeResource = this.aDocument.getElementsByTagName(
"resources").item(0);
final String sBaseURI = aNodeResource.getAttributes().getNamedItem(
"base").getNodeValue();
final NodeList aNodeListMethod = this.aDocument
.getElementsByTagName("method");
for (int i = 0; i < aNodeListMethod.getLength(); i++) {
final Node aNodeMethod = aNodeListMethod.item(i);
final Map<String, CallParameter> mapOfCallParameter;
mapOfCallParameter = new LinkedHashMap<String, CallParameter>();
// URI of the resource (will be appended to the base URI)
final String sResourceURI;
sResourceURI = aNodeMethod.getParentNode().getAttributes()
.getNamedItem("path").getNodeValue();
// Type : GET/POST and id of the method
final NamedNodeMap aNamedNodeMapAttribute = aNodeMethod
.getAttributes();
final String sName = aNamedNodeMapAttribute.getNamedItem("name")
.getNodeValue();
final boolean bPost = "POST".equals(sName.trim());
final String sMethodID = aNamedNodeMapAttribute.getNamedItem("id")
.getNodeValue().trim();
// Query variables
XPathExpression aXPathExpression = this.aXPath
.compile("//method[@id='" + sMethodID + "']//param");
NodeList aNodeListResult = (NodeList) aXPathExpression.evaluate(
aNodeMethod, XPathConstants.NODESET);
// iterate over param list
for (int j = 0; j < aNodeListResult.getLength(); j++) {
final NamedNodeMap aNamedNodeMap = aNodeListResult.item(j)
.getAttributes();
final CallParameter aCallParameter = new CallParameter();
// iterate over attributes
for (int k = 0; k < aNamedNodeMap.getLength(); k++) {
final Node aNodeCurrentAttribute = aNamedNodeMap.item(k);
final String sAttributeName = aNodeCurrentAttribute
.getNodeName();
final String sAttributeValue = aNodeCurrentAttribute
.getNodeValue();
if ("name".equals(sAttributeName)) {
aCallParameter.setName(sAttributeValue);
} else if ("required".equals(sAttributeName)) {
aCallParameter.setRequired("true"
.equals(sAttributeValue));
} else if ("repeating".equals(sAttributeName)) {
aCallParameter.setRepeating("true"
.equals(sAttributeValue));
} else if ("fixed".equals(sAttributeName)) {
aCallParameter.setFixed(sAttributeValue);
} else if ("style".equals(sAttributeName)) {
aCallParameter.setStyle(sAttributeValue);
} else if ("id".equals(sAttributeName)) {
aCallParameter.setID(sAttributeValue);
} else if ("path".equals(sAttributeName)) {
aCallParameter.setPath(sAttributeValue);
} else if ("default".equals(sAttributeName)) {
aCallParameter.setDefaultValue(sAttributeValue);
}
} // iterate over attributes
// read option type
XPathExpression aOptionXPathExpression = this.aXPath
.compile("//method[@id='" + sMethodID
+ "']//request//param[@name='"
+ aCallParameter.getName() + "']//option");
NodeList aOptionNodeListResult = (NodeList) aOptionXPathExpression
.evaluate(aNodeMethod, XPathConstants.NODESET);
for (int k = 0; k < aOptionNodeListResult.getLength(); k++) {
aCallParameter.addValue(aOptionNodeListResult.item(k)
.getAttributes().item(0).getNodeValue());
}
mapOfCallParameter.put(new String(aCallParameter.getName()),
aCallParameter);
} // iterate over query_variable list
final CallMethod aCallMethod = new CallMethod(new URL(sBaseURI
+ sResourceURI), bPost, sName, sMethodID,
mapOfCallParameter);
this.listOfCallMethod.add(aCallMethod);
// fill mapOfInputMethod
NodeList listChildMethod = aNodeMethod.getChildNodes();
String sInputMethod = null;
String sInputParamName = null;
for (int j = 0; j < listChildMethod.getLength(); j++) {
Node childMethod = listChildMethod.item(j);
if ("doc".equals(childMethod.getNodeName())) {
String firstAttrName = childMethod.getAttributes().item(0)
.getNodeName();
if ("title".equals(firstAttrName)) {
String firstAttrValue = childMethod.getAttributes()
.item(0).getNodeValue();
if ("inputMethod".equals(firstAttrValue)) {
sInputMethod = childMethod.getTextContent();
} else if ("inputParamName".equals(firstAttrValue)) {
sInputParamName = childMethod.getTextContent();
}
}
}
}
InputMethod aInputMethod = new InputMethod(sInputMethod);
aInputMethod.setCallMethod(aCallMethod);
aInputMethod.setCallParameter(aCallMethod
.getCallParameterByName(sInputParamName));
if ("URI".equals(sInputMethod)) {
this.mapOfInputMethod.put(EnumInputMethod.URI, aInputMethod);
} else if ("UPLOAD".equals(sInputMethod)) {
this.mapOfInputMethod.put(EnumInputMethod.UPLOAD, aInputMethod);
} else if ("DIRECT".equals(sInputMethod)) {
this.mapOfInputMethod.put(EnumInputMethod.DIRECT, aInputMethod);
}
}
}
/*
* (non-Javadoc)
*
* @see org.w3c.unicorn.contract.WADLUnmarshaller#getMethods()
*/
public List<CallMethod> getListOfCallMethod() {
return this.listOfCallMethod;
}
public LocalizedString getDescription() {
return this.aLocalizedStringDescription;
}
public LocalizedString getHelpLocation() {
return this.aLocalizedStringHelpLocation;
}
public String getID() {
return this.sID;
}
public Map<EnumInputMethod, InputMethod> getMapOfInputMethod() {
return this.mapOfInputMethod;
}
public LocalizedString getName() {
return this.aLocalizedStringName;
}
public String getNameOfLangParameter() {
return this.nameOfLangParameter;
}
public LocalizedString getProvider() {
return this.aLocalizedStringProvider;
}
public String getResponseType() {
return responseType;
}
public List<MimeType> getSupportedMimeTypes() {
return this.listOfMimeType;
}
/**
* Main method of the class only for testing purpose
*
* @param args
* @throws Exception
*/
public static void main(final String[] args) throws Exception {
final WADLUnmarshaller t = new WADLUnmarshallerXPath();
t.addURL(new URL("http://localhost/css.wadl"));
t.unmarshal();
System.out.println(t.getID());
System.out.println(t.getMapOfInputMethod());
System.out.println("***************************************");
for (InputMethod im : t.getMapOfInputMethod().values()) {
System.out.println(im.getCallParameter());
System.out.println("---------------------------------");
}
}
public static void setNamespaceContext(NamespaceContext aNamespaceContext) {
WADLUnmarshallerXPath.aNamespaceContext = aNamespaceContext;
}
public static NamespaceContext getNamespaceContext() {
return aNamespaceContext;
}
}
--- NEW FILE: InputMethod.java ---
// $Id: InputMethod.java,v 1.2 2009/08/28 12:40:09 jean-gui Exp $
// Author: Damien LEROY
// (c) COPYRIGHT MIT, ERCIM and Keio, 2006.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.unicorn.contract;
/**
* @author Damien LEROY
*
*/
public class InputMethod {
/**
* Method of the call
*/
private CallMethod aCallMethod = null;
/**
* Parameter of the call
*/
private CallParameter aCallParameter = null;
private EnumInputMethod method;
public InputMethod(EnumInputMethod method) {
this.method = method;
}
public InputMethod(String method) {
if ("URI".equals(method)) {
this.method = EnumInputMethod.URI;
} else if ("UPLOAD".equals(method)) {
this.method = EnumInputMethod.UPLOAD;
} else if ("DIRECT".equals(method)) {
this.method = EnumInputMethod.DIRECT;
}
}
public EnumInputMethod getMethod() {
return this.method;
}
/**
* Get the current calling method
*
* @return current calling method
*/
public CallMethod getCallMethod() {
return this.aCallMethod;
}
/**
* Set the method of the call
*
* @param aCallMethod
* new calling method to add
*/
public void setCallMethod(final CallMethod aCallMethod) {
this.aCallMethod = aCallMethod;
}
/**
* Get the current call parameter
*
* @return the current call parameter
*/
public CallParameter getCallParameter() {
return this.aCallParameter;
}
/**
* Set the current Call parameter
*
* @param aCallParameter
* call parameter to set
*/
public void setCallParameter(final CallParameter aCallParameter) {
this.aCallParameter = aCallParameter;
}
/**
* Get a parameter by its name
*
* @param sCallParameterName
* name of the parameter to look for
* @return the parameter researched
*/
public CallParameter getCallParameterByName(final String sCallParameterName) {
return aCallMethod.getCallParameterByName(sCallParameterName);
}
/**
* Prints the object
*/
@Override
public final String toString() {
final int iStringBufferSize = 1000;
final String sVariableSeparator = "\n";
final StringBuffer aStringBuffer = new StringBuffer(iStringBufferSize);
aStringBuffer.append("/BeginInputMethod/");
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("CallMethod:{").append(this.aCallMethod).append(
"}");
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("CallParameter:{").append(this.aCallParameter)
.append("}");
aStringBuffer.append(sVariableSeparator);
aStringBuffer.append("/EndInputMethod/");
return aStringBuffer.toString();
}
}
--- NEW FILE: WADLUnmarshaller.java ---
// $Id: WADLUnmarshaller.java,v 1.2 2009/08/28 12:40:09 jean-gui Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2006.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.unicorn.contract;
import java.util.List;
import java.util.Map;
import javax.activation.MimeType;
import org.w3c.unicorn.util.LocalizedString;
import org.w3c.unicorn.util.Unmarshaller;
/**
* WADLUnmarshallerXPath<br />
* Created: May 24, 2006 12:34:38 PM<br />
*/
public interface WADLUnmarshaller extends Unmarshaller {
/**
* @return Returns a list of methods.
*/
public abstract List<CallMethod> getListOfCallMethod();
Map<EnumInputMethod, InputMethod> getMapOfInputMethod();
public String getID();
public LocalizedString getName();
public LocalizedString getDescription();
public LocalizedString getHelpLocation();
public LocalizedString getProvider();
public String getNameOfLangParameter();
public String getResponseType();
public List<MimeType> getSupportedMimeTypes();
}
Received on Friday, 28 August 2009 12:40:22 UTC