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 <masa...@redhat.com>
---
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 <masa...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to