You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yoko-commits@incubator.apache.org by br...@apache.org on 2007/05/21 17:03:35 UTC

svn commit: r540203 [2/2] - in /incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba: ./ interceptors/ runtime/ types/ utils/

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/ParameterSequenceEventProducer.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/ParameterSequenceEventProducer.java?view=diff&rev=540203&r1=540202&r2=540203
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/ParameterSequenceEventProducer.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/ParameterSequenceEventProducer.java Mon May 21 10:03:31 2007
@@ -18,19 +18,25 @@
  */
 package org.apache.yoko.bindings.corba.types;
 
-import java.util.List;
-
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.service.model.ServiceInfo;
+
 import org.apache.yoko.bindings.corba.CorbaTypeMap;
 
+import org.omg.CORBA.ORB;
+
 public class ParameterSequenceEventProducer extends AbstractStartEndEventProducer {
 
     public ParameterSequenceEventProducer(QName wrapperElementQName,
                                           HandlerIterator paramIterator,
-                                          List<CorbaTypeMap> typeMaps) {
+                                          CorbaTypeMap typeMap,
+                                          ServiceInfo service,
+                                          ORB orbRef) {
         name = wrapperElementQName;
         iterator = paramIterator;
-        this.typeMaps = typeMaps;
+        this.typeMap = typeMap;
+        serviceInfo = service;
+        orb = orbRef;
     }
 }

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java?view=diff&rev=540203&r1=540202&r2=540203
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/utils/CorbaUtils.java Mon May 21 10:03:31 2007
@@ -85,41 +85,32 @@
         return EMPTY_QNAME;
     }
 
-    public static TypeCode getTypeCode(ORB orb, QName type, List<CorbaTypeMap> typeMaps) {
-        return getTypeCode(orb, type, null, typeMaps);
+    public static TypeCode getTypeCode(ORB orb, QName type, CorbaTypeMap typeMap) {
+        return getTypeCode(orb, type, null, typeMap);
     }
 
-    public static TypeCode getTypeCode(ORB orb, QName type, CorbaType obj, List<CorbaTypeMap> typeMaps) {
+    public static TypeCode getTypeCode(ORB orb, QName type, CorbaType obj, CorbaTypeMap typeMap) {
         TypeCode tc = null;
         // first see if it is a primitive
         tc = getPrimitiveTypeCode(orb, type);
         if (tc == null) {
-            // this means it is not a primitive type
-            CorbaTypeMap currentMap = null;
-            for (int i = 0; i < typeMaps.size(); ++i) {
-                if (typeMaps.get(i).getTargetNamespace().equals(type.getNamespaceURI())) {
-                    currentMap = typeMaps.get(i);
-                    break;
-                }
-            }
-
-            if (currentMap == null) {
+            if (typeMap == null) {
                 throw new CorbaBindingException("Unable to locate typemap for namespace \"" 
                                                 + type.getNamespaceURI() + "\"");
             }
             
-            tc = currentMap.getTypeCode(type); 
+            tc = typeMap.getTypeCode(type); 
 
             if (tc == null) {
                 if (obj == null) {
-                    obj = currentMap.getType(type.getLocalPart());
+                    obj = typeMap.getType(type.getLocalPart());
                     if (obj == null) {
                         throw new CorbaBindingException("Unable to locate object definition");
                     }
                 }
-                tc = getComplexTypeCode(orb, type, obj, typeMaps);
+                tc = getComplexTypeCode(orb, type, obj, typeMap);
                 if (tc != null) {
-                    currentMap.addTypeCode(type, tc);
+                    typeMap.addTypeCode(type, tc);
                 }
             }
         }
@@ -148,20 +139,20 @@
         return null;
     }
 
-    public static TypeCode getComplexTypeCode(ORB orb, QName type, Object obj, List<CorbaTypeMap> typeMaps) {
+    public static TypeCode getComplexTypeCode(ORB orb, QName type, Object obj, CorbaTypeMap typeMap) {
 
-        TypeCode tc = getAnonTypeCode(orb, type, obj, typeMaps);
+        TypeCode tc = getAnonTypeCode(orb, type, obj, typeMap);
         
         if (tc == null) {
             if (obj instanceof Alias) {
                 Alias aliasType = (Alias)obj;
                 tc = orb.create_alias_tc(aliasType.getRepositoryID(), 
                                          getTypeCodeName(aliasType.getName()), 
-                                         getTypeCode(orb, aliasType.getBasetype(), typeMaps));        
+                                         getTypeCode(orb, aliasType.getBasetype(), typeMap));        
             } else if (obj instanceof Array) {
                 Array arrayType = (Array)obj;
                 tc = orb.create_array_tc((int) arrayType.getBound(), 
-                                         getTypeCode(orb, arrayType.getElemtype(), typeMaps));
+                                         getTypeCode(orb, arrayType.getElemtype(), typeMap));
             } else if (obj instanceof Enum) {
                 Enum enumType = (Enum)obj;
                 String name = enumType.getName();
@@ -182,7 +173,7 @@
                 for (int i = 0; i < members.length; ++i) {
                     MemberType member = (MemberType) list.get(i);
                     members[i] = new StructMember(member.getName(), 
-                                                  getTypeCode(orb, member.getIdltype(), typeMaps), null);
+                                                  getTypeCode(orb, member.getIdltype(), typeMap), null);
                 }
                 String name = getTypeCodeName(exceptType.getName());
                 tc = orb.create_exception_tc(exceptType.getRepositoryID(), name, members);
@@ -201,7 +192,7 @@
             } else if (obj instanceof Sequence) {
                 Sequence seqType = (Sequence)obj;
                 tc = orb.create_sequence_tc((int) seqType.getBound(), 
-                                            getTypeCode(orb, seqType.getElemtype(), typeMaps));
+                                            getTypeCode(orb, seqType.getElemtype(), typeMap));
             } else if (obj instanceof Struct) {
                 Struct structType = (Struct)obj;
                 
@@ -211,30 +202,30 @@
                 for (int i = 0; i < members.length; ++i) {
                     MemberType member = (MemberType) list.get(i);
                     members[i] = new StructMember(member.getName(), 
-                                                  getTypeCode(orb, member.getIdltype(), typeMaps), null);
+                                                  getTypeCode(orb, member.getIdltype(), typeMap), null);
                 }
                 String name = getTypeCodeName(structType.getName());
                 tc = orb.create_struct_tc(structType.getRepositoryID(), name, members);
             } else if (obj instanceof Union) {
-                tc = getUnionTypeCode(orb, obj, typeMaps);
+                tc = getUnionTypeCode(orb, obj, typeMap);
             }
         }
         return tc;
     }
     
-    private static TypeCode getAnonTypeCode(ORB orb, QName type, Object obj, List<CorbaTypeMap> typeMaps) {
+    private static TypeCode getAnonTypeCode(ORB orb, QName type, Object obj, CorbaTypeMap typeMap) {
         TypeCode tc = null;
         if (obj instanceof Anonarray) {
             Anonarray anonArrayType = (Anonarray)obj;
             tc = orb.create_array_tc((int) anonArrayType.getBound(), 
-                                     getTypeCode(orb, anonArrayType.getElemtype(), typeMaps));
+                                     getTypeCode(orb, anonArrayType.getElemtype(), typeMap));
         } else if (obj instanceof Anonfixed) {
             Anonfixed anonFixedType = (Anonfixed) obj;
             tc = orb.create_fixed_tc((short) anonFixedType.getDigits(), (short) anonFixedType.getScale());
         } else if (obj instanceof Anonsequence) {
             Anonsequence anonSeqType = (Anonsequence)obj;
             tc = orb.create_sequence_tc((int) anonSeqType.getBound(), 
-                                        getTypeCode(orb, anonSeqType.getElemtype(), typeMaps));
+                                        getTypeCode(orb, anonSeqType.getElemtype(), typeMap));
         } else if (obj instanceof Anonstring) {
             Anonstring anonStringType = (Anonstring)obj;
             tc = orb.create_string_tc((int)anonStringType.getBound());
@@ -245,10 +236,10 @@
         return tc;
     }
 
-    public static TypeCode getUnionTypeCode(ORB orb, Object obj, List<CorbaTypeMap> typeMaps) {
+    public static TypeCode getUnionTypeCode(ORB orb, Object obj, CorbaTypeMap typeMap) {
         Union unionType = (Union)obj;
         
-        TypeCode discTC = getTypeCode(orb, unionType.getDiscriminator(), typeMaps);
+        TypeCode discTC = getTypeCode(orb, unionType.getDiscriminator(), typeMap);
         Map<String, UnionMember> members = new LinkedHashMap<String, UnionMember>();
         List<Unionbranch> branches = unionType.getUnionbranch();
         for (Iterator<Unionbranch> branchIter = branches.iterator(); branchIter.hasNext();) {
@@ -259,7 +250,7 @@
                 if (!members.containsKey(cs.getLabel())) {
                     UnionMember member = new UnionMember();
                     member.name = branch.getName();
-                    member.type = getTypeCode(orb, branch.getIdltype(), typeMaps);
+                    member.type = getTypeCode(orb, branch.getIdltype(), typeMap);
                     member.label = orb.create_any();
                     // We need to insert the labels in a way that depends on the type of the discriminator.  
                     // According to the CORBA specification, the following types are permissable as 
@@ -297,7 +288,7 @@
                         break;
                     case TCKind._tk_enum:
                         org.omg.CORBA.portable.OutputStream out = member.label.create_output_stream();
-                        Enum enumVal = (Enum)getCorbaType(unionType.getDiscriminator(), typeMaps);
+                        Enum enumVal = (Enum)getCorbaType(unionType.getDiscriminator(), typeMap);
                         List<Enumerator> enumerators = enumVal.getEnumerator();
                         for (int i = 0; i < enumerators.size(); ++i) {
                             Enumerator e = enumerators.get(i);
@@ -323,10 +314,9 @@
     }
 
     public static String getTypeCodeName(String name) {
-        int pos = name.indexOf(".");
-        while (pos != -1) {
+        int pos = name.lastIndexOf(".");
+        if (pos != -1) {
             name = name.substring(pos + 1);
-            pos = name.indexOf(".");
         }
         return name;
     }
@@ -355,59 +345,40 @@
         return PRIMITIVE_TYPECODES.values().contains(tc.kind());
     }
 
-    public static CorbaTypeImpl getCorbaType(QName idlType, List<CorbaTypeMap> typeMaps) {
+    public static CorbaTypeImpl getCorbaType(QName idlType, CorbaTypeMap typeMap) {
         CorbaTypeMap currentMap = null;
-        if (!isPrimitiveIdlType(idlType)) {
-            for (int i = 0; i < typeMaps.size(); ++i) {
-                currentMap = typeMaps.get(i);
-                if (currentMap.getTargetNamespace().equals(idlType.getNamespaceURI())) {
-                    return (CorbaTypeImpl) currentMap.getType(idlType.getLocalPart());
-                }
-            }
+        if (!isPrimitiveIdlType(idlType) && (typeMap != null)) {
+            return (CorbaTypeImpl) typeMap.getType(idlType.getLocalPart());
         }
         return null;
     }
 
-    public static void createCorbaTypeMap(List<CorbaTypeMap> typeMaps, List<TypeMappingType> tmTypes) {
+    public static CorbaTypeMap createCorbaTypeMap(List<TypeMappingType> tmTypes) {
+        CorbaTypeMap map = null;
         if (tmTypes != null) {
-            for (int i = 0; i < tmTypes.size(); i++) {
-                TypeMappingType tmType = tmTypes.get(i);
-
-                CorbaTypeMap map = null;
-                for (Iterator<CorbaTypeMap> it = typeMaps.iterator(); it.hasNext();) {
-                    CorbaTypeMap tm = it.next();
-                    if (tm.getTargetNamespace().equals(tmType.getTargetNamespace())) {
-                        LOG.info("Found an existing typemap with the same namespace");
-                        map = tm;
-                        break;
-                    }
-                }
-
-                if (map == null) {
-                    map = new CorbaTypeMap(tmType.getTargetNamespace());
-                    typeMaps.add(map);
+            //Currently, only one type map
+            TypeMappingType tmType = tmTypes.get(0);
+            map = new CorbaTypeMap(tmType.getTargetNamespace());
+
+            List<CorbaTypeImpl> types = tmType.getStructOrExceptionOrUnion();
+            LOG.info("Found " + types.size() + " types defined in the typemap");
+            for (Iterator<CorbaTypeImpl> it = types.iterator(); it.hasNext();) {
+                CorbaTypeImpl corbaType = it.next();
+                String name = corbaType.getName();
+                // There can be some instances where a prefix is added to the name by the tool
+                // (e.g. Object Reference Names).  Since the name is read as a string, this
+                // prefix is added to the types name.  Remove this as it is not needed.
+                int pos = name.lastIndexOf(":");
+                if (pos != -1) {
+                    name = name.substring(pos + 1);
+                    corbaType.setName(name);
                 }
-
-                LOG.info("Found typemap in WSDL (Namespace: " + tmType.getTargetNamespace() + ")");
-
-                List<CorbaTypeImpl> types = tmType.getStructOrExceptionOrUnion();
-                LOG.info("Found " + types.size() + " types defined in the typemap");
-                for (Iterator<CorbaTypeImpl> it = types.iterator(); it.hasNext();) {
-                    CorbaTypeImpl corbaType = it.next();
-                    String name = corbaType.getName();
-                    // There can be some instances where a prefix is added to the name by the tool
-                    // (e.g. Object Reference Names).  Since the name is read as a string, this
-                    // prefix is added to the types name.  Remove this as it is not needed.
-                    if (name.indexOf(':') >= 0) {
-                        name = name.substring(name.lastIndexOf(':') + 1);
-                        corbaType.setName(name);
-                    }
                     
-                    map.addType(name, corbaType);
-                    LOG.info("Adding type " + name);
-                }
+                map.addType(name, corbaType);
+                LOG.info("Adding type " + name);
             }
         }
+        return map;
     }
     
     public static void exportObjectReferenceToFile(org.omg.CORBA.Object obj, ORB orb, String iorFile) 
@@ -528,6 +499,17 @@
             return isAttributeFormQualified(extSchema.getSchema(), uri);
         }
         return false;
+    }
+
+
+    public static QName processQName(QName qname, ServiceInfo serviceInfo) {
+        QName result = qname;
+        if ((qname.getNamespaceURI() != null)
+            && (!qname.getNamespaceURI().equals(""))
+            && (!isElementFormQualified(serviceInfo, qname.getNamespaceURI()))) {
+            result = new QName("", qname.getLocalPart());
+        }
+        return result;
     }
 
     static {