Example usage for org.jdom2 Element setAttribute

List of usage examples for org.jdom2 Element setAttribute

Introduction

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

Prototype

public Element setAttribute(final String name, final String value, final Namespace ns) 

Source Link

Document

This sets an attribute value for this element.

Usage

From source file:ca.nrc.cadc.uws.JobWriter.java

License:Open Source License

/**
 * Get an Element representing the Job destruction.
 *
 * @return The Job destruction Element./*from   w  ww .  j a  v  a2  s .co  m*/
 */
public Element getDestruction(Job job) {
    Element element = new Element(JobAttribute.DESTRUCTION_TIME.getAttributeName(), UWS.NS);
    Date date = job.getDestructionTime();
    if (date == null)
        element.setAttribute("nil", "true", UWS.XSI_NS);
    else
        element.addContent(dateFormat.format(date));
    return element;
}

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;//from   w w w.  j a v  a 2  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++;//  w ww .j a v a2s  .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   w ww  .  j  a  v  a 2s . c  o  m

    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++;/*ww  w  . j  av a 2s.  co  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>
             
    */

}

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

License:Open Source License

private Element inicializaDataTypes() {

    // Creamos el builder basado en SAX
    SAXBuilder builder = new SAXBuilder();

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

    Element model = new Element("model");
    model.setAttribute("id", "id." + idCount, xmi);
    model.setAttribute("type", "code:CodeModel", xmi);
    idCount++;/*  ww w.  ja va  2  s .co  m*/

    Element codeElementP = new Element("codeElement");
    codeElementP.setAttribute("id", "id." + idCount, xmi);
    codeElementP.setAttribute("type", "code:LanguageUnit", xmi);
    idCount++;

    Element codeElementI = new Element("codeElement");

    for (int i = 0; i < dataTypes.length; i++) {

        codeElementI = new Element("codeElement");
        codeElementI.setAttribute("id", "id." + idCount, xmi);
        if (dataTypes[i].equals("Double") || dataTypes[i].equals("Long") || dataTypes[i].equals("Short")) {
            codeElementI.setAttribute("type", "code:DecimalType", xmi);
        } else if (dataTypes[i].equals("Byte")) {
            codeElementI.setAttribute("type", "code:OctetType", xmi);
        } else {
            codeElementI.setAttribute("type", "code:" + dataTypes[i] + "Type", xmi);
        }

        codeElementI.setAttribute("name", dataTypes[i]);

        if (!hsmLanguajeUnitDataType.containsKey(dataTypes[i])) {
            hsmLanguajeUnitDataType.put(dataTypes[i], idCount);
        }

        idCount++;

        codeElementP.addContent(codeElementI);

    }

    //model.addContent(codeElementP);      

    return codeElementP;

}

From source file:cager.parser.test.SimpleTest3.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  w w  .j  a  v a  2s  .  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);
            this.segmento = segmento;

            //<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);
                this.segmento = segmento;

                //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);
                    this.segmento = segmento;
                } 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.SimpleTest3.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  av  a 2s.  c  o  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;
                        }
                    }
                    //Se busca el nombre 
                    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 (tipo del Return)
            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.SimpleTest3.java

License:Open Source License

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

    int numChildren = astNode.jjtGetNumChildren();

    if ((SimpleNode) astNode instanceof ASTStatements) {
        System.out.println("***>" + nivel + " - " + numChildren + " -> " + astNode.getClass().getName() + " "
                + astNode.toString());/*ww w  .j  av a  2s  .c om*/
    }

    SimpleNode snHijo = new SimpleNode(0);

    String strNombre = "";

    contextoLocal = contexto;

    strNombre = astNode.getName();

    if (hsmMethodUnits.get(strNombre) != null) {
        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());       
    System.out.println(espacios + 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
                || (SimpleNode) astNode.jjtGetChild(i) instanceof ASTExpression) {

            ASTAssignment assigment = (ASTAssignment) astNode.jjtGetChild(i);

            //Preparamos el ActionElement
            Element actionElement = new Element("codeElement");
            idAction = idCount;
            idCount++;
            actionElement.setAttribute("id", "id." + idAction, xmi);

            trataExpressions(assigment, actionElement, nivelAcumulado, segmento);

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

            ASTStatement astStatement = (ASTStatement) astNode.jjtGetChild(i);
            //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++;

            trataStatements(astStatement, actionElement, segmento);

        }
        trataNodo2((SimpleNode) astNode.jjtGetChild(i), segmento, nivel + 1, nivel + nivelAcumulado,
                contextoLocal);
    }
}

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

License:Open Source License

private void trataExpressions(SimpleNode astAssignment, Element actionElement, int nivelAcumulado,
        Element segmento) {// w  w w. j av a 2  s.c o m

    SimpleNode snHijo = new SimpleNode(0);
    String strNombre = "";

    actionElement.setAttribute("type", "action:ActionElement", xmi);

    if (this.debuggMode)
        actionElement.setAttribute("debug", astAssignment.toString());
    actionElement.setAttribute("name", "a" + idName);
    idName++;

    String espacios = "";
    for (int j = 0; j < nivelAcumulado; j++)
        espacios += "    ";

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

        snHijo = (SimpleNode) astAssignment.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);
                    //                     this.segmento = segmento;

                    //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);
                            //                            this.segmento = segmento;

                            //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) 
                    else {
                        System.out.println("ESTO ES UN ASTBinOp distinto.");
                    }
                    // 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);
        //            this.segmento = segmento;
    } else {
        actionElement.setAttribute("kind", "local");
        Element elementAux = hsmMethodUnitsObj.get(hsmMethodUnits.get(contextoLocal));//.getChild("codeElement");
        elementAux.addContent(actionElement);
    }

}