diff options
Diffstat (limited to 'plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/delta/DBTableDelta.java')
-rw-r--r-- | plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/delta/DBTableDelta.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/delta/DBTableDelta.java b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/delta/DBTableDelta.java index ff7559a3bd..73edbf30d9 100644 --- a/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/delta/DBTableDelta.java +++ b/plugins/org.eclipse.net4j.db/src/org/eclipse/net4j/internal/db/ddl/delta/DBTableDelta.java @@ -12,8 +12,10 @@ package org.eclipse.net4j.internal.db.ddl.delta; import org.eclipse.net4j.db.ddl.IDBField; import org.eclipse.net4j.db.ddl.IDBIndex; +import org.eclipse.net4j.db.ddl.IDBSchema; import org.eclipse.net4j.db.ddl.IDBTable; import org.eclipse.net4j.db.ddl.delta.IDBDelta; +import org.eclipse.net4j.db.ddl.delta.IDBDeltaVisitor; import org.eclipse.net4j.db.ddl.delta.IDBFieldDelta; import org.eclipse.net4j.db.ddl.delta.IDBIndexDelta; import org.eclipse.net4j.db.ddl.delta.IDBSchemaDelta; @@ -23,6 +25,7 @@ import org.eclipse.net4j.internal.db.ddl.DBTable; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.Map; @@ -82,6 +85,33 @@ public final class DBTableDelta extends DBDelta implements IDBTableDelta return (IDBSchemaDelta)super.getParent(); } + public IDBFieldDelta[] getFieldDeltasSortedByPosition() + { + IDBFieldDelta[] result = fieldDeltas.values().toArray(new IDBFieldDelta[fieldDeltas.size()]); + Arrays.sort(result, new Comparator<IDBFieldDelta>() + { + public int compare(IDBFieldDelta o1, IDBFieldDelta o2) + { + int v1 = getValue(o1); + int v2 = getValue(o2); + return v2 - v1; + } + + private Integer getValue(IDBFieldDelta fieldDelta) + { + Integer value = fieldDelta.getPropertyValue(IDBFieldDelta.POSITION_PROPERTY); + if (value == null) + { + return 0; + } + + return value; + } + }); + + return result; + } + public Map<String, IDBFieldDelta> getFieldDeltas() { return Collections.unmodifiableMap(fieldDeltas); @@ -130,4 +160,18 @@ public final class DBTableDelta extends DBDelta implements IDBTableDelta { indexDeltas.put(indexDelta.getName(), indexDelta); } + + public void accept(IDBDeltaVisitor visitor) + { + visitor.visit(this); + for (IDBTableElementDelta tableElementDelta : getElements()) + { + tableElementDelta.accept(visitor); + } + } + + public IDBTable getElement(IDBSchema schema) + { + return schema.getTable(getName()); + } } |