コード例 #1
0
  @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());
  }
コード例 #2
0
  @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);
  }
コード例 #3
0
  @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());
  }
コード例 #4
0
  @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());
  }
コード例 #5
0
  /** 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;
  }
コード例 #6
0
  @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());
  }
コード例 #7
0
  @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());
  }
コード例 #8
0
  @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());
  }
コード例 #9
0
ファイル: MetaTab.java プロジェクト: OpenXavaEx/OpenXavaEx
 public void setModelName(String modelName) throws XavaException {
   this.modelName = modelName;
   this.metaModel = MetaModel.get(modelName);
   this.metaComponent = this.metaModel.getMetaComponent();
 }
コード例 #10
0
ファイル: MetaTab.java プロジェクト: OpenXavaEx/OpenXavaEx
 public void setMetaModel(MetaModel metaModel) {
   this.metaModel = metaModel;
   this.metaComponent = metaModel.getMetaComponent();
   this.modelName = metaModel.getName();
 }