All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.javaz.uml.NewVioletParser Maven / Gradle / Ivy

The newest version!
package org.javaz.uml;

import org.javaz.util.JsonUtil;
import org.javaz.xml.XpathSaxHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.ByteArrayInputStream;
import java.io.FileWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * This is helper to parse Violet UML .class files
 */
public class NewVioletParser extends BasicVioletParser
{
    public static String START_MARKER = "";

    public HashMap parseVioletClass(String file)
    {
        try
        {
            String readContent = readContent(file);
            return parseWithXpath(readContent);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return null;
    }

    protected HashMap parseWithXpath(String content) throws Exception {

        SAXParser parser = SAXParserFactory.newInstance().newSAXParser();

        XpathSaxHandler dh = new XpathSaxHandler();

        dh.addHashToHashFillingRule("all", XpathSaxHandler.RESULTS);
        dh.addHashToHashFillingRule("bean", "all@beans,list");
        dh.addHashToHashFillingRule("edge", "all@edges,list");

        dh.addNewObjectRule("/ClassDiagramGraph", "all");
        dh.addNewObjectRule("/ClassDiagramGraph/nodes/ClassNode", "bean");
        dh.addNewObjectRule("/ClassDiagramGraph/edges/AssociationEdge", "edge");

        dh.addObjectFillingRule("/ClassDiagramGraph/nodes/ClassNode/name/text", "bean@name");
        dh.addObjectFillingRule("/ClassDiagramGraph/nodes/ClassNode@id", "bean@umlid");
        dh.addObjectFillingRule("/ClassDiagramGraph/nodes/ClassNode/attributes/text", "bean@attributes");
        dh.addObjectFillingRule("/ClassDiagramGraph/nodes/ClassNode/methods/text", "bean@methods");
        dh.addObjectFillingRule("/ClassDiagramGraph/edges/AssociationEdge/start@reference", "edge@start");
        dh.addObjectFillingRule("/ClassDiagramGraph/edges/AssociationEdge/end@reference", "edge@end");

        ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes());
        parser.parse(inputStream, dh);

        HashMap result = new HashMap();
        ArrayList objects = dh.getResults();
        if(!objects.isEmpty()) {
            Map all = (Map) objects.iterator().next();
            ArrayList beans = (ArrayList) all.get("beans");
            for (Iterator iterator = beans.iterator(); iterator.hasNext(); ) {
                Map bean = (Map) iterator.next();
                String name = (String) bean.get("name");
                bean.put("table_name", getDbName(name));
                bean.put("attributes", createAttributesFromString((String) bean.get("attributes"), name));
                bean.put("methods", createMethodsFromString((String) bean.get("methods"), name));
            }
            result.put("beans", beans);
            result.put("edges", all.get("edges"));
        }

        return result;
    }

    protected String readContent(String file)
    {
        String content = null;
        try
        {
            String wholeFile = readFile(file, Charset.forName("UTF-8"));

            content = "\n" + wholeFile.substring(wholeFile.indexOf(START_MARKER) + START_MARKER.length(), wholeFile.indexOf(END_MARKER));
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return content;
    }

    public static void main(String[] args) throws Exception
    {
        if (args.length != 2)
        {
            System.out.println("Please, specify two parameters - in violet model file and out json file");
            System.exit(0);
        }
        BasicVioletParser vp = new NewVioletParser();
        HashMap model = vp.parseVioletClass(args[0]);
        FileWriter fw = new FileWriter(args[1]);
        fw.write(JsonUtil.convertToJS(model));
        fw.close();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy