Skip to content

Cómo aplicar un UML Profile con QVT (II) – Método java para automatizar ajustes

septiembre 11, 2012

Para facilitar este proceso que había explicado antes, hice un método java que me hace la sustitución adecuada a mis metamodelos. Hay que hacer dos cambios para que el archivo que se procesa con una transformación QVT quede con el perfil correctamente aplicado, entonces hago una sustitución de un par de cadenas de caracteres en el archivo resultado.

try {
// Check if source file exists
 String fileName = "./udmp2utp/output/test001_output.uml";
 String targetName = fileName + "out.uml";
File sourceFile = new File(fileName);
 if (!sourceFile.exists()) {
 System.out.println("Source file " + fileName
 + " does not exist");
 fail();
 }
File targetFile = new File(targetName);
// Create input and output files
 Scanner input = new Scanner(sourceFile);
 PrintWriter output = new PrintWriter(targetFile);
// cambiar líneas
// ENCABEZADO
// xmlns:utp="http:///utp.ecore">
 String headToFind = "xmlns:utp=\"http:///utp.ecore\">";
// -----------------por---------------------
// xmlns:utp="http:///schemas/utp/_zQa2cPvkEeGryt8C_nFAIg/0"
 // xsi:schemaLocation="http:///schemas/utp/_zQa2cPvkEeGryt8C_nFAIg/0 ../../Metamodels/utp.uml#_zYIA8PvkEeGryt8C_nFAIg">
String headToReemplace = "xmlns:utp=\"http:///schemas/utp/_zQa2cPvkEeGryt8C_nFAIg/0\"\n\t"
 + "xsi:schemaLocation=\"http:///schemas/utp/_zQa2cPvkEeGryt8C_nFAIg/0 "
 + "../../Metamodels/utp.uml#_zYIA8PvkEeGryt8C_nFAIg\">";
String s1 = null;
 while (input.hasNext()) {
 s1 = input.nextLine();
 if (s1.contains(headToFind)) {
 s1 = s1.replace(headToFind, "");
 output.println(s1);
 output.println(headToReemplace);
 break;
 } else {
 output.println(s1);
 }
 }
// PROFILE APPLICATION
// <profileApplication>
 // <appliedProfile
 // href="../../Metamodels/utp.uml#_17_0_12b803b5_1292364137078_17156_1878"/>
 // </profileApplication>
// -----------------por---------------------
// <profileApplication xmi:id="_xUOVIcqEEeGr09qrcP0Uig">
 // <appliedProfile
 // href="../../Metamodels/utp.uml#_17_0_12b803b5_1292364137078_17156_1878"/>
 //
 // <eAnnotations xmi:id="_xUOVIsqEEeGr09qrcP0Uig"
 // source="http://www.eclipse.org/uml2/2.0.0/UML"
 // references="../../Metamodels/utp.uml#_zYIA8PvkEeGryt8C_nFAIg"/>
 // </profileApplication>
String profApplicationToReemplace = "<profileApplication xmi:id=\"_xUOVIcqEEeGr09qrcP0Uig\">\n\t"
 + "<appliedProfile href=\"../../Metamodels/utp.uml#_17_0_12b803b5_1292364137078_17156_1878\"/>\n\t\t"
 + "<eAnnotations xmi:id=\"_xUOVIsqEEeGr09qrcP0Uig\" source=\"http://www.eclipse.org/uml2/2.0.0/UML\"\n\t\t"
 + "references=\"../../Metamodels/utp.uml#_zYIA8PvkEeGryt8C_nFAIg\"/>\n\t"
 + "</profileApplication>";
while (input.hasNext()) {
 s1 = input.nextLine();
 if (s1.contains("<profileApplication>")) {
 // debo avanzar dos líneas más
 input.nextLine();
 input.nextLine();
 output.println(profApplicationToReemplace);
 break;
 } else {
 output.println(s1);
 }
 }
while (input.hasNext()) {
 s1 = input.nextLine();
 output.println(s1);
 }
 input.close();
 output.close();
} catch (Exception e) {
 e.printStackTrace();
 fail();
 }
Anuncios

From → QVT, UML

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: