001: package org.objectweb.celtix.tools.processors.wsdl2.internal;
002:
003: import java.util.Iterator;
004: import java.util.List;
005:
006: import javax.wsdl.extensions.ExtensibilityElement;
007: import javax.wsdl.extensions.mime.MIMEContent;
008: import javax.wsdl.extensions.mime.MIMEMultipartRelated;
009: import javax.wsdl.extensions.mime.MIMEPart;
010:
011: import org.objectweb.celtix.common.i18n.Message;
012: import org.objectweb.celtix.tools.common.ProcessorEnvironment;
013: import org.objectweb.celtix.tools.common.ToolException;
014: import org.objectweb.celtix.tools.common.model.JavaMethod;
015: import org.objectweb.celtix.tools.common.model.JavaParameter;
016: import org.objectweb.celtix.tools.common.model.JavaType;
017: import org.objectweb.celtix.tools.utils.ProcessorUtil;
018:
019: public class MIMEProcessor extends AbstractProcessor {
020:
021: public MIMEProcessor(ProcessorEnvironment penv) {
022: super (penv);
023: }
024:
025: private static String getJavaTypeForMimeType(MIMEPart mPart) {
026: if (mPart.getExtensibilityElements().size() > 1) {
027: return "javax.activation.DataHandler";
028: } else {
029: ExtensibilityElement extElement = (ExtensibilityElement) mPart
030: .getExtensibilityElements().get(0);
031: if (extElement instanceof MIMEContent) {
032: MIMEContent mimeContent = (MIMEContent) extElement;
033: if ("image/jpeg".equals(mimeContent.getType())
034: || "image/gif".equals(mimeContent.getType())) {
035: return "java.awt.Image";
036: } else if ("text/xml".equals(mimeContent.getType())
037: || "application/xml".equals(mimeContent
038: .getType())) {
039: return "javax.xml.transform.Source";
040: }
041: }
042: }
043: return "javax.activation.DataHandler";
044: }
045:
046: public void process(JavaMethod jm, MIMEMultipartRelated ext,
047: JavaType.Style style) throws ToolException {
048: List mimeParts = ext.getMIMEParts();
049: Iterator itParts = mimeParts.iterator();
050: while (itParts.hasNext()) {
051: MIMEPart mPart = (MIMEPart) itParts.next();
052: Iterator extns = mPart.getExtensibilityElements()
053: .iterator();
054: while (extns.hasNext()) {
055: ExtensibilityElement extElement = (ExtensibilityElement) extns
056: .next();
057: if (extElement instanceof MIMEContent) {
058: MIMEContent mimeContent = (MIMEContent) extElement;
059: String mimeJavaType = getJavaTypeForMimeType(mPart);
060: if (JavaType.Style.IN.equals(style)) {
061: String paramName = ProcessorUtil
062: .mangleNameToVariableName(mimeContent
063: .getPart());
064: JavaParameter jp = jm.getParameter(paramName);
065: if (jp == null) {
066: Message message = new Message(
067: "MIMEPART_CANNOT_MAP", LOG,
068: mimeContent.getPart());
069: throw new ToolException(message);
070: }
071: if (!jp.getClassName().equals(mimeJavaType)) {
072: // jp.setType(mimeJavaType);
073: jp.setClassName(mimeJavaType);
074: }
075: } else if (JavaType.Style.OUT.equals(style)) {
076: if (mimeParts.size() > 2) {
077: // more than 1 mime:content part (1 root soap body),
078: // javaReturn will be set to void and
079: // all output parameter will be treated as the
080: // holder class
081: String paramName = ProcessorUtil
082: .mangleNameToVariableName(mimeContent
083: .getPart());
084: JavaParameter jp = jm
085: .getParameter(paramName);
086: if (jp == null) {
087: Message message = new Message(
088: "MIMEPART_CANNOT_MAP", LOG,
089: mimeContent.getPart());
090: throw new ToolException(message);
091: } else {
092: if (!jp.getClassName().equals(
093: mimeJavaType)) {
094: // jp.setType(mimeJavaType);
095: jp.setClassName(mimeJavaType);
096: jp.setHolderClass(mimeJavaType);
097: }
098: }
099: } else {
100: if (!jm.getReturn().getClassName().equals(
101: mimeJavaType)) {
102: // jm.getReturn().setType(mimeJavaType);
103: jm.getReturn().setClassName(
104: mimeJavaType);
105: }
106: }
107: }
108: }
109: }
110: }
111: }
112: }
|