示例#1
0
 private void getVariables(GroovyNode groovyNode, List<MetadataVariable> variables) {
   if (groovyNode.value() instanceof GroovyList) {
     GroovyList list = (GroovyList) groovyNode.value();
     for (Object member : list) {
       GroovyNode childNode = (GroovyNode) member;
       getVariables(childNode, variables);
     }
   } else {
     List<GroovyNode> path = new ArrayList<GroovyNode>();
     GroovyNode walk = groovyNode;
     while (walk != null) {
       path.add(walk);
       walk = walk.parent();
     }
     Collections.reverse(path);
     StringBuilder out = new StringBuilder();
     Iterator<GroovyNode> nodeWalk = path.iterator();
     while (nodeWalk.hasNext()) {
       String nodeName = nodeWalk.next().name();
       out.append(nodeName);
       if (nodeWalk.hasNext()) {
         out.append('.');
       }
     }
     String variableName = out.toString();
     variables.add(new MetadataVariable(variableName, (String) groovyNode.value()));
   }
 }
示例#2
0
 public MetadataRecord fromXml(String recordContents) throws XMLStreamException {
   String recordString = createCompleteRecordString(recordContents);
   try {
     Reader reader = new StringReader(recordString);
     XMLStreamReader2 input = (XMLStreamReader2) inputFactory.createXMLStreamReader(reader);
     GroovyNode rootNode = null, node = null;
     StringBuilder value = new StringBuilder();
     while (true) {
       switch (input.getEventType()) {
         case XMLEvent.START_DOCUMENT:
           break;
         case XMLEvent.START_ELEMENT:
           if (node == null) {
             rootNode = node = new GroovyNode(null, "input");
           } else {
             node =
                 new GroovyNode(
                     node, input.getNamespaceURI(), input.getLocalName(), input.getPrefix());
           }
           if (input.getAttributeCount() > 0) {
             for (int walk = 0; walk < input.getAttributeCount(); walk++) {
               QName attributeName = input.getAttributeName(walk);
               node.attributes()
                   .put(attributeName.getLocalPart(), input.getAttributeValue(walk));
             }
           }
           value.setLength(0);
           break;
         case XMLEvent.CHARACTERS:
         case XMLEvent.CDATA:
           value.append(input.getText());
           break;
         case XMLEvent.END_ELEMENT:
           if (node == null) {
             throw new RuntimeException("Node cannot be null");
           }
           String valueString = sanitize(value.toString());
           value.setLength(0);
           if (valueString.length() > 0) {
             node.setValue(valueString);
           }
           node = node.parent();
           break;
         case XMLEvent.END_DOCUMENT:
           {
             break;
           }
       }
       if (!input.hasNext()) {
         break;
       }
       input.next();
     }
     return new MetadataRecord(rootNode, -1, -1);
   } catch (WstxParsingException e) {
     throw new XMLStreamException("Problem parsing record:\n" + recordString, e);
   }
 }
示例#3
0
 private boolean checkFor(GroovyNode groovyNode, Pattern pattern) {
   if (groovyNode.value() instanceof GroovyList) {
     GroovyList list = (GroovyList) groovyNode.value();
     for (Object member : list) {
       GroovyNode childNode = (GroovyNode) member;
       if (checkFor(childNode, pattern)) {
         return true;
       }
     }
     return false;
   } else {
     return pattern.matcher(groovyNode.text()).matches();
   }
 }
 public MetadataRecord metadataRecordFrom(String recordContents) throws XMLStreamException {
   try {
     Reader reader = new StringReader(recordContents);
     XMLStreamReader2 input = (XMLStreamReader2) inputFactory.createXMLStreamReader(reader);
     GroovyNode rootNode = null, node = null;
     StringBuilder value = new StringBuilder();
     while (true) {
       switch (input.getEventType()) {
         case XMLEvent.START_DOCUMENT:
           break;
         case XMLEvent.START_ELEMENT:
           node =
               new GroovyNode(
                   node, input.getNamespaceURI(), input.getLocalName(), input.getPrefix());
           if (rootNode == null) {
             rootNode = node;
           }
           if (input.getAttributeCount() > 0) {
             for (int walk = 0; walk < input.getAttributeCount(); walk++) {
               QName attributeName = input.getAttributeName(walk);
               if (attributeName.getPrefix() == null || attributeName.getPrefix().isEmpty()) {
                 node.attributes()
                     .put(attributeName.getLocalPart(), input.getAttributeValue(walk));
               } else {
                 node.attributes()
                     .put(
                         String.format(
                             "%s:%s", attributeName.getPrefix(), attributeName.getLocalPart()),
                         input.getAttributeValue(walk));
               }
             }
           }
           value.setLength(0);
           break;
         case XMLEvent.CHARACTERS:
           value.append(input.getText());
           break;
         case XMLEvent.CDATA:
           value.append(String.format("<![CDATA[%s]]>", input.getText()));
           break;
         case XMLEvent.END_ELEMENT:
           if (node == null) throw new RuntimeException("Node cannot be null");
           String valueString = value.toString().trim();
           value.setLength(0);
           if (valueString.length() > 0) node.setNodeValue(valueString);
           node = node.parent();
           break;
         case XMLEvent.END_DOCUMENT:
           {
             break;
           }
       }
       if (!input.hasNext()) {
         break;
       }
       input.next();
     }
     return MetadataRecord.create(rootNode, -1, -1);
   } catch (WstxParsingException e) {
     throw new XMLStreamException("Problem parsing record:\n" + recordContents, e);
   }
 }