Moti Asayag has uploaded a new change for review.
Change subject: engine: Add ReplacementUtils
......................................................................
engine: Add ReplacementUtils
Add a utility class for replacing a property within a message
that represents a collection of items with their value.
The utility also supports replacements of a counter if specified
as ${PropertyName_COUNTER}.
Change-Id: Ia9d30047f090057561bd1a3e16f3edb4e724bd8d
Signed-off-by: Moti Asayag <[email protected]>
---
A
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ReplacementUtils.java
A
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ReplacementUtilsTest.java
2 files changed, 91 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/10723/1
diff --git
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ReplacementUtils.java
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ReplacementUtils.java
new file mode 100644
index 0000000..0f2a6fe
--- /dev/null
+++
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ReplacementUtils.java
@@ -0,0 +1,48 @@
+package org.ovirt.engine.core.utils;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.common.businessentities.Nameable;
+
+/**
+ * The class is used to replace a property defined within a message with a
bounded number of elements.<br>
+ * In addition, if a counter appears in the message, it will be replaced with
the elements size.
+ */
+public class ReplacementUtils {
+
+ private static final int COLLECTION_BOUNDED_SIZE = 5;
+
+ public static String[] replaceWithCollection(String collectionName,
List<Object> items) {
+ int size = calculateOutputCollectionSize(items);
+ List<String> names = new ArrayList<String>(size);
+
+ for (int i = 0; i < size; i++) {
+ names.add(String.format("\t%s\n", items.get(i).toString()));
+ }
+
+ return createMessages(collectionName, items, names);
+ }
+
+ public static <T extends Nameable> String[]
replaceWithNameableCollection(String collectionName, List<T> items) {
+ int size = calculateOutputCollectionSize(items);
+ List<String> names = new ArrayList<String>(size);
+
+ for (int i = 0; i < size; i++) {
+ names.add(items.get(i).getName());
+ }
+
+ return createMessages(collectionName, items, names);
+ }
+
+ private static <T> int calculateOutputCollectionSize(List<T> items) {
+ return Math.min(COLLECTION_BOUNDED_SIZE, items.size());
+ }
+
+ private static <T> String[] createMessages(String collectionName, List<T>
items, List<String> names) {
+ return new String[] { MessageFormat.format("${0} {1}", collectionName,
StringUtils.join(names, ", ")),
+ MessageFormat.format("${0}_COUNTER {1}", collectionName,
items.size()) };
+ }
+}
diff --git
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ReplacementUtilsTest.java
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ReplacementUtilsTest.java
new file mode 100644
index 0000000..b629779
--- /dev/null
+++
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/ReplacementUtilsTest.java
@@ -0,0 +1,43 @@
+package org.ovirt.engine.core.utils;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+import org.ovirt.engine.core.common.businessentities.Nameable;
+import org.ovirt.engine.core.common.businessentities.VM;
+
+public class ReplacementUtilsTest {
+
+ static private final String PROPERTY_NAME = "MY_SINGLE_ITEM_LIST";
+ static private final String PROPERTY_VALUE = "MY_SINGLE_ITEM_VALUE";
+ static private final String PROPERTY_COUNTER_NAME =
"MY_SINGLE_ITEM_LIST_COUNTER";
+
+ @Test
+ public void replaceWithCollection() {
+ List<Object> items = Collections.<Object>
singletonList(PROPERTY_VALUE);
+ String[] messageItems =
ReplacementUtils.replaceWithCollection(PROPERTY_NAME, items);
+ validateMessageItems(messageItems, items);
+ }
+
+ @Test
+ public void replaceWithNameableCollection() {
+ VM vm = new VM();
+ vm.setVmName(PROPERTY_VALUE);
+ List<Nameable> items = Collections.<Nameable> singletonList(vm);
+ String[] messageItems =
ReplacementUtils.replaceWithNameableCollection(PROPERTY_NAME, items);
+ validateMessageItems(messageItems, items);
+ }
+
+ private <T> void validateMessageItems(String[] messageItems, List<T>
items) {
+ assertNotNull(messageItems);
+ assertTrue(messageItems.length > 0);
+ assertTrue(messageItems[0].contains(PROPERTY_NAME));
+ assertTrue(messageItems[0].contains(PROPERTY_VALUE));
+ assertTrue(messageItems[1].contains(PROPERTY_COUNTER_NAME));
+ assertTrue(messageItems[1].contains(String.valueOf(items.size())));
+ }
+}
--
To view, visit http://gerrit.ovirt.org/10723
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia9d30047f090057561bd1a3e16f3edb4e724bd8d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Moti Asayag <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches