private void writeLooseUnmarshal()

in openwire-generator/src/main/java/org/apache/activemq/openwire/generator/builtin/UniversalMarshallerGenerator.java [439:541]


    private void writeLooseUnmarshal(PrintWriter out, OpenWireTypeDescriptor openWireType) {
        out.println("    /**");
        out.println("     * Un-marshal an object instance from the data input stream");
        out.println("     *");
        out.println("     * @param target the object to un-marshal");
        out.println("     * @param dataIn the data input stream to build the object from");
        out.println("     *");
        out.println("     * @throws IOException if an error occurs while writing the data");
        out.println("     */");
        out.println("    public void looseUnmarshal(OpenWireFormat wireFormat, Object target, DataInput dataIn) throws IOException {");
        out.println("        super.looseUnmarshal(wireFormat, target, dataIn);");

        if (openWireType.hasProperties()) {
            out.println("");
            out.println("        " + openWireType.getTypeName() + " info = (" + openWireType.getTypeName() + ") target;");
            if (isOpenWireVersionNeeded(openWireType)) {
                out.println("        int version = wireFormat.getVersion();");
            }
            out.println("");
        }

        if (openWireType.isMarshalAware()) {
            out.println("        info.beforeUnmarshall(wireFormat);");
        }

        for (final OpenWirePropertyDescriptor property : openWireType.getProperties()) {
            final int size = property.getSize();
            final String typeName = property.getTypeName();
            final String setter = property.getSetterName();

            String indent = "        ";
            if (property.getVersion() > 1) {
                indent = indent + "    ";
                out.println("        if (version >= " + property.getVersion() + ") {");
            }

            if (property.isArray() && !typeName.equals("byte[]")) {
                final String arrayType = property.getType().getComponentType().getSimpleName();

                if (size > 0) {
                    out.println(indent + "{");
                    out.println(indent + "    " + arrayType + " value[] = new " + arrayType + "[" + size + "];");
                    out.println(indent + "    " + "for (int i = 0; i < " + size + "; i++) {");
                    out.println(indent + "        value[i] = (" + arrayType + ") looseUnmarsalNestedObject(wireFormat,dataIn);");
                    out.println(indent + "    }");
                    out.println(indent + "    info." + setter + "(value);");
                    out.println(indent + "}");
                } else {
                    out.println(indent + "if (dataIn.readBoolean()) {");
                    out.println(indent + "    short size = dataIn.readShort();");
                    out.println(indent + "    " + arrayType + " value[] = new " + arrayType + "[size];");
                    out.println(indent + "    for (int i = 0; i < size; i++) {");
                    out.println(indent + "        value[i] = (" + arrayType + ") looseUnmarsalNestedObject(wireFormat,dataIn);");
                    out.println(indent + "    }");
                    out.println(indent + "    info." + setter + "(value);");
                    out.println(indent + "} else {");
                    out.println(indent + "    info." + setter + "(null);");
                    out.println(indent + "}");
                }
            } else {
                if (typeName.equals("boolean")) {
                    out.println(indent + "info." + setter + "(dataIn.readBoolean());");
                } else if (typeName.equals("byte")) {
                    out.println(indent + "info." + setter + "(dataIn.readByte());");
                } else if (typeName.equals("char")) {
                    out.println(indent + "info." + setter + "(dataIn.readChar());");
                } else if (typeName.equals("short")) {
                    out.println(indent + "info." + setter + "(dataIn.readShort());");
                } else if (typeName.equals("int")) {
                    out.println(indent + "info." + setter + "(dataIn.readInt());");
                } else if (typeName.equals("long")) {
                    out.println(indent + "info." + setter + "(looseUnmarshalLong(wireFormat, dataIn));");
                } else if (typeName.equals("String")) {
                    out.println(indent + "info." + setter + "(looseUnmarshalString(dataIn));");
                } else if (typeName.equals("byte[]")) {
                    if (size > 0) {
                        out.println(indent + "info." + setter + "(looseUnmarshalConstByteArray(dataIn, " + size + "));");
                    } else {
                        out.println(indent + "info." + setter + "(looseUnmarshalByteArray(dataIn));");
                    }
                } else if (typeName.equals("Buffer")) {
                    out.println(indent + "info." + setter + "(looseUnmarshalByteSequence(dataIn));");
                } else if (property.isThrowable()) {
                    out.println(indent + "info." + setter + "((" + typeName + ") looseUnmarsalThrowable(wireFormat, dataIn));");
                } else if (property.isCached()) {
                    out.println(indent + "info." + setter + "((" + typeName + ") looseUnmarsalCachedObject(wireFormat, dataIn));");
                } else {
                    out.println(indent + "info." + setter + "((" + typeName + ") looseUnmarsalNestedObject(wireFormat, dataIn));");
                }
            }

            if (property.getVersion() > 1) {
                out.println("        }");
            }
        }

        if (openWireType.isMarshalAware()) {
            out.println("");
            out.println("        info.afterUnmarshall(wireFormat);");
        }

        out.println("    }");
    }