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