Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package fr.vidal.oss.jaxb.atom.core;
  
  import org.w3c.dom.Node;
  
 
 import static java.lang.String.format;
 
 public class SimpleElementAdapter extends XmlAdapter<ElementSimpleElement> {
 
     private DocumentBuilder builder;
     private JAXBContext context;
 
     private DocumentBuilder builder() throws Exception {
         if ( == null) {
             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
              = dbf.newDocumentBuilder();
         }
         return ;
     }
 
     private JAXBContext context(Class<?> typethrows Exception {
         if ( == null) {
              = JAXBContext.newInstance(type);
         }
         return ;
     }
 
     @Override
     public Element marshal(SimpleElement simpleElementthrows Exception {
         if (simpleElement == null) {
             return null;
         }
 
         Element element = createElement(simpleElement);
         addAttributes(elementsimpleElement);
         return element;
     }
 
     private Element createElement(SimpleElement simpleElementthrows Exception {
         Document document = builder().newDocument();
         context(simpleElement.getClass())
             .createMarshaller()
             .marshal(jaxbElement(simpleElement), document);
 
         return document.getDocumentElement();
     }
 
     private JAXBElement<StringjaxbElement(SimpleElement simpleElement) {
         return new JAXBElement<>(
             qualifiedName(simpleElement),
             String.class,
             simpleElement.value()
         );
     }
 
     private void addAttributes(Element elementSimpleElement simpleElement) {
         for (Attribute attribute : simpleElement.attributes()) {
             addAttribute(elementattribute);
         }
     }
 
     private void addAttribute(Element elementAttribute attribute) {
         Namespace namespace = attribute.getNamespace();
         String attributeName = attribute.getName();
         String attributeValue = attribute.getValue();
 
         if (namespace == null) {
             element.setAttribute(attributeNameattributeValue);
             return;
         }
 
         element.setAttributeNS(
             namespace.uri(),
             format("%s:%s"namespace.prefix(), attributeName),
             attributeValue
         );
     }
 
     private QName qualifiedName(SimpleElement simpleElement) {
         Namespace namespace = simpleElement.namespace();
         if (namespace != null) {
             return new QName(namespace.uri(), simpleElement.tagName(), namespace.prefix());
         }
         return new QName(simpleElement.tagName());
     }
 
     @Override
     public SimpleElement unmarshal(Element elementthrows Exception {
         if (element == null) {
             return null;
        }
        SimpleElement.Builder result =
            SimpleElement.builder(element.getLocalName(), element.getTextContent())
            .withNamespace(namespace(element));
        NamedNodeMap attributes = element.getAttributes();
        for (int i = 0; i < attributes.getLength(); i++) {
            Node item = attributes.item(i);
            result.addAttribute(Attribute.builder(item.getLocalName(), item.getTextContent()).withNamespace(namespace(item)).build());
        }
        return result.build();
    }
    private static Namespace namespace(Node item) {
        return Namespace.builder(item.getNamespaceURI()).withPrefix(item.getPrefix()).build();
    }
New to GrepCode? Check out our FAQ X