@Test public void testRemoveApplication() throws Exception { CompilerAssert<File, File> helper = incrementalCompiler("model", "meta", "controller"); helper.assertCompile(); File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModel mm = Tools.unserialize(MetaModel.class, ser); mm.getQueue().clear(); Tools.serialize(mm, ser); // assertDelete( helper.getSourcePath().getPath("model", "meta", "controller", "package-info.java")); // helper.addClassPath(helper.getClassOutput()).assertCompile(); mm = Tools.unserialize(MetaModel.class, ser); // JSON expected = json().set("applications", json().list("values")); assertEquals(expected, mm.toJSON()); // List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(3, events.size()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(0).getType()); assertInstanceOf(ApplicationMetaModel.class, events.get(0).getObject()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(1).getType()); assertInstanceOf(ControllerMetaModel.class, events.get(1).getObject()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(2).getType()); assertInstanceOf(MethodMetaModel.class, events.get(2).getObject()); }
@Test public void testBuild() throws Exception { CompilerAssert<File, File> helper = incrementalCompiler("model", "meta", "controller"); helper.assertCompile(); // MetaModel mm = Tools.unserialize( MetaModel.class, helper.getSourceOutput().getPath("juzu", "metamodel.ser")); // JSON expected = json() .set( "applications", json() .list( "values", json() .list( "controllers", json() .set( "handle", "ElementHandle.Class[fqn=model.meta.controller.A]") .list( "methods", json() .set( "handle", "ElementHandle.Method[fqn=model.meta.controller.A,name=index,parameterTypes[]]") .set("id", null) .set("name", "index") .list("parameters") .set("phase", "RENDER"))) .set("fqn", "model.meta.controller.ControllerApplication") .set("handle", "ElementHandle.Package[qn=model.meta.controller]") .list("templates"))); assertEquals(expected, mm.toJSON()); // List<MetaModelEvent> events = mm.getQueue().clear(); ApplicationMetaModel application = mm.getChild(ApplicationsMetaModel.KEY).iterator().next(); ControllerMetaModel controller = application.getChild(ControllersMetaModel.KEY).iterator().next(); MethodMetaModel method = controller.getMethods().iterator().next(); assertEquals( Arrays.asList( MetaModelEvent.createAdded(application), MetaModelEvent.createAdded(controller), MetaModelEvent.createAdded(method), MetaModelEvent.createUpdated(controller)), events); }
@Test public void testRefactorPackageName() throws Exception { CompilerAssert<File, File> helper = incrementalCompiler("model", "meta", "controller"); helper.assertCompile(); // File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModel mm = Tools.unserialize(MetaModel.class, ser); mm.getQueue().clear(); Tools.serialize(mm, ser); // File file = helper.getSourcePath().getPath("model", "meta", "controller", "A.java"); File sub = new File(file.getParentFile(), "sub"); assertTrue(sub.mkdir()); File tmp = new File(sub, file.getName()); assertTrue(file.renameTo(tmp)); JavaFile javaFile = helper.assertJavaFile("model", "meta", "controller", "sub", "A.java"); javaFile .assertCompilationUnit() .getPackage() .setName(ASTHelper.createNameExpr("model.meta.controller.sub")); javaFile.assertSave(); // helper.addClassPath(helper.getClassOutput()).assertCompile(); mm = Tools.unserialize(MetaModel.class, ser); // List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(5, events.size()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(0).getType()); assertEquals( ElementHandle.Method.create( new FQN("model.meta.controller.A"), "index", Collections.<String>emptyList()), ((MethodMetaModel) events.get(0).getObject()).getHandle()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(1).getType()); assertEquals( ElementHandle.Class.create(new FQN("model.meta.controller.A")), ((ControllerMetaModel) events.get(1).getObject()).getHandle()); assertEquals(MetaModelEvent.AFTER_ADD, events.get(2).getType()); assertEquals( ElementHandle.Class.create(new FQN("model.meta.controller.sub.A")), ((ControllerMetaModel) events.get(2).getObject()).getHandle()); assertEquals(MetaModelEvent.AFTER_ADD, events.get(3).getType()); assertEquals( ElementHandle.Method.create( new FQN("model.meta.controller.sub.A"), "index", Collections.<String>emptyList()), ((MethodMetaModel) events.get(3).getObject()).getHandle()); assertEquals(MetaModelEvent.UPDATED, events.get(4).getType()); assertEquals( ElementHandle.Class.create(new FQN("model.meta.controller.sub.A")), ((ControllerMetaModel) events.get(4).getObject()).getHandle()); }
@Test public void testRemoveAnnotation() throws Exception { CompilerAssert<File, File> helper = incrementalCompiler("model", "meta", "controller"); helper.assertCompile(); File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModel mm = Tools.unserialize(MetaModel.class, ser); mm.getQueue().clear(); Tools.serialize(mm, ser); // JavaFile file = helper.assertJavaFile("model", "meta", "controller", "A.java"); ClassOrInterfaceDeclaration a = file.assertDeclaration(); MethodDeclaration decl = (MethodDeclaration) a.getMembers().get(0); decl.getAnnotations().clear(); file.assertSave(); // helper.addClassPath(helper.getClassOutput()).assertCompile(); mm = Tools.unserialize(MetaModel.class, ser); // JSON expected = json() .set( "applications", json() .list( "values", json() .list("controllers") .set("fqn", "model.meta.controller.ControllerApplication") .set("handle", "ElementHandle.Package[qn=model.meta.controller]") .list("templates"))); assertEquals(expected, mm.toJSON()); // List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(2, events.size()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(0).getType()); assertInstanceOf(MethodMetaModel.class, events.get(0).getObject()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(1).getType()); assertInstanceOf(ControllerMetaModel.class, events.get(1).getObject()); }
/** This method generates the output given a context and output stream */ public boolean generate(XPathContext context, ProgramWriter out) { try { String collectionName = Strings.firstUpper(collection.getName()); if (ejb) { out.print(" \n\t/**\n\t * @ejb:interface-method\n\t */"); } out.print(" \n\tpublic java.util.Collection get"); out.print(collectionName); out.print("() {"); if (ejb) { out.print( " \n\t\tboolean cmtActivated = false;\n\t\tif (!org.openxava.hibernate.XHibernate.isCmt()) {\n\t\t\torg.openxava.hibernate.XHibernate.setCmt(true);\n\t\t\tcmtActivated = true;\n\t\t}"); } out.print(" \n\t\ttry {"); MetaCalculator calculator = collection.getMetaCalculator(); String calculatorClass = calculator.getClassName(); out.print(" \t\t\n\t\t\t"); out.print(calculatorClass); out.print(" "); out.print(collection.getName()); out.print("Calculator= ("); out.print(calculatorClass); out.print(")\n\t\t\t\tgetMetaModel().getMetaCollection(\""); out.print(collection.getName()); out.print("\").getMetaCalculator().createCalculator();"); Iterator itSets = calculator.getMetaSetsWithoutValue().iterator(); while (itSets.hasNext()) { MetaSet set = (MetaSet) itSets.next(); String propertyNameInCalculator = Strings.firstUpper(set.getPropertyName()); String propertyNameFrom = set.getPropertyNameFrom(); MetaProperty p = metaModel.getMetaProperty(propertyNameFrom); if (propertyNameFrom.indexOf('.') >= 0) { if (p.isKey() || p.getMetaModel() instanceof MetaAggregate) { propertyNameFrom = Strings.firstUpper(Strings.change(propertyNameFrom, ".", "_")); } else { StringTokenizer st = new StringTokenizer(propertyNameFrom, "."); String ref = st.nextToken(); String pro = st.nextToken(); propertyNameFrom = Strings.firstUpper(ref) + "().get" + Strings.firstUpper(pro); } } else { propertyNameFrom = Strings.firstUpper(propertyNameFrom); } String getPropertyFrom = "boolean".equals(p.getTypeName()) ? "is" : "get"; String value = set.getValue(); if (set.hasValue()) { out.print(" \n\t\t\t"); out.print(collection.getName()); out.print("Calculator.set"); out.print(propertyNameInCalculator); out.print("(\""); out.print(value); out.print("\");"); } else { out.print(" \t\n\t\t\t"); out.print(collection.getName()); out.print("Calculator.set"); out.print(propertyNameInCalculator); out.print("("); out.print(getPropertyFrom); out.print(propertyNameFrom); out.print("());"); } } // else/sets if (IModelCalculator.class.isAssignableFrom(Class.forName(calculatorClass))) { out.print(" \n\t\t\t\t"); out.print(collection.getName()); out.print("Calculator.setModel(this);"); } if (IEntityCalculator.class.isAssignableFrom(Class.forName(calculatorClass))) { out.print(" \n\t\t\t\t"); out.print(collection.getName()); out.print("Calculator.setEntity(this);"); } if (IJDBCCalculator.class.isAssignableFrom(Class.forName(calculatorClass))) { out.print(" \n\t\t\t\t"); out.print(collection.getName()); out.print("Calculator.setConnectionProvider(getPortableContext());"); } String calculateValueSentence = collection.getName() + "Calculator.calculate()"; out.print(" \n\t\t\treturn "); out.print(Generators.generateCast("java.util.Collection", calculateValueSentence)); out.print( ";\n\t\t}\n\t\tcatch (Exception ex) {\n\t\t\tex.printStackTrace();\n\t\t\tthrow new "); out.print(getException()); out.print("(XavaResources.getString(\"generator.calculate_value_error\", \""); out.print(collection.getName()); out.print("\", \""); out.print(metaModel.getName()); out.print("\", ex.getLocalizedMessage()));\n\t\t}"); if (ejb) { out.print( " \n\t\tfinally {\n\t\t\tif (cmtActivated) {\n\t\t\t\torg.openxava.hibernate.XHibernate.setCmt(false);\n\t\t\t}\n\t\t}"); } out.print(" \t\t\t\t\n\t}"); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); e.printStackTrace(); return false; } return true; }
@Test public void testRemoveOverloadedMethod() throws Exception { CompilerAssert<File, File> helper = incrementalCompiler("model", "meta", "controller"); JavaFile file = helper.assertJavaFile("model", "meta", "controller", "A.java"); ClassOrInterfaceDeclaration a = file.assertDeclaration(); MethodDeclaration index = new MethodDeclaration(Modifier.PUBLIC, ASTHelper.VOID_TYPE, "index"); ASTHelper.addParameter( index, ASTHelper.createParameter(new ClassOrInterfaceType(String.class.getName()), "s")); index.setAnnotations( Collections.<AnnotationExpr>singletonList( new NormalAnnotationExpr( ASTHelper.createNameExpr(View.class.getName()), Collections.<MemberValuePair>emptyList()))); index.setBody(new BlockStmt()); a.getMembers().add(index); file.assertSave(); helper.assertCompile(); // File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModel mm = Tools.unserialize(MetaModel.class, ser); mm.getQueue().clear(); Tools.serialize(mm, ser); // assertTrue(a.getMembers().remove(index)); file.assertSave(); // helper.addClassPath(helper.getClassOutput()).assertCompile(); mm = Tools.unserialize(MetaModel.class, ser); // JSON expected = json() .set( "applications", json() .list( "values", json() .list( "controllers", json() .set( "handle", "ElementHandle.Class[fqn=model.meta.controller.A]") .list( "methods", json() .set( "handle", "ElementHandle.Method[fqn=model.meta.controller.A,name=index,parameterTypes[]]") .set("id", null) .set("name", "index") .list("parameters") .set("phase", "RENDER"))) .set("fqn", "model.meta.controller.ControllerApplication") .set("handle", "ElementHandle.Package[qn=model.meta.controller]") .list("templates"))); assertEquals(expected, mm.toJSON()); // List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(1, events.size()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(0).getType()); assertInstanceOf(MethodMetaModel.class, events.get(0).getObject()); }
@Test public void testAddMethod() throws Exception { CompilerAssert<File, File> helper = incrementalCompiler("model", "meta", "controller"); JavaFile file = helper.assertJavaFile("model", "meta", "controller", "A.java"); ClassOrInterfaceDeclaration a = file.assertDeclaration(); MethodDeclaration decl = (MethodDeclaration) a.getMembers().get(0); assertTrue(a.getMembers().remove(decl)); file.assertSave(); helper.assertCompile(); // File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModel mm = Tools.unserialize(MetaModel.class, ser); List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(1, events.size()); assertEquals(MetaModelEvent.AFTER_ADD, events.get(0).getType()); assertTrue(events.get(0).getObject() instanceof ApplicationMetaModel); Tools.serialize(mm, ser); // a.getMembers().add(decl); file.assertSave(); helper.addClassPath(helper.getClassOutput()).assertCompile(); // mm = Tools.unserialize(MetaModel.class, ser); // JSON expected = json() .set( "applications", json() .list( "values", json() .list( "controllers", json() .set( "handle", "ElementHandle.Class[fqn=model.meta.controller.A]") .list( "methods", json() .set( "handle", "ElementHandle.Method[fqn=model.meta.controller.A,name=index,parameterTypes[]]") .set("id", null) .set("name", "index") .list("parameters") .set("phase", "RENDER"))) .set("fqn", "model.meta.controller.ControllerApplication") .set("handle", "ElementHandle.Package[qn=model.meta.controller]") .list("templates"))); assertEquals(expected, mm.toJSON()); // events = mm.getQueue().clear(); assertEquals(3, events.size()); assertEquals(MetaModelEvent.AFTER_ADD, events.get(0).getType()); assertInstanceOf(ControllerMetaModel.class, events.get(0).getObject()); assertEquals(MetaModelEvent.AFTER_ADD, events.get(1).getType()); assertInstanceOf(MethodMetaModel.class, events.get(1).getObject()); assertEquals(MetaModelEvent.UPDATED, events.get(2).getType()); assertInstanceOf(ControllerMetaModel.class, events.get(2).getObject()); }
@Test public void testChangeAnnotation() throws Exception { CompilerAssert<File, File> helper = incrementalCompiler("model", "meta", "controller"); helper.assertCompile(); File ser = helper.getSourceOutput().getPath("juzu", "metamodel.ser"); MetaModel mm = Tools.unserialize(MetaModel.class, ser); mm.getQueue().clear(); Tools.serialize(mm, ser); // JavaFile file = helper.assertJavaFile("model", "meta", "controller", "A.java"); ClassOrInterfaceDeclaration a = file.assertDeclaration(); MethodDeclaration decl = (MethodDeclaration) a.getMembers().get(0); decl.getAnnotations().get(0).setName(ASTHelper.createNameExpr(Action.class.getName())); file.assertSave(); // helper.addClassPath(helper.getClassOutput()).assertCompile(); mm = Tools.unserialize(MetaModel.class, ser); // JSON expected = json() .set( "applications", json() .list( "values", json() .list( "controllers", json() .set( "handle", "ElementHandle.Class[fqn=model.meta.controller.A]") .list( "methods", json() .set( "handle", "ElementHandle.Method[fqn=model.meta.controller.A,name=index,parameterTypes[]]") .set("id", null) .set("name", "index") .list("parameters") .set("phase", "ACTION"))) .set("fqn", "model.meta.controller.ControllerApplication") .set("handle", "ElementHandle.Package[qn=model.meta.controller]") .list("templates"))); assertEquals(expected, mm.toJSON()); // List<MetaModelEvent> events = mm.getQueue().clear(); assertEquals(5, events.size()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(0).getType()); assertInstanceOf(MethodMetaModel.class, events.get(0).getObject()); assertEquals(MetaModelEvent.BEFORE_REMOVE, events.get(1).getType()); assertInstanceOf(ControllerMetaModel.class, events.get(1).getObject()); assertEquals(MetaModelEvent.AFTER_ADD, events.get(2).getType()); assertInstanceOf(ControllerMetaModel.class, events.get(2).getObject()); assertEquals(MetaModelEvent.AFTER_ADD, events.get(3).getType()); assertInstanceOf(MethodMetaModel.class, events.get(3).getObject()); assertEquals(MetaModelEvent.UPDATED, events.get(4).getType()); assertInstanceOf(ControllerMetaModel.class, events.get(4).getObject()); }
public void setModelName(String modelName) throws XavaException { this.modelName = modelName; this.metaModel = MetaModel.get(modelName); this.metaComponent = this.metaModel.getMetaComponent(); }
public void setMetaModel(MetaModel metaModel) { this.metaModel = metaModel; this.metaComponent = metaModel.getMetaComponent(); this.modelName = metaModel.getName(); }