public void testMoveJoinColumn2() throws Exception {
    ICompilationUnit cu = this.createTestAssociationOverrideWithJoinColumns();
    JavaResourceType resourceType = buildJavaResourceType(cu);
    JavaResourceField resourceField = IterableTools.get(resourceType.getFields(), 0);

    AssociationOverrideAnnotation2_0 associationOverride =
        this.associationOverrideAt(0, resourceField);

    JoinColumnAnnotation joinColumn = associationOverride.joinColumnAt(0);
    joinColumn.setReferencedColumnName("REF_NAME");
    joinColumn.setUnique(Boolean.FALSE);
    joinColumn.setNullable(Boolean.FALSE);
    joinColumn.setInsertable(Boolean.FALSE);
    joinColumn.setUpdatable(Boolean.FALSE);
    joinColumn.setColumnDefinition("COLUMN_DEF");
    joinColumn.setTable("TABLE");
    associationOverride.addJoinColumn(0).setName("FOO");

    assertSourceContains(
        "@AssociationOverride(name = \""
            + ASSOCIATION_OVERRIDE_NAME
            + "\", joinColumns = {@JoinColumn(name = \"FOO\"), @JoinColumn(name = \"BAR\", referencedColumnName = \"REF_NAME\", unique = false, nullable = false, insertable = false, updatable = false, columnDefinition = \"COLUMN_DEF\", table = \"TABLE\"), @JoinColumn})",
        cu);

    associationOverride.moveJoinColumn(0, 2);
    assertNull(associationOverride.joinColumnAt(0).getName());
    assertEquals("FOO", associationOverride.joinColumnAt(1).getName());
    assertEquals("BAR", associationOverride.joinColumnAt(2).getName());
    assertEquals(3, associationOverride.getJoinColumnsSize());
    assertSourceContains(
        "@AssociationOverride(name = \""
            + ASSOCIATION_OVERRIDE_NAME
            + "\", joinColumns = {@JoinColumn, @JoinColumn(name = \"FOO\"), @JoinColumn(name = \"BAR\", referencedColumnName = \"REF_NAME\", unique = false, nullable = false, insertable = false, updatable = false, columnDefinition = \"COLUMN_DEF\", table = \"TABLE\")})",
        cu);
  }
  public void testAddJoinColumn() throws Exception {
    ICompilationUnit cu = this.createTestAssociationOverrideOnField();
    JavaResourceType resourceType = buildJavaResourceType(cu);
    JavaResourceField resourceField = IterableTools.get(resourceType.getFields(), 0);

    AssociationOverrideAnnotation2_0 associationOverride =
        this.associationOverrideAt(0, resourceField);

    associationOverride.addJoinColumn(0).setName("FOO");
    associationOverride.addJoinColumn(1);
    associationOverride.addJoinColumn(0).setName("BAR");

    assertEquals("BAR", associationOverride.joinColumnAt(0).getName());
    assertEquals("FOO", associationOverride.joinColumnAt(1).getName());
    assertNull(associationOverride.joinColumnAt(2).getName());

    assertSourceContains(
        "@AssociationOverride(name = \""
            + ASSOCIATION_OVERRIDE_NAME
            + "\", joinColumns = {@JoinColumn(name = \"BAR\"),@JoinColumn(name = \"FOO\"), @JoinColumn})",
        cu);
  }
  public void testSetJoinColumnName() throws Exception {
    ICompilationUnit cu = this.createTestAssociationOverrideWithJoinColumns();
    JavaResourceType resourceType = buildJavaResourceType(cu);
    JavaResourceField resourceField = IterableTools.get(resourceType.getFields(), 0);

    AssociationOverrideAnnotation2_0 associationOverride =
        this.associationOverrideAt(0, resourceField);

    assertEquals(2, associationOverride.getJoinColumnsSize());

    JoinColumnAnnotation joinColumn = associationOverride.joinColumnAt(0);

    assertEquals("BAR", joinColumn.getName());

    joinColumn.setName("foo");
    assertEquals("foo", joinColumn.getName());

    assertSourceContains(
        "@AssociationOverride(name = \""
            + ASSOCIATION_OVERRIDE_NAME
            + "\", joinColumns = {@JoinColumn(name = \"foo\"), @JoinColumn})",
        cu);
  }