From b033be98ea9383762184ccd166bcdf8ac68a5dbf Mon Sep 17 00:00:00 2001 From: Mike Conway Date: Thu, 27 May 2021 10:44:26 -0400 Subject: [PATCH] #388 cart remove --- .../shoppingcart/FileShoppingCart.java | 14 ++++++++ .../shoppingcart/ShoppingCartService.java | 2 ++ .../shoppingcart/ShoppingCartServiceImpl.java | 31 +++++++++++++++++ .../ShoppingCartServiceImplTest.java | 34 +++++++++++++++++++ 4 files changed, 81 insertions(+) diff --git a/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/FileShoppingCart.java b/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/FileShoppingCart.java index f8f904c18..b10d1ea46 100644 --- a/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/FileShoppingCart.java +++ b/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/FileShoppingCart.java @@ -48,6 +48,20 @@ public String serializeShoppingCartContentsToStringOneItemPerLine() { return sb.toString(); } + /** + * Remove an item from the cart, ignore if item is not in the cart + * + * @param itemPath {@code String} with the item to remove + */ + public void removeItem(final String itemPath) { + if (itemPath == null || itemPath.isEmpty()) { + throw new IllegalArgumentException("null or empty itemPath"); + } + + this.shoppingCartEntries.remove(itemPath); + + } + /** * Given a string representation (one file per line, separated by the \n * character, build a {@code FileShoppingCart}. The cart will be empty if no diff --git a/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartService.java b/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartService.java index 1ad00ea84..6c1ed1463 100644 --- a/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartService.java +++ b/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartService.java @@ -106,4 +106,6 @@ String serializeShoppingCartAsSpecifiedUser(FileShoppingCart fileShoppingCart, S */ FileShoppingCart appendToShoppingCart(final String key, final List fileList) throws JargonException; + FileShoppingCart removeSpecifiedItemsFromShoppingCart(final String key, final List fileList) throws JargonException; + } diff --git a/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImpl.java b/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImpl.java index 4acef88d6..6869e46c7 100644 --- a/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImpl.java +++ b/jargon-data-utils/src/main/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImpl.java @@ -140,6 +140,37 @@ public FileShoppingCart appendToShoppingCart(final String key, final List fileList) + throws JargonException { + log.info("removeSpecifiedItemsFromShoppingCart()"); + + if (key == null || key.isEmpty()) { + throw new IllegalArgumentException("null or empty key"); + } + + log.info("key:{}", key); + + if (fileList == null) { + throw new IllegalArgumentException("null or empty fileList"); + } + + // retrieve the cart + + FileShoppingCart cart = this.retreiveShoppingCartAsLoggedInUser(key); + + for (String removeItem : fileList) { + log.debug("remove item:{}", removeItem); + cart.removeAnItem(removeItem); + } + + this.serializeShoppingCartAsLoggedInUser(cart, key); + + log.info("items removed"); + return cart; + + } + /* * (non-Javadoc) * diff --git a/jargon-data-utils/src/test/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImplTest.java b/jargon-data-utils/src/test/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImplTest.java index b24f42b3d..4fac8545c 100644 --- a/jargon-data-utils/src/test/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImplTest.java +++ b/jargon-data-utils/src/test/java/org/irods/jargon/datautils/shoppingcart/ShoppingCartServiceImplTest.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Properties; import org.irods.jargon.core.connection.IRODSAccount; @@ -110,6 +111,39 @@ public final void testSerializeDeserializeShoppingCartAsLoggedInUser() throws Ex } + @Test + public final void testRemoveItemsFromCart() throws Exception { + String key = "key"; + String expectedPath1 = "/a/path"; + String expectedPath2 = "/a/path2"; + String expectedPath3 = "/a/path3"; + + IRODSAccount irodsAccount = testingPropertiesHelper.buildIRODSAccountFromTestProperties(testingProperties); + + DataCacheServiceFactory dataCacheServiceFactory = new DataCacheServiceFactoryImpl( + irodsFileSystem.getIRODSAccessObjectFactory()); + + ShoppingCartService shoppingCartService = new ShoppingCartServiceImpl( + irodsFileSystem.getIRODSAccessObjectFactory(), irodsAccount, dataCacheServiceFactory); + FileShoppingCart fileShoppingCart = FileShoppingCart.instance(); + fileShoppingCart.addAnItem(ShoppingCartEntry.instance(expectedPath1)); + fileShoppingCart.addAnItem(ShoppingCartEntry.instance(expectedPath2)); + fileShoppingCart.addAnItem(ShoppingCartEntry.instance(expectedPath3)); + shoppingCartService.serializeShoppingCartAsLoggedInUser(fileShoppingCart, key); + + // remove items 1 and 3 + + List itemsToRemove = new ArrayList<>(); + itemsToRemove.add(expectedPath1); + itemsToRemove.add(expectedPath3); + shoppingCartService.removeSpecifiedItemsFromShoppingCart(key, itemsToRemove); + + FileShoppingCart cart = shoppingCartService.retreiveShoppingCartAsLoggedInUser(key); + Assert.assertEquals("did not delete expected items", 1, cart.getShoppingCartFileList().size()); + String itemLeft = cart.getShoppingCartFileList().get(0); + Assert.assertEquals("did not get expected item", expectedPath2, itemLeft); + } + @Test public final void testAddItemToCartWithADuplicate() throws Exception { String key = "key";