| /******************************************************************************* |
| * Copyright (c) 2007, 2011 Oracle. All rights reserved. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v1.0, which accompanies this distribution |
| * and is available at http://www.eclipse.org/legal/epl-v10.html. |
| * |
| * Contributors: |
| * Oracle - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.jpt.jpa.core.tests.internal.resource.java; |
| |
| import java.util.Iterator; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jpt.common.core.resource.java.JavaResourceField; |
| import org.eclipse.jpt.common.core.resource.java.JavaResourceMember; |
| import org.eclipse.jpt.common.core.resource.java.JavaResourceType; |
| import org.eclipse.jpt.common.utility.internal.CollectionTools; |
| import org.eclipse.jpt.common.utility.internal.iterators.ArrayIterator; |
| import org.eclipse.jpt.jpa.core.resource.java.AssociationOverrideAnnotation; |
| import org.eclipse.jpt.jpa.core.resource.java.JPA; |
| import org.eclipse.jpt.jpa.core.resource.java.JoinColumnAnnotation; |
| |
| @SuppressWarnings("nls") |
| public class AssociationOverrideTests extends JpaJavaResourceModelTestCase { |
| |
| private static final String ASSOCIATION_OVERRIDE_NAME = "MY_ASSOCIATION_OVERRIDE"; |
| |
| public AssociationOverrideTests(String name) { |
| super(name); |
| } |
| |
| private ICompilationUnit createTestAssociationOverrideOnField() throws Exception { |
| return this.createTestType(new DefaultAnnotationWriter() { |
| @Override |
| public Iterator<String> imports() { |
| return new ArrayIterator<String>(JPA.ASSOCIATION_OVERRIDE, JPA.COLUMN); |
| } |
| @Override |
| public void appendIdFieldAnnotationTo(StringBuilder sb) { |
| sb.append("@AssociationOverride(name = \"" + ASSOCIATION_OVERRIDE_NAME + "\")"); |
| } |
| }); |
| } |
| |
| private ICompilationUnit createTestAssociationOverrideWithJoinColumns() throws Exception { |
| return this.createTestType(new DefaultAnnotationWriter() { |
| @Override |
| public Iterator<String> imports() { |
| return new ArrayIterator<String>(JPA.ASSOCIATION_OVERRIDE, JPA.JOIN_COLUMN); |
| } |
| @Override |
| public void appendIdFieldAnnotationTo(StringBuilder sb) { |
| sb.append("@AssociationOverride(name = \"" + ASSOCIATION_OVERRIDE_NAME + "\", joinColumns = {@JoinColumn(name = \"BAR\"), @JoinColumn})"); |
| } |
| }); |
| } |
| |
| private AssociationOverrideAnnotation getAssociationOverrideAnnotationAt(JavaResourceMember resourceMember, int index) { |
| return (AssociationOverrideAnnotation) resourceMember.getAnnotation(index, JPA.ASSOCIATION_OVERRIDE); |
| } |
| |
| public void testGetName() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideOnField(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| assertNotNull(associationOverride); |
| assertEquals(ASSOCIATION_OVERRIDE_NAME, associationOverride.getName()); |
| } |
| |
| public void testSetName() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideOnField(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| assertNotNull(associationOverride); |
| assertEquals(ASSOCIATION_OVERRIDE_NAME, associationOverride.getName()); |
| |
| associationOverride.setName("Foo"); |
| assertEquals("Foo", associationOverride.getName()); |
| assertSourceContains("@AssociationOverride(name = \"Foo\")", cu); |
| } |
| |
| public void testSetNameNull() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideOnField(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| assertEquals(ASSOCIATION_OVERRIDE_NAME, associationOverride.getName()); |
| |
| associationOverride.setName(null); |
| assertNull(associationOverride.getName()); |
| |
| assertSourceDoesNotContain("@AssociationOverride(name = \"" + ASSOCIATION_OVERRIDE_NAME + "\")", cu); |
| assertSourceContains("@AssociationOverride", cu); |
| } |
| |
| |
| public void testJoinColumns() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideOnField(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| assertEquals(0, associationOverride.getJoinColumnsSize()); |
| } |
| |
| public void testJoinColumns2() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideOnField(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| |
| associationOverride.addJoinColumn(0); |
| associationOverride.addJoinColumn(1); |
| |
| assertEquals(2, associationOverride.getJoinColumnsSize()); |
| } |
| |
| public void testJoinColumns3() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideWithJoinColumns(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| assertEquals(2, associationOverride.getJoinColumnsSize()); |
| } |
| |
| public void testAddJoinColumn() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideOnField(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| 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 testRemoveJoinColumn() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideWithJoinColumns(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| associationOverride.addJoinColumn(0).setName("FOO"); |
| |
| Iterator<JoinColumnAnnotation> joinColumns = associationOverride.getJoinColumns().iterator(); |
| assertEquals("FOO", joinColumns.next().getName()); |
| assertEquals("BAR", joinColumns.next().getName()); |
| assertNull(joinColumns.next().getName()); |
| assertEquals(false, joinColumns.hasNext()); |
| assertSourceContains("@AssociationOverride(name = \"" + ASSOCIATION_OVERRIDE_NAME + "\", joinColumns = {@JoinColumn(name = \"FOO\"), @JoinColumn(name = \"BAR\"), @JoinColumn})", cu); |
| |
| associationOverride.removeJoinColumn(1); |
| joinColumns = associationOverride.getJoinColumns().iterator(); |
| assertEquals("FOO", joinColumns.next().getName()); |
| assertNull(joinColumns.next().getName()); |
| assertEquals(false, joinColumns.hasNext()); |
| assertSourceContains("@AssociationOverride(name = \"" + ASSOCIATION_OVERRIDE_NAME + "\", joinColumns = {@JoinColumn(name = \"FOO\"), @JoinColumn})", cu); |
| |
| associationOverride.removeJoinColumn(0); |
| joinColumns = associationOverride.getJoinColumns().iterator(); |
| assertNull(joinColumns.next().getName()); |
| assertEquals(false, joinColumns.hasNext()); |
| assertSourceContains("@AssociationOverride(name = \"" + ASSOCIATION_OVERRIDE_NAME + "\", joinColumns = @JoinColumn)", cu); |
| |
| |
| associationOverride.setName(null); |
| associationOverride.removeJoinColumn(0); |
| assertSourceDoesNotContain("@JoinColumn", cu); |
| } |
| |
| public void testMoveJoinColumn() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideWithJoinColumns(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| 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(2, 0); |
| assertEquals("BAR", associationOverride.joinColumnAt(0).getName()); |
| assertNull(associationOverride.joinColumnAt(1).getName()); |
| assertEquals("FOO", associationOverride.joinColumnAt(2).getName()); |
| assertEquals(3, associationOverride.getJoinColumnsSize()); |
| assertSourceContains("@AssociationOverride(name = \"" + ASSOCIATION_OVERRIDE_NAME + "\", joinColumns = {@JoinColumn(name = \"BAR\", referencedColumnName = \"REF_NAME\", unique = false, nullable = false, insertable = false, updatable = false, columnDefinition = \"COLUMN_DEF\", table = \"TABLE\"), @JoinColumn, @JoinColumn(name = \"FOO\")})", cu); |
| } |
| |
| public void testMoveJoinColumn2() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideWithJoinColumns(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| 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 testSetJoinColumnName() throws Exception { |
| ICompilationUnit cu = this.createTestAssociationOverrideWithJoinColumns(); |
| JavaResourceType resourceType = buildJavaResourceType(cu); |
| JavaResourceField resourceField = CollectionTools.get(resourceType.getFields(), 0); |
| AssociationOverrideAnnotation associationOverride = this.getAssociationOverrideAnnotationAt(resourceField, 0); |
| |
| 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); |
| } |
| } |