Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Sonar, open source software quality management tool.
   * Copyright (C) 2008-2012 SonarSource
   * mailto:contact AT sonarsource DOT com
   *
   * Sonar 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 3 of the License, or (at your option) any later version.
  *
  * Sonar 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 Sonar; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
  */
 package org.sonar.plugins.pmd;
 
 import  org.jdom.CDATA;
 import  org.jdom.Document;
 import  org.jdom.Element;
 import  org.jdom.output.Format;
 import  org.jdom.output.XMLOutputter;
 
 import java.io.Writer;
 import java.util.List;
 
 public class PmdProfileExporter extends ProfileExporter {
   public PmdProfileExporter() {
     setMimeType("application/xml");
   }
 
   @Override
   public void exportProfile(RulesProfile profileWriter writer) {
     try {
       String xmlModules = exportProfile(.profile);
       writer.append(xmlModules);
     } catch (IOException e) {
       throw new SonarException("Fail to export the profile " + profilee);
     }
   }
 
   public String exportProfile(String repositoryKeyRulesProfile profile) {
     PmdRuleset tree = createPmdRuleset(repositoryKeyprofile.getActiveRulesByRepository(repositoryKey), profile.getName());
     return exportPmdRulesetToXml(tree);
   }
 
   private PmdRuleset createPmdRuleset(String repositoryKeyList<ActiveRuleactiveRulesString profileName) {
     PmdRuleset ruleset = new PmdRuleset(profileName);
     for (ActiveRule activeRule : activeRules) {
       if (activeRule.getRule().getRepositoryKey().equals(repositoryKey)) {
         String configKey = activeRule.getRule().getConfigKey();
         PmdRule rule = new PmdRule(configKey, PmdLevelUtils.toLevel(activeRule.getSeverity()));
         if ((activeRule.getActiveRuleParams() != null) && !activeRule.getActiveRuleParams().isEmpty()) {
           List<PmdPropertyproperties = new ArrayList<PmdProperty>();
           for (ActiveRuleParam activeRuleParam : activeRule.getActiveRuleParams()) {
             properties.add(new PmdProperty(activeRuleParam.getRuleParam().getKey(), activeRuleParam.getValue()));
           }
           rule.setProperties(properties);
         }
         ruleset.addRule(rule);
         processXPathRule(activeRule.getRuleKey(), rule);
       }
     }
     return ruleset;
   }
 
   void processXPathRule(String sonarRuleKeyPmdRule rule) {
     if (..equals(rule.getRef())) {
       rule.setRef(null);
       PmdProperty xpathMessage = rule.getProperty(.);
       if (xpathMessage == null) {
         throw new SonarException("Property '" + . + "' should be set for PMD rule " + sonarRuleKey);
       }
       rule.setMessage(xpathMessage.getValue());
       if (xpathExp == null) {
         throw new SonarException("Property '" + . + "' should be set for PMD rule " + sonarRuleKey);
       }
      xpathExp.setCdataValue(xpathExp.getValue());
      rule.setName(sonarRuleKey);
    }
  }
  private String exportPmdRulesetToXml(PmdRuleset pmdRuleset) {
    Element eltRuleset = new Element("ruleset");
    for (PmdRule pmdRule : pmdRuleset.getPmdRules()) {
      Element eltRule = new Element("rule");
      addAttribute(eltRule"ref"pmdRule.getRef());
      addAttribute(eltRule"class"pmdRule.getClazz());
      addAttribute(eltRule"message"pmdRule.getMessage());
      addAttribute(eltRule"name"pmdRule.getName());
      addChild(eltRule"priority"pmdRule.getPriority());
      if (pmdRule.hasProperties()) {
        Element eltProperties = new Element("properties");
        eltRule.addContent(eltProperties);
        for (PmdProperty prop : pmdRule.getProperties()) {
          Element eltProperty = new Element("property");
          eltProperty.setAttribute("name"prop.getName());
          if (prop.isCdataValue()) {
            Element eltValue = new Element("value");
            eltValue.addContent(new CDATA(prop.getCdataValue()));
            eltProperty.addContent(eltValue);
          } else {
            eltProperty.setAttribute("value"prop.getValue());
          }
          eltProperties.addContent(eltProperty);
        }
      }
      eltRuleset.addContent(eltRule);
    }
    XMLOutputter serializer = new XMLOutputter(Format.getPrettyFormat());
    StringWriter xml = new StringWriter();
    try {
      serializer.output(new Document(eltRuleset), xml);
    } catch (IOException e) {
      throw new SonarException("A exception occured while generating the PMD configuration file."e);
    }
    return xml.toString();
  }
  private void addChild(Element eltString nameString text) {
    if (text != null) {
      elt.addContent(new Element(name).setText(text));
    }
  }
  private void addAttribute(Element eltString nameString value) {
    if (value != null) {
      elt.setAttribute(namevalue);
    }
  }
New to GrepCode? Check out our FAQ X