Example usage for org.jdom2 Element Element

List of usage examples for org.jdom2 Element Element

Introduction

In this page you can find the example usage for org.jdom2 Element Element.

Prototype

public Element(final String name) 

Source Link

Document

Create a new element with the supplied (local) name and no namespace.

Usage

From source file:ca.nrc.cadc.vos.server.RssFeed.java

License:Open Source License

/**
 * Builds a JDOM Element representing the RRS feed of set of Nodes.
 *
 * @param parent The parent Node of all other Nodes in the feed.
 * @param nodes Collection of nodes to display in the feed.
 * @param baseURL base url for the nodes resource
 * @return JDOM Element representing the RRS feed.
 *///from w w  w  . j  a  va  2s  .c  o  m
public static Element createFeed(Node parent, Collection<RssFeedItem> nodes, String baseURL) {
    // Get the title and description from the parent properties.
    String parentTitle = null;
    String parentDescription = null;
    for (NodeProperty nodeProperty : parent.getProperties()) {
        if (nodeProperty.getPropertyURI().equals(VOS.PROPERTY_URI_TITLE)) {
            parentTitle = nodeProperty.getPropertyValue();
        }
        if (nodeProperty.getPropertyURI().equals(VOS.PROPERTY_URI_DESCRIPTION)) {
            parentDescription = nodeProperty.getPropertyValue();
        }
    }

    // Root element.
    Element rss = new Element("rss");
    rss.setAttribute("version", "2.0");

    // channel element.
    Element channel = new Element("channel");
    rss.addContent(channel);

    // channel title.
    if (parentTitle == null) {
        parentTitle = "Last modified nodes for " + parent.getName();
    }
    Element channelTitle = new Element("title");
    channelTitle.setText(parentTitle);
    channel.addContent(channelTitle);

    // channel description.
    if (parentDescription == null) {
        parentDescription = nodes.size() + " last modified nodes";
    }
    Element channelDescription = new Element("description");
    channelDescription.setText(parentDescription);
    channel.addContent(channelDescription);

    // channel link.
    Element link = new Element("link");
    link.setText(baseURL + parent.getUri().getPath() + "?view=rss");
    channel.addContent(link);

    // channel author
    NodeProperty creator = parent.findProperty(VOS.PROPERTY_URI_CREATOR);
    if (creator != null && StringUtil.hasText(creator.getPropertyValue())) {
        Element author = new Element("author");
        author.setText(creator.getPropertyValue());
        channel.addContent(author);
    }
    log.debug("num nodes: " + nodes.size());
    // Create an item for each Node and add to channel.
    for (RssFeedItem rssFeedItem : nodes) {
        // Get the title, description, and date from the node properties.
        String nodeTitle = null;
        String nodeDescription = null;
        String nodeDate = null;
        for (NodeProperty nodeProperty : rssFeedItem.node.getProperties()) {
            if (nodeProperty.getPropertyURI().equals(VOS.PROPERTY_URI_TITLE)) {
                nodeTitle = nodeProperty.getPropertyValue();
            }
            if (nodeProperty.getPropertyURI().equals(VOS.PROPERTY_URI_DESCRIPTION)) {
                nodeDescription = nodeProperty.getPropertyValue();
            }
            if (nodeProperty.getPropertyURI().equals(VOS.PROPERTY_URI_DATE)) {
                nodeDate = nodeProperty.getPropertyValue();
            }
        }

        // item element.
        Element item = new Element("item");

        // item title.
        if (nodeTitle == null) {
            nodeTitle = rssFeedItem.node.getName();
        }
        Element itemTitle = new Element("title");
        itemTitle.setText(nodeTitle);
        item.addContent(itemTitle);

        // item description.
        if (nodeDescription == null) {
            if (rssFeedItem.node instanceof DataNode) {
                nodeDescription = "File";
            } else {
                nodeDescription = "Directory";
            }
        }
        Element itemDescription = new Element("description");
        itemDescription.setText(nodeDescription);
        item.addContent(itemDescription);

        // item pubDate
        if (nodeDate != null) {
            Element itemPubDate = new Element("pubDate");
            itemPubDate.setText(nodeDate);
            item.addContent(itemPubDate);
        }

        // item link, comment
        Element itemLink = new Element("link");
        Element comments = new Element("comments");
        String linkText = baseURL + rssFeedItem.node.getUri().getPath();
        if (rssFeedItem.node instanceof DataNode) {
            linkText += "?view=data";
            comments.setText("Click to download this file.");
        } else {
            linkText += "?view=rss";
            comments.setText("Click to see the last modified nodes within this directory.");
        }
        itemLink.setText(linkText);
        item.addContent(itemLink);
        item.addContent(comments);

        // item author
        creator = rssFeedItem.node.findProperty(VOS.PROPERTY_URI_CREATOR);
        if (creator != null && StringUtil.hasText(creator.getPropertyValue())) {
            Element author = new Element("author");
            author.setText(creator.getPropertyValue());
            item.addContent(author);
        }

        // Add item to channel
        channel.addContent(item);
    }
    return rss;
}

From source file:ca.nrc.cadc.vos.server.RssFeed.java

License:Open Source License

/**
 * Builds a JDOM Element representing a RRS feed that displays an error state.
 *
 * @param node The Node causing the error.
 * @param message The message to display.
 * @param baseURL base url for the nodes resource
 * @return JDOM Element representing the RRS feed.
 *//*w  ww  .j  ava2  s .  c om*/
public static Element createErrorFeed(Node node, String message, String baseURL) {
    // Root element.
    Element rss = new Element("rss");
    rss.setAttribute("version", "2.0");

    // channel element.
    Element channel = new Element("channel");
    rss.addContent(channel);

    // channel title.
    Element title = new Element("title");
    String nodeName = node.getName();
    if (nodeName == null) {
        nodeName = "unknown node";
    }
    title.setText("Error processing Node " + nodeName);
    channel.addContent(title);

    // channel link.
    Element link = new Element("link");
    String nodePath = node.getUri().getPath();
    if (nodePath == null) {
        link.setText("unknown link");
    } else {
        link.setText(baseURL + nodePath + "?view=rss");
    }
    channel.addContent(link);

    // channel description.
    Element description = new Element("description");
    description.setText(message);
    channel.addContent(description);

    return rss;
}

From source file:ca.nrc.cadc.vosi.Capability.java

License:Open Source License

public Element toXmlElement(Namespace xsi, Namespace cap, Namespace vor) {
    Element eleCapability = new Element("capability");
    eleCapability.setAttribute("standardID", _standardID);

    Element eleInterface = new Element("interface");
    eleCapability.addContent(eleInterface);

    Attribute attType = new Attribute("type", vor.getPrefix() + ":ParamHTTP", xsi);
    eleInterface.setAttribute(attType);/*from   w  w w .j av a  2 s. c  om*/
    if (_role != null)
        eleInterface.setAttribute("role", _role);

    Element eleAccessURL = new Element("accessURL");
    eleInterface.addContent(eleAccessURL);

    eleAccessURL.setAttribute("use", "full");
    eleAccessURL.setText(_hostContext + _resourceName);

    return eleCapability;
}

From source file:ca.nrc.cadc.vosi.TableSet.java

License:Open Source License

/**
 * @param cd/*from w w  w  .j  a v  a2  s . c  o m*/
 * @return
 */
private Element toXmlElement(ColumnDesc cd) {
    Element eleColumn = new Element("column");
    addChild(eleColumn, "name", cd.getColumnName());
    addChild(eleColumn, "description", cd.description);
    addChild(eleColumn, "unit", cd.unit);
    addChild(eleColumn, "ucd", cd.ucd);
    addChild(eleColumn, "utype", cd.utype);

    String datatype = cd.getDatatype();
    String[] parts = datatype.split(":");
    if (isTapType(parts)) {
        Element eleDt = addChild(eleColumn, "dataType", parts[1]);
        if (eleDt != null) {
            Attribute attType = new Attribute("type", vod.getPrefix() + ":TAPType", xsi);
            eleDt.setAttribute(attType);
            if (cd.getArraysize() != null && cd.getArraysize() > 0)
                eleDt.setAttribute("size", cd.getArraysize().toString());
        }
    } else if (isVOTableType(parts)) {
        Element eleDt = addChild(eleColumn, "dataType", parts[1]);
        if (eleDt != null) {
            Attribute attType = new Attribute("type", vod.getPrefix() + ":VOTableType", xsi);
            eleDt.setAttribute(attType);
            if (cd.getArraysize() != null && cd.getArraysize() > 0)
                eleDt.setAttribute("arraysize", cd.getArraysize().toString());
        }
    } else // custom type
    {
        log.warn("cannot convert " + cd + " to a legal VODataService column element, skipping");
        return null;
    }
    if (cd.indexed)
        addChild(eleColumn, "flag", "indexed");
    // TODO: flag=primary for primary keys? 

    return eleColumn;
}

From source file:ca.nrc.cadc.vosi.TableSet.java

License:Open Source License

private Element toXmlElement(KeyDesc kd) {
    Element ret = new Element("foreignKey");
    addChild(ret, "targetTable", kd.getTargetTable());
    for (KeyColumnDesc kc : kd.getKeyColumnDescs()) {
        Element fkc = new Element("fkColumn");
        addChild(fkc, "fromColumn", kc.getFromColumn());
        addChild(fkc, "targetColumn", kc.getTargetColumn());
        ret.addContent(fkc);/*  www . j  av  a  2 s.  co  m*/
    }
    addChild(ret, "description", kd.description);
    addChild(ret, "utype", kd.utype);
    return ret;
}

From source file:ca.nrc.cadc.vosi.TableSet.java

License:Open Source License

private Element addChild(Element eleParent, String chdName, String chdText) {
    Element ele = null;/*  ww w.j a v a2s . c o  m*/
    if (chdText != null && !chdText.equals("")) {
        ele = new Element(chdName);
        ele.setText(chdText);
        eleParent.addContent(ele);
    }
    return ele;
}

From source file:cager.parser.test.SimpleTest2.java

License:Open Source License

private void trataNodo(SimpleNode astNode, Element segmento, int nivel, String contexto) {

    int numChildren = astNode.jjtGetNumChildren();
    //TODO Solucionar referencias a Namespaces 
    Namespace xmi = Namespace.getNamespace("xmi", "http://www.omg.org/XMI");

    String contextoLocal = "";
    contextoLocal = contexto;/* w ww  .  j  a v  a2 s  .c o  m*/

    String strNombre = "";

    for (int i = 0; i < numChildren; i++) {

        strNombre = ((SimpleNode) astNode.jjtGetChild(i)).getName();

        if (astNode.jjtGetChild(i).getClass() == ASTProcDeclaration.class) {

            for (int j = 0; j < nivel; j++)
                System.out.print("\t");
            //logger.info("1. ->"+astNode.jjtGetChild(i).getClass().toString()+" - "+strNombre+" - "+" Nivel: "+nivel);
            System.out.println("1. ->" + astNode.jjtGetChild(i).getClass().toString() + " - " + strNombre
                    + " - " + " Nivel: " + nivel);

            Element codeElement = new Element("codeElement");
            codeElement.setAttribute("id", "id." + idCount, xmi);
            hsmMethodUnits.put(strNombre, idCount);
            hsmMethodUnitsObj.put(idCount, codeElement);
            contextoLocal = strNombre;
            idCount++;
            codeElement.setAttribute("name", strNombre);
            codeElement.setAttribute("type", "code:MethodUnit", xmi);
            //TODO: Comprobar que tipo de method es: Enumeration MethodKind
            codeElement.setAttribute("kind", "method");

            ASTProcDeclaration astProcDecl = (ASTProcDeclaration) astNode.jjtGetChild(i);
            String contenido = astProcDecl.allText(true);

            Element sourceElement = new Element("source");
            sourceElement.setAttribute("id", "id." + idCount, xmi);
            idCount++;
            sourceElement.setAttribute("language", "VisualBasic");
            sourceElement.setAttribute("snippet", contenido);

            codeElement.addContent(sourceElement);

            segmento.getChild("model").getChild("codeElement").addContent(codeElement);

            //<source xmi:id="id.41" language="Hla" snippet="Field5[1] -> Acc_Type[0]"/>

            //Buscar Parmetros para signature

            codeElement.addContent(TratarSignature((SimpleNode) astNode.jjtGetChild(i), strNombre));

        } else if (astNode.jjtGetChild(i) instanceof ASTName) {

            if (astNode instanceof ASTDeclare
                    && astNode.jjtGetChild(i).jjtGetParent().jjtGetChild(0).equals(astNode.jjtGetChild(i))) { //TODO: Revisar si esto es lgico.

                ASTDeclare astDeclare = (ASTDeclare) astNode;
                Element codeElement = new Element("codeElement");
                codeElement.setAttribute("id", "id." + idCount, xmi);
                hsmMethodUnits.put(strNombre, idCount);
                hsmMethodUnitsObj.put(idCount, codeElement);
                contextoLocal = strNombre;
                idCount++;
                codeElement.setAttribute("name", strNombre);
                codeElement.setAttribute("export", astDeclare.getFirstToken().toString().toLowerCase());
                codeElement.setAttribute("type", "code:MethodUnit", xmi);
                //TODO: Comprobar que tipo de method es: Enumeration MethodKind
                codeElement.setAttribute("kind", "method");

                String contenido = astDeclare.allText(true);

                Element sourceElement = new Element("source");
                sourceElement.setAttribute("id", "id." + idCount, xmi);
                idCount++;
                sourceElement.setAttribute("language", "VisualBasic");
                sourceElement.setAttribute("snippet", contenido);

                codeElement.addContent(sourceElement);

                segmento.getChild("model").getChild("codeElement").addContent(codeElement);

                //Buscar Parmetros para signature

                codeElement.addContent(TratarSignature(astNode, strNombre));

            } else if (astNode instanceof ASTVarDecl) {

                ASTDeclaration astDeclaration = null;
                String exportVal = null;
                if (astNode.jjtGetParent() instanceof ASTDeclaration) {
                    astDeclaration = (ASTDeclaration) astNode.jjtGetParent();
                    exportVal = astDeclaration.getFirstToken().toString().toLowerCase();
                }

                Element codeElement = new Element("codeElement");
                codeElement.setAttribute("id", "id." + idCount, xmi);
                String tipo = null;

                //Buscamos el tipo de la variable declarada recorriendo todos los hijos buscando el ASTTypeName
                for (int n = 0; n < astNode.jjtGetNumChildren() && tipo == null; n++) {
                    if (astNode.jjtGetChild(n) instanceof ASTTypeName) {
                        tipo = ((SimpleNode) ((SimpleNode) astNode.jjtGetChild(n)).jjtGetChild(0)).getName();
                    }
                }

                //Si no se ha encontrado comprobamos si es una declaracin mltiple y buscamos el tipo
                if (tipo == null) {

                    SimpleNode Padre = (SimpleNode) astNode.jjtGetParent();

                    for (int t = 0; t < Padre.jjtGetNumChildren() && tipo == null; t++) {

                        SimpleNode Hijo = (SimpleNode) Padre.jjtGetChild(t);

                        for (int n = 0; n < Hijo.jjtGetNumChildren(); n++) {

                            if (Hijo.jjtGetChild(n) instanceof ASTTypeName) {
                                tipo = ((SimpleNode) ((SimpleNode) Hijo.jjtGetChild(n)).jjtGetChild(0))
                                        .getName();
                            }

                        }

                    }

                }

                hsmStorableUnits.put(strNombre, idCount);
                hsmStorableUnitsObj.put(idCount, codeElement);

                Integer numeroTipo = hsmLanguajeUnitDataType.get(tipo);
                if (numeroTipo == null) {
                    numeroTipo = 13;
                }

                /*               
                if(numeroTipo == null){
                        
                  numeroTipo = idCount;
                  Element enumerated = new Element("codeElement");
                  enumerated.setAttribute("id", "id."+numeroTipo, xmi);
                  //enumerated.setAttribute("type", "code:ClassUnit", xmi);
                  enumerated.setAttribute("type", "code:StringType", xmi);
                  enumerated.setAttribute("name", tipo);
                  hsmLanguajeUnitDataType.put(tipo, numeroTipo);
                  idCount++;
                        
                                      
                  //Aadimos el enumerated a la lista de tipos
                  elementoTipos.addContent(enumerated);
                          
                }
                        
                */
                idCount++;
                codeElement.setAttribute("name", strNombre);
                //StorableUnit no permite atributo export
                //if(exportVal != null) codeElement.setAttribute("export", exportVal);
                codeElement.setAttribute("type", "code:StorableUnit", xmi);
                codeElement.setAttribute("type", "id." + numeroTipo);

                if (contextoLocal == "") {
                    codeElement.setAttribute("kind", "global");
                    segmento.getChild("model").getChild("codeElement").addContent(codeElement);
                } else {
                    codeElement.setAttribute("kind", "local");
                    Element elementAux = hsmMethodUnitsObj.get(hsmMethodUnits.get(contextoLocal));//.getChild("codeElement");
                    elementAux.addContent(codeElement);
                }
            }
        }

        trataNodo((SimpleNode) astNode.jjtGetChild(i), segmento, nivel + 1, contextoLocal);

    }
}

From source file:cager.parser.test.SimpleTest2.java

License:Open Source License

private Element TratarSignature(SimpleNode astNode, String strNombre) {

    Namespace xmi = Namespace.getNamespace("xmi", "http://www.omg.org/XMI");

    Element signature = new Element("codeElement");
    signature.setAttribute("id", "id." + idCount, xmi);
    signature.setAttribute("type", "code:Signature", xmi);
    signature.setAttribute("name", strNombre);
    idCount++;//from   w  w w .  j  a va2s  . co m

    for (int i = 0; i < astNode.jjtGetNumChildren(); i++) {

        if (astNode.jjtGetChild(i) instanceof ASTFormalParamList) {

            SimpleNode paramList = (SimpleNode) astNode.jjtGetChild(i);

            for (int j = 0; j < paramList.jjtGetNumChildren(); j++) {

                String tipo = "";
                String nombre = "";
                String valorTipo = "";
                String kind = null;

                for (int k = 0; k < paramList.jjtGetChild(j).jjtGetNumChildren(); k++) {

                    SimpleNode hijo = (SimpleNode) paramList.jjtGetChild(j).jjtGetChild(k);
                    //TODO: hacer la correspondencia token/valor del ParameterKind (byVal/byValue, etc...)

                    if (paramList.jjtGetChild(j) instanceof ASTParamSpec) {
                        ASTParamSpec param = ((ASTParamSpec) paramList.jjtGetChild(j));

                        if (param.getByVal()) {
                            kind = "byValue";
                        } else if (param.getbyRef()) {
                            kind = "byReference";
                        } else {
                            kind = null;
                        }
                    }
                    if (hijo instanceof ASTName) {
                        nombre = hijo.getName();
                    } else if (hijo instanceof ASTTypeName) {

                        if (hijo.jjtGetNumChildren() > 1) {
                            tipo = ((SimpleNode) hijo.jjtGetChild(0)).getName();
                            for (int l = 1; l < hijo.jjtGetNumChildren(); l++) {
                                tipo = tipo + "." + ((SimpleNode) hijo.jjtGetChild(l)).getName();
                            }

                        } else {
                            tipo = ((SimpleNode) hijo.jjtGetChild(0)).getName();
                        }
                    } else {
                        if (hijo instanceof ASTExpression) {
                            valorTipo = ((SimpleNode) hijo.jjtGetChild(0)).getName();
                        }
                    }

                }

                Integer numeroTipo = hsmLanguajeUnitDataType.get(tipo);

                if (numeroTipo == null) {

                    numeroTipo = idCount;
                    Element enumerated = new Element("codeElement");
                    enumerated.setAttribute("id", "id." + numeroTipo, xmi);
                    enumerated.setAttribute("type", "code:EnumeratedType", xmi);
                    enumerated.setAttribute("name", tipo);
                    hsmLanguajeUnitDataType.put(tipo, numeroTipo);
                    idCount++;

                    Element valor = new Element("value");
                    valor.setAttribute("id", "id." + idCount, xmi);
                    valor.setAttribute("name", valorTipo);
                    valor.setAttribute("type", "id." + String.valueOf(numeroTipo));
                    idCount++;

                    enumerated.addContent(valor);

                    //Aadimos el enumerated a la lista de tipos
                    elementoTipos.addContent(enumerated);

                }

                Element parameterUnit = new Element("parameterUnit");
                parameterUnit.setAttribute("id", "id." + idCount, xmi);
                parameterUnit.setAttribute("name", nombre);
                if (kind != null)
                    parameterUnit.setAttribute("kind", kind);
                parameterUnit.setAttribute("type", "id." + numeroTipo);
                parameterUnit.setAttribute("pos", String.valueOf(j));
                idCount++;

                signature.addContent(parameterUnit);

            }

            //Aadimos el tipo devuelto
            String tipo = "Void";
            for (int n = 1; n < astNode.jjtGetNumChildren(); n++) {

                if (astNode.jjtGetChild(n) instanceof ASTName) {
                    tipo = ((SimpleNode) astNode.jjtGetChild(n)).getName();
                }

            }

            Element parameterUnit = new Element("parameterUnit");
            parameterUnit.setAttribute("id", "id." + idCount, xmi);
            parameterUnit.setAttribute("type", "id." + hsmLanguajeUnitDataType.get(tipo));
            parameterUnit.setAttribute("kind", "return");
            idCount++;
            signature.addContent(parameterUnit);
        }
    }
    return signature;
}

From source file:cager.parser.test.SimpleTest2.java

License:Open Source License

private void trataNodo2(SimpleNode astNode, Element segmento, int nivel, int nivelAcumulado, String contexto) {

    int numChildren = astNode.jjtGetNumChildren();
    //TODO Solucionar referencias a Namespaces 
    Namespace xmi = Namespace.getNamespace("xmi", "http://www.omg.org/XMI");

    SimpleNode snHijo = new SimpleNode(0);

    String strNombre = "";

    String contextoLocal = "";
    contextoLocal = contexto;//from ww w.ja va 2s .  com

    strNombre = astNode.getName();

    //      if (strNombre!= null && contextoLocal.compareTo(strNombre)!=0) idName = 0;      

    if (hsmMethodUnits.get(strNombre) != null) {
        //          if (contextoLocal.compareTo(strNombre)!=0) idName = 0;
        contextoLocal = strNombre;

    }

    String espacios = "";
    for (int j = 0; j < nivelAcumulado; j++)
        espacios += "    ";
    //logger.info(espacios+"Trata nodo : "+nivel+" - "+numChildren+" -> "+astNode.getClass().getName()+" "+astNode.toString());       
    System.out.println(espacios + "Trata nodo : " + nivel + " - " + numChildren + " -> "
            + astNode.getClass().getName() + " " + astNode.toString());

    // Recorre todos los hijos del ASTNode
    for (int i = 0; i < numChildren; i++) {

        strNombre = ((SimpleNode) astNode.jjtGetChild(i)).getName();

        if ((SimpleNode) astNode.jjtGetChild(i) instanceof ASTAssignment) {

            //Preparamos el ActionElement
            Element actionElement = new Element("codeElement");
            idAction = idCount;
            idCount++;
            actionElement.setAttribute("id", "id." + idAction, xmi);
            actionElement.setAttribute("type", "action:ActionElement", xmi);
            if (this.debuggMode)
                actionElement.setAttribute("debug", astNode.jjtGetChild(i).toString());
            actionElement.setAttribute("name", "a" + idName);
            //actionElement.setAttribute("name",contexto+"_"+idName);
            idName++;
            espacios = "";
            for (int j = 0; j < nivelAcumulado; j++)
                espacios += "    ";

            //Recorre todos los nodos del ASTAssignment 
            for (int k = 0; k < ((SimpleNode) astNode.jjtGetChild(i)).jjtGetNumChildren(); k++) {

                snHijo = (SimpleNode) (astNode.jjtGetChild(i)).jjtGetChild(k);

                //Tratamos el hijo ASTPrimaryExpresion
                if (snHijo instanceof ASTPrimaryExpression) {

                    SimpleNode snNieto;

                    //Recorre todos los hijos del ASTPrimaryExpression
                    for (int l = 0; l < snHijo.jjtGetNumChildren(); l++) {

                        snNieto = (SimpleNode) snHijo.jjtGetChild(l);
                        String nombreCompleto = "";

                        for (int m = 0; m < snHijo.jjtGetNumChildren(); m++) {
                            if (m > 0)
                                nombreCompleto += ".";
                            nombreCompleto += ((SimpleNode) snHijo.jjtGetChild(m)).getName();
                        }

                        //Comprobamos si se trata de un StorableUnit reconocido
                        if (hsmStorableUnits.get(nombreCompleto) != null) {

                            //<actionRelation xmi:id="id.46" xmi:type="action:Writes" to="id.39"/>
                            Element actionRelation = new Element("actionRelation");
                            actionRelation.setAttribute("id", "id." + idCount, xmi);
                            idCount++;
                            actionRelation.setAttribute("type", "action:Writes", xmi);
                            actionRelation.setAttribute("to",
                                    "id." + String.valueOf(hsmStorableUnits.get(nombreCompleto)));
                            actionRelation.setAttribute("from", "id." + idAction);

                            actionElement.addContent(actionRelation);

                            //TODO: Revisar qu hacemos con las referencias a tributos de Objetos (Objeto.atributo = ...) ASTName y ASTName
                            //salir 
                            //TODO: Tomamos solo uno de los ASTNames hasta que sepamos cmo hacer con las properties de un objeto.
                            break;

                        } else {

                            //logger.info("Detectado un StorabeUnit nuevo!!!! Qu hacemos?");
                            System.out.println(
                                    "Detectado un StorabeUnit nuevo!!!! Que hacemos?: " + snNieto.getName());

                            //Optamos temporalmente por aadirlo como StorableUnit global.
                            //TODO: Revisar qu hacer en estos casos, ya que el parser no trata los "Begin"

                            //Comprobamos si a
                            Element codeElement = new Element("codeElement");
                            codeElement.setAttribute("id", "id." + idCount, xmi);

                            hsmStorableUnits.put(nombreCompleto, idCount);
                            hsmStorableUnitsObj.put(idCount, codeElement);

                            idCount++;
                            codeElement.setAttribute("name", nombreCompleto);
                            codeElement.setAttribute("type", "code:StorableUnit", xmi);
                            codeElement.setAttribute("type", "");

                            //codeElement.setAttribute("kind", "external");//TODO: Ver cmo tratar ste caso, variables utilizadas no definidas.
                            //Para MethodUnit no hay external
                            codeElement.setAttribute("kind", "unknown");

                            segmento.getChild("model").getChild("codeElement").addContent(codeElement);

                            //Aadimos el Action:Writes
                            //TODO: Qu hacemos con los properties de un objeto.
                            Element actionRelation = new Element("actionRelation");
                            actionRelation.setAttribute("id", "id." + idCount, xmi);
                            idCount++;
                            actionRelation.setAttribute("type", "action:Writes", xmi);
                            actionRelation.setAttribute("to",
                                    "id." + String.valueOf(hsmStorableUnits.get(nombreCompleto)));
                            actionRelation.setAttribute("from", "id." + idAction);

                            actionElement.addContent(actionRelation);

                            //salir 
                            //TODO: Tomamos solo uno de los ASTNames hasta que sepamos cmo hacer con las properties de un objeto.
                            break;
                            //l=snHijo.jjtGetNumChildren();

                        }

                    } //FIN hijos ASTPrimaryExpression

                    //Tratamos el caso de ASTExpression
                } else if (snHijo instanceof ASTExpression) {

                    SimpleNode snNieto;

                    //Recorre todos los hijos del ASTExpression
                    for (int l = 0; l < snHijo.jjtGetNumChildren(); l++) {

                        snNieto = (SimpleNode) snHijo.jjtGetChild(l);

                        //Si el hijo es un ASTName
                        if (snNieto instanceof ASTName) {

                            //Comprobamos si es un storableUnit reconocido
                            if (hsmStorableUnits.get(snNieto.getName()) != null) {

                                Element actionRelation = new Element("actionRelation");
                                actionRelation.setAttribute("id", "id." + idCount, xmi);
                                idCount++;
                                actionRelation.setAttribute("type", "action:Reads", xmi);
                                actionRelation.setAttribute("to",
                                        "id." + String.valueOf(hsmStorableUnits.get(snNieto.getName())));
                                actionRelation.setAttribute("from", "id." + idAction);

                                actionElement.addContent(actionRelation);

                                //TODO: Revisar qu hacemos con las referencias atributos de Objetos (Objeto.atributo = ...) ASTName y ASTName

                                //Si no es un storableUnit reconocido
                            } else {

                                //logger.info("Encontrado un Hijo de ASTExpression que no es ASTName");
                                System.out.println("Encontrado un Hijo de ASTExpression que no es ASTName");

                            } //FIN Comprobar si se conoce el storableUnit

                            //Si el hijo es ASTBinOp
                        } else if (snNieto instanceof ASTBinOp) {

                            //Si el hijo es ASTName 
                            if (snNieto.jjtGetChild(0) instanceof ASTName) {

                                strNombre = ((SimpleNode) (snNieto).jjtGetChild(0)).getName();

                                //Tratamos la llamada a mtodo

                                //Si la MethodUnit no estaba registrada
                                if (hsmMethodUnits.get(strNombre) == null && strNombre != null) {
                                    //idCount++;                                 
                                    //Se da de alta como nueva MethodUnit
                                    Element nuevaFuncion = new Element("codeElement");
                                    nuevaFuncion.setAttribute("id", "id." + idCount, xmi);
                                    hsmMethodUnits.put(strNombre, idCount);
                                    hsmMethodUnitsObj.put(idCount, nuevaFuncion);

                                    //logger.info("METODO: "+strNombre+": "+idCount);              
                                    System.out.println("METODO: " + strNombre + ": " + idCount);

                                    idCount++;
                                    nuevaFuncion.setAttribute("name", "" + strNombre);
                                    nuevaFuncion.setAttribute("type", "code:MethodUnit", xmi);
                                    //nuevaFuncion.setAttribute("kind", "system");  //TODO: Ver cmo tratar ste caso, funciones llamadas no definidas.
                                    //nuevaFuncion.setAttribute("kind", "unknown"); //TODO: Ver cmo tratar ste caso, funciones llamadas no definidas.
                                    //nuevaFuncion.setAttribute("kind", "external");  //Tratamos los mtodos no conocidos como de tipo exteral.
                                    //Para los MethodUnit no hay external
                                    nuevaFuncion.setAttribute("kind", "unknown");

                                    segmento.getChild("model").getChild("codeElement").addContent(nuevaFuncion);

                                    //Se registra el actionRelation (Call)                               
                                    Element actionRelation = new Element("actionRelation");
                                    actionRelation.setAttribute("id", "id." + idCount, xmi);
                                    actionRelation.setAttribute("type", "action:Calls", xmi);
                                    actionRelation.setAttribute("to",
                                            "id." + String.valueOf(hsmMethodUnits.get(strNombre)));
                                    //                                 actionRelation.setAttribute("from","id."+String.valueOf(idCount));
                                    actionRelation.setAttribute("from", "id." + idAction);
                                    idCount++;

                                    actionElement.addContent(actionRelation);

                                    //segmento.getChild("model").getChild("codeElement").addContent(codeElement);

                                    //Si el MethodUnit ya existia   
                                } else {

                                    //Se registra el actionRelation (Call)
                                    Element actionRelation = new Element("actionRelation");
                                    actionRelation.setAttribute("id", "id." + idCount, xmi);
                                    actionRelation.setAttribute("type", "action:Calls", xmi);
                                    actionRelation.setAttribute("to",
                                            "id." + String.valueOf(hsmMethodUnits.get(strNombre)));
                                    actionRelation.setAttribute("from", "id." + String.valueOf(idAction));
                                    idCount++;
                                    actionElement.addContent(actionRelation);

                                } //FIN Tratamiento la llamada a mtodo
                            } //FIN Tratar hijo ASTName
                            //TODO Hijos que no sean ASTName (Otro ASTBinOp contatenaciones 
                            // EJEMPLO ->  AFOROS.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\BaseDatos.mdb;Persist Security Info=False" 
                        } //FIN Tratamiento tipos de hijos de ASTExpression
                    } //FIN Recorrido de hijos de ASTExpression
                } //FIN Tratamiento tipos de hijos de ASTAssignment
            } //FIN Recorrido de hijos de ASTAssignment

            if (contextoLocal == "") {
                actionElement.setAttribute("kind", "global");
                segmento.getChild("model").getChild("codeElement").addContent(actionElement);
            } else {
                actionElement.setAttribute("kind", "local");
                Element elementAux = hsmMethodUnitsObj.get(hsmMethodUnits.get(contextoLocal));//.getChild("codeElement");
                elementAux.addContent(actionElement);
            }

        } else if ((SimpleNode) astNode.jjtGetChild(i) instanceof ASTStatement) {

            ASTStatement astStatement = (ASTStatement) astNode.jjtGetChild(i);

            astStatement.getClass().getName();

            //System.out.println("SENTENCIA!!"+astStatement.getClass().getName());                          

            /*            
                         switch (astStatement.getClass().getName()) {
                    
                         case "ASTIfStatement":
            System.out.println("SENTENCIA IF encontrada!!"+astStatement.getClass().getName());                
                           break;
                         case "ASTCaseStatment":
            System.out.println("SENTENCIA CASE encontrada!!"+astStatement.getClass().getName());
                            break;
                         case "ASTDoWhileStatement":
            System.out.println("SENTENCIA DOWHILE encontrada!!"+astStatement.getClass().getName());
                            break;
                         case "ASTForEachStatement":
            System.out.println("SENTENCIA FOREACH encontrada!!"+astStatement.getClass().getName());
                            break;
                         case "ASTForWhileWendStatement":
            System.out.println("SENTENCIA FORWHILE encontrada!!"+astStatement.getClass().getName());
                            break;
                         case "ASTWithStatement": 
            System.out.println("SENTENCIA WITH encontrada!!"+astStatement.getClass().getName());
                            break;            
                                   
                        default:
                           break;
                        }
            */
            if (astStatement.getClass().getName().compareTo("cager.parser.ASTIfStatement") == 0) {

                System.out.println("SENTENCIA IF encontrada!!" + astStatement.getClass().getName());
                System.out.println(((ASTIfStatement) astStatement).toString());

                //Preparamos el ActionElement
                Element actionElement = new Element("codeElement");
                idCount++;
                idAction = idCount;
                idCount++;
                actionElement.setAttribute("id", "id." + idAction, xmi);
                actionElement.setAttribute("type", "action:ActionElement", xmi);
                actionElement.setAttribute("name", "a" + idName);
                //actionElement.setAttribute("name",contexto+"_"+idName);
                idName++;
                actionElement.setAttribute("kind", "Condition");

                if (contextoLocal == "") {
                    //actionElement.setAttribute("kind", "global");
                    segmento.getChild("model").getChild("codeElement").addContent(actionElement);
                } else {
                    //actionElement.setAttribute("kind", "local");
                    Element elementAux = hsmMethodUnitsObj.get(hsmMethodUnits.get(contextoLocal));
                    elementAux.addContent(actionElement);
                }

                TratarASTIfStatement(astStatement, actionElement);

            } else if (astStatement.getClass().getName().compareTo("cager.parser.ASTCaseStatment") == 0) {
                System.out.println("SENTENCIA CASE encontrada!!" + astStatement.getClass().getName());
            } else if (astStatement.getClass().getName().compareTo("cager.parser.ASTForStatement") == 0) {
                System.out.println("SENTENCIA FOR encontrada!!" + astStatement.getClass().getName());
            } else if (astStatement.getClass().getName().compareTo("cager.parser.ASTDoWhileStatement") == 0) {
                System.out.println("SENTENCIA DOWHILE encontrada!!" + astStatement.getClass().getName());
            } else if (astStatement.getClass().getName().compareTo("cager.parser.ASTWhileWendStatement") == 0) {
                System.out.println("SENTENCIA WHILEWEND encontrada!!" + astStatement.getClass().getName());
            } else if (astStatement.getClass().getName().compareTo("cager.parser.ASTForEachStatement") == 0) {
                System.out.println("SENTENCIA FOREACH encontrada!!" + astStatement.getClass().getName());
            } else if (astStatement.getClass().getName().compareTo("cager.parser.ASTWithStatement") == 0) {
                System.out.println("SENTENCIA WITH encontrada!!" + astStatement.getClass().getName());
            } else {
                System.out.println("SENTENCIA encontrada SIN DETERMINAR!!" + astStatement.getClass().getName());
            }
        }
        trataNodo2((SimpleNode) astNode.jjtGetChild(i), segmento, nivel + 1, nivel + nivelAcumulado,
                contextoLocal);
    }
}

From source file:cager.parser.test.SimpleTest2.java

License:Open Source License

private void TratarASTIfStatement(ASTStatement astStatement, Element actionElement) {

    Namespace xmi = Namespace.getNamespace("xmi", "http://www.omg.org/XMI");
    //<actionRelation xmi:id="id.26" xmi:type="action:Reads" to="id.20" from="id.25"/>
    Element actionRelation = new Element("actionRelation");
    actionRelation.setAttribute("id", "id." + idCount, xmi);
    idCount++;/*from   ww  w . ja  v  a2  s.c o  m*/
    actionRelation.setAttribute("type", "action:Reads", xmi);
    //actionRelation.setAttribute("to", "id."+(idAction+2));//TODO calcular a dnde va
    actionRelation.setAttribute("from", "id." + idAction);

    actionElement.addContent(actionRelation);

    //<actionRelation xmi:id="id.46" xmi:type="action:Writes" to="id.39"/>
    actionRelation = new Element("actionRelation");
    actionRelation.setAttribute("id", "id." + idCount, xmi);
    idCount++;
    actionRelation.setAttribute("type", "action:TrueFlow", xmi);
    //actionRelation.setAttribute("to", "id."+(idAction+2));//TODO calcular a dnde va
    actionRelation.setAttribute("from", "id." + idAction);

    actionElement.addContent(actionRelation);

    actionRelation = new Element("actionRelation");
    actionRelation.setAttribute("id", "id." + idCount, xmi);
    idCount++;
    actionRelation.setAttribute("type", "action:FalseFlow", xmi);
    //actionRelation.setAttribute("to", "id."+(idAction+1));//TODO calcular a dnde va
    actionRelation.setAttribute("from", "id." + idAction);

    actionElement.addContent(actionRelation);

    //      <codeElement xmi:id="id.34" xmi:type="action:ActionElement" name="a3.1" kind="Condition">
    //          <actionRelation xmi:id="id.35" xmi:type="action:Reads" to="id.29" from="id.34"/>
    //          <actionRelation xmi:id="id.36" xmi:type="action:TrueFlow" to="id.38" from="id.28"/>
    //          <actionRelation xmi:id="id.37" xmi:type="action:FalseFlow" to="id.42" from="id.34"/>
    //       </codeElement>

    //         <codeElement xmi:id="id.111" xmi:type="action:ActionElement" name="p5.2" kind="GreaterThan">
    //            <actionRelation xmi:id="id.112" xmi:type="action:Reads" to="id.104" from="id.111"/>
    //            <actionRelation xmi:id="id.113" xmi:type="action:TrueFlow" to="id.115" from="id.111"/>
    //            <actionRelation xmi:id="id.114" xmi:type="action:FalseFlow" to="id.120" from="id.111"/>
    //         </codeElement>

    /*
             
    <codeElement xmi:id="id.25" xmi:type="action:ActionElement" name="1.3" kind="Condition">
       <actionRelation xmi:id="id.26" xmi:type="action:Reads" to="id.20" from="id.25"/>
       <actionRelation xmi:id="id.27" xmi:type="action:TrueFlow" to="id.29" from="id.25"/>
       <actionRelation xmi:id="id.28" xmi:type="action:FalseFlow" to="id.39" from="id.25"/>
    </codeElement>
            
    <codeElement xmi:id="id.75" xmi:type="action:ActionElement" name="a1" kind="Condition">
    <actionRelation xmi:id="id.76" xmi:type="action:TrueFlow" to="id.77" from="id.75" />
    <actionRelation xmi:id="id.77" xmi:type="action:FalseFlow" to="id.76" from="id.75" />
    </codeElement>
             
    */

}