blob: 13be82fa74fe55ca65f3a89c20ce119638b32734 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2010 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.core.internal.jpa2.context.java;
import java.util.Iterator;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.core.context.BaseColumn;
import org.eclipse.jpt.core.context.BaseJoinColumn;
import org.eclipse.jpt.core.context.Entity;
import org.eclipse.jpt.core.context.NamedColumn;
import org.eclipse.jpt.core.context.PersistentAttribute;
import org.eclipse.jpt.core.context.TypeMapping;
import org.eclipse.jpt.core.context.java.JavaJoinColumn;
import org.eclipse.jpt.core.internal.context.MappingTools;
import org.eclipse.jpt.core.internal.jpa1.context.java.GenericJavaReferenceTable;
import org.eclipse.jpt.core.internal.validation.DefaultJpaValidationMessages;
import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
import org.eclipse.jpt.core.jpa2.context.java.JavaCollectionTable2_0;
import org.eclipse.jpt.core.jpa2.context.java.JavaElementCollectionMapping2_0;
import org.eclipse.jpt.core.jpa2.resource.java.CollectionTable2_0Annotation;
import org.eclipse.jpt.core.utility.TextRange;
import org.eclipse.jpt.utility.internal.iterators.EmptyIterator;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
/**
* Java collection table
*/
public class GenericJavaCollectionTable2_0
extends GenericJavaReferenceTable
implements JavaCollectionTable2_0
{
public GenericJavaCollectionTable2_0(JavaElementCollectionMapping2_0 parent) {
super(parent);
}
@Override
protected JavaJoinColumn.Owner buildJoinColumnOwner() {
return new JoinColumnOwner();
}
@Override
public JavaElementCollectionMapping2_0 getParent() {
return (JavaElementCollectionMapping2_0) super.getParent();
}
public PersistentAttribute getPersistentAttribute() {
return getParent().getPersistentAttribute();
}
public void initialize(CollectionTable2_0Annotation collectionTable) {
super.initialize(collectionTable);
}
public void update(CollectionTable2_0Annotation collectionTable) {
super.update(collectionTable);
}
// ********** AbstractJavaTable implementation **********
@Override
protected String getAnnotationName() {
return CollectionTable2_0Annotation.ANNOTATION_NAME;
}
@Override
protected String buildDefaultName() {
return MappingTools.buildCollectionTableDefaultName(getParent());
}
@Override
protected CollectionTable2_0Annotation getAnnotation() {
return this.getParent().getCollectionTableAnnotation();
}
// ********** validation **********
@Override
protected boolean shouldValidateAgainstDatabase() {
return getParent().shouldValidateAgainstDatabase();
}
@Override
protected String getUnresolvedCatalogMessageId() {
return JpaValidationMessages.COLLECTION_TABLE_UNRESOLVED_CATALOG;
}
@Override
protected String getUnresolvedSchemaMessageId() {
return JpaValidationMessages.COLLECTION_TABLE_UNRESOLVED_SCHEMA;
}
@Override
protected String getUnresolvedNameMessageId() {
return JpaValidationMessages.COLLECTION_TABLE_UNRESOLVED_NAME;
}
// ********** join column owner adapter **********
/**
* owner for "back-pointer" JoinColumns;
* these point at the source/owning entity
*/
protected class JoinColumnOwner
implements JavaJoinColumn.Owner
{
protected JoinColumnOwner() {
super();
}
//***** NamedColumn.Owner implementation *******
public TypeMapping getTypeMapping() {
return GenericJavaCollectionTable2_0.this.getParent().getTypeMapping();
}
public org.eclipse.jpt.db.Table getDbTable(String tableName) {
String collectionTableName = GenericJavaCollectionTable2_0.this.getName();
return (collectionTableName == null) ? null : (collectionTableName.equals(tableName)) ? GenericJavaCollectionTable2_0.this.getDbTable() : null;
}
public String getDefaultColumnName() {
//built in MappingTools.buildJoinColumnDefaultName()
return null;
}
//***** JavaNamedColumn.Owner implementation *******
public TextRange getValidationTextRange(CompilationUnit astRoot) {
return GenericJavaCollectionTable2_0.this.getValidationTextRange(astRoot);
}
//***** BaseColumn.Owner implementation *******
/**
* by default, the join column is, obviously, in the collection table
*/
public String getDefaultTableName() {
return GenericJavaCollectionTable2_0.this.getName();
}
//***** BaseJoinColumn.Owner implementation *******
public org.eclipse.jpt.db.Table getReferencedColumnDbTable() {
return getTypeMapping().getPrimaryDbTable();
}
public boolean isVirtual(BaseJoinColumn joinColumn) {
return GenericJavaCollectionTable2_0.this.defaultJoinColumn == joinColumn;
}
//***** JoinColumn.Owner implementation *******
/**
* the default table name is always valid and a specified table name
* is prohibited (which will be handled elsewhere)
*/
public boolean tableNameIsInvalid(String tableName) {
return false;
}
/**
* the join column can only be on the collection table itself
*/
public Iterator<String> candidateTableNames() {
return EmptyIterator.instance();
}
public Entity getTargetEntity() {
return GenericJavaCollectionTable2_0.this.getParent().getEntity();
}
public String getAttributeName() {
return null; //I *think* this is correct
//return GenericJavaCollectionTable2_0.this.getParent().getName();
}
public PersistentAttribute getPersistentAttribute() {
return GenericJavaCollectionTable2_0.this.getParent().getPersistentAttribute();
}
public int joinColumnsSize() {
return GenericJavaCollectionTable2_0.this.joinColumnsSize();
}
public IMessage buildTableNotValidMessage(BaseColumn column, TextRange textRange) {
return DefaultJpaValidationMessages.buildMessage(
IMessage.HIGH_SEVERITY,
JpaValidationMessages.JOIN_COLUMN_TABLE_DOES_NOT_MATCH_COLLECTION_TABLE,
new String[] {column.getTable(), column.getName()},
column,
textRange
);
}
public IMessage buildUnresolvedNameMessage(NamedColumn column, TextRange textRange) {
return DefaultJpaValidationMessages.buildMessage(
IMessage.HIGH_SEVERITY,
JpaValidationMessages.JOIN_COLUMN_UNRESOLVED_NAME,
new String[] {column.getName(), column.getDbTable().getName()},
column,
textRange
);
}
public IMessage buildUnresolvedReferencedColumnNameMessage(BaseJoinColumn column, TextRange textRange) {
return DefaultJpaValidationMessages.buildMessage(
IMessage.HIGH_SEVERITY,
JpaValidationMessages.JOIN_COLUMN_UNRESOLVED_REFERENCED_COLUMN_NAME,
new String[] {column.getReferencedColumnName(), column.getReferencedColumnDbTable().getName()},
column,
textRange
);
}
public IMessage buildUnspecifiedNameMultipleJoinColumnsMessage(BaseJoinColumn column, TextRange textRange) {
return DefaultJpaValidationMessages.buildMessage(
IMessage.HIGH_SEVERITY,
JpaValidationMessages.JOIN_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS,
new String[0],
column,
textRange
);
}
public IMessage buildUnspecifiedReferencedColumnNameMultipleJoinColumnsMessage(BaseJoinColumn column, TextRange textRange) {
return DefaultJpaValidationMessages.buildMessage(
IMessage.HIGH_SEVERITY,
JpaValidationMessages.JOIN_COLUMN_REFERENCED_COLUMN_NAME_MUST_BE_SPECIFIED_MULTIPLE_JOIN_COLUMNS,
new String[0],
column,
textRange
);
}
}
}