diff options
author | rbrooks | 2010-04-06 19:34:22 +0000 |
---|---|---|
committer | rbrooks | 2010-04-06 19:34:22 +0000 |
commit | 02b7a05bcf1f6092f776d4fe4fb5019fbd10eeed (patch) | |
tree | d82ce5f503a99e3b2ce5ad780236217abd4c5ecc /plugins/org.eclipse.osee.framework.server.admin | |
parent | e76b031eb6959b357dcf2c53bde743a33ae5bb57 (diff) | |
download | org.eclipse.osee-02b7a05bcf1f6092f776d4fe4fb5019fbd10eeed.tar.gz org.eclipse.osee-02b7a05bcf1f6092f776d4fe4fb5019fbd10eeed.tar.xz org.eclipse.osee-02b7a05bcf1f6092f776d4fe4fb5019fbd10eeed.zip |
Diffstat (limited to 'plugins/org.eclipse.osee.framework.server.admin')
-rw-r--r-- | plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/management/ConsolidateArtifactVersionTxOperation.java | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/management/ConsolidateArtifactVersionTxOperation.java b/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/management/ConsolidateArtifactVersionTxOperation.java index e66eef6e3b0..b3f5ec65860 100644 --- a/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/management/ConsolidateArtifactVersionTxOperation.java +++ b/plugins/org.eclipse.osee.framework.server.admin/src/org/eclipse/osee/framework/server/admin/management/ConsolidateArtifactVersionTxOperation.java @@ -53,6 +53,9 @@ public class ConsolidateArtifactVersionTxOperation extends AbstractDbTxOperation private static final String POPULATE_ARTS = "insert into osee_arts(gamma_id, art_id, art_type_id, guid, human_readable_id) select gamma_id, art.art_id, art_type_id, guid, human_readable_id from osee_artifact art, osee_artifact_version arv where art.art_id = arv.art_id and not exists (select 1 from osee_arts arts where art.art_id = arts.art_id)"; + private static final String FIND_ARTIFACT_MODS = + "select * from osee_arts art, osee_txs txs where art.gamma_id = txs.gamma_id order by art_id, branch_id, transaction_id"; + private List<Long[]> deleteArtifactVersionData; private final List<Long> obsoleteGammas = new ArrayList<Long>(); private final List<Object[]> addressingToDelete = new ArrayList<Object[]>(13000); @@ -79,6 +82,7 @@ public class ConsolidateArtifactVersionTxOperation extends AbstractDbTxOperation obsoleteGammas.clear(); updateAddressingData.clear(); addressingToDelete.clear(); + previousArtifactId = -1; previousNetGammaId = -1; previousBranchId = -1; previuosTransactionId = -1; @@ -88,11 +92,77 @@ public class ConsolidateArtifactVersionTxOperation extends AbstractDbTxOperation gammaJoin = JoinUtility.createExportImportJoinQuery(); } + private void findArtifactMods() throws OseeCoreException { + List<ModificationType> mods = new ArrayList<ModificationType>(); + try { + chStmt.runPreparedQuery(10000, FIND_ARTIFACT_MODS); + while (chStmt.next()) { + int artifactId = chStmt.getInt("art_id"); + int branchId = chStmt.getInt("branch_id"); + + if (previousArtifactId != artifactId || previousBranchId != branchId) { + consolidateMods(mods); + mods.clear(); + previousArtifactId = artifactId; + previousBranchId = branchId; + } + mods.add(ModificationType.getMod(chStmt.getInt("mod_type"))); + } + } finally { + if (chStmt != null) { + chStmt.close(); + } + } + } + + private void consolidateMods(List<ModificationType> mods) { + boolean knownCase = false; + if (mods.size() == 0) { + knownCase = true; + } else if (mods.size() == 1) { + if (mods.get(0) == ModificationType.MODIFIED) { + knownCase = true; + // must make new instead of modified + } else { + knownCase = true; + } + } else { + if (mods.get(0).matches(ModificationType.NEW, ModificationType.INTRODUCED, ModificationType.MERGED)) { + if (mods.size() == 2 && mods.get(1).matches(ModificationType.DELETED, ModificationType.MERGED)) { + knownCase = true; + } + if (mods.size() == 3) { + if (mods.get(1) == ModificationType.DELETED && mods.get(2) == ModificationType.DELETED) { + knownCase = true; + // must purge most recent delete and set previous one to current + } + if (mods.get(1) == ModificationType.MERGED && mods.get(2) == ModificationType.DELETED) { + knownCase = true; + } + } + + for (int i = 1; i < mods.size(); i++) { + mods.get(i); + } + + } + } + if (!knownCase) { + reporter.report(String.format("unknown case: artifact id: %d branch_id: %d", previousArtifactId, + previousBranchId)); + } + } + @Override protected void doTxWork(IProgressMonitor monitor, OseeConnection connection) throws OseeCoreException { this.connection = connection; init(); + if (true) { + findArtifactMods(); + return; + } + findObsoleteGammas(); reporter.report("gamma join size: " + gammaJoin.size()); |