diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaUniqueConstraint.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaUniqueConstraint.java | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaUniqueConstraint.java b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaUniqueConstraint.java new file mode 100644 index 0000000000..43eef86ff7 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.core/src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaUniqueConstraint.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2008, 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.jpa.core.internal.jpa1.context.java; + +import java.util.Iterator; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jpt.common.core.utility.TextRange; +import org.eclipse.jpt.common.utility.Filter; +import org.eclipse.jpt.common.utility.internal.CollectionTools; +import org.eclipse.jpt.common.utility.internal.StringTools; +import org.eclipse.jpt.common.utility.internal.iterators.FilteringIterator; +import org.eclipse.jpt.jpa.core.context.ReadOnlyUniqueConstraint; +import org.eclipse.jpt.jpa.core.context.java.JavaJpaContextNode; +import org.eclipse.jpt.jpa.core.context.java.JavaUniqueConstraint; +import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaReadOnlyUniqueConstraint; +import org.eclipse.jpt.jpa.core.resource.java.UniqueConstraintAnnotation; + +public class GenericJavaUniqueConstraint + extends AbstractJavaReadOnlyUniqueConstraint + implements JavaUniqueConstraint +{ + protected Owner owner; + protected final UniqueConstraintAnnotation uniqueConstraintAnnotation; + + + public GenericJavaUniqueConstraint(JavaJpaContextNode parent, Owner owner, UniqueConstraintAnnotation uniqueConstraintAnnotation) { + super(parent); + this.owner = owner; + this.uniqueConstraintAnnotation = uniqueConstraintAnnotation; + this.initializeColumnNames(); + } + + + // ********** synchronize/update ********** + + @Override + public void synchronizeWithResourceModel() { + super.synchronizeWithResourceModel(); + this.syncColumnNames(); + } + + + // ********** column names ********** + + public void addColumnName(String columnName) { + this.addColumnName(this.columnNames.size(), columnName); + } + + public void addColumnName(int index, String columnName) { + this.uniqueConstraintAnnotation.addColumnName(index, columnName); + this.addItemToList(index, columnName, this.columnNames, COLUMN_NAMES_LIST); + } + + public void removeColumnName(String columnName) { + this.removeColumnName(this.columnNames.indexOf(columnName)); + } + + public void removeColumnName(int index) { + this.uniqueConstraintAnnotation.removeColumnName(index); + this.removeItemFromList(index, this.columnNames, COLUMN_NAMES_LIST); + } + + public void moveColumnName(int targetIndex, int sourceIndex) { + this.uniqueConstraintAnnotation.moveColumnName(targetIndex, sourceIndex); + this.moveItemInList(targetIndex, sourceIndex, this.columnNames, COLUMN_NAMES_LIST); + } + + protected void initializeColumnNames() { + for (Iterator<String> stream = this.uniqueConstraintAnnotation.columnNames(); stream.hasNext(); ) { + this.columnNames.add(stream.next()); + } + } + + @Override + protected Iterable<String> getResourceColumnNames() { + return CollectionTools.iterable(this.uniqueConstraintAnnotation.columnNames()); + } + + // ********** Java completion proposals ********** + + @Override + public Iterator<String> connectedJavaCompletionProposals(int pos, Filter<String> filter, CompilationUnit astRoot) { + Iterator<String> result = super.connectedJavaCompletionProposals(pos, filter, astRoot); + if (result != null) { + return result; + } + if (this.columnNamesTouches(pos, astRoot)) { + return this.javaCandidateColumnNames(filter); + } + return null; + } + + protected boolean columnNamesTouches(int pos, CompilationUnit astRoot) { + return this.uniqueConstraintAnnotation.columnNamesTouches(pos, astRoot); + } + + protected Iterator<String> javaCandidateColumnNames(Filter<String> filter) { + return StringTools.convertToJavaStringLiterals(this.candidateColumnNames(filter)); + } + + protected Iterator<String> candidateColumnNames(Filter<String> filter) { + return new FilteringIterator<String>(this.candidateColumnNames(), filter); + } + + protected Iterator<String> candidateColumnNames() { + return this.owner.candidateUniqueConstraintColumnNames(); + } + + + // ********** validation ********** + + public TextRange getValidationTextRange(CompilationUnit astRoot) { + return this.uniqueConstraintAnnotation.getTextRange(astRoot); + } + + + // ********** misc ********** + + public UniqueConstraintAnnotation getUniqueConstraintAnnotation() { + return this.uniqueConstraintAnnotation; + } + + public void initializeFrom(ReadOnlyUniqueConstraint oldUniqueConstraint) { + for (String columnName : oldUniqueConstraint.getColumnNames()) { + this.addColumnName(columnName); + } + } +} |