Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorddunne2011-10-18 21:57:34 +0000
committerRyan D. Brooks2011-10-18 21:57:34 +0000
commitdb3664948f2f45635f2654acce67add37f1190e5 (patch)
treed501b4cfa0502dd88357e292c090e7707b9c58b0
parentc6f321880ab6cbcfdac0b405117b6a5e830f3f67 (diff)
downloadorg.eclipse.osee-db3664948f2f45635f2654acce67add37f1190e5.tar.gz
org.eclipse.osee-db3664948f2f45635f2654acce67add37f1190e5.tar.xz
org.eclipse.osee-db3664948f2f45635f2654acce67add37f1190e5.zip
feature: Improve performance of EnumEntryFieldTest and added unit test
-rw-r--r--plugins/org.eclipse.osee.framework.core.model.test/src/org/eclipse/osee/framework/core/model/fields/EnumEntryFieldTest.java23
-rw-r--r--plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/internal/fields/EnumEntryField.java28
2 files changed, 40 insertions, 11 deletions
diff --git a/plugins/org.eclipse.osee.framework.core.model.test/src/org/eclipse/osee/framework/core/model/fields/EnumEntryFieldTest.java b/plugins/org.eclipse.osee.framework.core.model.test/src/org/eclipse/osee/framework/core/model/fields/EnumEntryFieldTest.java
index abadc072253..a3727cfee6c 100644
--- a/plugins/org.eclipse.osee.framework.core.model.test/src/org/eclipse/osee/framework/core/model/fields/EnumEntryFieldTest.java
+++ b/plugins/org.eclipse.osee.framework.core.model.test/src/org/eclipse/osee/framework/core/model/fields/EnumEntryFieldTest.java
@@ -10,17 +10,19 @@
*******************************************************************************/
package org.eclipse.osee.framework.core.model.fields;
+import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import org.junit.Assert;
+import java.util.List;
import org.eclipse.osee.framework.core.exception.OseeArgumentException;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.core.model.OseeEnumEntry;
import org.eclipse.osee.framework.core.model.internal.fields.EnumEntryField;
import org.eclipse.osee.framework.core.model.mocks.MockDataFactory;
import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -147,4 +149,23 @@ public class EnumEntryFieldTest {
eX.setOrdinal(-1);
field.set(Collections.singleton(eX));
}
+
+ @Test
+ public void testPerformance() throws OseeCoreException {
+ long startTime = System.currentTimeMillis();
+ EnumEntryField field = new EnumEntryField(new ArrayList<OseeEnumEntry>());
+ for (int x = 0; x < 160; x++) {
+ /**
+ * Although in-efficient, this is how framework is adding enum entries, so base test and results off that
+ **/
+ List<OseeEnumEntry> entries = new ArrayList<OseeEnumEntry>();
+ entries.addAll(field.get());
+ entries.add(new OseeEnumEntry(GUID.create(), "name " + x, x));
+ field.set(entries);
+ }
+ long elapsedTime = System.currentTimeMillis() - startTime;
+ System.out.println(String.format("testPerformance took %dms", elapsedTime));
+ assertTrue("Loading EnumEntryField should take less than 150ms currently " + elapsedTime + "ms",
+ elapsedTime < 150);
+ }
}
diff --git a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/internal/fields/EnumEntryField.java b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/internal/fields/EnumEntryField.java
index b1e7b51706b..89321f111e4 100644
--- a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/internal/fields/EnumEntryField.java
+++ b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/internal/fields/EnumEntryField.java
@@ -11,8 +11,11 @@
package org.eclipse.osee.framework.core.model.internal.fields;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
+import org.eclipse.osee.framework.core.exception.OseeArgumentException;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.core.model.OseeEnumEntry;
import org.eclipse.osee.framework.core.util.Conditions;
@@ -62,21 +65,26 @@ public class EnumEntryField extends CollectionField<OseeEnumEntry> {
}
private void checkEnumEntryIntegrity(Collection<OseeEnumEntry> oseeEnumEntries) throws OseeCoreException {
+ // Use maps to speed up validation
+ Map<String, OseeEnumEntry> nameToEnum = new HashMap<String, OseeEnumEntry>();
+ Map<Integer, OseeEnumEntry> ordinalToEnum = new HashMap<Integer, OseeEnumEntry>();
for (OseeEnumEntry entry : oseeEnumEntries) {
Conditions.checkNotNullOrEmpty(entry.getName(), "Osee Enum Entry name");
Conditions.checkExpressionFailOnTrue(entry.ordinal() < 0, "Osee Enum Entry ordinal must be greater than zero");
- for (OseeEnumEntry existingEntry : oseeEnumEntries) {
- if (!entry.equals(existingEntry)) {
- Conditions.checkExpressionFailOnTrue(entry.getName().equals(existingEntry.getName()),
- "Unique enumEntry name violation - %s already exists.", entry);
-
- Conditions.checkExpressionFailOnTrue(
- entry.ordinal() == existingEntry.ordinal(),
- "Unique enumEntry ordinal violation - ordinal [%d] is used by existing entry:[%s] and new entry:[%s]",
- entry.ordinal(), existingEntry, entry);
- }
+ if (nameToEnum.containsKey(entry.getName())) {
+ throw new OseeArgumentException("Unique enumEntry name violation - %s already exists.", entry);
+ } else {
+ nameToEnum.put(entry.getName(), entry);
+ }
+ if (ordinalToEnum.containsKey(entry.ordinal())) {
+ OseeEnumEntry existingEntry = ordinalToEnum.get(entry.ordinal());
+ throw new OseeArgumentException(
+ "Unique enumEntry ordinal violation - ordinal [%d] is used by existing entry:[%s] and new entry:[%s]",
+ entry.ordinal(), existingEntry, entry);
+ } else {
+ ordinalToEnum.put(entry.ordinal(), entry);
}
}
}

Back to the top