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/11 16:54:02 UTC

svn commit: r537233 - in /incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba: interceptors/ runtime/ types/

Author: bravi
Date: Fri May 11 09:54:00 2007
New Revision: 537233

URL: http://svn.apache.org/viewvc?view=rev&rev=537233
Log:
[YOKO-366] - Updates to the perf branch for initial performance framework.

Added:
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaTypeListener.java   (with props)
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties   (with props)
Modified:
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/interceptors/CorbaStreamOutInterceptor.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStreamWriter.java
    incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/interceptors/CorbaStreamOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/interceptors/CorbaStreamOutInterceptor.java?view=diff&rev=537233&r1=537232&r2=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/interceptors/CorbaStreamOutInterceptor.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/interceptors/CorbaStreamOutInterceptor.java Fri May 11 09:54:00 2007
@@ -19,17 +19,32 @@
 
 package org.apache.yoko.bindings.corba.interceptors;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 import java.util.logging.Logger;
 
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+
+import org.apache.schemas.yoko.bindings.corba.ModeType;
+import org.apache.schemas.yoko.bindings.corba.OperationType;
+import org.apache.schemas.yoko.bindings.corba.ParamType;
+import org.apache.schemas.yoko.bindings.corba.TypeMappingType;
 
 import org.apache.yoko.bindings.corba.CorbaMessage;
+import org.apache.yoko.bindings.corba.CorbaTypeMap;
 import org.apache.yoko.bindings.corba.runtime.CorbaStreamWriter;
+import org.apache.yoko.bindings.corba.utils.CorbaUtils;
+
+import org.apache.yoko.wsdl.CorbaConstants;
 
 public class CorbaStreamOutInterceptor extends AbstractPhaseInterceptor<Message> {
 
@@ -37,14 +52,39 @@
     
     public CorbaStreamOutInterceptor() {
         super();
-        setPhase(Phase.SETUP);
+        setPhase(Phase.PRE_STREAM);
     }
 
     public void handleMessage(Message msg) {
         System.out.println("CorbaStreamOutInterceptor... handleMessage...");
         CorbaMessage message = (CorbaMessage) msg;
-        
-        CorbaStreamWriter writer = new CorbaStreamWriter();
+        org.omg.CORBA.ORB orb = (org.omg.CORBA.ORB) message.get(CorbaConstants.ORB);
+        Exchange exchange = message.getExchange();
+        ServiceInfo service = exchange.get(ServiceInfo.class);
+        List<CorbaTypeMap> typeMaps = message.getCorbaTypeMap();
+        if (typeMaps == null) {
+            typeMaps = new ArrayList<CorbaTypeMap>();
+            List<TypeMappingType> corbaTypes =
+                service.getDescription().getExtensors(TypeMappingType.class);
+            if (corbaTypes != null) {
+                CorbaUtils.createCorbaTypeMap(typeMaps, corbaTypes);
+            }
+        }
+        BindingOperationInfo boi = exchange.get(BindingOperationInfo.class);
+        boolean wrap = false;
+        if (boi.isUnwrappedCapable()) {
+            wrap = true;
+        }
+        OperationType opType = boi.getExtensor(OperationType.class);
+        List<ParamType> paramTypes = opType.getParam();
+        List<ParamType> params = new ArrayList<ParamType>();
+        for (Iterator<ParamType> iter = paramTypes.iterator(); iter.hasNext();) {
+            ParamType param = iter.next();
+            if (!param.getMode().equals(ModeType.OUT)) {
+                params.add(param);
+            }
+        }
+        CorbaStreamWriter writer = new CorbaStreamWriter(orb, params, typeMaps, service, wrap);
         message.setContent(XMLStreamWriter.class, writer);
 
         message.getInterceptorChain().add(new CorbaStreamOutEndingInterceptor());

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStreamWriter.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStreamWriter.java?view=diff&rev=537233&r1=537232&r2=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStreamWriter.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/runtime/CorbaStreamWriter.java Fri May 11 09:54:00 2007
@@ -19,47 +19,123 @@
 
 package org.apache.yoko.bindings.corba.runtime;
 
+import java.util.List;
+import java.util.Stack;
+import java.util.logging.Logger;
+
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 
-
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.schemas.yoko.bindings.corba.ParamType;
+
+import org.apache.yoko.bindings.corba.CorbaTypeMap;
+
+import org.apache.yoko.bindings.corba.types.CorbaHandlerUtils;
+import org.apache.yoko.bindings.corba.types.CorbaObjectHandler;
+import org.apache.yoko.bindings.corba.types.CorbaTypeListener;
+
+import org.omg.CORBA.ORB;
+
 public class CorbaStreamWriter implements XMLStreamWriter {
 
-    QName currentElement;
-    String defaultNS = "";
-    String currentChars;
+    private static final Logger LOG = LogUtils.getL7dLogger(CorbaStreamWriter.class);
 
-    public CorbaStreamWriter() {
+    private String defaultNS = "";
+    private boolean skipWrap;
+    private ServiceInfo serviceInfo;
+    private List<CorbaTypeMap> typeMaps;
+    private List<ParamType> params;
+    private int paramCounter;
+    private ORB orb;
+    private CorbaTypeListener[] listeners;
+    private CorbaTypeListener currentTypeListener;
+
+    private Stack<QName> elements;
+    private QName paramElement;
+
+    public CorbaStreamWriter(ORB orbRef,
+                             List<ParamType> paramTypes,
+                             List<CorbaTypeMap> maps,
+                             ServiceInfo sinfo,
+                             boolean wrap) {
         //ctx = new NamespaceContextImpl();
+        orb = orbRef;
+        System.out.println("ORB: " + orb);
+        params = paramTypes;
+        typeMaps = maps;
+        serviceInfo = sinfo;
+        skipWrap = wrap;
+        listeners = new CorbaTypeListener[paramTypes.size()];
+        elements = new Stack<QName>();
+    }
+
+    public CorbaObjectHandler[] getCorbaObjects() {
+        //REVISIT, we can make the CorbaTypeListener & CorbaObjectHandler the same object.
+        CorbaObjectHandler[] handlers = new CorbaObjectHandler[listeners.length];
+        for (int i = 0; i < listeners.length; i++) {
+            handlers[i] = listeners[i].getCorbaObject();
+        }
+        return handlers;
     }
 
     public void writeStartElement(String namespaceURI, String localName)
         throws XMLStreamException {
-        currentElement = new QName(namespaceURI, localName);
-        System.out.println("Start : " + currentElement);
+        writeStartElement(null, localName, namespaceURI);
     }
 
     public void writeEndElement() throws XMLStreamException {
-        System.out.println("End: " + currentElement);
-        currentElement = null;
+        if (elements.empty()) {
+            currentTypeListener = null;
+        } else {
+            QName name = elements.pop();
+            System.out.println("End: " + name);
+            currentTypeListener.processEndElement(name);
+            if (name.equals(paramElement)) {
+                currentTypeListener = null;
+            }
+        }
     }
 
     public void writeStartElement(java.lang.String localName)
         throws XMLStreamException {
-        currentElement = new QName(defaultNS, localName);
-        System.out.println("Check the start Element: " + currentElement);
+        writeStartElement(null, localName, defaultNS);
     }
 
     public void writeStartElement(java.lang.String prefix,
                                   java.lang.String localName,
                                   java.lang.String namespaceURI)
-        throws XMLStreamException {     
-        setPrefix(prefix, namespaceURI);
-        currentElement = new QName(namespaceURI, localName, prefix);
-        System.out.println("Check the start Element: " + currentElement);
+        throws XMLStreamException {
+        if (prefix != null) {
+            setPrefix(prefix, namespaceURI);
+        }
+        System.out.println("Check the start Element: " + localName);
+        QName name = new QName(namespaceURI, localName, prefix);
+        elements.push(name);
+        if (!skipWrap) {
+            if (currentTypeListener == null) {
+                paramElement = name;
+                ParamType param = params.get(paramCounter);
+                System.out.println("Param: " + param.getName() + "-" + param.getIdltype());
+                QName idlType = param.getIdltype();
+                if (localName.equals(param.getName())) {
+                    currentTypeListener = CorbaHandlerUtils.getTypeListener(name, idlType, typeMaps, orb);
+                    listeners[paramCounter] = currentTypeListener;
+                    paramCounter++;
+                } else {
+                    throw new XMLStreamException("Expected element not found: " + param.getName()
+                                                 + " (Found " + localName + ")");
+                }
+            } else {
+                currentTypeListener.processStartElement(name);
+            }
+        } else {
+            skipWrap = false;
+        }
     }
 
     public void writeEmptyElement(java.lang.String namespaceURI,
@@ -167,8 +243,8 @@
 
     public void writeCharacters(java.lang.String text)
         throws XMLStreamException {
-        currentChars = text;
-        System.out.println("current chars: " + currentChars);
+        System.out.println("current chars: " + text);
+        currentTypeListener.processCharacters(text);
     }
 
     public void writeCharacters(char[] text,

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java?view=auto&rev=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java Fri May 11 09:54:00 2007
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+
+public abstract class AbstractCorbaTypeListener implements CorbaTypeListener {
+
+    QName currentElement;
+
+    public void processStartElement(QName name) {
+        currentElement = name;
+        System.out.println("process StartElement: " + currentElement);
+    }
+
+    public void processEndElement(QName name) {
+        System.out.println("process EndElement: " + name);
+        currentElement = null;
+    }
+
+    public abstract void processCharacters(String text);
+
+    public abstract CorbaObjectHandler getCorbaObject();
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/AbstractCorbaTypeListener.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java?view=diff&rev=537233&r1=537232&r2=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java (original)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaHandlerUtils.java Fri May 11 09:54:00 2007
@@ -20,9 +20,12 @@
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
 
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.service.model.ServiceInfo;
 
 import org.apache.schemas.yoko.bindings.corba.Alias;
@@ -57,6 +60,8 @@
 
 public class CorbaHandlerUtils {
 
+    private static final Logger LOG = LogUtils.getL7dLogger(CorbaHandlerUtils.class);
+
     public static CorbaObjectHandler createTypeHandler(ORB orb,
                                                        QName name, 
                                                        QName idlType,
@@ -431,5 +436,72 @@
             el = (XmlSchemaElement) schemaType;
         }
         return el;
+    }
+
+    public static CorbaTypeListener getTypeListener(QName name,
+                                                    QName idlType,
+                                                    List<CorbaTypeMap> typeMaps,
+                                                    ORB orb)
+        throws CorbaBindingException {
+        TypeCode tc = CorbaUtils.getTypeCode(orb, idlType, typeMaps);
+        try {
+            while (tc.kind().value() == TCKind._tk_alias) {
+                Alias alias = (Alias) CorbaUtils.getCorbaType(idlType, typeMaps);
+                if (alias == null) {
+                    throw new CorbaBindingException("Couldn't find corba alias type: " + idlType);
+                }
+                tc = tc.content_type();
+                idlType = alias.getBasetype();
+            }
+        } catch (Throwable ex) {
+            throw new CorbaBindingException(ex);
+        }
+        CorbaTypeListener result = null;
+        if (CorbaUtils.isPrimitiveIdlType(idlType)) {
+            LOG.log(Level.INFO, "Reading primitive type from XML reader");
+            result = new CorbaPrimitiveListener(name, idlType, tc, null);
+        } else {
+            CorbaTypeImpl type = CorbaUtils.getCorbaType(idlType, typeMaps);
+            switch (tc.kind().value()) {
+            case TCKind._tk_any:
+                LOG.log(Level.INFO, "Reading any type from XML reader");
+                break;
+            case TCKind._tk_array:
+                LOG.log(Level.INFO, "Reading array type from XML reader");
+                break;
+            case TCKind._tk_enum:
+                LOG.log(Level.INFO, "Reading enumeration type from XML reader");
+                break;
+            case TCKind._tk_except:
+                LOG.log(Level.INFO, "Reading exception type from XML reader");
+                break;
+            case TCKind._tk_fixed:
+                LOG.log(Level.INFO, "Reading fixed type from XML reader");
+                break;
+            case TCKind._tk_sequence:
+                LOG.log(Level.INFO, "Reading sequence type from XML reader");
+                result = new CorbaSequenceListener(name, idlType, tc, type, typeMaps, orb);
+                break;
+            case TCKind._tk_string:
+            case TCKind._tk_wstring:
+                // These will be the case if we have anonymous strings
+                LOG.log(Level.INFO, "Reading anonymous string from XML reader");
+                break;
+            case TCKind._tk_struct:
+                LOG.log(Level.INFO, "Reading struct type from XML reader");
+                result = new CorbaStructListener(name, idlType, tc, type, typeMaps, orb);
+                break;
+            case TCKind._tk_union:
+                LOG.log(Level.INFO, "Reading union type from XML reader");
+                break;
+            case TCKind._tk_objref:
+                LOG.log(Level.INFO, "Reading object reference from XML reader");
+                result = new CorbaObjectReferenceListener(name, idlType, tc, type, orb);
+                break;
+            default:
+                throw new CorbaBindingException("Unsupported complex type " + idlType);
+            }
+        }
+        return result;
     }
 }

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java?view=auto&rev=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java Fri May 11 09:54:00 2007
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+
+import org.apache.yoko.bindings.corba.utils.CorbaUtils;
+
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+
+
+public class CorbaObjectReferenceListener extends AbstractCorbaTypeListener {
+
+    private CorbaObjectReferenceHandler value;
+    private QName currentElement;
+    private ORB orb;
+
+    public CorbaObjectReferenceListener(QName objName,
+                                        QName objIdlType,
+                                        TypeCode objTC,
+                                        Object objType,
+                                        ORB orbRef) {
+        orb = orbRef;
+        value = new CorbaObjectReferenceHandler(objName, objIdlType, objTC, objType);
+        value.setReference(null);
+    }
+
+    public CorbaObjectHandler getCorbaObject() {
+        return value;
+    }
+
+    public void processCharacters(String text) {
+        //REVISIT, just checking the address for now.
+        if ((currentElement != null) && (currentElement.getLocalPart().equals("Address"))) {
+            org.omg.CORBA.Object ref = CorbaUtils.importObjectReference(orb, text);
+            value.setReference(ref);
+        }
+    }
+    
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectReferenceListener.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java?view=auto&rev=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java Fri May 11 09:54:00 2007
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+
+import org.omg.CORBA.TypeCode;
+
+public class CorbaPrimitiveListener extends AbstractCorbaTypeListener {
+
+    private CorbaPrimitiveHandler value;
+    
+    public CorbaPrimitiveListener(QName primName, QName primIdlType, TypeCode primTC, Object primType) {
+        value = new CorbaPrimitiveHandler(primName, primIdlType, primTC, primType);
+    }
+    
+    public CorbaObjectHandler getCorbaObject() {
+        return value;
+    }
+    
+    public void processCharacters(String text) {
+        value.setValueFromData(text);
+    }
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveListener.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java?view=auto&rev=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java Fri May 11 09:54:00 2007
@@ -0,0 +1,89 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.List;
+import javax.xml.namespace.QName;
+
+import org.apache.schemas.yoko.bindings.corba.Anonsequence;
+import org.apache.schemas.yoko.bindings.corba.Sequence;
+
+import org.apache.yoko.bindings.corba.CorbaTypeMap;
+
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+
+public class CorbaSequenceListener implements CorbaTypeListener {
+
+    private CorbaSequenceHandler value;
+    private QName seqElementType;
+    private QName currentElName;
+    private CorbaTypeListener currentTypeListener;
+    private ORB orb;
+    private List<CorbaTypeMap> typeMaps;
+    
+    public CorbaSequenceListener(QName seqName,
+                                 QName seqIdlType,
+                                 TypeCode seqTC,
+                                 Object seqType,
+                                 List<CorbaTypeMap> maps,
+                                 ORB orbRef) {
+        value = new CorbaSequenceHandler(seqName, seqIdlType, seqTC, seqType);
+        orb = orbRef;
+        typeMaps = maps;
+        if (seqType instanceof Anonsequence) {
+            Anonsequence anonSeqType = (Anonsequence) seqType;
+            seqElementType = anonSeqType.getElemtype();
+        } else {
+            Sequence type = (Sequence) seqType;
+            seqElementType = type.getElemtype();
+        }
+    }
+    
+    public CorbaObjectHandler getCorbaObject() {
+        return value;
+    }
+
+    public void processStartElement(QName name) {
+        System.out.println("seq process start el: " + name);
+        if (currentTypeListener == null) {
+            currentElName = name;
+            currentTypeListener =
+                CorbaHandlerUtils.getTypeListener(name,
+                                                  seqElementType,
+                                                  typeMaps,
+                                                  orb);
+            value.addElement(currentTypeListener.getCorbaObject());
+        }
+        currentTypeListener.processStartElement(name);
+    }
+
+    public void processEndElement(QName name) {
+        System.out.println("seq process end el: " + name);
+        currentTypeListener.processEndElement(name);
+        if (currentElName.equals(name)) {
+            currentTypeListener = null;
+        }
+    }
+
+    public void processCharacters(String text) {
+        System.out.println("seq process chars: " + text);
+        currentTypeListener.processCharacters(text);
+    }
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceListener.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java?view=auto&rev=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java Fri May 11 09:54:00 2007
@@ -0,0 +1,88 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.List;
+import javax.xml.namespace.QName;
+
+import org.apache.schemas.yoko.bindings.corba.MemberType;
+import org.apache.schemas.yoko.bindings.corba.Struct;
+
+import org.apache.yoko.bindings.corba.CorbaTypeMap;
+
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+
+public class CorbaStructListener implements CorbaTypeListener {
+
+    private CorbaStructHandler value;
+    private int memberCount;
+    private List<MemberType> structMembers;
+    private CorbaTypeListener currentTypeListener;
+    private QName memberElement;
+    private List<CorbaTypeMap> typeMaps;
+    private ORB orb;
+
+    public CorbaStructListener(QName structName,
+                               QName structIdlType,
+                               TypeCode structTC,
+                               Object structType,
+                               List<CorbaTypeMap> maps,
+                               ORB orbRef) {
+        value = new CorbaStructHandler(structName, structIdlType, structTC, structType);
+        orb = orbRef;
+        typeMaps = maps;
+        structMembers = ((Struct) structType).getMember();
+    }
+
+    public void processStartElement(QName name) {
+        System.out.println("struct process start el: " + name);
+        //REVISIT, assume only elements not attrs
+        if (currentTypeListener == null) {
+            memberElement = name;
+            currentTypeListener =
+                CorbaHandlerUtils.getTypeListener(name,
+                                                  structMembers.get(memberCount).getIdltype(),
+                                                  typeMaps,
+                                                  orb);
+            value.addMember(currentTypeListener.getCorbaObject());
+            memberCount++;
+        } else {
+	    currentTypeListener.processStartElement(name);
+	}
+    }
+
+    public void processEndElement(QName name) {
+        System.out.println("struct process end el: " + name);
+        currentTypeListener.processEndElement(name);
+        if (memberElement.equals(name)) {
+            currentTypeListener = null;
+        }
+    }
+
+    public void processCharacters(String text) {
+        System.out.println("struct process chars: " + text);
+        currentTypeListener.processCharacters(text);
+    }
+
+    public CorbaObjectHandler getCorbaObject() {
+        return value;
+    }
+
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructListener.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaTypeListener.java
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaTypeListener.java?view=auto&rev=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaTypeListener.java (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaTypeListener.java Fri May 11 09:54:00 2007
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+
+public interface CorbaTypeListener {
+
+    void processStartElement(QName name);
+    void processEndElement(QName name);
+    void processCharacters(String text);
+    CorbaObjectHandler getCorbaObject();
+}

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaTypeListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/CorbaTypeListener.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties?view=auto&rev=537233
==============================================================================
--- incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties (added)
+++ incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties Fri May 11 09:54:00 2007
@@ -0,0 +1,21 @@
+#
+#
+#    Licensed to the Apache Software Foundation (ASF) under one
+#    or more contributor license agreements. See the NOTICE file
+#    distributed with this work for additional information
+#    regarding copyright ownership. The ASF licenses this file
+#    to you under the Apache License, Version 2.0 (the
+#    "License"); you may not use this file except in compliance
+#    with the License. You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing,
+#    software distributed under the License is distributed on an
+#    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#    KIND, either express or implied. See the License for the
+#    specific language governing permissions and limitations
+#    under the License.
+#
+#
+// TODO: Add messages here for exceptions

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/yoko/branches/perf/src/main/java/org/apache/yoko/bindings/corba/types/Messages.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain