Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
    * JBoss, Home of Professional Open Source
    * Copyright 2005, JBoss Inc., and individual contributors as indicated
    * by the @authors tag. See the copyright.txt in the distribution for a
    * full listing of individual contributors.
    *
    * This is free software; you can redistribute it and/or modify it
    * under the terms of the GNU Lesser General Public License as
    * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this software; if not, write to the Free
   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   */
 package org.jboss.xb.binding;
 
 import java.io.Writer;
 import java.util.List;
 import java.util.Map;
 import  org.jboss.logging.Logger;

Author(s):
Alexey Loubyansky
Version:
$Revision: 1958 $
 
 public abstract class AbstractMarshaller
    implements Marshaller
 {
    protected final Logger log = Logger.getLogger(getClass());
 
    protected String version = ;
    protected String encoding = ;
    protected List rootQNames = new ArrayList();
 
    protected NamespaceRegistry nsRegistry = new NamespaceRegistry();
 
    private Map classMappings = .;
    protected Map field2WildcardMap = .;
    protected Map cls2TypeMap = .;

   
Content the result is written to
 
    protected Content content = new Content();
 
    private Properties props;
 
    // Marshaller implementation
 
    public void mapClassToGlobalElement(Class cls,
                                        String localName,
                                        String namespaceUri,
                                        String schemaUrl,
                                        ObjectModelProvider provider)
    {
       GenericObjectModelProvider delProv = null;
       if(provider != null)
       {
          delProv = provider instanceof GenericObjectModelProvider ?
          (GenericObjectModelProvider)provider :
          new DelegatingObjectModelProvider(provider);
       }
 
       ClassMapping mapping = new ClassMapping(cls,
          localName,
          null,
          namespaceUri,
          schemaUrl,
          delProv
       );
 
       addClassMapping(mapping);
    }
 
    public void mapClassToGlobalType(Class cls,
                                     String localName,
                                     String nsUri,
                                     String schemaUrl,
                                     ObjectModelProvider provider)
    {
      ClassMapping mapping = new ClassMapping(cls,
         null,
         localName,
         nsUri,
         schemaUrl,
         provider instanceof GenericObjectModelProvider ?
         (GenericObjectModelProvider)provider :
         new DelegatingObjectModelProvider(provider)
      );
      addClassMapping(mapping);
   }
   public void mapFieldToWildcard(Class clsString fieldObjectLocalMarshaller marshaller)
   {
      FieldToWildcardMapping mapping = new FieldToWildcardMapping(clsfieldmarshaller);
      switch(.size())
      {
         case 0:
             = Collections.singletonMap(clsmapping);
            break;
         case 1:
             = new HashMap();
         default:
            .put(clsmapping);
      }
   }
   public void mapClassToXsiType(Class clsString typeNsString typeLocalPart)
   {
      QName typeQName = new QName(typeNstypeLocalPart);
      switch(.size())
      {
         case 0:
             = Collections.singletonMap(clstypeQName);
            break;
         case 1:
             = new HashMap();
         default:
            .put(clstypeQName);
      }
      if(.isTraceEnabled())
      {
         .trace("mapped " + cls + " to xsi:type " + typeQName);
      }
   }
   public void setVersion(String version)
   {
      this. = version;
   }
   public void setEncoding(String encoding)
   {
      this. = encoding;
   }
   public void mapPublicIdToSystemId(String publicIdString systemId)
   {
      throw new UnsupportedOperationException();
   }
   public void addRootElement(String namespaceUriString prefixString name)
   {
      addRootElement(new QName(namespaceUrinameprefix));
   }
   public void addRootElement(QName qName)
   {
      .add(qName);
   }
   public void setProperty(String nameString value)
   {
      if( == null)
      {
          = new Properties();
      }
      .setProperty(namevalue);
   }
   public String getProperty(String name)
   {
      return  == null ? null : .getProperty(name);
   }

   
Defines a namespace. The namespace declaration will appear in the root element.

If prefix argument is null or is an empty string then the passed in URI will be used for the default namespace, i.e. xmlns. Otherwise, the declaration will follow the format xmlns:prefix=uri.

If the namespace with the given prefix was already declared, its value is overwritten.

Parameters:
prefix the prefix for the namespace to declare (can be null or empty string)
uri the URI of the namespace.
   public void declareNamespace(String prefixString uri)
   {
      if(prefix == null)
      {
         return;
      }
      .addPrefixMapping(prefixuri);
   }
   public void removePrefixMapping(String prefix)
   {
      .removePrefixMapping(prefix);
   }
   public String getPrefix(String ns)
   {
      String prefix = .getPrefix(ns);
      if(prefix == null && ..equals(ns))
      {
         prefix = "xml";
      }
      return prefix;
   }
   protected void declareNs(AttributesImpl attrs)
   {
      for(Iterator i = .getRegisteredURIs(); i.hasNext();)
      {
         String uri = (String)i.next();
         String prefix = .getPrefix(uri);
         declareNs(attrsprefixuri);
      }
   }
   protected static void declareNs(AttributesImpl attrsString prefixString ns)
   {
      attrs.add(nullprefixprefix.length() == 0 ? "xmlns" : "xmlns:" + prefix"CDATA"ns);
   }

   
Adds xsi:type attribute and optionally declares namespaces for xsi and type's namespace.

Parameters:
typeQName the type to declare xsi:type attribute for
attrs the attributes to add xsi:type attribute to
Returns:
prefix for the type's ns if it was generated
   protected String declareXsiType(QName typeQNameAttributesImpl attrs)
   {
      String result = null;
      if(xsiPrefix == null)
      {
         declareNs(attrs"xsi".);
         xsiPrefix = "xsi";
      }
      String pref = getPrefix(typeQName.getNamespaceURI());
      if(pref == null)
      {
         // the ns is not declared
         result = pref = typeQName.getLocalPart() + "_ns";
      }
      String qName = prefixLocalName(preftypeQName.getLocalPart());
      attrs.add(."type"xsiPrefix + ":type""CDATA"qName);
      return result;
   }
   protected static String prefixLocalName(String prefixString local)
   {
      return prefix == null || prefix.length() == 0 ? local : prefix + ':' + local;
   }
   public abstract void addAttribute(String prefixString localNameString typeString value);
   // Protected
   protected boolean propertyIsTrueOrNotSet(String name)
   {
      String value = getProperty(name);
      return value == null || "true".equalsIgnoreCase(value);
   }
   protected void writeXmlVersion(Writer writerthrows IOException
   {
      if(xmlVersion == null || "true".equalsIgnoreCase(xmlVersion))
      {
         writer.write("<?xml version=\"");
         writer.write();
         writer.write("\" encoding=\"");
         writer.write();
         writer.write("\"?>\n");
      }
   }
   protected ClassMapping getClassMapping(Class cls)
   {
      return (ClassMapping).get(cls);
   }
   private void addClassMapping(ClassMapping mapping)
   {
      {
          = new HashMap();
      }
      .put(mapping.clsmapping);
   }
   // Inner
   protected class ClassMapping
   {
      public final Class cls;
      public final QName elementName;
      public final QName typeName;
      public final String schemaUrl;
      public final GenericObjectModelProvider provider;
      public ClassMapping(Class cls,
                          String elementName,
                          String typeName,
                          String nsUri,
                          String schemaUrl,
                          GenericObjectModelProvider provider)
      {
         this. = cls;
         if(elementName != null)
         {
            this. = nsUri == null ? new QName(elementName) : new QName(nsUrielementName);
            this. = null;
         }
         else if(typeName != null)
         {
            this. = null;
            this. = nsUri == null ? new QName(typeName) : new QName(nsUritypeName);
         }
         else
         {
            throw new JBossXBRuntimeException("Element or type name must not null for " + cls);
         }
         this. = schemaUrl;
         this. = provider;
      }
      public boolean equals(Object o)
      {
         if(this == o)
         {
            return true;
         }
         if(o == null || getClass() != o.getClass())
         {
            return false;
         }
         final ClassMapping that = (ClassMapping)o;
         if( != null ? !.equals(that.cls) : that.cls != null)
         {
            return false;
         }
         if( != null ? !.equals(that.elementName) : that.elementName != null)
         {
            return false;
         }
         if( != null ? !.equals(that.provider) : that.provider != null)
         {
            return false;
         }
         if( != null ? !.equals(that.schemaUrl) : that.schemaUrl != null)
         {
            return false;
         }
         if( != null ? !.equals(that.typeName) : that.typeName != null)
         {
            return false;
         }
         return true;
      }
      public int hashCode()
      {
         int result;
         result = ( != null ? .hashCode() : 0);
         result = 29 * result + ( != null ? .hashCode() : 0);
         result = 29 * result + ( != null ? .hashCode() : 0);
         result = 29 * result + ( != null ? .hashCode() : 0);
         result = 29 * result + ( != null ? .hashCode() : 0);
         return result;
      }
   }
   protected class FieldToWildcardMapping
   {
      public final Class cls;
      public final ObjectLocalMarshaller marshaller;
      public final FieldInfo fieldInfo;
      public FieldToWildcardMapping(Class clsString fieldObjectLocalMarshaller marshaller)
      {
         if(.isTraceEnabled())
         {
            .trace("new FieldToWildcardMapping: [cls=" +
               cls.getName() +
               ",field=" +
               field +
               "]"
            );
         }
         this. = cls;
         this. = marshaller;
         this. = FieldInfo.getFieldInfo(clsfieldtrue);
      }
      public boolean equals(Object o)
      {
         if(this == o)
         {
            return true;
         }
         if(!(o instanceof FieldToWildcardMapping))
         {
            return false;
         }
         final FieldToWildcardMapping fieldToWildcardMapping = (FieldToWildcardMapping)o;
         if(!.equals(fieldToWildcardMapping.cls))
         {
            return false;
         }
         if(!.getName().equals(fieldToWildcardMapping.fieldInfo.getName()))
         {
            return false;
         }
         return true;
      }
      public int hashCode()
      {
         int result;
         result = .hashCode();
         result = 29 * result + .getName().hashCode();
         return result;
      }
   }
   protected static interface Stack
   {
      void clear();
      void push(Object o);
      Object pop();
      Object peek();
      boolean isEmpty();
   }
   public static class StackImpl
      implements Stack
   {
      private List list = new ArrayList();
      public void clear()
      {
         .clear();
      }
      public void push(Object o)
      {
         .add(o);
      }
      public Object pop()
      {
         return .remove(.size() - 1);
      }
      public Object peek()
      {
         return .get(.size() - 1);
      }
      public boolean isEmpty()
      {
         return .isEmpty();
      }
   }
   public class ContentHandlerAdaptor
      implements ContentHandler
   {
      public void setDocumentLocator(Locator locator)
      {
      }
      public void startDocument() throws SAXException
      {
         // this is used to marshal a fragment of a document so we don't delegate startDocument
      }
      public void endDocument() throws SAXException
      {
         // this is used to marshal a fragment of a document so we don't delegate endDocument
      }
      public void startPrefixMapping(String prefixString urithrows SAXException
      {
         .startPrefixMapping(prefixuri);
      }
      public void endPrefixMapping(String prefixthrows SAXException
      {
         .endPrefixMapping(prefix);
      }
      public void startElement(String uriString localNameString qNameAttributes attsthrows SAXException
      {
         .startElement(urilocalNameqNameatts);
      }
      public void endElement(String uriString localNameString qNamethrows SAXException
      {
         .endElement(urilocalNameqName);
      }
      public void characters(char ch[], int startint lengththrows SAXException
      {
         .characters(chstartlength);
      }
      public void ignorableWhitespace(char ch[], int startint lengththrows SAXException
      {
      }
      public void processingInstruction(String targetString datathrows SAXException
      {
      }
      public void skippedEntity(String namethrows SAXException
      {
      }
   }
New to GrepCode? Check out our FAQ X