Search in sources :

Example 1 with SMInputFactory

use of org.codehaus.staxmate.SMInputFactory in project sonarqube by SonarSource.

the class DebtRulesXMLImporter method importXML.

public List<RuleDebt> importXML(Reader xml, ValidationMessages validationMessages) {
    List<RuleDebt> ruleDebts = newArrayList();
    try {
        SMInputFactory inputFactory = initStax();
        SMHierarchicCursor cursor = inputFactory.rootElementCursor(xml);
        // advance to <sqale>
        cursor.advance();
        SMInputCursor rootCursor = cursor.childElementCursor(CHARACTERISTIC);
        while (rootCursor.getNext() != null) {
            process(ruleDebts, validationMessages, rootCursor);
        }
        cursor.getStreamReader().closeCompletely();
    } catch (XMLStreamException e) {
        throw new IllegalStateException("XML is not valid", e);
    }
    return ruleDebts;
}
Also used : SMInputCursor(org.codehaus.staxmate.in.SMInputCursor) SMHierarchicCursor(org.codehaus.staxmate.in.SMHierarchicCursor) XMLStreamException(javax.xml.stream.XMLStreamException) SMInputFactory(org.codehaus.staxmate.SMInputFactory) RuleDebt(org.sonar.server.debt.DebtModelXMLExporter.RuleDebt)

Example 2 with SMInputFactory

use of org.codehaus.staxmate.SMInputFactory in project sonarqube by SonarSource.

the class DuplicationsParser method parse.

public List<Block> parse(ComponentDto component, @Nullable String duplicationsData, DbSession session) {
    Map<String, ComponentDto> componentsByKey = newHashMap();
    List<Block> blocks = newArrayList();
    if (duplicationsData != null) {
        try {
            SMInputFactory inputFactory = initStax();
            SMHierarchicCursor root = inputFactory.rootElementCursor(new StringReader(duplicationsData));
            // <duplications>
            root.advance();
            SMInputCursor cursor = root.childElementCursor("g");
            while (cursor.getNext() != null) {
                List<Duplication> duplications = newArrayList();
                SMInputCursor bCursor = cursor.childElementCursor("b");
                while (bCursor.getNext() != null) {
                    String from = bCursor.getAttrValue("s");
                    String size = bCursor.getAttrValue("l");
                    String componentKey = bCursor.getAttrValue("r");
                    if (from != null && size != null && componentKey != null) {
                        duplications.add(createDuplication(componentsByKey, from, size, componentKey, session));
                    }
                }
                Collections.sort(duplications, new DuplicationComparator(component.uuid(), component.projectUuid()));
                blocks.add(new Block(duplications));
            }
            Collections.sort(blocks, new BlockComparator());
        } catch (XMLStreamException e) {
            throw new IllegalStateException("XML is not valid", e);
        }
    }
    return blocks;
}
Also used : ComponentDto(org.sonar.db.component.ComponentDto) SMInputFactory(org.codehaus.staxmate.SMInputFactory) SMInputCursor(org.codehaus.staxmate.in.SMInputCursor) SMHierarchicCursor(org.codehaus.staxmate.in.SMHierarchicCursor) XMLStreamException(javax.xml.stream.XMLStreamException) StringReader(java.io.StringReader)

Example 3 with SMInputFactory

use of org.codehaus.staxmate.SMInputFactory in project sonarqube by SonarSource.

the class QProfileBackuper method initStax.

private static SMInputFactory initStax() {
    XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
    xmlFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
    xmlFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);
    // just so it won't try to load DTD in if there's DOCTYPE
    xmlFactory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
    xmlFactory.setProperty(XMLInputFactory.IS_VALIDATING, Boolean.FALSE);
    return new SMInputFactory(xmlFactory);
}
Also used : SMInputFactory(org.codehaus.staxmate.SMInputFactory) XMLInputFactory(javax.xml.stream.XMLInputFactory)

Example 4 with SMInputFactory

use of org.codehaus.staxmate.SMInputFactory in project sonarqube by SonarSource.

the class XMLProfileParser method parse.

public RulesProfile parse(Reader reader, ValidationMessages messages) {
    RulesProfile profile = RulesProfile.create();
    SMInputFactory inputFactory = initStax();
    try {
        SMHierarchicCursor rootC = inputFactory.rootElementCursor(reader);
        // <profile>
        rootC.advance();
        SMInputCursor cursor = rootC.childElementCursor();
        while (cursor.getNext() != null) {
            String nodeName = cursor.getLocalName();
            if (StringUtils.equals("rules", nodeName)) {
                SMInputCursor rulesCursor = cursor.childElementCursor("rule");
                processRules(rulesCursor, profile, messages);
            } else if (StringUtils.equals("name", nodeName)) {
                profile.setName(StringUtils.trim(cursor.collectDescendantText(false)));
            } else if (StringUtils.equals("language", nodeName)) {
                profile.setLanguage(StringUtils.trim(cursor.collectDescendantText(false)));
            }
        }
    } catch (XMLStreamException e) {
        messages.addErrorText("XML is not valid: " + e.getMessage());
    }
    checkProfile(profile, messages);
    return profile;
}
Also used : SMInputCursor(org.codehaus.staxmate.in.SMInputCursor) SMHierarchicCursor(org.codehaus.staxmate.in.SMHierarchicCursor) XMLStreamException(javax.xml.stream.XMLStreamException) SMInputFactory(org.codehaus.staxmate.SMInputFactory)

Example 5 with SMInputFactory

use of org.codehaus.staxmate.SMInputFactory in project sonarqube by SonarSource.

the class RulesDefinitionXmlLoader method load.

/**
   * Loads rules by reading the XML input stream. The reader is not closed by the method, so it
   * should be handled by the caller.
   * @since 4.3
   */
public void load(RulesDefinition.NewRepository repo, Reader reader) {
    XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
    xmlFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
    xmlFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);
    // just so it won't try to load DTD in if there's DOCTYPE
    xmlFactory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
    xmlFactory.setProperty(XMLInputFactory.IS_VALIDATING, Boolean.FALSE);
    SMInputFactory inputFactory = new SMInputFactory(xmlFactory);
    try {
        SMHierarchicCursor rootC = inputFactory.rootElementCursor(reader);
        // <rules>
        rootC.advance();
        SMInputCursor rulesC = rootC.childElementCursor("rule");
        while (rulesC.getNext() != null) {
            // <rule>
            processRule(repo, rulesC);
        }
    } catch (XMLStreamException e) {
        throw new IllegalStateException("XML is not valid", e);
    }
}
Also used : SMInputCursor(org.codehaus.staxmate.in.SMInputCursor) SMHierarchicCursor(org.codehaus.staxmate.in.SMHierarchicCursor) XMLStreamException(javax.xml.stream.XMLStreamException) SMInputFactory(org.codehaus.staxmate.SMInputFactory) XMLInputFactory(javax.xml.stream.XMLInputFactory)

Aggregations

SMInputFactory (org.codehaus.staxmate.SMInputFactory)10 XMLInputFactory (javax.xml.stream.XMLInputFactory)6 XMLStreamException (javax.xml.stream.XMLStreamException)6 SMHierarchicCursor (org.codehaus.staxmate.in.SMHierarchicCursor)6 SMInputCursor (org.codehaus.staxmate.in.SMInputCursor)6 StringReader (java.io.StringReader)1 ArrayList (java.util.ArrayList)1 SonarException (org.sonar.api.utils.SonarException)1 ComponentDto (org.sonar.db.component.ComponentDto)1 RuleDebt (org.sonar.server.debt.DebtModelXMLExporter.RuleDebt)1