Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java135
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);
+ }
+ }
+}

Back to the top