Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@
*.bak
*.swp
*~.nib
/bin/
17 changes: 17 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>CodeMetropolis</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ CodeMetropolis
See your software as never before.

Official community page: https://plus.google.com/communities/110235162339639686953

BlockModifier-API aviable at: https://github.com/blip24/BlockModifier-API
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import codemetropolis.toolchain.commons.cdf.converter.CdfConverter;
import codemetropolis.toolchain.converter.sonarqube.SonarQubeConverter;
import codemetropolis.toolchain.converter.sourcemeter.GraphConverter;
import codemetropolis.toolchain.converter.pmd.PmdConverter;

public class ConverterLoader {

Expand All @@ -16,6 +17,8 @@ public static CdfConverter load(ConverterType converterType, Map<String, String>
return new GraphConverter(params);
case SONARQUBE:
return new SonarQubeConverter(params);
case PMD:
return new PmdConverter(params);
default:
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@

public enum ConverterType {
SOURCEMETER,
SONARQUBE
SONARQUBE,
PMD
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package codemetropolis.toolchain.converter.pmd;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import codemetropolis.toolchain.commons.cdf.CdfElement;
import codemetropolis.toolchain.commons.cdf.CdfTree;
import codemetropolis.toolchain.commons.cdf.converter.CdfConverter;
import codemetropolis.toolchain.commons.exceptions.CodeMetropolisException;
import graphlib.AttributeString;
import graphlib.Edge.EdgeIterator;
import graphlib.Edge.EdgeType;
import graphlib.Edge.eDirectionType;
import codemetropolis.toolchain.commons.cdf.CdfProperty;

public class PmdConverter extends CdfConverter {

int vCounter = 0;

public PmdConverter(Map<String, String> params) {
super(params);
}

@Override
public CdfTree createElements(String source) throws CodeMetropolisException {

vCounter = 0;
Document doc = loadXml(source);
CdfElement root = createElementsRecursively(doc);
CdfTree tree = new CdfTree();
tree.setRoot(root);
return tree;
}

public CdfElement createElementsRecursively(Node root) {
CdfElement element = null;
element = cdfConvert(root);
if (element != null) {
addProperties(element, root);
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
CdfElement e = createElementsRecursively(children.item(i));
if (e != null) {
element.addChildElement(e);
}
}
}
return element;

}

public void addProperties(CdfElement elem, Node n) {
if (n.hasAttributes()) {
NamedNodeMap map = n.getAttributes();
for (int i = 0; i < map.getLength(); i++) {

elem.addProperty(map.item(i).getNodeName(), map.item(i).getNodeValue(),
convertType(map.item(i).getNodeValue()));
}
}
}

public CdfElement cdfConvert(Node n) {
CdfElement elem = null;
switch (n.getNodeName()) {
case "violation":
elem = new CdfElement(("violation" + vCounter), "violation");
vCounter++;
break;
case "file":
elem = new CdfElement(n.getAttributes().getNamedItem("name").getNodeValue(), "file");
break;
case "#document":
case "pmd":
elem = new CdfElement(n.getNodeName(), "other");
break;
default:

break;
}

return elem;

}

public CdfProperty.Type convertType(String str) {

if (isNumeric(str))
return CdfProperty.Type.INT;
else
return CdfProperty.Type.STRING;

}

public boolean isNumeric(String str) {
if (str.chars().allMatch(Character::isDigit))
return true;
else
return false;

}

public Document parseXml(String source, DocumentBuilder dBuilder) {
File xmlFile = new File(source);
Document doc = null;
try {
doc = dBuilder.parse(xmlFile);
} catch (SAXException e) {
System.out.println("Parsing xml input has failed");
} catch (IOException e) {

System.out.println("Reading xml input has failed");
}
return doc;
}

public Document loadXml(String source) {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
;
DocumentBuilder dBuilder = null;

try {
dBuilder = dbFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
System.out.println("Parse Configuration has failed");
}
Document doc = parseXml(source, dBuilder);
return doc;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package codemetropolis.toolchain.converter.test;

import static org.junit.Assert.*;

import java.io.File;

import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

import codemetropolis.toolchain.commons.cdf.CdfElement;
import codemetropolis.toolchain.converter.pmd.PmdConverter;

public class addPropertiesTest {

@After
public void tearDown() throws Exception {
}

@Test
public void test() {
String filePath = new File("").getAbsolutePath();
PmdConverter c=new PmdConverter(null);
Document doc=c.loadXml(filePath+"//pom.xml");
boolean good=true;
Node n=doc;
CdfElement elem=new CdfElement();
c.addProperties(elem, n);
if(!n.hasAttributes()){
if(!elem.getProperties().isEmpty())
good=false;
}
else
{
int n1=elem.getProperties().size();
int n2=n.getAttributes().getLength();
if(n1!=n2) good=false;
}
Assert.assertTrue(good);


}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package codemetropolis.toolchain.converter.test;

import static org.junit.Assert.*;

import java.io.File;

import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

import codemetropolis.toolchain.commons.cdf.CdfElement;
import codemetropolis.toolchain.converter.pmd.PmdConverter;

public class cdfConvertTest {

@After
public void tearDown() throws Exception {
}

@Test
public void test() {
String filePath = new File("").getAbsolutePath();
PmdConverter c=new PmdConverter(null);
Document doc=c.loadXml(filePath+"//pom.xml");
boolean good=true;
Node n=doc;
CdfElement elem=c.cdfConvert(n);

if(doc.getNodeName()=="#document"&&!elem.getName().equals("#document")) good=false;
if(doc.getNodeName()=="pmd"&&!elem.getName().equals("pmd")) good=false;
if(doc.getNodeName()=="violation"&&!elem.getType().equals("violation")) good=false;
Assert.assertTrue(good);

}



}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package codemetropolis.toolchain.converter.test;

import static org.junit.Assert.*;

import java.io.File;

import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import codemetropolis.toolchain.commons.cdf.CdfElement;
import codemetropolis.toolchain.converter.pmd.PmdConverter;

public class cdfConvertTest2 {

@After
public void tearDown() throws Exception {
}

@Test
public void test() {
String filePath = new File("").getAbsolutePath();
PmdConverter c=new PmdConverter(null);
Document doc=c.loadXml(filePath+"//pom.xml");
boolean good=true;
Node n=doc;
NodeList nl=n.getChildNodes();
for(int i=0;i<nl.getLength();i++){

CdfElement elem=c.cdfConvert(nl.item(i));
if(nl.item(i).getNodeName()=="#document"&&!elem.getName().equals("#document")) good=false;
if(nl.item(i).getNodeName()=="pmd"&&!elem.getName().equals("pmd")) good=false;
if(nl.item(i).getNodeName()=="violation"&&!elem.getType().equals("violation")) good=false;
}

Assert.assertTrue(good);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package codemetropolis.toolchain.converter.test;

import static org.junit.Assert.*;


import org.junit.After;
import org.junit.Test;

import codemetropolis.toolchain.commons.cdf.CdfProperty;
import codemetropolis.toolchain.converter.pmd.PmdConverter;
import junit.framework.Assert;


public class convertTypeTest {

@After
public void tearDown() throws Exception {
}

@Test
public void test() {
String str="asd";
String num="2";
PmdConverter c=new PmdConverter(null);

CdfProperty.Type p=c.convertType(str);
CdfProperty.Type r=c.convertType(num);

Assert.assertTrue(p==CdfProperty.Type.STRING);

Assert.assertTrue(r==CdfProperty.Type.INT);



}


}


Loading