From a5d68dac488f5252f29fc39f2306883be340f35e Mon Sep 17 00:00:00 2001 From: James Every Date: Thu, 22 Feb 2018 15:27:54 +0000 Subject: [PATCH 01/22] Empty Gradle/Java project --- .../supply-chain/evrythng.eif/.gitignore | 17 ++ .../supply-chain/evrythng.eif/README.md | 21 +++ .../supply-chain/evrythng.eif/build.gradle | 16 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54788 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../supply-chain/evrythng.eif/gradlew | 172 ++++++++++++++++++ .../supply-chain/evrythng.eif/settings.gradle | 2 + 7 files changed, 234 insertions(+) create mode 100644 customer-solutions/supply-chain/evrythng.eif/.gitignore create mode 100644 customer-solutions/supply-chain/evrythng.eif/README.md create mode 100644 customer-solutions/supply-chain/evrythng.eif/build.gradle create mode 100644 customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.jar create mode 100644 customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.properties create mode 100755 customer-solutions/supply-chain/evrythng.eif/gradlew create mode 100644 customer-solutions/supply-chain/evrythng.eif/settings.gradle diff --git a/customer-solutions/supply-chain/evrythng.eif/.gitignore b/customer-solutions/supply-chain/evrythng.eif/.gitignore new file mode 100644 index 0000000..dc691e8 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/.gitignore @@ -0,0 +1,17 @@ +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +gradlew.bat + diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md new file mode 100644 index 0000000..c5dbf46 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -0,0 +1,21 @@ +# Evrythng Enterprise Integration Framework + +Reference implementation. + +See [evrythng/examples](https://github.com/evrythng/examples/tree/master/customer-solutions/supply-chain) + + +# Local install + +Install [Gradle build tool](https://gradle.org/): + + brew install gradle + +Checkout the repository and build + + git clone + + cd evrythng.eif + gradle build + + diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle new file mode 100644 index 0000000..8e2adcf --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -0,0 +1,16 @@ +group 'com.evrythng' +version '0.18.53' + +apply plugin: 'java' + +sourceCompatibility = 1.8 + +repositories { + mavenCentral() +} + +dependencies { + compile group: 'com.evrythng', name: 'evrythng-java-wrapper', version: '1.33' + + testCompile group: 'junit', name: 'junit', version: '4.12' +} diff --git a/customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.jar b/customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..f591cf98099503d288cd3bbd5c28eecd39ebbaa0 GIT binary patch literal 54788 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/customer-solutions/supply-chain/evrythng.eif/settings.gradle b/customer-solutions/supply-chain/evrythng.eif/settings.gradle new file mode 100644 index 0000000..05c911a --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'eif' + From e3557b4669ca621f039d4c678b97528daf2a2678 Mon Sep 17 00:00:00 2001 From: James Every Date: Thu, 22 Feb 2018 17:13:00 +0000 Subject: [PATCH 02/22] Simple GS1 Product model for Supply Chain --- .../src/main/java/org/schema/Product.java | 32 +++++++++++++++++ .../src/main/java/org/schema/Thing.java | 19 ++++++++++ .../java/org/schema/identifier/GTIN13.java | 36 +++++++++++++++++++ .../org/schema/identifier/GTIN13Test.java | 34 ++++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Thing.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java new file mode 100644 index 0000000..3891a1e --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java @@ -0,0 +1,32 @@ +package org.schema; + +import org.schema.identifier.GTIN13; + +import java.util.HashMap; +import java.util.Map; + +/** + * GS1 Product. + * + * https://www.gs1.org/voc/Product + * http://schema.org/Product + */ +public class Product extends Thing { + + // EVRYTHNG/Product.brand + public String brand; + + /** + * A category for the item. + * Greater signs or slashes can be used to informally indicate a category hierarchy. + * + * EVRYTHNG/Product.tags + */ + public String category; + + // EVRYTHNG/Product.identifiers.EAN + public GTIN13 gtin13; + + // EVRYTHNG/Product.customFields + public Map additionalProperty = new HashMap<>(); +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Thing.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Thing.java new file mode 100644 index 0000000..6a4aa48 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Thing.java @@ -0,0 +1,19 @@ +package org.schema; + +/** + * GS1 Thng. + * + * http://schema.org/Thing + * + * Base class of + * https://www.gs1.org/voc/Product + */ +public abstract class Thing { + + // EVRYTHNG/Product.description + public String description; + + // EVRYTHNG/Product.name + public String name; + +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java new file mode 100644 index 0000000..b06c869 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java @@ -0,0 +1,36 @@ +package org.schema.identifier; + +import com.sun.istack.internal.NotNull; + +/** + * The GTIN-13 code of the product, or the product to which the offer refers. + * This is equivalent to 13-digit ISBN codes and EAN UCC-13. Former 12-digit UPC codes can be converted into a GTIN-13 code by simply adding a preceeding zero. + * + * http://schema.org/gtin13 + * + * GTIN - https://www.gtin.info/ + * + */ +public class GTIN13 { + + /** + * Validates GTIN. + * + * @throws IllegalArgumentException if not 13 digits + */ + public GTIN13(String s) { + if (s != null && s.matches("[0-9]{13}")) { + this.gtin = s; + } else { + throw new IllegalArgumentException(s); + } + } + + @NotNull + public final String gtin; + + @Override + public String toString() { + return gtin; + } +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java new file mode 100644 index 0000000..8728b28 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java @@ -0,0 +1,34 @@ +package org.schema.identifier; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class GTIN13Test { + + @Test + public void testGTIN() { + assertEquals("1234567890123", new GTIN13("1234567890123").gtin); + } + + @Test(expected = IllegalArgumentException.class) + public void testShortGTIN() { + new GTIN13("123456789012"); + } + + @Test(expected = IllegalArgumentException.class) + public void testLongGTIN() { + new GTIN13("12345678901234"); + } + + @Test(expected = IllegalArgumentException.class) + public void testNullGTIN() { + new GTIN13(null); + } + + @Test + public void testToString() { + assertEquals("1234567890123", new GTIN13("1234567890123").toString()); + } + +} \ No newline at end of file From 3466d41914ada1fe199c80fa3612ce8fac1af400 Mon Sep 17 00:00:00 2001 From: James Every Date: Fri, 23 Feb 2018 17:44:55 +0000 Subject: [PATCH 03/22] Transform product --- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../demo/supplychain/TransformProduct.java | 43 +++++++++++++++++++ .../src/main/java/org/schema/jaxb.index | 1 + .../supplychain/TransformProductTest.java | 43 +++++++++++++++++++ 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java diff --git a/customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.properties b/customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.properties index 8467b41..ac06a99 100644 --- a/customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.properties +++ b/customer-solutions/supply-chain/evrythng.eif/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Feb 22 15:13:40 GMT 2018 +#Thu Feb 22 17:35:07 GMT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-rc-2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-rc-2-all.zip diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java new file mode 100644 index 0000000..2c71241 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java @@ -0,0 +1,43 @@ +package com.evrythng.demo.supplychain; + +import com.evrythng.thng.resource.model.store.Product; + +/** + * Transform GS1/Product to EVT/Product. + */ +public class TransformProduct { + + public TransformProduct() { + this.target = new Product(); + } + + private final Product target; + + public Product convert(org.schema.Product src) { + return this + .name(src) + .brand(src) + .toEVT(); + } + + private Product toEVT() { + return this.target; + } + + private TransformProduct name(org.schema.Product p) { + if (p.name != null && !p.name.isEmpty()) { + target.setName(p.name); + } else { + target.setName("Unnamed"); + } + return this; + } + + private TransformProduct brand(org.schema.Product p) { + if (p.brand != null && !p.brand.isEmpty()) { + target.setBrand(p.brand); + } + return this; + } + +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index new file mode 100644 index 0000000..a91f445 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index @@ -0,0 +1 @@ +Product \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java new file mode 100644 index 0000000..c0e8326 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java @@ -0,0 +1,43 @@ +package com.evrythng.demo.supplychain; + +import com.evrythng.thng.resource.model.store.Product; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class TransformProductTest { + + private Product evtProduct; + + @Before + public void setUp() { + evtProduct = new TransformProduct().convert(new org.schema.Product()); + } + + @Test + public void testName() { + assertEquals("Glass", evtProduct.getName()); + } + + @Test + public void testDescription() { + assertEquals("75 cl empty bottles", evtProduct.getDescription()); + } + + @Test + public void testBrand() { + assertEquals("Glass Suppliers Ltd", evtProduct.getBrand()); + } + + @Test + public void testEAN() { + assertEquals("82746598390275638", evtProduct.getIdentifiers().get("EAN")); + } + + @Test + public void testQuantityPerPallet() { + assertEquals(960, evtProduct.getCustomFields().get("qty_per_pallet")); + } + +} \ No newline at end of file From 50d27fcd1953ef5d9c908d492c1a2cc085fa750f Mon Sep 17 00:00:00 2001 From: James Every Date: Mon, 26 Feb 2018 17:43:13 +0000 Subject: [PATCH 04/22] Transform product tests pass --- .../supply-chain/evrythng.eif/.gitignore | 1 + .../supply-chain/evrythng.eif/build.gradle | 5 + .../demo/supplychain/ProductLoad.java | 7 + .../demo/supplychain/TransformProduct.java | 26 + .../src/main/java/org/schema/Product.java | 7 + .../src/main/java/org/schema/Products.java | 13 + .../java/org/schema/identifier/GTIN13.java | 3 - .../src/main/java/org/schema/jaxb.index | 1 + .../src/main/ruby/gen_products.rb | 44 + .../demo/supplychain/ProductLoadTest.java | 31 + .../supplychain/TransformProductTest.java | 11 +- .../src/test/resources/codebrainz/colors.csv | 866 ++++++++++++++++++ .../resources/schema.org/supply_chain.xml | 22 + .../test/resources/schema.org/template.xml | 14 + 14 files changed, 1046 insertions(+), 5 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoadTest.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/test/resources/codebrainz/colors.csv create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml diff --git a/customer-solutions/supply-chain/evrythng.eif/.gitignore b/customer-solutions/supply-chain/evrythng.eif/.gitignore index dc691e8..a5d32b5 100644 --- a/customer-solutions/supply-chain/evrythng.eif/.gitignore +++ b/customer-solutions/supply-chain/evrythng.eif/.gitignore @@ -1,5 +1,6 @@ .gradle /build/ +/out/ # Ignore Gradle GUI config gradle-app.setting diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 8e2adcf..e1c0d4b 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -12,5 +12,10 @@ repositories { dependencies { compile group: 'com.evrythng', name: 'evrythng-java-wrapper', version: '1.33' + compile group: 'org.apache.camel', name: 'camel-core', version: '2.18.2' + compile group: 'org.apache.camel', name: 'camel-jaxb', version: '2.18.2' + testCompile group: 'junit', name: 'junit', version: '4.12' + + testCompile group: 'org.apache.camel', name: 'camel-test', version: '2.18.2' } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java new file mode 100644 index 0000000..9d4a68e --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java @@ -0,0 +1,7 @@ +package com.evrythng.demo.supplychain; + +public class ProductLoad { + + void load() {}; + +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java index 2c71241..e02d4a0 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java @@ -2,6 +2,8 @@ import com.evrythng.thng.resource.model.store.Product; +import java.util.Map; + /** * Transform GS1/Product to EVT/Product. */ @@ -17,6 +19,9 @@ public Product convert(org.schema.Product src) { return this .name(src) .brand(src) + .description(src) + .gtin(src) + .additionalProperties(src) .toEVT(); } @@ -40,4 +45,25 @@ private TransformProduct brand(org.schema.Product p) { return this; } + private TransformProduct description(org.schema.Product p) { + if (p.description != null && !p.description.isEmpty()) { + target.setDescription(p.description); + } + return this; + } + + private TransformProduct gtin(org.schema.Product p) { + if (p.gtin13 != null) { + target.addIdentifier("EAN", p.gtin13.gtin); + } + return this; + } + + private TransformProduct additionalProperties(org.schema.Product p) { + for (Map.Entry entry : p.additionalProperty.entrySet()) { + target.addCustomFields(entry.getKey(), entry.getValue()); + } + return this; + } + } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java index 3891a1e..2c5d7e1 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Product.java @@ -2,6 +2,9 @@ import org.schema.identifier.GTIN13; +import javax.xml.bind.annotation.XmlRootElement; +import java.net.URI; +import java.net.URL; import java.util.HashMap; import java.util.Map; @@ -11,6 +14,7 @@ * https://www.gs1.org/voc/Product * http://schema.org/Product */ +@XmlRootElement(name="Product", namespace = "http://schema.org/Product") public class Product extends Thing { // EVRYTHNG/Product.brand @@ -27,6 +31,9 @@ public class Product extends Thing { // EVRYTHNG/Product.identifiers.EAN public GTIN13 gtin13; + // http://schema.org/image + public URL image; + // EVRYTHNG/Product.customFields public Map additionalProperty = new HashMap<>(); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java new file mode 100644 index 0000000..c431755 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java @@ -0,0 +1,13 @@ +package org.schema; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@XmlRootElement(name="Products", namespace = "http://schema.org/Product") +public class Products { + + @XmlElement(name="Product") + List products; + +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java index b06c869..4ebb427 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java @@ -1,7 +1,5 @@ package org.schema.identifier; -import com.sun.istack.internal.NotNull; - /** * The GTIN-13 code of the product, or the product to which the offer refers. * This is equivalent to 13-digit ISBN codes and EAN UCC-13. Former 12-digit UPC codes can be converted into a GTIN-13 code by simply adding a preceeding zero. @@ -26,7 +24,6 @@ public GTIN13(String s) { } } - @NotNull public final String gtin; @Override diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index index a91f445..df5e1fe 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index @@ -1 +1,2 @@ +Products Product \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb new file mode 100644 index 0000000..7f469ff --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb @@ -0,0 +1,44 @@ +# +# Generate GS1 Products, ready for load into EVT +# +# Install: +# +# brew install ruby +# +# +# Run +# +# ruby src/main/ruby/gen_products.rb > products.xml +# + +require 'csv' +require 'date' + +COLORS_CSV=File.join(File.dirname(__FILE__), "../../test/resources/codebrainz/colors.csv") + +class Colors + def initialize(f) + @names = CSV.read(f, :headers=>true).map {|r| r['name']} + end + attr_reader :names +end + +class EANGenerator + def initialize(prefix=500) + @prefix = prefix.to_i + @doy = Date.today.yday + end + + def generate(n=1) + t = (DateTime.now.to_time.to_i % 86400) * 100 + y = DateTime.now.year.to_i % 10 + return (1..n).map { |n| sprintf("%03d%03d%07d", @prefix, @doy, t + n) } + end + +end + +Sizes = ['S', 'M', 'L', 'XL'] + +#puts Colors.new(COLORS_CSV).names.last.inspect + +#puts EANGenerator.new(500).generate(100) diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoadTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoadTest.java new file mode 100644 index 0000000..7824aed --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoadTest.java @@ -0,0 +1,31 @@ +package com.evrythng.demo.supplychain; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; +import org.schema.Products; + +import static org.junit.Assert.*; + +public class ProductLoadTest extends CamelTestSupport { + + @Test + public void parseProductsXML() { + MockEndpoint skus = getMockEndpoint("mock:skus-xml"); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("seda:input") + .split(xpath("//Products/Product")) + .unmarshal().jaxb("org.schema") + .to("mock:skus-xml"); + } + }; + } + +} \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java index c0e8326..568f85f 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java @@ -3,6 +3,7 @@ import com.evrythng.thng.resource.model.store.Product; import org.junit.Before; import org.junit.Test; +import org.schema.identifier.GTIN13; import static org.junit.Assert.*; @@ -12,7 +13,13 @@ public class TransformProductTest { @Before public void setUp() { - evtProduct = new TransformProduct().convert(new org.schema.Product()); + org.schema.Product input = new org.schema.Product(); + input.name = "Glass"; + input.brand = "Glass Suppliers Ltd"; + input.description = "75 cl empty bottles"; + input.gtin13 = new GTIN13("8274659839027"); + input.additionalProperty.put("qty_per_pallet", 960); + evtProduct = new TransformProduct().convert(input); } @Test @@ -32,7 +39,7 @@ public void testBrand() { @Test public void testEAN() { - assertEquals("82746598390275638", evtProduct.getIdentifiers().get("EAN")); + assertEquals("8274659839027", evtProduct.getIdentifiers().get("EAN")); } @Test diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/codebrainz/colors.csv b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/codebrainz/colors.csv new file mode 100644 index 0000000..6d5a361 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/codebrainz/colors.csv @@ -0,0 +1,866 @@ +code,name,hex,r,g,b +air_force_blue_raf,"Air Force Blue (Raf)",#5d8aa8,93,138,168 +air_force_blue_usaf,"Air Force Blue (Usaf)",#00308f,0,48,143 +air_superiority_blue,"Air Superiority Blue",#72a0c1,114,160,193 +alabama_crimson,"Alabama Crimson",#a32638,163,38,56 +alice_blue,"Alice Blue",#f0f8ff,240,248,255 +alizarin_crimson,"Alizarin Crimson",#e32636,227,38,54 +alloy_orange,"Alloy Orange",#c46210,196,98,16 +almond,"Almond",#efdecd,239,222,205 +amaranth,"Amaranth",#e52b50,229,43,80 +amber,"Amber",#ffbf00,255,191,0 +amber_sae_ece,"Amber (Sae/Ece)",#ff7e00,255,126,0 +american_rose,"American Rose",#ff033e,255,3,62 +amethyst,"Amethyst",#96c,153,102,204 +android_green,"Android Green",#a4c639,164,198,57 +anti_flash_white,"Anti-Flash White",#f2f3f4,242,243,244 +antique_brass,"Antique Brass",#cd9575,205,149,117 +antique_fuchsia,"Antique Fuchsia",#915c83,145,92,131 +antique_ruby,"Antique Ruby",#841b2d,132,27,45 +antique_white,"Antique White",#faebd7,250,235,215 +ao_english,"Ao (English)",#008000,0,128,0 +apple_green,"Apple Green",#8db600,141,182,0 +apricot,"Apricot",#fbceb1,251,206,177 +aqua,"Aqua",#0ff,0,255,255 +aquamarine,"Aquamarine",#7fffd4,127,255,212 +army_green,"Army Green",#4b5320,75,83,32 +arsenic,"Arsenic",#3b444b,59,68,75 +arylide_yellow,"Arylide Yellow",#e9d66b,233,214,107 +ash_grey,"Ash Grey",#b2beb5,178,190,181 +asparagus,"Asparagus",#87a96b,135,169,107 +atomic_tangerine,"Atomic Tangerine",#f96,255,153,102 +auburn,"Auburn",#a52a2a,165,42,42 +aureolin,"Aureolin",#fdee00,253,238,0 +aurometalsaurus,"Aurometalsaurus",#6e7f80,110,127,128 +avocado,"Avocado",#568203,86,130,3 +azure,"Azure",#007fff,0,127,255 +azure_mist_web,"Azure Mist/Web",#f0ffff,240,255,255 +baby_blue,"Baby Blue",#89cff0,137,207,240 +baby_blue_eyes,"Baby Blue Eyes",#a1caf1,161,202,241 +baby_pink,"Baby Pink",#f4c2c2,244,194,194 +ball_blue,"Ball Blue",#21abcd,33,171,205 +banana_mania,"Banana Mania",#fae7b5,250,231,181 +banana_yellow,"Banana Yellow",#ffe135,255,225,53 +barn_red,"Barn Red",#7c0a02,124,10,2 +battleship_grey,"Battleship Grey",#848482,132,132,130 +bazaar,"Bazaar",#98777b,152,119,123 +beau_blue,"Beau Blue",#bcd4e6,188,212,230 +beaver,"Beaver",#9f8170,159,129,112 +beige,"Beige",#f5f5dc,245,245,220 +big_dip_o_ruby,"Big Dip O’Ruby",#9c2542,156,37,66 +bisque,"Bisque",#ffe4c4,255,228,196 +bistre,"Bistre",#3d2b1f,61,43,31 +bittersweet,"Bittersweet",#fe6f5e,254,111,94 +bittersweet_shimmer,"Bittersweet Shimmer",#bf4f51,191,79,81 +black,"Black",#000,0,0,0 +black_bean,"Black Bean",#3d0c02,61,12,2 +black_leather_jacket,"Black Leather Jacket",#253529,37,53,41 +black_olive,"Black Olive",#3b3c36,59,60,54 +blanched_almond,"Blanched Almond",#ffebcd,255,235,205 +blast_off_bronze,"Blast-Off Bronze",#a57164,165,113,100 +bleu_de_france,"Bleu De France",#318ce7,49,140,231 +blizzard_blue,"Blizzard Blue",#ace5ee,172,229,238 +blond,"Blond",#faf0be,250,240,190 +blue,"Blue",#00f,0,0,255 +blue_bell,"Blue Bell",#a2a2d0,162,162,208 +blue_crayola,"Blue (Crayola)",#1f75fe,31,117,254 +blue_gray,"Blue Gray",#69c,102,153,204 +blue_green,"Blue-Green",#0d98ba,13,152,186 +blue_munsell,"Blue (Munsell)",#0093af,0,147,175 +blue_ncs,"Blue (Ncs)",#0087bd,0,135,189 +blue_pigment,"Blue (Pigment)",#339,51,51,153 +blue_ryb,"Blue (Ryb)",#0247fe,2,71,254 +blue_sapphire,"Blue Sapphire",#126180,18,97,128 +blue_violet,"Blue-Violet",#8a2be2,138,43,226 +blush,"Blush",#de5d83,222,93,131 +bole,"Bole",#79443b,121,68,59 +bondi_blue,"Bondi Blue",#0095b6,0,149,182 +bone,"Bone",#e3dac9,227,218,201 +boston_university_red,"Boston University Red",#c00,204,0,0 +bottle_green,"Bottle Green",#006a4e,0,106,78 +boysenberry,"Boysenberry",#873260,135,50,96 +brandeis_blue,"Brandeis Blue",#0070ff,0,112,255 +brass,"Brass",#b5a642,181,166,66 +brick_red,"Brick Red",#cb4154,203,65,84 +bright_cerulean,"Bright Cerulean",#1dacd6,29,172,214 +bright_green,"Bright Green",#6f0,102,255,0 +bright_lavender,"Bright Lavender",#bf94e4,191,148,228 +bright_maroon,"Bright Maroon",#c32148,195,33,72 +bright_pink,"Bright Pink",#ff007f,255,0,127 +bright_turquoise,"Bright Turquoise",#08e8de,8,232,222 +bright_ube,"Bright Ube",#d19fe8,209,159,232 +brilliant_lavender,"Brilliant Lavender",#f4bbff,244,187,255 +brilliant_rose,"Brilliant Rose",#ff55a3,255,85,163 +brink_pink,"Brink Pink",#fb607f,251,96,127 +british_racing_green,"British Racing Green",#004225,0,66,37 +bronze,"Bronze",#cd7f32,205,127,50 +brown_traditional,"Brown (Traditional)",#964b00,150,75,0 +brown_web,"Brown (Web)",#a52a2a,165,42,42 +bubble_gum,"Bubble Gum",#ffc1cc,255,193,204 +bubbles,"Bubbles",#e7feff,231,254,255 +buff,"Buff",#f0dc82,240,220,130 +bulgarian_rose,"Bulgarian Rose",#480607,72,6,7 +burgundy,"Burgundy",#800020,128,0,32 +burlywood,"Burlywood",#deb887,222,184,135 +burnt_orange,"Burnt Orange",#c50,204,85,0 +burnt_sienna,"Burnt Sienna",#e97451,233,116,81 +burnt_umber,"Burnt Umber",#8a3324,138,51,36 +byzantine,"Byzantine",#bd33a4,189,51,164 +byzantium,"Byzantium",#702963,112,41,99 +cadet,"Cadet",#536872,83,104,114 +cadet_blue,"Cadet Blue",#5f9ea0,95,158,160 +cadet_grey,"Cadet Grey",#91a3b0,145,163,176 +cadmium_green,"Cadmium Green",#006b3c,0,107,60 +cadmium_orange,"Cadmium Orange",#ed872d,237,135,45 +cadmium_red,"Cadmium Red",#e30022,227,0,34 +cadmium_yellow,"Cadmium Yellow",#fff600,255,246,0 +caf_au_lait,"Café Au Lait",#a67b5b,166,123,91 +caf_noir,"Café Noir",#4b3621,75,54,33 +cal_poly_green,"Cal Poly Green",#1e4d2b,30,77,43 +cambridge_blue,"Cambridge Blue",#a3c1ad,163,193,173 +camel,"Camel",#c19a6b,193,154,107 +cameo_pink,"Cameo Pink",#efbbcc,239,187,204 +camouflage_green,"Camouflage Green",#78866b,120,134,107 +canary_yellow,"Canary Yellow",#ffef00,255,239,0 +candy_apple_red,"Candy Apple Red",#ff0800,255,8,0 +candy_pink,"Candy Pink",#e4717a,228,113,122 +capri,"Capri",#00bfff,0,191,255 +caput_mortuum,"Caput Mortuum",#592720,89,39,32 +cardinal,"Cardinal",#c41e3a,196,30,58 +caribbean_green,"Caribbean Green",#0c9,0,204,153 +carmine,"Carmine",#960018,150,0,24 +carmine_m_p,"Carmine (M&P)",#d70040,215,0,64 +carmine_pink,"Carmine Pink",#eb4c42,235,76,66 +carmine_red,"Carmine Red",#ff0038,255,0,56 +carnation_pink,"Carnation Pink",#ffa6c9,255,166,201 +carnelian,"Carnelian",#b31b1b,179,27,27 +carolina_blue,"Carolina Blue",#99badd,153,186,221 +carrot_orange,"Carrot Orange",#ed9121,237,145,33 +catalina_blue,"Catalina Blue",#062a78,6,42,120 +ceil,"Ceil",#92a1cf,146,161,207 +celadon,"Celadon",#ace1af,172,225,175 +celadon_blue,"Celadon Blue",#007ba7,0,123,167 +celadon_green,"Celadon Green",#2f847c,47,132,124 +celeste_colour,"Celeste (Colour)",#b2ffff,178,255,255 +celestial_blue,"Celestial Blue",#4997d0,73,151,208 +cerise,"Cerise",#de3163,222,49,99 +cerise_pink,"Cerise Pink",#ec3b83,236,59,131 +cerulean,"Cerulean",#007ba7,0,123,167 +cerulean_blue,"Cerulean Blue",#2a52be,42,82,190 +cerulean_frost,"Cerulean Frost",#6d9bc3,109,155,195 +cg_blue,"Cg Blue",#007aa5,0,122,165 +cg_red,"Cg Red",#e03c31,224,60,49 +chamoisee,"Chamoisee",#a0785a,160,120,90 +champagne,"Champagne",#fad6a5,250,214,165 +charcoal,"Charcoal",#36454f,54,69,79 +charm_pink,"Charm Pink",#e68fac,230,143,172 +chartreuse_traditional,"Chartreuse (Traditional)",#dfff00,223,255,0 +chartreuse_web,"Chartreuse (Web)",#7fff00,127,255,0 +cherry,"Cherry",#de3163,222,49,99 +cherry_blossom_pink,"Cherry Blossom Pink",#ffb7c5,255,183,197 +chestnut,"Chestnut",#cd5c5c,205,92,92 +china_pink,"China Pink",#de6fa1,222,111,161 +china_rose,"China Rose",#a8516e,168,81,110 +chinese_red,"Chinese Red",#aa381e,170,56,30 +chocolate_traditional,"Chocolate (Traditional)",#7b3f00,123,63,0 +chocolate_web,"Chocolate (Web)",#d2691e,210,105,30 +chrome_yellow,"Chrome Yellow",#ffa700,255,167,0 +cinereous,"Cinereous",#98817b,152,129,123 +cinnabar,"Cinnabar",#e34234,227,66,52 +cinnamon,"Cinnamon",#d2691e,210,105,30 +citrine,"Citrine",#e4d00a,228,208,10 +classic_rose,"Classic Rose",#fbcce7,251,204,231 +cobalt,"Cobalt",#0047ab,0,71,171 +cocoa_brown,"Cocoa Brown",#d2691e,210,105,30 +coffee,"Coffee",#6f4e37,111,78,55 +columbia_blue,"Columbia Blue",#9bddff,155,221,255 +congo_pink,"Congo Pink",#f88379,248,131,121 +cool_black,"Cool Black",#002e63,0,46,99 +cool_grey,"Cool Grey",#8c92ac,140,146,172 +copper,"Copper",#b87333,184,115,51 +copper_crayola,"Copper (Crayola)",#da8a67,218,138,103 +copper_penny,"Copper Penny",#ad6f69,173,111,105 +copper_red,"Copper Red",#cb6d51,203,109,81 +copper_rose,"Copper Rose",#966,153,102,102 +coquelicot,"Coquelicot",#ff3800,255,56,0 +coral,"Coral",#ff7f50,255,127,80 +coral_pink,"Coral Pink",#f88379,248,131,121 +coral_red,"Coral Red",#ff4040,255,64,64 +cordovan,"Cordovan",#893f45,137,63,69 +corn,"Corn",#fbec5d,251,236,93 +cornell_red,"Cornell Red",#b31b1b,179,27,27 +cornflower_blue,"Cornflower Blue",#6495ed,100,149,237 +cornsilk,"Cornsilk",#fff8dc,255,248,220 +cosmic_latte,"Cosmic Latte",#fff8e7,255,248,231 +cotton_candy,"Cotton Candy",#ffbcd9,255,188,217 +cream,"Cream",#fffdd0,255,253,208 +crimson,"Crimson",#dc143c,220,20,60 +crimson_glory,"Crimson Glory",#be0032,190,0,50 +cyan,"Cyan",#0ff,0,255,255 +cyan_process,"Cyan (Process)",#00b7eb,0,183,235 +daffodil,"Daffodil",#ffff31,255,255,49 +dandelion,"Dandelion",#f0e130,240,225,48 +dark_blue,"Dark Blue",#00008b,0,0,139 +dark_brown,"Dark Brown",#654321,101,67,33 +dark_byzantium,"Dark Byzantium",#5d3954,93,57,84 +dark_candy_apple_red,"Dark Candy Apple Red",#a40000,164,0,0 +dark_cerulean,"Dark Cerulean",#08457e,8,69,126 +dark_chestnut,"Dark Chestnut",#986960,152,105,96 +dark_coral,"Dark Coral",#cd5b45,205,91,69 +dark_cyan,"Dark Cyan",#008b8b,0,139,139 +dark_electric_blue,"Dark Electric Blue",#536878,83,104,120 +dark_goldenrod,"Dark Goldenrod",#b8860b,184,134,11 +dark_gray,"Dark Gray",#a9a9a9,169,169,169 +dark_green,"Dark Green",#013220,1,50,32 +dark_imperial_blue,"Dark Imperial Blue",#00416a,0,65,106 +dark_jungle_green,"Dark Jungle Green",#1a2421,26,36,33 +dark_khaki,"Dark Khaki",#bdb76b,189,183,107 +dark_lava,"Dark Lava",#483c32,72,60,50 +dark_lavender,"Dark Lavender",#734f96,115,79,150 +dark_magenta,"Dark Magenta",#8b008b,139,0,139 +dark_midnight_blue,"Dark Midnight Blue",#036,0,51,102 +dark_olive_green,"Dark Olive Green",#556b2f,85,107,47 +dark_orange,"Dark Orange",#ff8c00,255,140,0 +dark_orchid,"Dark Orchid",#9932cc,153,50,204 +dark_pastel_blue,"Dark Pastel Blue",#779ecb,119,158,203 +dark_pastel_green,"Dark Pastel Green",#03c03c,3,192,60 +dark_pastel_purple,"Dark Pastel Purple",#966fd6,150,111,214 +dark_pastel_red,"Dark Pastel Red",#c23b22,194,59,34 +dark_pink,"Dark Pink",#e75480,231,84,128 +dark_powder_blue,"Dark Powder Blue",#039,0,51,153 +dark_raspberry,"Dark Raspberry",#872657,135,38,87 +dark_red,"Dark Red",#8b0000,139,0,0 +dark_salmon,"Dark Salmon",#e9967a,233,150,122 +dark_scarlet,"Dark Scarlet",#560319,86,3,25 +dark_sea_green,"Dark Sea Green",#8fbc8f,143,188,143 +dark_sienna,"Dark Sienna",#3c1414,60,20,20 +dark_slate_blue,"Dark Slate Blue",#483d8b,72,61,139 +dark_slate_gray,"Dark Slate Gray",#2f4f4f,47,79,79 +dark_spring_green,"Dark Spring Green",#177245,23,114,69 +dark_tan,"Dark Tan",#918151,145,129,81 +dark_tangerine,"Dark Tangerine",#ffa812,255,168,18 +dark_taupe,"Dark Taupe",#483c32,72,60,50 +dark_terra_cotta,"Dark Terra Cotta",#cc4e5c,204,78,92 +dark_turquoise,"Dark Turquoise",#00ced1,0,206,209 +dark_violet,"Dark Violet",#9400d3,148,0,211 +dark_yellow,"Dark Yellow",#9b870c,155,135,12 +dartmouth_green,"Dartmouth Green",#00703c,0,112,60 +davy_s_grey,"Davy'S Grey",#555,85,85,85 +debian_red,"Debian Red",#d70a53,215,10,83 +deep_carmine,"Deep Carmine",#a9203e,169,32,62 +deep_carmine_pink,"Deep Carmine Pink",#ef3038,239,48,56 +deep_carrot_orange,"Deep Carrot Orange",#e9692c,233,105,44 +deep_cerise,"Deep Cerise",#da3287,218,50,135 +deep_champagne,"Deep Champagne",#fad6a5,250,214,165 +deep_chestnut,"Deep Chestnut",#b94e48,185,78,72 +deep_coffee,"Deep Coffee",#704241,112,66,65 +deep_fuchsia,"Deep Fuchsia",#c154c1,193,84,193 +deep_jungle_green,"Deep Jungle Green",#004b49,0,75,73 +deep_lilac,"Deep Lilac",#95b,153,85,187 +deep_magenta,"Deep Magenta",#c0c,204,0,204 +deep_peach,"Deep Peach",#ffcba4,255,203,164 +deep_pink,"Deep Pink",#ff1493,255,20,147 +deep_ruby,"Deep Ruby",#843f5b,132,63,91 +deep_saffron,"Deep Saffron",#f93,255,153,51 +deep_sky_blue,"Deep Sky Blue",#00bfff,0,191,255 +deep_tuscan_red,"Deep Tuscan Red",#66424d,102,66,77 +denim,"Denim",#1560bd,21,96,189 +desert,"Desert",#c19a6b,193,154,107 +desert_sand,"Desert Sand",#edc9af,237,201,175 +dim_gray,"Dim Gray",#696969,105,105,105 +dodger_blue,"Dodger Blue",#1e90ff,30,144,255 +dogwood_rose,"Dogwood Rose",#d71868,215,24,104 +dollar_bill,"Dollar Bill",#85bb65,133,187,101 +drab,"Drab",#967117,150,113,23 +duke_blue,"Duke Blue",#00009c,0,0,156 +earth_yellow,"Earth Yellow",#e1a95f,225,169,95 +ebony,"Ebony",#555d50,85,93,80 +ecru,"Ecru",#c2b280,194,178,128 +eggplant,"Eggplant",#614051,97,64,81 +eggshell,"Eggshell",#f0ead6,240,234,214 +egyptian_blue,"Egyptian Blue",#1034a6,16,52,166 +electric_blue,"Electric Blue",#7df9ff,125,249,255 +electric_crimson,"Electric Crimson",#ff003f,255,0,63 +electric_cyan,"Electric Cyan",#0ff,0,255,255 +electric_green,"Electric Green",#0f0,0,255,0 +electric_indigo,"Electric Indigo",#6f00ff,111,0,255 +electric_lavender,"Electric Lavender",#f4bbff,244,187,255 +electric_lime,"Electric Lime",#cf0,204,255,0 +electric_purple,"Electric Purple",#bf00ff,191,0,255 +electric_ultramarine,"Electric Ultramarine",#3f00ff,63,0,255 +electric_violet,"Electric Violet",#8f00ff,143,0,255 +electric_yellow,"Electric Yellow",#ff0,255,255,0 +emerald,"Emerald",#50c878,80,200,120 +english_lavender,"English Lavender",#b48395,180,131,149 +eton_blue,"Eton Blue",#96c8a2,150,200,162 +fallow,"Fallow",#c19a6b,193,154,107 +falu_red,"Falu Red",#801818,128,24,24 +fandango,"Fandango",#b53389,181,51,137 +fashion_fuchsia,"Fashion Fuchsia",#f400a1,244,0,161 +fawn,"Fawn",#e5aa70,229,170,112 +feldgrau,"Feldgrau",#4d5d53,77,93,83 +fern_green,"Fern Green",#4f7942,79,121,66 +ferrari_red,"Ferrari Red",#ff2800,255,40,0 +field_drab,"Field Drab",#6c541e,108,84,30 +fire_engine_red,"Fire Engine Red",#ce2029,206,32,41 +firebrick,"Firebrick",#b22222,178,34,34 +flame,"Flame",#e25822,226,88,34 +flamingo_pink,"Flamingo Pink",#fc8eac,252,142,172 +flavescent,"Flavescent",#f7e98e,247,233,142 +flax,"Flax",#eedc82,238,220,130 +floral_white,"Floral White",#fffaf0,255,250,240 +fluorescent_orange,"Fluorescent Orange",#ffbf00,255,191,0 +fluorescent_pink,"Fluorescent Pink",#ff1493,255,20,147 +fluorescent_yellow,"Fluorescent Yellow",#cf0,204,255,0 +folly,"Folly",#ff004f,255,0,79 +forest_green_traditional,"Forest Green (Traditional)",#014421,1,68,33 +forest_green_web,"Forest Green (Web)",#228b22,34,139,34 +french_beige,"French Beige",#a67b5b,166,123,91 +french_blue,"French Blue",#0072bb,0,114,187 +french_lilac,"French Lilac",#86608e,134,96,142 +french_lime,"French Lime",#cf0,204,255,0 +french_raspberry,"French Raspberry",#c72c48,199,44,72 +french_rose,"French Rose",#f64a8a,246,74,138 +fuchsia,"Fuchsia",#f0f,255,0,255 +fuchsia_crayola,"Fuchsia (Crayola)",#c154c1,193,84,193 +fuchsia_pink,"Fuchsia Pink",#f7f,255,119,255 +fuchsia_rose,"Fuchsia Rose",#c74375,199,67,117 +fulvous,"Fulvous",#e48400,228,132,0 +fuzzy_wuzzy,"Fuzzy Wuzzy",#c66,204,102,102 +gainsboro,"Gainsboro",#dcdcdc,220,220,220 +gamboge,"Gamboge",#e49b0f,228,155,15 +ghost_white,"Ghost White",#f8f8ff,248,248,255 +ginger,"Ginger",#b06500,176,101,0 +glaucous,"Glaucous",#6082b6,96,130,182 +glitter,"Glitter",#e6e8fa,230,232,250 +gold_metallic,"Gold (Metallic)",#d4af37,212,175,55 +gold_web_golden,"Gold (Web) (Golden)",#ffd700,255,215,0 +golden_brown,"Golden Brown",#996515,153,101,21 +golden_poppy,"Golden Poppy",#fcc200,252,194,0 +golden_yellow,"Golden Yellow",#ffdf00,255,223,0 +goldenrod,"Goldenrod",#daa520,218,165,32 +granny_smith_apple,"Granny Smith Apple",#a8e4a0,168,228,160 +gray,"Gray",#808080,128,128,128 +gray_asparagus,"Gray-Asparagus",#465945,70,89,69 +gray_html_css_gray,"Gray (Html/Css Gray)",#808080,128,128,128 +gray_x11_gray,"Gray (X11 Gray)",#bebebe,190,190,190 +green_color_wheel_x11_green,"Green (Color Wheel) (X11 Green)",#0f0,0,255,0 +green_crayola,"Green (Crayola)",#1cac78,28,172,120 +green_html_css_green,"Green (Html/Css Green)",#008000,0,128,0 +green_munsell,"Green (Munsell)",#00a877,0,168,119 +green_ncs,"Green (Ncs)",#009f6b,0,159,107 +green_pigment,"Green (Pigment)",#00a550,0,165,80 +green_ryb,"Green (Ryb)",#66b032,102,176,50 +green_yellow,"Green-Yellow",#adff2f,173,255,47 +grullo,"Grullo",#a99a86,169,154,134 +guppie_green,"Guppie Green",#00ff7f,0,255,127 +halay_be,"Halayà úBe",#663854,102,56,84 +han_blue,"Han Blue",#446ccf,68,108,207 +han_purple,"Han Purple",#5218fa,82,24,250 +hansa_yellow,"Hansa Yellow",#e9d66b,233,214,107 +harlequin,"Harlequin",#3fff00,63,255,0 +harvard_crimson,"Harvard Crimson",#c90016,201,0,22 +harvest_gold,"Harvest Gold",#da9100,218,145,0 +heart_gold,"Heart Gold",#808000,128,128,0 +heliotrope,"Heliotrope",#df73ff,223,115,255 +hollywood_cerise,"Hollywood Cerise",#f400a1,244,0,161 +honeydew,"Honeydew",#f0fff0,240,255,240 +honolulu_blue,"Honolulu Blue",#007fbf,0,127,191 +hooker_s_green,"Hooker'S Green",#49796b,73,121,107 +hot_magenta,"Hot Magenta",#ff1dce,255,29,206 +hot_pink,"Hot Pink",#ff69b4,255,105,180 +hunter_green,"Hunter Green",#355e3b,53,94,59 +iceberg,"Iceberg",#71a6d2,113,166,210 +icterine,"Icterine",#fcf75e,252,247,94 +imperial_blue,"Imperial Blue",#002395,0,35,149 +inchworm,"Inchworm",#b2ec5d,178,236,93 +india_green,"India Green",#138808,19,136,8 +indian_red,"Indian Red",#cd5c5c,205,92,92 +indian_yellow,"Indian Yellow",#e3a857,227,168,87 +indigo,"Indigo",#6f00ff,111,0,255 +indigo_dye,"Indigo (Dye)",#00416a,0,65,106 +indigo_web,"Indigo (Web)",#4b0082,75,0,130 +international_klein_blue,"International Klein Blue",#002fa7,0,47,167 +international_orange_aerospace,"International Orange (Aerospace)",#ff4f00,255,79,0 +international_orange_engineering,"International Orange (Engineering)",#ba160c,186,22,12 +international_orange_golden_gate_bridge,"International Orange (Golden Gate Bridge)",#c0362c,192,54,44 +iris,"Iris",#5a4fcf,90,79,207 +isabelline,"Isabelline",#f4f0ec,244,240,236 +islamic_green,"Islamic Green",#009000,0,144,0 +ivory,"Ivory",#fffff0,255,255,240 +jade,"Jade",#00a86b,0,168,107 +jasmine,"Jasmine",#f8de7e,248,222,126 +jasper,"Jasper",#d73b3e,215,59,62 +jazzberry_jam,"Jazzberry Jam",#a50b5e,165,11,94 +jet,"Jet",#343434,52,52,52 +jonquil,"Jonquil",#fada5e,250,218,94 +june_bud,"June Bud",#bdda57,189,218,87 +jungle_green,"Jungle Green",#29ab87,41,171,135 +kelly_green,"Kelly Green",#4cbb17,76,187,23 +kenyan_copper,"Kenyan Copper",#7c1c05,124,28,5 +khaki_html_css_khaki,"Khaki (Html/Css) (Khaki)",#c3b091,195,176,145 +khaki_x11_light_khaki,"Khaki (X11) (Light Khaki)",#f0e68c,240,230,140 +ku_crimson,"Ku Crimson",#e8000d,232,0,13 +la_salle_green,"La Salle Green",#087830,8,120,48 +languid_lavender,"Languid Lavender",#d6cadd,214,202,221 +lapis_lazuli,"Lapis Lazuli",#26619c,38,97,156 +laser_lemon,"Laser Lemon",#fefe22,254,254,34 +laurel_green,"Laurel Green",#a9ba9d,169,186,157 +lava,"Lava",#cf1020,207,16,32 +lavender_blue,"Lavender Blue",#ccf,204,204,255 +lavender_blush,"Lavender Blush",#fff0f5,255,240,245 +lavender_floral,"Lavender (Floral)",#b57edc,181,126,220 +lavender_gray,"Lavender Gray",#c4c3d0,196,195,208 +lavender_indigo,"Lavender Indigo",#9457eb,148,87,235 +lavender_magenta,"Lavender Magenta",#ee82ee,238,130,238 +lavender_mist,"Lavender Mist",#e6e6fa,230,230,250 +lavender_pink,"Lavender Pink",#fbaed2,251,174,210 +lavender_purple,"Lavender Purple",#967bb6,150,123,182 +lavender_rose,"Lavender Rose",#fba0e3,251,160,227 +lavender_web,"Lavender (Web)",#e6e6fa,230,230,250 +lawn_green,"Lawn Green",#7cfc00,124,252,0 +lemon,"Lemon",#fff700,255,247,0 +lemon_chiffon,"Lemon Chiffon",#fffacd,255,250,205 +lemon_lime,"Lemon Lime",#e3ff00,227,255,0 +licorice,"Licorice",#1a1110,26,17,16 +light_apricot,"Light Apricot",#fdd5b1,253,213,177 +light_blue,"Light Blue",#add8e6,173,216,230 +light_brown,"Light Brown",#b5651d,181,101,29 +light_carmine_pink,"Light Carmine Pink",#e66771,230,103,113 +light_coral,"Light Coral",#f08080,240,128,128 +light_cornflower_blue,"Light Cornflower Blue",#93ccea,147,204,234 +light_crimson,"Light Crimson",#f56991,245,105,145 +light_cyan,"Light Cyan",#e0ffff,224,255,255 +light_fuchsia_pink,"Light Fuchsia Pink",#f984ef,249,132,239 +light_goldenrod_yellow,"Light Goldenrod Yellow",#fafad2,250,250,210 +light_gray,"Light Gray",#d3d3d3,211,211,211 +light_green,"Light Green",#90ee90,144,238,144 +light_khaki,"Light Khaki",#f0e68c,240,230,140 +light_pastel_purple,"Light Pastel Purple",#b19cd9,177,156,217 +light_pink,"Light Pink",#ffb6c1,255,182,193 +light_red_ochre,"Light Red Ochre",#e97451,233,116,81 +light_salmon,"Light Salmon",#ffa07a,255,160,122 +light_salmon_pink,"Light Salmon Pink",#f99,255,153,153 +light_sea_green,"Light Sea Green",#20b2aa,32,178,170 +light_sky_blue,"Light Sky Blue",#87cefa,135,206,250 +light_slate_gray,"Light Slate Gray",#789,119,136,153 +light_taupe,"Light Taupe",#b38b6d,179,139,109 +light_thulian_pink,"Light Thulian Pink",#e68fac,230,143,172 +light_yellow,"Light Yellow",#ffffe0,255,255,224 +lilac,"Lilac",#c8a2c8,200,162,200 +lime_color_wheel,"Lime (Color Wheel)",#bfff00,191,255,0 +lime_green,"Lime Green",#32cd32,50,205,50 +lime_web_x11_green,"Lime (Web) (X11 Green)",#0f0,0,255,0 +limerick,"Limerick",#9dc209,157,194,9 +lincoln_green,"Lincoln Green",#195905,25,89,5 +linen,"Linen",#faf0e6,250,240,230 +lion,"Lion",#c19a6b,193,154,107 +little_boy_blue,"Little Boy Blue",#6ca0dc,108,160,220 +liver,"Liver",#534b4f,83,75,79 +lust,"Lust",#e62020,230,32,32 +magenta,"Magenta",#f0f,255,0,255 +magenta_dye,"Magenta (Dye)",#ca1f7b,202,31,123 +magenta_process,"Magenta (Process)",#ff0090,255,0,144 +magic_mint,"Magic Mint",#aaf0d1,170,240,209 +magnolia,"Magnolia",#f8f4ff,248,244,255 +mahogany,"Mahogany",#c04000,192,64,0 +maize,"Maize",#fbec5d,251,236,93 +majorelle_blue,"Majorelle Blue",#6050dc,96,80,220 +malachite,"Malachite",#0bda51,11,218,81 +manatee,"Manatee",#979aaa,151,154,170 +mango_tango,"Mango Tango",#ff8243,255,130,67 +mantis,"Mantis",#74c365,116,195,101 +mardi_gras,"Mardi Gras",#880085,136,0,133 +maroon_crayola,"Maroon (Crayola)",#c32148,195,33,72 +maroon_html_css,"Maroon (Html/Css)",#800000,128,0,0 +maroon_x11,"Maroon (X11)",#b03060,176,48,96 +mauve,"Mauve",#e0b0ff,224,176,255 +mauve_taupe,"Mauve Taupe",#915f6d,145,95,109 +mauvelous,"Mauvelous",#ef98aa,239,152,170 +maya_blue,"Maya Blue",#73c2fb,115,194,251 +meat_brown,"Meat Brown",#e5b73b,229,183,59 +medium_aquamarine,"Medium Aquamarine",#6da,102,221,170 +medium_blue,"Medium Blue",#0000cd,0,0,205 +medium_candy_apple_red,"Medium Candy Apple Red",#e2062c,226,6,44 +medium_carmine,"Medium Carmine",#af4035,175,64,53 +medium_champagne,"Medium Champagne",#f3e5ab,243,229,171 +medium_electric_blue,"Medium Electric Blue",#035096,3,80,150 +medium_jungle_green,"Medium Jungle Green",#1c352d,28,53,45 +medium_lavender_magenta,"Medium Lavender Magenta",#dda0dd,221,160,221 +medium_orchid,"Medium Orchid",#ba55d3,186,85,211 +medium_persian_blue,"Medium Persian Blue",#0067a5,0,103,165 +medium_purple,"Medium Purple",#9370db,147,112,219 +medium_red_violet,"Medium Red-Violet",#bb3385,187,51,133 +medium_ruby,"Medium Ruby",#aa4069,170,64,105 +medium_sea_green,"Medium Sea Green",#3cb371,60,179,113 +medium_slate_blue,"Medium Slate Blue",#7b68ee,123,104,238 +medium_spring_bud,"Medium Spring Bud",#c9dc87,201,220,135 +medium_spring_green,"Medium Spring Green",#00fa9a,0,250,154 +medium_taupe,"Medium Taupe",#674c47,103,76,71 +medium_turquoise,"Medium Turquoise",#48d1cc,72,209,204 +medium_tuscan_red,"Medium Tuscan Red",#79443b,121,68,59 +medium_vermilion,"Medium Vermilion",#d9603b,217,96,59 +medium_violet_red,"Medium Violet-Red",#c71585,199,21,133 +mellow_apricot,"Mellow Apricot",#f8b878,248,184,120 +mellow_yellow,"Mellow Yellow",#f8de7e,248,222,126 +melon,"Melon",#fdbcb4,253,188,180 +midnight_blue,"Midnight Blue",#191970,25,25,112 +midnight_green_eagle_green,"Midnight Green (Eagle Green)",#004953,0,73,83 +mikado_yellow,"Mikado Yellow",#ffc40c,255,196,12 +mint,"Mint",#3eb489,62,180,137 +mint_cream,"Mint Cream",#f5fffa,245,255,250 +mint_green,"Mint Green",#98ff98,152,255,152 +misty_rose,"Misty Rose",#ffe4e1,255,228,225 +moccasin,"Moccasin",#faebd7,250,235,215 +mode_beige,"Mode Beige",#967117,150,113,23 +moonstone_blue,"Moonstone Blue",#73a9c2,115,169,194 +mordant_red_19,"Mordant Red 19",#ae0c00,174,12,0 +moss_green,"Moss Green",#addfad,173,223,173 +mountain_meadow,"Mountain Meadow",#30ba8f,48,186,143 +mountbatten_pink,"Mountbatten Pink",#997a8d,153,122,141 +msu_green,"Msu Green",#18453b,24,69,59 +mulberry,"Mulberry",#c54b8c,197,75,140 +mustard,"Mustard",#ffdb58,255,219,88 +myrtle,"Myrtle",#21421e,33,66,30 +nadeshiko_pink,"Nadeshiko Pink",#f6adc6,246,173,198 +napier_green,"Napier Green",#2a8000,42,128,0 +naples_yellow,"Naples Yellow",#fada5e,250,218,94 +navajo_white,"Navajo White",#ffdead,255,222,173 +navy_blue,"Navy Blue",#000080,0,0,128 +neon_carrot,"Neon Carrot",#ffa343,255,163,67 +neon_fuchsia,"Neon Fuchsia",#fe4164,254,65,100 +neon_green,"Neon Green",#39ff14,57,255,20 +new_york_pink,"New York Pink",#d7837f,215,131,127 +non_photo_blue,"Non-Photo Blue",#a4dded,164,221,237 +north_texas_green,"North Texas Green",#059033,5,144,51 +ocean_boat_blue,"Ocean Boat Blue",#0077be,0,119,190 +ochre,"Ochre",#c72,204,119,34 +office_green,"Office Green",#008000,0,128,0 +old_gold,"Old Gold",#cfb53b,207,181,59 +old_lace,"Old Lace",#fdf5e6,253,245,230 +old_lavender,"Old Lavender",#796878,121,104,120 +old_mauve,"Old Mauve",#673147,103,49,71 +old_rose,"Old Rose",#c08081,192,128,129 +olive,"Olive",#808000,128,128,0 +olive_drab_7,"Olive Drab #7",#3c341f,60,52,31 +olive_drab_web_olive_drab_3,"Olive Drab (Web) (Olive Drab #3)",#6b8e23,107,142,35 +olivine,"Olivine",#9ab973,154,185,115 +onyx,"Onyx",#353839,53,56,57 +opera_mauve,"Opera Mauve",#b784a7,183,132,167 +orange_color_wheel,"Orange (Color Wheel)",#ff7f00,255,127,0 +orange_peel,"Orange Peel",#ff9f00,255,159,0 +orange_red,"Orange-Red",#ff4500,255,69,0 +orange_ryb,"Orange (Ryb)",#fb9902,251,153,2 +orange_web_color,"Orange (Web Color)",#ffa500,255,165,0 +orchid,"Orchid",#da70d6,218,112,214 +otter_brown,"Otter Brown",#654321,101,67,33 +ou_crimson_red,"Ou Crimson Red",#900,153,0,0 +outer_space,"Outer Space",#414a4c,65,74,76 +outrageous_orange,"Outrageous Orange",#ff6e4a,255,110,74 +oxford_blue,"Oxford Blue",#002147,0,33,71 +pakistan_green,"Pakistan Green",#060,0,102,0 +palatinate_blue,"Palatinate Blue",#273be2,39,59,226 +palatinate_purple,"Palatinate Purple",#682860,104,40,96 +pale_aqua,"Pale Aqua",#bcd4e6,188,212,230 +pale_blue,"Pale Blue",#afeeee,175,238,238 +pale_brown,"Pale Brown",#987654,152,118,84 +pale_carmine,"Pale Carmine",#af4035,175,64,53 +pale_cerulean,"Pale Cerulean",#9bc4e2,155,196,226 +pale_chestnut,"Pale Chestnut",#ddadaf,221,173,175 +pale_copper,"Pale Copper",#da8a67,218,138,103 +pale_cornflower_blue,"Pale Cornflower Blue",#abcdef,171,205,239 +pale_gold,"Pale Gold",#e6be8a,230,190,138 +pale_goldenrod,"Pale Goldenrod",#eee8aa,238,232,170 +pale_green,"Pale Green",#98fb98,152,251,152 +pale_lavender,"Pale Lavender",#dcd0ff,220,208,255 +pale_magenta,"Pale Magenta",#f984e5,249,132,229 +pale_pink,"Pale Pink",#fadadd,250,218,221 +pale_plum,"Pale Plum",#dda0dd,221,160,221 +pale_red_violet,"Pale Red-Violet",#db7093,219,112,147 +pale_robin_egg_blue,"Pale Robin Egg Blue",#96ded1,150,222,209 +pale_silver,"Pale Silver",#c9c0bb,201,192,187 +pale_spring_bud,"Pale Spring Bud",#ecebbd,236,235,189 +pale_taupe,"Pale Taupe",#bc987e,188,152,126 +pale_violet_red,"Pale Violet-Red",#db7093,219,112,147 +pansy_purple,"Pansy Purple",#78184a,120,24,74 +papaya_whip,"Papaya Whip",#ffefd5,255,239,213 +paris_green,"Paris Green",#50c878,80,200,120 +pastel_blue,"Pastel Blue",#aec6cf,174,198,207 +pastel_brown,"Pastel Brown",#836953,131,105,83 +pastel_gray,"Pastel Gray",#cfcfc4,207,207,196 +pastel_green,"Pastel Green",#7d7,119,221,119 +pastel_magenta,"Pastel Magenta",#f49ac2,244,154,194 +pastel_orange,"Pastel Orange",#ffb347,255,179,71 +pastel_pink,"Pastel Pink",#dea5a4,222,165,164 +pastel_purple,"Pastel Purple",#b39eb5,179,158,181 +pastel_red,"Pastel Red",#ff6961,255,105,97 +pastel_violet,"Pastel Violet",#cb99c9,203,153,201 +pastel_yellow,"Pastel Yellow",#fdfd96,253,253,150 +patriarch,"Patriarch",#800080,128,0,128 +payne_s_grey,"Payne'S Grey",#536878,83,104,120 +peach,"Peach",#ffe5b4,255,229,180 +peach_crayola,"Peach (Crayola)",#ffcba4,255,203,164 +peach_orange,"Peach-Orange",#fc9,255,204,153 +peach_puff,"Peach Puff",#ffdab9,255,218,185 +peach_yellow,"Peach-Yellow",#fadfad,250,223,173 +pear,"Pear",#d1e231,209,226,49 +pearl,"Pearl",#eae0c8,234,224,200 +pearl_aqua,"Pearl Aqua",#88d8c0,136,216,192 +pearly_purple,"Pearly Purple",#b768a2,183,104,162 +peridot,"Peridot",#e6e200,230,226,0 +periwinkle,"Periwinkle",#ccf,204,204,255 +persian_blue,"Persian Blue",#1c39bb,28,57,187 +persian_green,"Persian Green",#00a693,0,166,147 +persian_indigo,"Persian Indigo",#32127a,50,18,122 +persian_orange,"Persian Orange",#d99058,217,144,88 +persian_pink,"Persian Pink",#f77fbe,247,127,190 +persian_plum,"Persian Plum",#701c1c,112,28,28 +persian_red,"Persian Red",#c33,204,51,51 +persian_rose,"Persian Rose",#fe28a2,254,40,162 +persimmon,"Persimmon",#ec5800,236,88,0 +peru,"Peru",#cd853f,205,133,63 +phlox,"Phlox",#df00ff,223,0,255 +phthalo_blue,"Phthalo Blue",#000f89,0,15,137 +phthalo_green,"Phthalo Green",#123524,18,53,36 +piggy_pink,"Piggy Pink",#fddde6,253,221,230 +pine_green,"Pine Green",#01796f,1,121,111 +pink,"Pink",#ffc0cb,255,192,203 +pink_lace,"Pink Lace",#ffddf4,255,221,244 +pink_orange,"Pink-Orange",#f96,255,153,102 +pink_pearl,"Pink Pearl",#e7accf,231,172,207 +pink_sherbet,"Pink Sherbet",#f78fa7,247,143,167 +pistachio,"Pistachio",#93c572,147,197,114 +platinum,"Platinum",#e5e4e2,229,228,226 +plum_traditional,"Plum (Traditional)",#8e4585,142,69,133 +plum_web,"Plum (Web)",#dda0dd,221,160,221 +portland_orange,"Portland Orange",#ff5a36,255,90,54 +powder_blue_web,"Powder Blue (Web)",#b0e0e6,176,224,230 +princeton_orange,"Princeton Orange",#ff8f00,255,143,0 +prune,"Prune",#701c1c,112,28,28 +prussian_blue,"Prussian Blue",#003153,0,49,83 +psychedelic_purple,"Psychedelic Purple",#df00ff,223,0,255 +puce,"Puce",#c89,204,136,153 +pumpkin,"Pumpkin",#ff7518,255,117,24 +purple_heart,"Purple Heart",#69359c,105,53,156 +purple_html_css,"Purple (Html/Css)",#800080,128,0,128 +purple_mountain_majesty,"Purple Mountain Majesty",#9678b6,150,120,182 +purple_munsell,"Purple (Munsell)",#9f00c5,159,0,197 +purple_pizzazz,"Purple Pizzazz",#fe4eda,254,78,218 +purple_taupe,"Purple Taupe",#50404d,80,64,77 +purple_x11,"Purple (X11)",#a020f0,160,32,240 +quartz,"Quartz",#51484f,81,72,79 +rackley,"Rackley",#5d8aa8,93,138,168 +radical_red,"Radical Red",#ff355e,255,53,94 +rajah,"Rajah",#fbab60,251,171,96 +raspberry,"Raspberry",#e30b5d,227,11,93 +raspberry_glace,"Raspberry Glace",#915f6d,145,95,109 +raspberry_pink,"Raspberry Pink",#e25098,226,80,152 +raspberry_rose,"Raspberry Rose",#b3446c,179,68,108 +raw_umber,"Raw Umber",#826644,130,102,68 +razzle_dazzle_rose,"Razzle Dazzle Rose",#f3c,255,51,204 +razzmatazz,"Razzmatazz",#e3256b,227,37,107 +red,"Red",#f00,255,0,0 +red_brown,"Red-Brown",#a52a2a,165,42,42 +red_devil,"Red Devil",#860111,134,1,17 +red_munsell,"Red (Munsell)",#f2003c,242,0,60 +red_ncs,"Red (Ncs)",#c40233,196,2,51 +red_orange,"Red-Orange",#ff5349,255,83,73 +red_pigment,"Red (Pigment)",#ed1c24,237,28,36 +red_ryb,"Red (Ryb)",#fe2712,254,39,18 +red_violet,"Red-Violet",#c71585,199,21,133 +redwood,"Redwood",#ab4e52,171,78,82 +regalia,"Regalia",#522d80,82,45,128 +resolution_blue,"Resolution Blue",#002387,0,35,135 +rich_black,"Rich Black",#004040,0,64,64 +rich_brilliant_lavender,"Rich Brilliant Lavender",#f1a7fe,241,167,254 +rich_carmine,"Rich Carmine",#d70040,215,0,64 +rich_electric_blue,"Rich Electric Blue",#0892d0,8,146,208 +rich_lavender,"Rich Lavender",#a76bcf,167,107,207 +rich_lilac,"Rich Lilac",#b666d2,182,102,210 +rich_maroon,"Rich Maroon",#b03060,176,48,96 +rifle_green,"Rifle Green",#414833,65,72,51 +robin_egg_blue,"Robin Egg Blue",#0cc,0,204,204 +rose,"Rose",#ff007f,255,0,127 +rose_bonbon,"Rose Bonbon",#f9429e,249,66,158 +rose_ebony,"Rose Ebony",#674846,103,72,70 +rose_gold,"Rose Gold",#b76e79,183,110,121 +rose_madder,"Rose Madder",#e32636,227,38,54 +rose_pink,"Rose Pink",#f6c,255,102,204 +rose_quartz,"Rose Quartz",#aa98a9,170,152,169 +rose_taupe,"Rose Taupe",#905d5d,144,93,93 +rose_vale,"Rose Vale",#ab4e52,171,78,82 +rosewood,"Rosewood",#65000b,101,0,11 +rosso_corsa,"Rosso Corsa",#d40000,212,0,0 +rosy_brown,"Rosy Brown",#bc8f8f,188,143,143 +royal_azure,"Royal Azure",#0038a8,0,56,168 +royal_blue_traditional,"Royal Blue (Traditional)",#002366,0,35,102 +royal_blue_web,"Royal Blue (Web)",#4169e1,65,105,225 +royal_fuchsia,"Royal Fuchsia",#ca2c92,202,44,146 +royal_purple,"Royal Purple",#7851a9,120,81,169 +royal_yellow,"Royal Yellow",#fada5e,250,218,94 +rubine_red,"Rubine Red",#d10056,209,0,86 +ruby,"Ruby",#e0115f,224,17,95 +ruby_red,"Ruby Red",#9b111e,155,17,30 +ruddy,"Ruddy",#ff0028,255,0,40 +ruddy_brown,"Ruddy Brown",#bb6528,187,101,40 +ruddy_pink,"Ruddy Pink",#e18e96,225,142,150 +rufous,"Rufous",#a81c07,168,28,7 +russet,"Russet",#80461b,128,70,27 +rust,"Rust",#b7410e,183,65,14 +rusty_red,"Rusty Red",#da2c43,218,44,67 +sacramento_state_green,"Sacramento State Green",#00563f,0,86,63 +saddle_brown,"Saddle Brown",#8b4513,139,69,19 +safety_orange_blaze_orange,"Safety Orange (Blaze Orange)",#ff6700,255,103,0 +saffron,"Saffron",#f4c430,244,196,48 +salmon,"Salmon",#ff8c69,255,140,105 +salmon_pink,"Salmon Pink",#ff91a4,255,145,164 +sand,"Sand",#c2b280,194,178,128 +sand_dune,"Sand Dune",#967117,150,113,23 +sandstorm,"Sandstorm",#ecd540,236,213,64 +sandy_brown,"Sandy Brown",#f4a460,244,164,96 +sandy_taupe,"Sandy Taupe",#967117,150,113,23 +sangria,"Sangria",#92000a,146,0,10 +sap_green,"Sap Green",#507d2a,80,125,42 +sapphire,"Sapphire",#0f52ba,15,82,186 +sapphire_blue,"Sapphire Blue",#0067a5,0,103,165 +satin_sheen_gold,"Satin Sheen Gold",#cba135,203,161,53 +scarlet,"Scarlet",#ff2400,255,36,0 +scarlet_crayola,"Scarlet (Crayola)",#fd0e35,253,14,53 +school_bus_yellow,"School Bus Yellow",#ffd800,255,216,0 +screamin_green,"Screamin' Green",#76ff7a,118,255,122 +sea_blue,"Sea Blue",#006994,0,105,148 +sea_green,"Sea Green",#2e8b57,46,139,87 +seal_brown,"Seal Brown",#321414,50,20,20 +seashell,"Seashell",#fff5ee,255,245,238 +selective_yellow,"Selective Yellow",#ffba00,255,186,0 +sepia,"Sepia",#704214,112,66,20 +shadow,"Shadow",#8a795d,138,121,93 +shamrock_green,"Shamrock Green",#009e60,0,158,96 +shocking_pink,"Shocking Pink",#fc0fc0,252,15,192 +shocking_pink_crayola,"Shocking Pink (Crayola)",#ff6fff,255,111,255 +sienna,"Sienna",#882d17,136,45,23 +silver,"Silver",#c0c0c0,192,192,192 +sinopia,"Sinopia",#cb410b,203,65,11 +skobeloff,"Skobeloff",#007474,0,116,116 +sky_blue,"Sky Blue",#87ceeb,135,206,235 +sky_magenta,"Sky Magenta",#cf71af,207,113,175 +slate_blue,"Slate Blue",#6a5acd,106,90,205 +slate_gray,"Slate Gray",#708090,112,128,144 +smalt_dark_powder_blue,"Smalt (Dark Powder Blue)",#039,0,51,153 +smokey_topaz,"Smokey Topaz",#933d41,147,61,65 +smoky_black,"Smoky Black",#100c08,16,12,8 +snow,"Snow",#fffafa,255,250,250 +spiro_disco_ball,"Spiro Disco Ball",#0fc0fc,15,192,252 +spring_bud,"Spring Bud",#a7fc00,167,252,0 +spring_green,"Spring Green",#00ff7f,0,255,127 +st_patrick_s_blue,"St. Patrick'S Blue",#23297a,35,41,122 +steel_blue,"Steel Blue",#4682b4,70,130,180 +stil_de_grain_yellow,"Stil De Grain Yellow",#fada5e,250,218,94 +stizza,"Stizza",#900,153,0,0 +stormcloud,"Stormcloud",#4f666a,79,102,106 +straw,"Straw",#e4d96f,228,217,111 +sunglow,"Sunglow",#fc3,255,204,51 +sunset,"Sunset",#fad6a5,250,214,165 +tan,"Tan",#d2b48c,210,180,140 +tangelo,"Tangelo",#f94d00,249,77,0 +tangerine,"Tangerine",#f28500,242,133,0 +tangerine_yellow,"Tangerine Yellow",#fc0,255,204,0 +tango_pink,"Tango Pink",#e4717a,228,113,122 +taupe,"Taupe",#483c32,72,60,50 +taupe_gray,"Taupe Gray",#8b8589,139,133,137 +tea_green,"Tea Green",#d0f0c0,208,240,192 +tea_rose_orange,"Tea Rose (Orange)",#f88379,248,131,121 +tea_rose_rose,"Tea Rose (Rose)",#f4c2c2,244,194,194 +teal,"Teal",#008080,0,128,128 +teal_blue,"Teal Blue",#367588,54,117,136 +teal_green,"Teal Green",#00827f,0,130,127 +telemagenta,"Telemagenta",#cf3476,207,52,118 +tenn_tawny,"Tenné (Tawny)",#cd5700,205,87,0 +terra_cotta,"Terra Cotta",#e2725b,226,114,91 +thistle,"Thistle",#d8bfd8,216,191,216 +thulian_pink,"Thulian Pink",#de6fa1,222,111,161 +tickle_me_pink,"Tickle Me Pink",#fc89ac,252,137,172 +tiffany_blue,"Tiffany Blue",#0abab5,10,186,181 +tiger_s_eye,"Tiger'S Eye",#e08d3c,224,141,60 +timberwolf,"Timberwolf",#dbd7d2,219,215,210 +titanium_yellow,"Titanium Yellow",#eee600,238,230,0 +tomato,"Tomato",#ff6347,255,99,71 +toolbox,"Toolbox",#746cc0,116,108,192 +topaz,"Topaz",#ffc87c,255,200,124 +tractor_red,"Tractor Red",#fd0e35,253,14,53 +trolley_grey,"Trolley Grey",#808080,128,128,128 +tropical_rain_forest,"Tropical Rain Forest",#00755e,0,117,94 +true_blue,"True Blue",#0073cf,0,115,207 +tufts_blue,"Tufts Blue",#417dc1,65,125,193 +tumbleweed,"Tumbleweed",#deaa88,222,170,136 +turkish_rose,"Turkish Rose",#b57281,181,114,129 +turquoise,"Turquoise",#30d5c8,48,213,200 +turquoise_blue,"Turquoise Blue",#00ffef,0,255,239 +turquoise_green,"Turquoise Green",#a0d6b4,160,214,180 +tuscan_red,"Tuscan Red",#7c4848,124,72,72 +twilight_lavender,"Twilight Lavender",#8a496b,138,73,107 +tyrian_purple,"Tyrian Purple",#66023c,102,2,60 +ua_blue,"Ua Blue",#03a,0,51,170 +ua_red,"Ua Red",#d9004c,217,0,76 +ube,"Ube",#8878c3,136,120,195 +ucla_blue,"Ucla Blue",#536895,83,104,149 +ucla_gold,"Ucla Gold",#ffb300,255,179,0 +ufo_green,"Ufo Green",#3cd070,60,208,112 +ultra_pink,"Ultra Pink",#ff6fff,255,111,255 +ultramarine,"Ultramarine",#120a8f,18,10,143 +ultramarine_blue,"Ultramarine Blue",#4166f5,65,102,245 +umber,"Umber",#635147,99,81,71 +unbleached_silk,"Unbleached Silk",#ffddca,255,221,202 +united_nations_blue,"United Nations Blue",#5b92e5,91,146,229 +university_of_california_gold,"University Of California Gold",#b78727,183,135,39 +unmellow_yellow,"Unmellow Yellow",#ff6,255,255,102 +up_forest_green,"Up Forest Green",#014421,1,68,33 +up_maroon,"Up Maroon",#7b1113,123,17,19 +upsdell_red,"Upsdell Red",#ae2029,174,32,41 +urobilin,"Urobilin",#e1ad21,225,173,33 +usafa_blue,"Usafa Blue",#004f98,0,79,152 +usc_cardinal,"Usc Cardinal",#900,153,0,0 +usc_gold,"Usc Gold",#fc0,255,204,0 +utah_crimson,"Utah Crimson",#d3003f,211,0,63 +vanilla,"Vanilla",#f3e5ab,243,229,171 +vegas_gold,"Vegas Gold",#c5b358,197,179,88 +venetian_red,"Venetian Red",#c80815,200,8,21 +verdigris,"Verdigris",#43b3ae,67,179,174 +vermilion_cinnabar,"Vermilion (Cinnabar)",#e34234,227,66,52 +vermilion_plochere,"Vermilion (Plochere)",#d9603b,217,96,59 +veronica,"Veronica",#a020f0,160,32,240 +violet,"Violet",#8f00ff,143,0,255 +violet_blue,"Violet-Blue",#324ab2,50,74,178 +violet_color_wheel,"Violet (Color Wheel)",#7f00ff,127,0,255 +violet_ryb,"Violet (Ryb)",#8601af,134,1,175 +violet_web,"Violet (Web)",#ee82ee,238,130,238 +viridian,"Viridian",#40826d,64,130,109 +vivid_auburn,"Vivid Auburn",#922724,146,39,36 +vivid_burgundy,"Vivid Burgundy",#9f1d35,159,29,53 +vivid_cerise,"Vivid Cerise",#da1d81,218,29,129 +vivid_tangerine,"Vivid Tangerine",#ffa089,255,160,137 +vivid_violet,"Vivid Violet",#9f00ff,159,0,255 +warm_black,"Warm Black",#004242,0,66,66 +waterspout,"Waterspout",#a4f4f9,164,244,249 +wenge,"Wenge",#645452,100,84,82 +wheat,"Wheat",#f5deb3,245,222,179 +white,"White",#fff,255,255,255 +white_smoke,"White Smoke",#f5f5f5,245,245,245 +wild_blue_yonder,"Wild Blue Yonder",#a2add0,162,173,208 +wild_strawberry,"Wild Strawberry",#ff43a4,255,67,164 +wild_watermelon,"Wild Watermelon",#fc6c85,252,108,133 +wine,"Wine",#722f37,114,47,55 +wine_dregs,"Wine Dregs",#673147,103,49,71 +wisteria,"Wisteria",#c9a0dc,201,160,220 +wood_brown,"Wood Brown",#c19a6b,193,154,107 +xanadu,"Xanadu",#738678,115,134,120 +yale_blue,"Yale Blue",#0f4d92,15,77,146 +yellow,"Yellow",#ff0,255,255,0 +yellow_green,"Yellow-Green",#9acd32,154,205,50 +yellow_munsell,"Yellow (Munsell)",#efcc00,239,204,0 +yellow_ncs,"Yellow (Ncs)",#ffd300,255,211,0 +yellow_orange,"Yellow Orange",#ffae42,255,174,66 +yellow_process,"Yellow (Process)",#ffef00,255,239,0 +yellow_ryb,"Yellow (Ryb)",#fefe33,254,254,51 +zaffre,"Zaffre",#0014a8,0,20,168 +zinnwaldite_brown,"Zinnwaldite Brown",#2c1608,44,22,8 \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml new file mode 100644 index 0000000..28f3681 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml @@ -0,0 +1,22 @@ + + + + Glass + 75 cl empty bottles + Glass Suppliers Ltd + Raw Material + 82746598390275638 + https://content.screencast.com/users/Dashenhurst/folders/Jing/media/5607a5c2-6e40-42b4-8dd7-0e92762e2926/00002368.png + + qty_per_pallet + 960 + + + + Red Wine + Finished Product, Red Wine + Finished Product/Wine + 3754505730900 + https://content.screencast.com/users/Dashenhurst/folders/Jing/media/df39407e-2a1d-4263-a80d-91b78a66b6e5/00002366.png + + \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml new file mode 100644 index 0000000..bd4551d --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file From 6f57649c87837158774ea05c1063144303d28a25 Mon Sep 17 00:00:00 2001 From: James Every Date: Tue, 27 Feb 2018 11:27:49 +0000 Subject: [PATCH 05/22] Fix classpath problem preventing JAXB finding classes --- customer-solutions/supply-chain/evrythng.eif/build.gradle | 2 +- .../evrythng.eif/src/main/java/org/schema/jaxb.index | 2 -- .../evrythng.eif/src/main/resources/org/schema/jaxb.index | 3 +++ 3 files changed, 4 insertions(+), 3 deletions(-) delete mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/jaxb.index diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index e1c0d4b..599c705 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.53' +version '0.18.54' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index deleted file mode 100644 index df5e1fe..0000000 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/jaxb.index +++ /dev/null @@ -1,2 +0,0 @@ -Products -Product \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/jaxb.index b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/jaxb.index new file mode 100644 index 0000000..5cb93c2 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/jaxb.index @@ -0,0 +1,3 @@ +Products +Product +Thing From 83053d96e87b672f13a2d080ceb273cc89d2e23e Mon Sep 17 00:00:00 2001 From: James Every Date: Tue, 27 Feb 2018 14:17:40 +0000 Subject: [PATCH 06/22] Run product loader --- .../supply-chain/evrythng.eif/build.gradle | 2 +- .../supply-chain/evrythng.eif/drop_file.sh | 4 ++ .../demo/supplychain/ProductLoad.java | 7 --- .../demo/supplychain/ProductLoader.java | 43 +++++++++++++++++++ .../src/main/java/org/schema/Products.java | 4 ++ ...ctLoadTest.java => ProductLoaderTest.java} | 9 ++-- 6 files changed, 56 insertions(+), 13 deletions(-) create mode 100755 customer-solutions/supply-chain/evrythng.eif/drop_file.sh delete mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java rename customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/{ProductLoadTest.java => ProductLoaderTest.java} (75%) diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 599c705..e5daeba 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.54' +version '0.18.55' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/drop_file.sh b/customer-solutions/supply-chain/evrythng.eif/drop_file.sh new file mode 100755 index 0000000..82c4a6d --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/drop_file.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +cp src/test/resources/schema.org/supply_chain.xml src/data/ + diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java deleted file mode 100644 index 9d4a68e..0000000 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoad.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.evrythng.demo.supplychain; - -public class ProductLoad { - - void load() {}; - -} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java new file mode 100644 index 0000000..a65e7d5 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java @@ -0,0 +1,43 @@ +package com.evrythng.demo.supplychain; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.main.Main; +import org.schema.Products; + +public class ProductLoader extends RouteBuilder implements Runnable { + + @Override + public void configure() throws Exception { + + from("file:src/data") + .choice() + .when(xpath("namespace-uri(/Products) = 'http://schema.org/Product'")) + .log("Received XML file containing Products") + .split(xpath(Products.XPATH_PRODUCTS)) + .unmarshal().jaxb(Products.CONTEXT_PATH) + .to("seda:sku-xml") + .endChoice() + .otherwise() + .log("Ignoring file"); + from("seda:sku-xml") + .log("Product!"); +// .process(new SKUtoProductProcessor()) +// .process(new ProductProcessor()); + + } + + @Override + public void run() { + Main main = new Main(); + main.addRouteBuilder(new ProductLoader()); + try { + main.run(new String[] {}); + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + public static void main(String[] args) { + new ProductLoader().run(); + } +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java index c431755..a9cf7c4 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java @@ -7,6 +7,10 @@ @XmlRootElement(name="Products", namespace = "http://schema.org/Product") public class Products { + public static final String CONTEXT_PATH = Products.class.getPackage().getName(); + + public static final String XPATH_PRODUCTS = "//Products/Product"; + @XmlElement(name="Product") List products; diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoadTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoaderTest.java similarity index 75% rename from customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoadTest.java rename to customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoaderTest.java index 7824aed..e32ab5b 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoadTest.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoaderTest.java @@ -6,13 +6,12 @@ import org.junit.Test; import org.schema.Products; -import static org.junit.Assert.*; - -public class ProductLoadTest extends CamelTestSupport { +public class ProductLoaderTest extends CamelTestSupport { @Test public void parseProductsXML() { MockEndpoint skus = getMockEndpoint("mock:skus-xml"); + skus.expectedMessageCount(2); } @Override @@ -21,8 +20,8 @@ protected RouteBuilder createRouteBuilder() throws Exception { @Override public void configure() throws Exception { from("seda:input") - .split(xpath("//Products/Product")) - .unmarshal().jaxb("org.schema") + .split(xpath(Products.XPATH_PRODUCTS)) + .unmarshal().jaxb(Products.CONTEXT_PATH) .to("mock:skus-xml"); } }; From bfcc82becbc8650700c98b0a94670d3147ae415a Mon Sep 17 00:00:00 2001 From: James Every Date: Tue, 27 Feb 2018 14:29:42 +0000 Subject: [PATCH 07/22] Run product loads --- customer-solutions/supply-chain/evrythng.eif/build.gradle | 2 +- .../main/java/com/evrythng/demo/supplychain/ProductLoader.java | 2 +- .../evrythng.eif/src/test/resources/schema.org/supply_chain.xml | 2 +- .../evrythng.eif/src/test/resources/schema.org/template.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index e5daeba..1bf1265 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.55' +version '0.18.56' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java index a65e7d5..f6de563 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java @@ -11,7 +11,7 @@ public void configure() throws Exception { from("file:src/data") .choice() - .when(xpath("namespace-uri(/Products) = 'http://schema.org/Product'")) + .when(xpath("namespace-uri(/*) = 'http://schema.org/Product'")) .log("Received XML file containing Products") .split(xpath(Products.XPATH_PRODUCTS)) .unmarshal().jaxb(Products.CONTEXT_PATH) diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml index 28f3681..6daa202 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml @@ -1,4 +1,4 @@ - + Glass diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml index bd4551d..f13ef9c 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/template.xml @@ -1,4 +1,4 @@ - + From 0e53ee7607e7a43fd0b6ede9c5efc05291cfb931 Mon Sep 17 00:00:00 2001 From: James Every Date: Tue, 27 Feb 2018 16:45:22 +0000 Subject: [PATCH 08/22] Working product loader. Without error handling --- .../supply-chain/evrythng.eif/build.gradle | 3 ++ .../evrythng/demo/supplychain/EVTLoader.java | 25 +++++++++++++++ ...ProductLoader.java => ProductsLoader.java} | 17 +++++----- .../supplychain/products/ProductLoader.java | 31 +++++++++++++++++++ .../products/ProductProcessor.java | 28 +++++++++++++++++ .../{ => products}/TransformProduct.java | 2 +- .../src/main/java/org/schema/Products.java | 6 +++- .../java/org/schema/identifier/GTIN13.java | 5 ++- .../src/main/resources/logback.xml | 24 ++++++++++++++ .../supplychain/TransformProductTest.java | 1 + 10 files changed, 132 insertions(+), 10 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java rename customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/{ProductLoader.java => ProductsLoader.java} (63%) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java rename customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/{ => products}/TransformProduct.java (97%) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 1bf1265..e95ad14 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -11,10 +11,13 @@ repositories { dependencies { compile group: 'com.evrythng', name: 'evrythng-java-wrapper', version: '1.33' + compile 'com.google.code.gson:gson:2.8.2' compile group: 'org.apache.camel', name: 'camel-core', version: '2.18.2' compile group: 'org.apache.camel', name: 'camel-jaxb', version: '2.18.2' + compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.9' + testCompile group: 'junit', name: 'junit', version: '4.12' testCompile group: 'org.apache.camel', name: 'camel-test', version: '2.18.2' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java new file mode 100644 index 0000000..fd5a3db --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java @@ -0,0 +1,25 @@ +package com.evrythng.demo.supplychain; + +import com.evrythng.java.wrapper.ApiManager; +import com.evrythng.thng.commons.config.ApiConfiguration; + +import java.net.MalformedURLException; +import java.net.URL; + +/** + * Base class, EVT aware + */ +public abstract class EVTLoader { + + public static ApiManager newApiManager() { + try { + URL url = new URL(System.getenv("EVT_URL")); + String EVT_KEY = System.getenv("EVT_KEY"); + ApiConfiguration apiConfiguration = new ApiConfiguration(EVT_KEY); + apiConfiguration.setUrl(url.toString()); + return new ApiManager(apiConfiguration); + } catch (MalformedURLException e) { + throw new RuntimeException("Malformed URL in ENV variable EVT_URL", e); + } + } +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java similarity index 63% rename from customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java rename to customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java index f6de563..b3784e8 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java @@ -1,10 +1,13 @@ package com.evrythng.demo.supplychain; +import com.evrythng.demo.supplychain.products.ProductLoader; +import com.evrythng.demo.supplychain.products.ProductProcessor; +import com.evrythng.demo.supplychain.products.TransformProduct; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.main.Main; import org.schema.Products; -public class ProductLoader extends RouteBuilder implements Runnable { +public class ProductsLoader extends RouteBuilder implements Runnable { @Override public void configure() throws Exception { @@ -13,23 +16,23 @@ public void configure() throws Exception { .choice() .when(xpath("namespace-uri(/*) = 'http://schema.org/Product'")) .log("Received XML file containing Products") - .split(xpath(Products.XPATH_PRODUCTS)) + .split(Products.ns.xpath(Products.XPATH_PRODUCTS)) .unmarshal().jaxb(Products.CONTEXT_PATH) .to("seda:sku-xml") .endChoice() .otherwise() .log("Ignoring file"); from("seda:sku-xml") - .log("Product!"); -// .process(new SKUtoProductProcessor()) -// .process(new ProductProcessor()); + .log("Product!") + .process(new ProductProcessor()) + .process(new ProductLoader()); } @Override public void run() { Main main = new Main(); - main.addRouteBuilder(new ProductLoader()); + main.addRouteBuilder(new ProductsLoader()); try { main.run(new String[] {}); } catch (Exception e) { @@ -38,6 +41,6 @@ public void run() { } public static void main(String[] args) { - new ProductLoader().run(); + new ProductsLoader().run(); } } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java new file mode 100644 index 0000000..b3efd22 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java @@ -0,0 +1,31 @@ +package com.evrythng.demo.supplychain.products; + +import com.evrythng.demo.supplychain.EVTLoader; +import com.evrythng.java.wrapper.service.ProductService; +import com.evrythng.thng.resource.model.store.Product; +import com.google.gson.Gson; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; + +import java.util.logging.Logger; + +public class ProductLoader implements Processor { + + public ProductLoader() { + this.productService = EVTLoader.newApiManager().productService(); + } + + private final ProductService productService; + + @Override + public void process(Exchange exchange) throws Exception { + System.out.println("***** LOAD ******"); + Product product = exchange.getIn().getMandatoryBody(Product.class); + product = productService.productCreator(product).execute(); + // TODO wrap in Circuit breaker + logger.info(product.getId()); + } + + private static final Gson gson = new Gson(); + private static final Logger logger = Logger.getLogger(ProductLoader.class.getName()); +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java new file mode 100644 index 0000000..584a3cc --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java @@ -0,0 +1,28 @@ +package com.evrythng.demo.supplychain.products; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.impl.DefaultMessage; + +import java.util.Optional; + +/** + * Convert gs1 Product -> evrythng.Product + */ +public class ProductProcessor implements Processor { + @Override + public void process(Exchange exchange) throws Exception { + System.out.println("***** TRANSFORM 1 ******"); + Optional skuInfo = Optional.ofNullable(exchange.getIn().getBody(org.schema.Product.class)); + if (skuInfo.isPresent()) { + System.out.println("***** TRANSFORM 2 ******"); + TransformProduct transformProduct = new TransformProduct(); + Message message = new DefaultMessage(); + message.setBody(transformProduct.convert(skuInfo.get())); + exchange.setOut(message); + } else { + throw new IllegalArgumentException("Not a SKU"); + } + } +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformProduct.java similarity index 97% rename from customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java rename to customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformProduct.java index e02d4a0..97d7d7a 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/TransformProduct.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformProduct.java @@ -1,4 +1,4 @@ -package com.evrythng.demo.supplychain; +package com.evrythng.demo.supplychain.products; import com.evrythng.thng.resource.model.store.Product; diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java index a9cf7c4..cfb8ae2 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java @@ -1,5 +1,7 @@ package org.schema; +import org.apache.camel.builder.xml.Namespaces; + import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.util.List; @@ -7,9 +9,11 @@ @XmlRootElement(name="Products", namespace = "http://schema.org/Product") public class Products { + public static final Namespaces ns = new Namespaces("p", "http://schema.org/Product"); + public static final String CONTEXT_PATH = Products.class.getPackage().getName(); - public static final String XPATH_PRODUCTS = "//Products/Product"; + public static final String XPATH_PRODUCTS = "//p:Products/p:Product"; @XmlElement(name="Product") List products; diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java index 4ebb427..a6ee94a 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java @@ -24,7 +24,10 @@ public GTIN13(String s) { } } - public final String gtin; + /* For JAXB */ + public GTIN13() {}; + + public String gtin; @Override public String toString() { diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml new file mode 100644 index 0000000..37a4589 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml @@ -0,0 +1,24 @@ + + + + + + %d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n + + + + + + %d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n + + target/camel-spring-boot-test.log + + + + + + + + + \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java index 568f85f..5327577 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java @@ -1,5 +1,6 @@ package com.evrythng.demo.supplychain; +import com.evrythng.demo.supplychain.products.TransformProduct; import com.evrythng.thng.resource.model.store.Product; import org.junit.Before; import org.junit.Test; From bb66f66ffbbd8421ea1b74ce9947b8b275b4bf52 Mon Sep 17 00:00:00 2001 From: James Every Date: Wed, 28 Feb 2018 12:11:49 +0000 Subject: [PATCH 09/22] Product loading --- .../supply-chain/evrythng.eif/build.gradle | 4 +- .../demo/supplychain/ProductsLoader.java | 1 - .../supplychain/products/ProductLoader.java | 6 +-- .../products/ProductProcessor.java | 4 +- ...a => TransformGS1ProductToEVTProduct.java} | 37 +++++++++++++++---- .../java/org/schema/identifier/GTIN13.java | 9 +++++ .../supplychain/TransformProductTest.java | 13 ++++++- .../resources/schema.org/supply_chain.xml | 4 +- 8 files changed, 57 insertions(+), 21 deletions(-) rename customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/{TransformProduct.java => TransformGS1ProductToEVTProduct.java} (53%) diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index e95ad14..a5d620e 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.56' +version '0.18.57' apply plugin: 'java' @@ -11,7 +11,7 @@ repositories { dependencies { compile group: 'com.evrythng', name: 'evrythng-java-wrapper', version: '1.33' - compile 'com.google.code.gson:gson:2.8.2' + compile group: 'org.json', name: 'json', version: '20180130' compile group: 'org.apache.camel', name: 'camel-core', version: '2.18.2' compile group: 'org.apache.camel', name: 'camel-jaxb', version: '2.18.2' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java index b3784e8..db092e5 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java @@ -2,7 +2,6 @@ import com.evrythng.demo.supplychain.products.ProductLoader; import com.evrythng.demo.supplychain.products.ProductProcessor; -import com.evrythng.demo.supplychain.products.TransformProduct; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.main.Main; import org.schema.Products; diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java index b3efd22..f0b2be7 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java @@ -3,9 +3,9 @@ import com.evrythng.demo.supplychain.EVTLoader; import com.evrythng.java.wrapper.service.ProductService; import com.evrythng.thng.resource.model.store.Product; -import com.google.gson.Gson; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.json.JSONObject; import java.util.logging.Logger; @@ -19,13 +19,11 @@ public ProductLoader() { @Override public void process(Exchange exchange) throws Exception { - System.out.println("***** LOAD ******"); Product product = exchange.getIn().getMandatoryBody(Product.class); product = productService.productCreator(product).execute(); // TODO wrap in Circuit breaker - logger.info(product.getId()); + logger.info(new JSONObject().put("evt_id", product.getId()).toString()); } - private static final Gson gson = new Gson(); private static final Logger logger = Logger.getLogger(ProductLoader.class.getName()); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java index 584a3cc..9c3daba 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java @@ -13,11 +13,9 @@ public class ProductProcessor implements Processor { @Override public void process(Exchange exchange) throws Exception { - System.out.println("***** TRANSFORM 1 ******"); Optional skuInfo = Optional.ofNullable(exchange.getIn().getBody(org.schema.Product.class)); if (skuInfo.isPresent()) { - System.out.println("***** TRANSFORM 2 ******"); - TransformProduct transformProduct = new TransformProduct(); + TransformGS1ProductToEVTProduct transformProduct = new TransformGS1ProductToEVTProduct(); Message message = new DefaultMessage(); message.setBody(transformProduct.convert(skuInfo.get())); exchange.setOut(message); diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformProduct.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java similarity index 53% rename from customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformProduct.java rename to customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java index 97d7d7a..8439a12 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformProduct.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java @@ -2,14 +2,15 @@ import com.evrythng.thng.resource.model.store.Product; +import java.util.ArrayList; import java.util.Map; /** * Transform GS1/Product to EVT/Product. */ -public class TransformProduct { +public class TransformGS1ProductToEVTProduct { - public TransformProduct() { + public TransformGS1ProductToEVTProduct() { this.target = new Product(); } @@ -22,6 +23,8 @@ public Product convert(org.schema.Product src) { .description(src) .gtin(src) .additionalProperties(src) + .images(src) + .categories(src) .toEVT(); } @@ -29,7 +32,7 @@ private Product toEVT() { return this.target; } - private TransformProduct name(org.schema.Product p) { + private TransformGS1ProductToEVTProduct name(org.schema.Product p) { if (p.name != null && !p.name.isEmpty()) { target.setName(p.name); } else { @@ -38,32 +41,52 @@ private TransformProduct name(org.schema.Product p) { return this; } - private TransformProduct brand(org.schema.Product p) { + private TransformGS1ProductToEVTProduct brand(org.schema.Product p) { if (p.brand != null && !p.brand.isEmpty()) { target.setBrand(p.brand); } return this; } - private TransformProduct description(org.schema.Product p) { + private TransformGS1ProductToEVTProduct description(org.schema.Product p) { if (p.description != null && !p.description.isEmpty()) { target.setDescription(p.description); } return this; } - private TransformProduct gtin(org.schema.Product p) { + private TransformGS1ProductToEVTProduct gtin(org.schema.Product p) { if (p.gtin13 != null) { target.addIdentifier("EAN", p.gtin13.gtin); } return this; } - private TransformProduct additionalProperties(org.schema.Product p) { + private TransformGS1ProductToEVTProduct additionalProperties(org.schema.Product p) { for (Map.Entry entry : p.additionalProperty.entrySet()) { target.addCustomFields(entry.getKey(), entry.getValue()); } return this; } + private TransformGS1ProductToEVTProduct images(org.schema.Product p) { + if (p.image != null) { + if (target.getPhotos() == null) { + target.setPhotos(new ArrayList<>()); + } + target.getPhotos().add(p.image.toString()); + } + return this; + } + + private TransformGS1ProductToEVTProduct categories(org.schema.Product p) { + if (p.category != null) { + target.setTags(new ArrayList<>()); + for(String tag: p.category.trim().split("/")) { + target.getTags().add(tag); + } + } + return this; + } + } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java index a6ee94a..2f8824a 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java @@ -1,5 +1,10 @@ package org.schema.identifier; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + /** * The GTIN-13 code of the product, or the product to which the offer refers. * This is equivalent to 13-digit ISBN codes and EAN UCC-13. Former 12-digit UPC codes can be converted into a GTIN-13 code by simply adding a preceeding zero. @@ -9,6 +14,8 @@ * GTIN - https://www.gtin.info/ * */ +@XmlType(factoryMethod="newInstance") +@XmlRootElement public class GTIN13 { /** @@ -27,6 +34,8 @@ public GTIN13(String s) { /* For JAXB */ public GTIN13() {}; + public static GTIN13 newInstance() { return new GTIN13(); }; + public String gtin; @Override diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java index 5327577..e53f514 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java @@ -1,6 +1,6 @@ package com.evrythng.demo.supplychain; -import com.evrythng.demo.supplychain.products.TransformProduct; +import com.evrythng.demo.supplychain.products.TransformGS1ProductToEVTProduct; import com.evrythng.thng.resource.model.store.Product; import org.junit.Before; import org.junit.Test; @@ -20,7 +20,8 @@ public void setUp() { input.description = "75 cl empty bottles"; input.gtin13 = new GTIN13("8274659839027"); input.additionalProperty.put("qty_per_pallet", 960); - evtProduct = new TransformProduct().convert(input); + input.category = "Finished Product/Wine"; + evtProduct = new TransformGS1ProductToEVTProduct().convert(input); } @Test @@ -48,4 +49,12 @@ public void testQuantityPerPallet() { assertEquals(960, evtProduct.getCustomFields().get("qty_per_pallet")); } + @Test + public void testCategoriesSplitOnSlash() { + assertNotNull(evtProduct.getTags()); + assertEquals(2, evtProduct.getTags().size()); + assertEquals("Finished Product", evtProduct.getTags().get(0)); + assertEquals("Wine", evtProduct.getTags().get(1)); + } + } \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml index 6daa202..dae4edc 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/supply_chain.xml @@ -4,8 +4,8 @@ Glass 75 cl empty bottles Glass Suppliers Ltd - Raw Material - 82746598390275638 + Raw Material + 8274659839027 https://content.screencast.com/users/Dashenhurst/folders/Jing/media/5607a5c2-6e40-42b4-8dd7-0e92762e2926/00002368.png qty_per_pallet From 9f4fef431ec58bbd0848f142e93f94e332a2142a Mon Sep 17 00:00:00 2001 From: James Every Date: Wed, 28 Feb 2018 17:18:18 +0000 Subject: [PATCH 10/22] Push products to retry queue if EVT unavailable --- .../supply-chain/evrythng.eif/build.gradle | 2 +- .../demo/supplychain/ProductsLoader.java | 8 ++-- .../products/UnreliableProductLoader.java | 42 +++++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index a5d620e..c65c2b9 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.57' +version '0.18.58' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java index db092e5..a901dca 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java @@ -2,6 +2,7 @@ import com.evrythng.demo.supplychain.products.ProductLoader; import com.evrythng.demo.supplychain.products.ProductProcessor; +import com.evrythng.demo.supplychain.products.UnreliableProductLoader; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.main.Main; import org.schema.Products; @@ -22,10 +23,11 @@ public void configure() throws Exception { .otherwise() .log("Ignoring file"); from("seda:sku-xml") - .log("Product!") .process(new ProductProcessor()) - .process(new ProductLoader()); - + .process(new UnreliableProductLoader()) + .errorHandler(deadLetterChannel("seda:errors")); + from("seda:errors") + .log("Error!"); } @Override diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java new file mode 100644 index 0000000..7d09fd3 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java @@ -0,0 +1,42 @@ +package com.evrythng.demo.supplychain.products; + +import com.evrythng.demo.supplychain.EVTLoader; +import com.evrythng.java.wrapper.exception.EvrythngClientException; +import com.evrythng.java.wrapper.service.ProductService; +import com.evrythng.thng.resource.model.store.Product; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.json.JSONObject; + +import java.security.SecureRandom; +import java.util.Random; +import java.util.logging.Logger; + +public class UnreliableProductLoader implements Processor { + + public UnreliableProductLoader() { + this.productService = EVTLoader.newApiManager().productService(); + } + + private final ProductService productService; + + private final Random rnd = new SecureRandom(); + + @Override + public void process(Exchange exchange) throws Exception { + Product product = exchange.getIn().getMandatoryBody(Product.class); + if (platformTemporarilyOverloaded()) { + throw new EvrythngClientException("504 Platform Temporarily Unavailable"); + } else { + product = productService.productCreator(product).execute(); + // TODO wrap in Circuit breaker + logger.info(new JSONObject().put("evt_id", product.getId()).toString()); + } + } + + private boolean platformTemporarilyOverloaded() { + return rnd.nextBoolean(); + } + + private static final Logger logger = Logger.getLogger(UnreliableProductLoader.class.getName()); +} From 15fd1c61a64298b49d821b46ec430bfef8fe248e Mon Sep 17 00:00:00 2001 From: James Every Date: Fri, 2 Mar 2018 17:11:19 +0000 Subject: [PATCH 11/22] Build uberjar and run instructions in README --- .../supply-chain/evrythng.eif/README.md | 28 ++++++++++++++++--- .../supply-chain/evrythng.eif/build.gradle | 14 +++++++++- .../evrythng/demo/supplychain/EVTLoader.java | 2 +- .../demo/supplychain/ProductsLoader.java | 1 - 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index c5dbf46..100dc3f 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -4,18 +4,38 @@ Reference implementation. See [evrythng/examples](https://github.com/evrythng/examples/tree/master/customer-solutions/supply-chain) - # Local install -Install [Gradle build tool](https://gradle.org/): +When running locally: + +## Build + +Install Java and the [Gradle build tool](https://gradle.org/). On a Mac with [homebrew](https://brew.sh/): + brew cask install java brew install gradle Checkout the repository and build - git clone + git clone git@github.com:evrythng/examples.git - cd evrythng.eif + cd customer-solutions/supply-chain/evrythng.eif gradle build +This will make a JAR file containing all dependencies: + + build/libs/eif-0.18.58.jar + + +## Run + +There are two mandatory environment variables: + + export EVT_URL=https://api-eu.evrythng.com + export EVT_KEY=TRUSTEDAPPKEY + +It is not recommended to run with your Operator key, a trusted application key is all that is required for most interactions. + + java -jar build/libs/eif-0.18.58.jar +The application will run and await XML files to be dropped into the `src/data` folder. See [dropfile.sh](dropfile.sh) script for example of how to trigger a load. diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index c65c2b9..346aaf1 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.58' +version '0.18.59' apply plugin: 'java' @@ -22,3 +22,15 @@ dependencies { testCompile group: 'org.apache.camel', name: 'camel-test', version: '2.18.2' } + +def camelRouteBuilderMain = "com.evrythng.demo.supplychain.ProductsLoader" + +jar { + manifest { + attributes "Main-Class": "$camelRouteBuilderMain" + } + + from { + configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } + } +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java index fd5a3db..2d90a68 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java @@ -7,7 +7,7 @@ import java.net.URL; /** - * Base class, EVT aware + * Base class, EVT aware. */ public abstract class EVTLoader { diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java index a901dca..9d84111 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java @@ -1,6 +1,5 @@ package com.evrythng.demo.supplychain; -import com.evrythng.demo.supplychain.products.ProductLoader; import com.evrythng.demo.supplychain.products.ProductProcessor; import com.evrythng.demo.supplychain.products.UnreliableProductLoader; import org.apache.camel.builder.RouteBuilder; From c3c2798d687301d1a74b21f834e96b6e893b0f61 Mon Sep 17 00:00:00 2001 From: James Every Date: Wed, 21 Mar 2018 11:36:05 +0000 Subject: [PATCH 12/22] Generate GS1 Products with script --- .../supply-chain/evrythng.eif/README.md | 12 +++ .../evrythng.eif/drop_products.sh | 5 ++ .../supply-chain/evrythng.eif/gen_products.sh | 3 + .../src/main/ruby/gen_products.rb | 81 ++++++++++++++----- 4 files changed, 83 insertions(+), 18 deletions(-) create mode 100755 customer-solutions/supply-chain/evrythng.eif/drop_products.sh create mode 100755 customer-solutions/supply-chain/evrythng.eif/gen_products.sh diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index 100dc3f..8f3d464 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -39,3 +39,15 @@ It is not recommended to run with your Operator key, a trusted application key i java -jar build/libs/eif-0.18.58.jar The application will run and await XML files to be dropped into the `src/data` folder. See [dropfile.sh](dropfile.sh) script for example of how to trigger a load. + +## Data + +There is a [ruby script](src/main/ruby/gen_products.rb) to generate GS1 Product xml files. See the header of the script for install instructions. + +Once the pipeline is running (see above) you can generate and load products with the script: + + ./drop_products.sh + +Or generate products to a new file: + + ./gen_products.sh 1000 \ No newline at end of file diff --git a/customer-solutions/supply-chain/evrythng.eif/drop_products.sh b/customer-solutions/supply-chain/evrythng.eif/drop_products.sh new file mode 100755 index 0000000..132f3dd --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/drop_products.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "Generate Products inside the Camel input pipeline folder" + +ruby src/main/ruby/gen_products.rb ${1:-100} > src/data/products.xml diff --git a/customer-solutions/supply-chain/evrythng.eif/gen_products.sh b/customer-solutions/supply-chain/evrythng.eif/gen_products.sh new file mode 100755 index 0000000..b7ff49e --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/gen_products.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +ruby src/main/ruby/gen_products.rb ${1:-1000} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb index 7f469ff..030a57f 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb @@ -4,41 +4,86 @@ # Install: # # brew install ruby +# gem install nokogiri # +# Run and generate 100 products: # -# Run -# -# ruby src/main/ruby/gen_products.rb > products.xml +# ruby src/main/ruby/gen_products.rb 100 > products.xml # require 'csv' require 'date' +require 'nokogiri' + +# Colors COLORS_CSV=File.join(File.dirname(__FILE__), "../../test/resources/codebrainz/colors.csv") -class Colors - def initialize(f) - @names = CSV.read(f, :headers=>true).map {|r| r['name']} +class String + def trim_clarifiers() + self.sub(/\s+\(\w+\)/,'') end - attr_reader :names end -class EANGenerator - def initialize(prefix=500) - @prefix = prefix.to_i - @doy = Date.today.yday - end +# Generate a seqence of colours +def color_generator + names = CSV.read(COLORS_CSV, :headers=>true).map {|r| r['name']} + names.map {|s| s.trim_clarifiers }.shuffle.to_a.cycle +end + - def generate(n=1) +# Generate an infinite sequence of EAN numbers +def ean_generator(prefix=500) + Enumerator.new do |y| + doy = Date.today.yday t = (DateTime.now.to_time.to_i % 86400) * 100 - y = DateTime.now.year.to_i % 10 - return (1..n).map { |n| sprintf("%03d%03d%07d", @prefix, @doy, t + n) } + #yr = DateTime.now.year.to_i % 10 + n=1 + loop do + y << sprintf("%03d%03d%07d", prefix, doy, t + n) + n=n+1 + end end +end +Sizes = ['S', 'M', 'L', 'XL'].cycle + +Products = ['Beanie', 'Boots', 'Gloves', 'Scarf'].cycle + +def product_generator + Enumerator.new do |y| + colors = color_generator() + eans = ean_generator() + products = Products + sizes = Sizes + loop do + color = colors.next + n = sprintf("%s %s (%s)", color, products.next, sizes.next) + y << {name: n, ean: eans.next} + end + end end -Sizes = ['S', 'M', 'L', 'XL'] +# Convert list of product maps to GS1 XML +def products_xml(products) + @products = products + builder = Nokogiri::XML::Builder.new { |xml| + xml.Products('xmlns' => 'http://schema.org/Product') do + @products.each do |product| + xml.Product { |p| + p.name product[:name] + p.gtin13 product[:ean] + p.image 'https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png' + } + end + end + } + return builder.to_xml +end -#puts Colors.new(COLORS_CSV).names.last.inspect +# First argument to this program is number of records to generate +def product_count + ARGV.first.to_i + 1 +end -#puts EANGenerator.new(500).generate(100) +puts products_xml(product_generator().take(product_count)) From 1c66a0cbfc39307d054e75e6ccedc1e9b60c6e72 Mon Sep 17 00:00:00 2001 From: James Every Date: Wed, 21 Mar 2018 11:59:09 +0000 Subject: [PATCH 13/22] Log to logentries/rapid7 --- .../supply-chain/evrythng.eif/.gitignore | 1 + .../supply-chain/evrythng.eif/build.gradle | 4 +++- .../supply-chain/evrythng.eif/drop_products.sh | 6 +++++- .../demo/supplychain/products/ProductLoader.java | 5 +++-- .../evrythng.eif/src/main/resources/logback.xml | 14 ++++++++++++++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/customer-solutions/supply-chain/evrythng.eif/.gitignore b/customer-solutions/supply-chain/evrythng.eif/.gitignore index a5d32b5..79c80fa 100644 --- a/customer-solutions/supply-chain/evrythng.eif/.gitignore +++ b/customer-solutions/supply-chain/evrythng.eif/.gitignore @@ -1,6 +1,7 @@ .gradle /build/ /out/ +/src/data # Ignore Gradle GUI config gradle-app.setting diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 346aaf1..6e49029 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -16,7 +16,9 @@ dependencies { compile group: 'org.apache.camel', name: 'camel-core', version: '2.18.2' compile group: 'org.apache.camel', name: 'camel-jaxb', version: '2.18.2' - compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.9' + compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.5' + compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.0.11' + compile group: 'com.rapid7', name: 'r7insight_java', version: '1.1.39' testCompile group: 'junit', name: 'junit', version: '4.12' diff --git a/customer-solutions/supply-chain/evrythng.eif/drop_products.sh b/customer-solutions/supply-chain/evrythng.eif/drop_products.sh index 132f3dd..d6d2ae6 100755 --- a/customer-solutions/supply-chain/evrythng.eif/drop_products.sh +++ b/customer-solutions/supply-chain/evrythng.eif/drop_products.sh @@ -2,4 +2,8 @@ echo "Generate Products inside the Camel input pipeline folder" -ruby src/main/ruby/gen_products.rb ${1:-100} > src/data/products.xml +TMP=`mktemp` + +ruby src/main/ruby/gen_products.rb ${1:-100} > $TMP + +mv $TMP src/data/products.xml diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java index f0b2be7..22ff26e 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java @@ -7,7 +7,8 @@ import org.apache.camel.Processor; import org.json.JSONObject; -import java.util.logging.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ProductLoader implements Processor { @@ -25,5 +26,5 @@ public void process(Exchange exchange) throws Exception { logger.info(new JSONObject().put("evt_id", product.getId()).toString()); } - private static final Logger logger = Logger.getLogger(ProductLoader.class.getName()); + private static Logger logger = LoggerFactory.getLogger("logentries"); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml index 37a4589..b2b1f37 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml @@ -15,9 +15,23 @@ target/camel-spring-boot-test.log + + + 23ac75f2-5a5d-4a49-a1f7-bd1480dbbb32 + eu + False + True + USER + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + From acbf1f024d953f1b7d75c635ee47fb999c26698a Mon Sep 17 00:00:00 2001 From: James Every Date: Wed, 21 Mar 2018 15:21:19 +0000 Subject: [PATCH 14/22] Fix GTIN13 -> Product.EAN --- .../supply-chain/evrythng.eif/README.md | 6 ++-- .../supply-chain/evrythng.eif/build.gradle | 2 +- .../TransformGS1ProductToEVTProduct.java | 4 +-- .../java/org/schema/identifier/GTIN13.java | 33 +++++++++---------- .../src/main/resources/logback.xml | 4 +-- .../src/main/ruby/gen_products.rb | 18 ++++++---- .../demo/supplychain/ProductLoaderTest.java | 6 ++-- .../org/schema/identifier/GTIN13Test.java | 2 +- 8 files changed, 38 insertions(+), 37 deletions(-) diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index 8f3d464..04c773d 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -20,12 +20,12 @@ Checkout the repository and build git clone git@github.com:evrythng/examples.git cd customer-solutions/supply-chain/evrythng.eif + gradle clean gradle build This will make a JAR file containing all dependencies: - build/libs/eif-0.18.58.jar - + build/libs/eif-0.18.70.jar ## Run @@ -36,7 +36,7 @@ There are two mandatory environment variables: It is not recommended to run with your Operator key, a trusted application key is all that is required for most interactions. - java -jar build/libs/eif-0.18.58.jar + java -jar build/libs/eif-0.18.*.jar The application will run and await XML files to be dropped into the `src/data` folder. See [dropfile.sh](dropfile.sh) script for example of how to trigger a load. diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 6e49029..68a03f8 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.59' +version '0.18.70' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java index 8439a12..0145820 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java @@ -56,8 +56,8 @@ private TransformGS1ProductToEVTProduct description(org.schema.Product p) { } private TransformGS1ProductToEVTProduct gtin(org.schema.Product p) { - if (p.gtin13 != null) { - target.addIdentifier("EAN", p.gtin13.gtin); + if (p.toString() != null) { + target.addIdentifier("EAN", p.gtin13.toString()); } return this; } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java index 2f8824a..a9eb5cb 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/identifier/GTIN13.java @@ -1,9 +1,6 @@ package org.schema.identifier; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.*; /** * The GTIN-13 code of the product, or the product to which the offer refers. @@ -14,29 +11,29 @@ * GTIN - https://www.gtin.info/ * */ -@XmlType(factoryMethod="newInstance") -@XmlRootElement public class GTIN13 { - /** - * Validates GTIN. - * - * @throws IllegalArgumentException if not 13 digits - */ - public GTIN13(String s) { - if (s != null && s.matches("[0-9]{13}")) { - this.gtin = s; + private String gtin; + + @XmlValue + public String getValue() { + return gtin; + } + + public void setValue(String value) { + if (value != null && value.matches("[0-9]{13}")) { + this.gtin = value; } else { - throw new IllegalArgumentException(s); + throw new IllegalArgumentException(value); } } /* For JAXB */ public GTIN13() {}; - public static GTIN13 newInstance() { return new GTIN13(); }; - - public String gtin; + public GTIN13(String value) { + this.setValue(value); + }; @Override public String toString() { diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml index b2b1f37..681c9a3 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml @@ -12,7 +12,7 @@ %d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n - target/camel-spring-boot-test.log + /tmp/camel-spring-boot-test.log @@ -31,7 +31,7 @@ - + diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb index 030a57f..51c8db8 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb @@ -58,8 +58,9 @@ def product_generator sizes = Sizes loop do color = colors.next - n = sprintf("%s %s (%s)", color, products.next, sizes.next) - y << {name: n, ean: eans.next} + product = products.next + n = sprintf("%s %s (%s)", color, product, sizes.next) + y << {name: n, ean: eans.next, product:product} end end end @@ -69,13 +70,16 @@ def products_xml(products) @products = products builder = Nokogiri::XML::Builder.new { |xml| xml.Products('xmlns' => 'http://schema.org/Product') do - @products.each do |product| + @products.each { |product| xml.Product { |p| - p.name product[:name] - p.gtin13 product[:ean] - p.image 'https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png' + p.name product[:name] + p.description product[:name] + p.gtin13 product[:ean] + p.brand 'ACME' + p.category ['Apparel', product[:product]].join('/') + p.image 'https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png' } - end + } end } return builder.to_xml diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoaderTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoaderTest.java index e32ab5b..4c45662 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoaderTest.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/ProductLoaderTest.java @@ -10,8 +10,8 @@ public class ProductLoaderTest extends CamelTestSupport { @Test public void parseProductsXML() { - MockEndpoint skus = getMockEndpoint("mock:skus-xml"); - skus.expectedMessageCount(2); + MockEndpoint products = getMockEndpoint("mock:products-xml"); + products.expectedMessageCount(2); } @Override @@ -22,7 +22,7 @@ public void configure() throws Exception { from("seda:input") .split(xpath(Products.XPATH_PRODUCTS)) .unmarshal().jaxb(Products.CONTEXT_PATH) - .to("mock:skus-xml"); + .to("mock:products-xml"); } }; } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java index 8728b28..451fc33 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/org/schema/identifier/GTIN13Test.java @@ -8,7 +8,7 @@ public class GTIN13Test { @Test public void testGTIN() { - assertEquals("1234567890123", new GTIN13("1234567890123").gtin); + assertEquals("1234567890123", new GTIN13("1234567890123").toString()); } @Test(expected = IllegalArgumentException.class) From f2e0a699b1dd795df1a5dc754f5a58bb81abb4f5 Mon Sep 17 00:00:00 2001 From: James Every Date: Wed, 21 Mar 2018 16:02:32 +0000 Subject: [PATCH 15/22] Fan out with multiple consumers --- .../supply-chain/evrythng.eif/README.md | 5 +- .../supply-chain/evrythng.eif/build.gradle | 4 +- .../evrythng.eif/drop_products.sh | 2 +- ...er.java => XMLProductsLoaderPipeline.java} | 23 +- .../supplychain/products/ProductLoader.java | 4 +- .../products/ProductProcessor.java | 89 + .../TransformGS1ProductToEVTProduct.java | 92 - .../products/UnreliableProductLoader.java | 24 +- .../src/main/resources/logback.xml | 2 +- .../supplychain/TransformProductTest.java | 4 +- .../src/test/resources/schema.org/apparel.xml | 8011 +++++++++++++++++ 11 files changed, 8134 insertions(+), 126 deletions(-) rename customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/{ProductsLoader.java => XMLProductsLoaderPipeline.java} (61%) delete mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/apparel.xml diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index 04c773d..bc670ab 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -20,8 +20,7 @@ Checkout the repository and build git clone git@github.com:evrythng/examples.git cd customer-solutions/supply-chain/evrythng.eif - gradle clean - gradle build + gradle clean build This will make a JAR file containing all dependencies: @@ -50,4 +49,4 @@ Once the pipeline is running (see above) you can generate and load products with Or generate products to a new file: - ./gen_products.sh 1000 \ No newline at end of file + ./gen_products.sh 1000 > /tmp/products.xml diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 68a03f8..e99cf53 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.70' +version '0.18.72' apply plugin: 'java' @@ -25,7 +25,7 @@ dependencies { testCompile group: 'org.apache.camel', name: 'camel-test', version: '2.18.2' } -def camelRouteBuilderMain = "com.evrythng.demo.supplychain.ProductsLoader" +def camelRouteBuilderMain = "com.evrythng.demo.supplychain.XMLProductsLoaderPipeline" jar { manifest { diff --git a/customer-solutions/supply-chain/evrythng.eif/drop_products.sh b/customer-solutions/supply-chain/evrythng.eif/drop_products.sh index d6d2ae6..155fbcd 100755 --- a/customer-solutions/supply-chain/evrythng.eif/drop_products.sh +++ b/customer-solutions/supply-chain/evrythng.eif/drop_products.sh @@ -2,8 +2,8 @@ echo "Generate Products inside the Camel input pipeline folder" +# Generate to a temporary file, otherwise Camel will read a partial XML file TMP=`mktemp` - ruby src/main/ruby/gen_products.rb ${1:-100} > $TMP mv $TMP src/data/products.xml diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java similarity index 61% rename from customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java rename to customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java index 9d84111..b27708f 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/ProductsLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java @@ -6,7 +6,20 @@ import org.apache.camel.main.Main; import org.schema.Products; -public class ProductsLoader extends RouteBuilder implements Runnable { +/** + * Apache Camel Pipeline that reads GS1 Products XML file and + * loads them as EVT Products. + */ +public class XMLProductsLoaderPipeline extends RouteBuilder implements Runnable { + + public static final int REQUESTS_PER_SECOND = 30; + + /* Fan out with seda:queue?concurrentConsumers=x */ + private static final int WRITER_THREADS = 4; + + private static final String queueType = "seda"; + private static final String productsXMLQueue = String.format("%s:%s", queueType, "products-xml"); + private static final String productsXMLQueueConsumer = String.format("%s?concurrentConsumers=%d", productsXMLQueue, WRITER_THREADS); @Override public void configure() throws Exception { @@ -17,11 +30,11 @@ public void configure() throws Exception { .log("Received XML file containing Products") .split(Products.ns.xpath(Products.XPATH_PRODUCTS)) .unmarshal().jaxb(Products.CONTEXT_PATH) - .to("seda:sku-xml") + .to(productsXMLQueue) .endChoice() .otherwise() .log("Ignoring file"); - from("seda:sku-xml") + from(productsXMLQueueConsumer) .process(new ProductProcessor()) .process(new UnreliableProductLoader()) .errorHandler(deadLetterChannel("seda:errors")); @@ -32,7 +45,7 @@ public void configure() throws Exception { @Override public void run() { Main main = new Main(); - main.addRouteBuilder(new ProductsLoader()); + main.addRouteBuilder(new XMLProductsLoaderPipeline()); try { main.run(new String[] {}); } catch (Exception e) { @@ -41,6 +54,6 @@ public void run() { } public static void main(String[] args) { - new ProductsLoader().run(); + new XMLProductsLoaderPipeline().run(); } } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java index 22ff26e..c64ae80 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java @@ -23,7 +23,9 @@ public void process(Exchange exchange) throws Exception { Product product = exchange.getIn().getMandatoryBody(Product.class); product = productService.productCreator(product).execute(); // TODO wrap in Circuit breaker - logger.info(new JSONObject().put("evt_id", product.getId()).toString()); + logger.info(new JSONObject() + .put("evt_id", product.getId()) + .put("identifiers", product.getIdentifiers()).toString()); } private static Logger logger = LoggerFactory.getLogger("logentries"); diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java index 9c3daba..7a752ed 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java @@ -1,10 +1,13 @@ package com.evrythng.demo.supplychain.products; +import com.evrythng.thng.resource.model.store.Product; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.impl.DefaultMessage; +import java.util.ArrayList; +import java.util.Map; import java.util.Optional; /** @@ -23,4 +26,90 @@ public void process(Exchange exchange) throws Exception { throw new IllegalArgumentException("Not a SKU"); } } + + /** + * Transform GS1/Product to EVT/Product. + */ + public static class TransformGS1ProductToEVTProduct { + + public TransformGS1ProductToEVTProduct() { + this.target = new Product(); + } + + private final Product target; + + public Product convert(org.schema.Product src) { + return this + .name(src) + .brand(src) + .description(src) + .gtin(src) + .additionalProperties(src) + .images(src) + .categories(src) + .toEVT(); + } + + private Product toEVT() { + return this.target; + } + + private TransformGS1ProductToEVTProduct name(org.schema.Product p) { + if (p.name != null && !p.name.isEmpty()) { + target.setName(p.name); + } else { + target.setName("Unnamed"); + } + return this; + } + + private TransformGS1ProductToEVTProduct brand(org.schema.Product p) { + if (p.brand != null && !p.brand.isEmpty()) { + target.setBrand(p.brand); + } + return this; + } + + private TransformGS1ProductToEVTProduct description(org.schema.Product p) { + if (p.description != null && !p.description.isEmpty()) { + target.setDescription(p.description); + } + return this; + } + + private TransformGS1ProductToEVTProduct gtin(org.schema.Product p) { + if (p.toString() != null) { + target.addIdentifier("EAN", p.gtin13.toString()); + } + return this; + } + + private TransformGS1ProductToEVTProduct additionalProperties(org.schema.Product p) { + for (Map.Entry entry : p.additionalProperty.entrySet()) { + target.addCustomFields(entry.getKey(), entry.getValue()); + } + return this; + } + + private TransformGS1ProductToEVTProduct images(org.schema.Product p) { + if (p.image != null) { + if (target.getPhotos() == null) { + target.setPhotos(new ArrayList<>()); + } + target.getPhotos().add(p.image.toString()); + } + return this; + } + + private TransformGS1ProductToEVTProduct categories(org.schema.Product p) { + if (p.category != null) { + target.setTags(new ArrayList<>()); + for(String tag: p.category.trim().split("/")) { + target.getTags().add(tag); + } + } + return this; + } + + } } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java deleted file mode 100644 index 0145820..0000000 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/TransformGS1ProductToEVTProduct.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.evrythng.demo.supplychain.products; - -import com.evrythng.thng.resource.model.store.Product; - -import java.util.ArrayList; -import java.util.Map; - -/** - * Transform GS1/Product to EVT/Product. - */ -public class TransformGS1ProductToEVTProduct { - - public TransformGS1ProductToEVTProduct() { - this.target = new Product(); - } - - private final Product target; - - public Product convert(org.schema.Product src) { - return this - .name(src) - .brand(src) - .description(src) - .gtin(src) - .additionalProperties(src) - .images(src) - .categories(src) - .toEVT(); - } - - private Product toEVT() { - return this.target; - } - - private TransformGS1ProductToEVTProduct name(org.schema.Product p) { - if (p.name != null && !p.name.isEmpty()) { - target.setName(p.name); - } else { - target.setName("Unnamed"); - } - return this; - } - - private TransformGS1ProductToEVTProduct brand(org.schema.Product p) { - if (p.brand != null && !p.brand.isEmpty()) { - target.setBrand(p.brand); - } - return this; - } - - private TransformGS1ProductToEVTProduct description(org.schema.Product p) { - if (p.description != null && !p.description.isEmpty()) { - target.setDescription(p.description); - } - return this; - } - - private TransformGS1ProductToEVTProduct gtin(org.schema.Product p) { - if (p.toString() != null) { - target.addIdentifier("EAN", p.gtin13.toString()); - } - return this; - } - - private TransformGS1ProductToEVTProduct additionalProperties(org.schema.Product p) { - for (Map.Entry entry : p.additionalProperty.entrySet()) { - target.addCustomFields(entry.getKey(), entry.getValue()); - } - return this; - } - - private TransformGS1ProductToEVTProduct images(org.schema.Product p) { - if (p.image != null) { - if (target.getPhotos() == null) { - target.setPhotos(new ArrayList<>()); - } - target.getPhotos().add(p.image.toString()); - } - return this; - } - - private TransformGS1ProductToEVTProduct categories(org.schema.Product p) { - if (p.category != null) { - target.setTags(new ArrayList<>()); - for(String tag: p.category.trim().split("/")) { - target.getTags().add(tag); - } - } - return this; - } - -} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java index 7d09fd3..fb2c028 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java @@ -1,42 +1,28 @@ package com.evrythng.demo.supplychain.products; -import com.evrythng.demo.supplychain.EVTLoader; import com.evrythng.java.wrapper.exception.EvrythngClientException; -import com.evrythng.java.wrapper.service.ProductService; -import com.evrythng.thng.resource.model.store.Product; import org.apache.camel.Exchange; -import org.apache.camel.Processor; -import org.json.JSONObject; import java.security.SecureRandom; import java.util.Random; -import java.util.logging.Logger; -public class UnreliableProductLoader implements Processor { - - public UnreliableProductLoader() { - this.productService = EVTLoader.newApiManager().productService(); - } - - private final ProductService productService; +/** + * Fails to load products into EVT 50% of the time. + */ +public class UnreliableProductLoader extends ProductLoader { private final Random rnd = new SecureRandom(); @Override public void process(Exchange exchange) throws Exception { - Product product = exchange.getIn().getMandatoryBody(Product.class); if (platformTemporarilyOverloaded()) { throw new EvrythngClientException("504 Platform Temporarily Unavailable"); } else { - product = productService.productCreator(product).execute(); - // TODO wrap in Circuit breaker - logger.info(new JSONObject().put("evt_id", product.getId()).toString()); + super.process(exchange); } } private boolean platformTemporarilyOverloaded() { return rnd.nextBoolean(); } - - private static final Logger logger = Logger.getLogger(UnreliableProductLoader.class.getName()); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml index 681c9a3..e11575f 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/logback.xml @@ -31,7 +31,7 @@ - + diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java index e53f514..e0b1f2b 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/java/com/evrythng/demo/supplychain/TransformProductTest.java @@ -1,6 +1,6 @@ package com.evrythng.demo.supplychain; -import com.evrythng.demo.supplychain.products.TransformGS1ProductToEVTProduct; +import com.evrythng.demo.supplychain.products.ProductProcessor; import com.evrythng.thng.resource.model.store.Product; import org.junit.Before; import org.junit.Test; @@ -21,7 +21,7 @@ public void setUp() { input.gtin13 = new GTIN13("8274659839027"); input.additionalProperty.put("qty_per_pallet", 960); input.category = "Finished Product/Wine"; - evtProduct = new TransformGS1ProductToEVTProduct().convert(input); + evtProduct = new ProductProcessor.TransformGS1ProductToEVTProduct().convert(input); } @Test diff --git a/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/apparel.xml b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/apparel.xml new file mode 100644 index 0000000..e5494dc --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/test/resources/schema.org/apparel.xml @@ -0,0 +1,8011 @@ + + + + Fluorescent Yellow Beanie (S) + Fluorescent Yellow Beanie (S) + 5000805635101 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green Boots (M) + Green Boots (M) + 5000805635102 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sandy Brown Gloves (L) + Sandy Brown Gloves (L) + 5000805635103 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Amber Scarf (XL) + Amber Scarf (XL) + 5000805635104 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Beige Beanie (S) + Beige Beanie (S) + 5000805635105 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Magenta Boots (M) + Pale Magenta Boots (M) + 5000805635106 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gold (Golden) Gloves (L) + Gold (Golden) Gloves (L) + 5000805635107 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Unbleached Silk Scarf (XL) + Unbleached Silk Scarf (XL) + 5000805635108 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Amethyst Beanie (S) + Amethyst Beanie (S) + 5000805635109 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Aureolin Boots (M) + Aureolin Boots (M) + 5000805635110 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Silver Gloves (L) + Silver Gloves (L) + 5000805635111 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Vermilion Scarf (XL) + Medium Vermilion Scarf (XL) + 5000805635112 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Royal Fuchsia Beanie (S) + Royal Fuchsia Beanie (S) + 5000805635113 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Beau Blue Boots (M) + Beau Blue Boots (M) + 5000805635114 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pink-Orange Gloves (L) + Pink-Orange Gloves (L) + 5000805635115 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + China Rose Scarf (XL) + China Rose Scarf (XL) + 5000805635116 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tan Beanie (S) + Tan Beanie (S) + 5000805635117 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Rose Boots (M) + Copper Rose Boots (M) + 5000805635118 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Goldenrod Gloves (L) + Dark Goldenrod Gloves (L) + 5000805635119 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Celadon Green Scarf (XL) + Celadon Green Scarf (XL) + 5000805635120 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Pink Beanie (S) + Deep Pink Beanie (S) + 5000805635121 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Penny Boots (M) + Copper Penny Boots (M) + 5000805635122 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Waterspout Gloves (L) + Waterspout Gloves (L) + 5000805635123 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Beaver Scarf (XL) + Beaver Scarf (XL) + 5000805635124 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Heliotrope Beanie (S) + Heliotrope Beanie (S) + 5000805635125 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Green Boots (M) + Dark Green Boots (M) + 5000805635126 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cocoa Brown Gloves (L) + Cocoa Brown Gloves (L) + 5000805635127 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persimmon Scarf (XL) + Persimmon Scarf (XL) + 5000805635128 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadet Grey Beanie (S) + Cadet Grey Beanie (S) + 5000805635129 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pumpkin Boots (M) + Pumpkin Boots (M) + 5000805635130 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Gold Gloves (L) + Pale Gold Gloves (L) + 5000805635131 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Thistle Scarf (XL) + Thistle Scarf (XL) + 5000805635132 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Old Gold Beanie (S) + Old Gold Beanie (S) + 5000805635133 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mantis Boots (M) + Mantis Boots (M) + 5000805635134 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Pink Gloves (L) + Bright Pink Gloves (L) + 5000805635135 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mellow Apricot Scarf (XL) + Mellow Apricot Scarf (XL) + 5000805635136 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mint Green Beanie (S) + Mint Green Beanie (S) + 5000805635137 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jungle Green Boots (M) + Jungle Green Boots (M) + 5000805635138 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Magnolia Gloves (L) + Magnolia Gloves (L) + 5000805635139 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sienna Scarf (XL) + Sienna Scarf (XL) + 5000805635140 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Coral Red Beanie (S) + Coral Red Beanie (S) + 5000805635141 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ochre Boots (M) + Ochre Boots (M) + 5000805635142 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blond Gloves (L) + Blond Gloves (L) + 5000805635143 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Thulian Pink Scarf (XL) + Thulian Pink Scarf (XL) + 5000805635144 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Palatinate Purple Beanie (S) + Palatinate Purple Beanie (S) + 5000805635145 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Aquamarine Boots (M) + Medium Aquamarine Boots (M) + 5000805635146 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Stil De Grain Yellow Gloves (L) + Stil De Grain Yellow Gloves (L) + 5000805635147 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Barn Red Scarf (XL) + Barn Red Scarf (XL) + 5000805635148 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Brown Beanie (S) + Pastel Brown Beanie (S) + 5000805635149 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gray Boots (M) + Gray Boots (M) + 5000805635150 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rust Gloves (L) + Rust Gloves (L) + 5000805635151 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Beige Scarf (XL) + French Beige Scarf (XL) + 5000805635152 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hooker'S Green Beanie (S) + Hooker'S Green Beanie (S) + 5000805635153 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Burgundy Boots (M) + Burgundy Boots (M) + 5000805635154 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple Gloves (L) + Purple Gloves (L) + 5000805635155 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gray-Asparagus Scarf (XL) + Gray-Asparagus Scarf (XL) + 5000805635156 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Alloy Orange Beanie (S) + Alloy Orange Beanie (S) + 5000805635157 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Taupe Gray Boots (M) + Taupe Gray Boots (M) + 5000805635158 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Capri Gloves (L) + Capri Gloves (L) + 5000805635159 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Spring Green Scarf (XL) + Spring Green Scarf (XL) + 5000805635160 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Outrageous Orange Beanie (S) + Outrageous Orange Beanie (S) + 5000805635161 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Platinum Boots (M) + Platinum Boots (M) + 5000805635162 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Spring Bud Gloves (L) + Spring Bud Gloves (L) + 5000805635163 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Violet-Blue Scarf (XL) + Violet-Blue Scarf (XL) + 5000805635164 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Icterine Beanie (S) + Icterine Beanie (S) + 5000805635165 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Scarlet Boots (M) + Scarlet Boots (M) + 5000805635166 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hansa Yellow Gloves (L) + Hansa Yellow Gloves (L) + 5000805635167 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Carmine Scarf (XL) + Rich Carmine Scarf (XL) + 5000805635168 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mauve Beanie (S) + Mauve Beanie (S) + 5000805635169 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pink Pearl Boots (M) + Pink Pearl Boots (M) + 5000805635170 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ua Red Gloves (L) + Ua Red Gloves (L) + 5000805635171 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + University Of California Gold Scarf (XL) + University Of California Gold Scarf (XL) + 5000805635172 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Electric Blue Beanie (S) + Medium Electric Blue Beanie (S) + 5000805635173 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cornsilk Boots (M) + Cornsilk Boots (M) + 5000805635174 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ou Crimson Red Gloves (L) + Ou Crimson Red Gloves (L) + 5000805635175 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ginger Scarf (XL) + Ginger Scarf (XL) + 5000805635176 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Han Blue Beanie (S) + Han Blue Beanie (S) + 5000805635177 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ultramarine Blue Boots (M) + Ultramarine Blue Boots (M) + 5000805635178 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fluorescent Pink Gloves (L) + Fluorescent Pink Gloves (L) + 5000805635179 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ash Grey Scarf (XL) + Ash Grey Scarf (XL) + 5000805635180 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Byzantium Beanie (S) + Dark Byzantium Beanie (S) + 5000805635181 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dodger Blue Boots (M) + Dodger Blue Boots (M) + 5000805635182 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Smoky Black Gloves (L) + Smoky Black Gloves (L) + 5000805635183 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Laurel Green Scarf (XL) + Laurel Green Scarf (XL) + 5000805635184 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Eggshell Beanie (S) + Eggshell Beanie (S) + 5000805635185 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hot Magenta Boots (M) + Hot Magenta Boots (M) + 5000805635186 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rifle Green Gloves (L) + Rifle Green Gloves (L) + 5000805635187 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Gold Scarf (XL) + Rose Gold Scarf (XL) + 5000805635188 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Snow Beanie (S) + Snow Beanie (S) + 5000805635189 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Classic Rose Boots (M) + Classic Rose Boots (M) + 5000805635190 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tufts Blue Gloves (L) + Tufts Blue Gloves (L) + 5000805635191 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Khaki (Html/Css) Scarf (XL) + Khaki (Html/Css) Scarf (XL) + 5000805635192 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cherry Blossom Pink Beanie (S) + Cherry Blossom Pink Beanie (S) + 5000805635193 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bronze Boots (M) + Bronze Boots (M) + 5000805635194 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sea Blue Gloves (L) + Sea Blue Gloves (L) + 5000805635195 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gray (Html/Css Gray) Scarf (XL) + Gray (Html/Css Gray) Scarf (XL) + 5000805635196 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Beanie (S) + Copper Beanie (S) + 5000805635197 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Corn Boots (M) + Corn Boots (M) + 5000805635198 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Misty Rose Gloves (L) + Misty Rose Gloves (L) + 5000805635199 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cotton Candy Scarf (XL) + Cotton Candy Scarf (XL) + 5000805635200 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Opera Mauve Beanie (S) + Opera Mauve Beanie (S) + 5000805635201 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green Boots (M) + Green Boots (M) + 5000805635202 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue-Violet Gloves (L) + Blue-Violet Gloves (L) + 5000805635203 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Boston University Red Scarf (XL) + Boston University Red Scarf (XL) + 5000805635204 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Rose Beanie (S) + French Rose Beanie (S) + 5000805635205 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carmine Red Boots (M) + Carmine Red Boots (M) + 5000805635206 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Unmellow Yellow Gloves (L) + Unmellow Yellow Gloves (L) + 5000805635207 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ecru Scarf (XL) + Ecru Scarf (XL) + 5000805635208 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Blue Beanie (S) + Light Blue Beanie (S) + 5000805635209 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Payne'S Grey Boots (M) + Payne'S Grey Boots (M) + 5000805635210 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Coral Gloves (L) + Light Coral Gloves (L) + 5000805635211 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Black Olive Scarf (XL) + Black Olive Scarf (XL) + 5000805635212 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Asparagus Beanie (S) + Asparagus Beanie (S) + 5000805635213 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Aqua Boots (M) + Aqua Boots (M) + 5000805635214 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Electric Blue Gloves (L) + Rich Electric Blue Gloves (L) + 5000805635215 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vivid Cerise Scarf (XL) + Vivid Cerise Scarf (XL) + 5000805635216 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Brown Beanie (S) + Dark Brown Beanie (S) + 5000805635217 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadmium Yellow Boots (M) + Cadmium Yellow Boots (M) + 5000805635218 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mustard Gloves (L) + Mustard Gloves (L) + 5000805635219 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Maroon Scarf (XL) + Bright Maroon Scarf (XL) + 5000805635220 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Violet-Red Beanie (S) + Medium Violet-Red Beanie (S) + 5000805635221 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jonquil Boots (M) + Jonquil Boots (M) + 5000805635222 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dogwood Rose Gloves (L) + Dogwood Rose Gloves (L) + 5000805635223 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Gray Scarf (XL) + Blue Gray Scarf (XL) + 5000805635224 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mikado Yellow Beanie (S) + Mikado Yellow Beanie (S) + 5000805635225 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chartreuse Boots (M) + Chartreuse Boots (M) + 5000805635226 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Raspberry Gloves (L) + Raspberry Gloves (L) + 5000805635227 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brass Scarf (XL) + Brass Scarf (XL) + 5000805635228 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Thulian Pink Beanie (S) + Light Thulian Pink Beanie (S) + 5000805635229 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pearl Boots (M) + Pearl Boots (M) + 5000805635230 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mellow Yellow Gloves (L) + Mellow Yellow Gloves (L) + 5000805635231 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Slate Gray Scarf (XL) + Dark Slate Gray Scarf (XL) + 5000805635232 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Burlywood Beanie (S) + Burlywood Beanie (S) + 5000805635233 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Alice Blue Boots (M) + Alice Blue Boots (M) + 5000805635234 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Plum Gloves (L) + Plum Gloves (L) + 5000805635235 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Gray Scarf (XL) + Pastel Gray Scarf (XL) + 5000805635236 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pine Green Beanie (S) + Pine Green Beanie (S) + 5000805635237 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + International Klein Blue Boots (M) + International Klein Blue Boots (M) + 5000805635238 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Phthalo Blue Gloves (L) + Phthalo Blue Gloves (L) + 5000805635239 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Desert Scarf (XL) + Desert Scarf (XL) + 5000805635240 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red Beanie (S) + Red Beanie (S) + 5000805635241 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Prune Boots (M) + Prune Boots (M) + 5000805635242 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Powder Blue Gloves (L) + Powder Blue Gloves (L) + 5000805635243 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Black Leather Jacket Scarf (XL) + Black Leather Jacket Scarf (XL) + 5000805635244 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Navajo White Beanie (S) + Navajo White Beanie (S) + 5000805635245 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Orange Boots (M) + Persian Orange Boots (M) + 5000805635246 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadet Gloves (L) + Cadet Gloves (L) + 5000805635247 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Feldgrau Scarf (XL) + Feldgrau Scarf (XL) + 5000805635248 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Radical Red Beanie (S) + Radical Red Beanie (S) + 5000805635249 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jazzberry Jam Boots (M) + Jazzberry Jam Boots (M) + 5000805635250 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Zinnwaldite Brown Gloves (L) + Zinnwaldite Brown Gloves (L) + 5000805635251 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Lilac Scarf (XL) + Deep Lilac Scarf (XL) + 5000805635252 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ultra Pink Beanie (S) + Ultra Pink Beanie (S) + 5000805635253 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Vale Boots (M) + Rose Vale Boots (M) + 5000805635254 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Orange Peel Gloves (L) + Orange Peel Gloves (L) + 5000805635255 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Gray Scarf (XL) + Lavender Gray Scarf (XL) + 5000805635256 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Purple Beanie (S) + Electric Purple Beanie (S) + 5000805635257 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Magenta Boots (M) + Lavender Magenta Boots (M) + 5000805635258 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple Mountain Majesty Gloves (L) + Purple Mountain Majesty Gloves (L) + 5000805635259 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Magenta Scarf (XL) + Magenta Scarf (XL) + 5000805635260 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Drab Beanie (S) + Drab Beanie (S) + 5000805635261 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Plum Boots (M) + Persian Plum Boots (M) + 5000805635262 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Pink Gloves (L) + Persian Pink Gloves (L) + 5000805635263 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green-Yellow Scarf (XL) + Green-Yellow Scarf (XL) + 5000805635264 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jasmine Beanie (S) + Jasmine Beanie (S) + 5000805635265 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + St. Patrick'S Blue Boots (M) + St. Patrick'S Blue Boots (M) + 5000805635266 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bisque Gloves (L) + Bisque Gloves (L) + 5000805635267 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jasper Scarf (XL) + Jasper Scarf (XL) + 5000805635268 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Gray Beanie (S) + Dark Gray Beanie (S) + 5000805635269 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Pink Boots (M) + Rose Pink Boots (M) + 5000805635270 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Peach-Orange Gloves (L) + Peach-Orange Gloves (L) + 5000805635271 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Manatee Scarf (XL) + Manatee Scarf (XL) + 5000805635272 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Khaki Beanie (S) + Dark Khaki Beanie (S) + 5000805635273 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Indian Yellow Boots (M) + Indian Yellow Boots (M) + 5000805635274 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red Gloves (L) + Red Gloves (L) + 5000805635275 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Amaranth Scarf (XL) + Amaranth Scarf (XL) + 5000805635276 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Iris Beanie (S) + Iris Beanie (S) + 5000805635277 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bittersweet Boots (M) + Bittersweet Boots (M) + 5000805635278 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Inchworm Gloves (L) + Inchworm Gloves (L) + 5000805635279 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Teal Scarf (XL) + Teal Scarf (XL) + 5000805635280 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Lime Beanie (S) + Electric Lime Beanie (S) + 5000805635281 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Heart Gold Boots (M) + Heart Gold Boots (M) + 5000805635282 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Yellow Gloves (L) + Dark Yellow Gloves (L) + 5000805635283 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sand Dune Scarf (XL) + Sand Dune Scarf (XL) + 5000805635284 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple (Html/Css) Beanie (S) + Purple (Html/Css) Beanie (S) + 5000805635285 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Phlox Boots (M) + Phlox Boots (M) + 5000805635286 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lava Gloves (L) + Lava Gloves (L) + 5000805635287 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vivid Burgundy Scarf (XL) + Vivid Burgundy Scarf (XL) + 5000805635288 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fire Engine Red Beanie (S) + Fire Engine Red Beanie (S) + 5000805635289 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Umber Boots (M) + Umber Boots (M) + 5000805635290 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ruby Red Gloves (L) + Ruby Red Gloves (L) + 5000805635291 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Veronica Scarf (XL) + Veronica Scarf (XL) + 5000805635292 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wild Blue Yonder Beanie (S) + Wild Blue Yonder Beanie (S) + 5000805635293 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vegas Gold Boots (M) + Vegas Gold Boots (M) + 5000805635294 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Meat Brown Gloves (L) + Meat Brown Gloves (L) + 5000805635295 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ua Blue Scarf (XL) + Ua Blue Scarf (XL) + 5000805635296 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Sapphire Beanie (S) + Blue Sapphire Beanie (S) + 5000805635297 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Indigo Boots (M) + Indigo Boots (M) + 5000805635298 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Maroon Gloves (L) + Rich Maroon Gloves (L) + 5000805635299 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pink Sherbet Scarf (XL) + Pink Sherbet Scarf (XL) + 5000805635300 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Coquelicot Beanie (S) + Coquelicot Beanie (S) + 5000805635301 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Oxford Blue Boots (M) + Oxford Blue Boots (M) + 5000805635302 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Maroon Gloves (L) + Maroon Gloves (L) + 5000805635303 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vivid Violet Scarf (XL) + Vivid Violet Scarf (XL) + 5000805635304 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ucla Gold Beanie (S) + Ucla Gold Beanie (S) + 5000805635305 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Turkish Rose Boots (M) + Turkish Rose Boots (M) + 5000805635306 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pink Gloves (L) + Pink Gloves (L) + 5000805635307 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Flame Scarf (XL) + Flame Scarf (XL) + 5000805635308 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Islamic Green Beanie (S) + Islamic Green Beanie (S) + 5000805635309 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Blue Boots (M) + Pastel Blue Boots (M) + 5000805635310 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Folly Gloves (L) + Folly Gloves (L) + 5000805635311 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Violet Scarf (XL) + Violet Scarf (XL) + 5000805635312 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Big Dip O’Ruby Beanie (S) + Big Dip O’Ruby Beanie (S) + 5000805635313 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mango Tango Boots (M) + Mango Tango Boots (M) + 5000805635314 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jet Gloves (L) + Jet Gloves (L) + 5000805635315 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Tangerine Scarf (XL) + Dark Tangerine Scarf (XL) + 5000805635316 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tiffany Blue Beanie (S) + Tiffany Blue Beanie (S) + 5000805635317 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Stizza Boots (M) + Stizza Boots (M) + 5000805635318 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Trolley Grey Gloves (L) + Trolley Grey Gloves (L) + 5000805635319 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cornell Red Scarf (XL) + Cornell Red Scarf (XL) + 5000805635320 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Blue Beanie (S) + Pale Blue Beanie (S) + 5000805635321 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Amber (Sae/Ece) Boots (M) + Amber (Sae/Ece) Boots (M) + 5000805635322 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Flavescent Gloves (L) + Flavescent Gloves (L) + 5000805635323 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Violet Scarf (XL) + Violet Scarf (XL) + 5000805635324 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lime Green Beanie (S) + Lime Green Beanie (S) + 5000805635325 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + United Nations Blue Boots (M) + United Nations Blue Boots (M) + 5000805635326 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hollywood Cerise Gloves (L) + Hollywood Cerise Gloves (L) + 5000805635327 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + China Pink Scarf (XL) + China Pink Scarf (XL) + 5000805635328 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Patriarch Beanie (S) + Patriarch Beanie (S) + 5000805635329 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pakistan Green Boots (M) + Pakistan Green Boots (M) + 5000805635330 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fern Green Gloves (L) + Fern Green Gloves (L) + 5000805635331 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Orchid Scarf (XL) + Medium Orchid Scarf (XL) + 5000805635332 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Navy Blue Beanie (S) + Navy Blue Beanie (S) + 5000805635333 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Pink Boots (M) + Lavender Pink Boots (M) + 5000805635334 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yale Blue Gloves (L) + Yale Blue Gloves (L) + 5000805635335 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Msu Green Scarf (XL) + Msu Green Scarf (XL) + 5000805635336 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Apple Green Beanie (S) + Apple Green Beanie (S) + 5000805635337 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bole Boots (M) + Bole Boots (M) + 5000805635338 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Urobilin Gloves (L) + Urobilin Gloves (L) + 5000805635339 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Zaffre Scarf (XL) + Zaffre Scarf (XL) + 5000805635340 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pink Lace Beanie (S) + Pink Lace Beanie (S) + 5000805635341 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Cyan Boots (M) + Light Cyan Boots (M) + 5000805635342 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Peridot Gloves (L) + Peridot Gloves (L) + 5000805635343 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Prussian Blue Scarf (XL) + Prussian Blue Scarf (XL) + 5000805635344 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wisteria Beanie (S) + Wisteria Beanie (S) + 5000805635345 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bubble Gum Boots (M) + Bubble Gum Boots (M) + 5000805635346 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Razzmatazz Gloves (L) + Razzmatazz Gloves (L) + 5000805635347 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sea Green Scarf (XL) + Sea Green Scarf (XL) + 5000805635348 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Raspberry Rose Beanie (S) + Raspberry Rose Beanie (S) + 5000805635349 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mauvelous Boots (M) + Mauvelous Boots (M) + 5000805635350 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ucla Blue Gloves (L) + Ucla Blue Gloves (L) + 5000805635351 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Ebony Scarf (XL) + Rose Ebony Scarf (XL) + 5000805635352 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Candy Pink Beanie (S) + Candy Pink Beanie (S) + 5000805635353 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Indigo Boots (M) + Lavender Indigo Boots (M) + 5000805635354 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Plum Gloves (L) + Plum Gloves (L) + 5000805635355 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Red Scarf (XL) + Dark Red Scarf (XL) + 5000805635356 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Candy Apple Red Beanie (S) + Dark Candy Apple Red Beanie (S) + 5000805635357 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Antique Brass Boots (M) + Antique Brass Boots (M) + 5000805635358 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Orange Gloves (L) + Pastel Orange Gloves (L) + 5000805635359 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Salmon Scarf (XL) + Light Salmon Scarf (XL) + 5000805635360 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Fuchsia Pink Beanie (S) + Light Fuchsia Pink Beanie (S) + 5000805635361 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lime (X11 Green) Boots (M) + Lime (X11 Green) Boots (M) + 5000805635362 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Raw Umber Gloves (L) + Raw Umber Gloves (L) + 5000805635363 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carmine Pink Scarf (XL) + Carmine Pink Scarf (XL) + 5000805635364 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sandstorm Beanie (S) + Sandstorm Beanie (S) + 5000805635365 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red-Brown Boots (M) + Red-Brown Boots (M) + 5000805635366 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Goldenrod Gloves (L) + Pale Goldenrod Gloves (L) + 5000805635367 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Phthalo Green Scarf (XL) + Phthalo Green Scarf (XL) + 5000805635368 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Tuscan Red Beanie (S) + Medium Tuscan Red Beanie (S) + 5000805635369 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Isabelline Boots (M) + Isabelline Boots (M) + 5000805635370 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Pastel Purple Gloves (L) + Light Pastel Purple Gloves (L) + 5000805635371 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Steel Blue Scarf (XL) + Steel Blue Scarf (XL) + 5000805635372 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ruddy Pink Beanie (S) + Ruddy Pink Beanie (S) + 5000805635373 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Shocking Pink Boots (M) + Shocking Pink Boots (M) + 5000805635374 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Spiro Disco Ball Gloves (L) + Spiro Disco Ball Gloves (L) + 5000805635375 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vanilla Scarf (XL) + Vanilla Scarf (XL) + 5000805635376 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mardi Gras Beanie (S) + Mardi Gras Beanie (S) + 5000805635377 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wild Strawberry Boots (M) + Wild Strawberry Boots (M) + 5000805635378 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Outer Space Gloves (L) + Outer Space Gloves (L) + 5000805635379 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Almond Scarf (XL) + Almond Scarf (XL) + 5000805635380 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sky Magenta Beanie (S) + Sky Magenta Beanie (S) + 5000805635381 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Boots (M) + Lavender Boots (M) + 5000805635382 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Up Forest Green Gloves (L) + Up Forest Green Gloves (L) + 5000805635383 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Turquoise Blue Scarf (XL) + Turquoise Blue Scarf (XL) + 5000805635384 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cerulean Blue Beanie (S) + Cerulean Blue Beanie (S) + 5000805635385 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wild Watermelon Boots (M) + Wild Watermelon Boots (M) + 5000805635386 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Quartz Gloves (L) + Quartz Gloves (L) + 5000805635387 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fuchsia Scarf (XL) + Fuchsia Scarf (XL) + 5000805635388 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brandeis Blue Beanie (S) + Brandeis Blue Beanie (S) + 5000805635389 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Shamrock Green Boots (M) + Shamrock Green Boots (M) + 5000805635390 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Battleship Grey Gloves (L) + Battleship Grey Gloves (L) + 5000805635391 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Ruby Scarf (XL) + Deep Ruby Scarf (XL) + 5000805635392 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vermilion Beanie (S) + Vermilion Beanie (S) + 5000805635393 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Moccasin Boots (M) + Moccasin Boots (M) + 5000805635394 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple Heart Gloves (L) + Purple Heart Gloves (L) + 5000805635395 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cinereous Scarf (XL) + Cinereous Scarf (XL) + 5000805635396 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ube Beanie (S) + Ube Beanie (S) + 5000805635397 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Up Maroon Boots (M) + Up Maroon Boots (M) + 5000805635398 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Blue Gloves (L) + Dark Blue Gloves (L) + 5000805635399 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Tuscan Red Scarf (XL) + Deep Tuscan Red Scarf (XL) + 5000805635400 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Egyptian Blue Beanie (S) + Egyptian Blue Beanie (S) + 5000805635401 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Tan Boots (M) + Dark Tan Boots (M) + 5000805635402 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Olive Gloves (L) + Olive Gloves (L) + 5000805635403 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Champagne Scarf (XL) + Champagne Scarf (XL) + 5000805635404 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dollar Bill Beanie (S) + Dollar Bill Beanie (S) + 5000805635405 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Orange (Color Wheel) Boots (M) + Orange (Color Wheel) Boots (M) + 5000805635406 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Carmine Pink Gloves (L) + Deep Carmine Pink Gloves (L) + 5000805635407 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bone Scarf (XL) + Bone Scarf (XL) + 5000805635408 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Napier Green Beanie (S) + Napier Green Beanie (S) + 5000805635409 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Cornflower Blue Boots (M) + Pale Cornflower Blue Boots (M) + 5000805635410 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jade Gloves (L) + Jade Gloves (L) + 5000805635411 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cherry Scarf (XL) + Cherry Scarf (XL) + 5000805635412 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Purple Beanie (S) + Medium Purple Beanie (S) + 5000805635413 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Raspberry Pink Boots (M) + Raspberry Pink Boots (M) + 5000805635414 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fuzzy Wuzzy Gloves (L) + Fuzzy Wuzzy Gloves (L) + 5000805635415 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tea Rose Scarf (XL) + Tea Rose Scarf (XL) + 5000805635416 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lapis Lazuli Beanie (S) + Lapis Lazuli Beanie (S) + 5000805635417 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Twilight Lavender Boots (M) + Twilight Lavender Boots (M) + 5000805635418 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Redwood Gloves (L) + Redwood Gloves (L) + 5000805635419 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Indian Red Scarf (XL) + Indian Red Scarf (XL) + 5000805635420 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lawn Green Beanie (S) + Lawn Green Beanie (S) + 5000805635421 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Crimson Boots (M) + Electric Crimson Boots (M) + 5000805635422 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Violet (Color Wheel) Gloves (L) + Violet (Color Wheel) Gloves (L) + 5000805635423 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tenné Scarf (XL) + Tenné Scarf (XL) + 5000805635424 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Denim Beanie (S) + Denim Beanie (S) + 5000805635425 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Apricot Boots (M) + Apricot Boots (M) + 5000805635426 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ebony Gloves (L) + Ebony Gloves (L) + 5000805635427 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wheat Scarf (XL) + Wheat Scarf (XL) + 5000805635428 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Carmine Beanie (S) + Medium Carmine Beanie (S) + 5000805635429 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Raspberry Glace Boots (M) + Raspberry Glace Boots (M) + 5000805635430 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tumbleweed Gloves (L) + Tumbleweed Gloves (L) + 5000805635431 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yellow Scarf (XL) + Yellow Scarf (XL) + 5000805635432 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Slate Blue Beanie (S) + Medium Slate Blue Beanie (S) + 5000805635433 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bazaar Boots (M) + Bazaar Boots (M) + 5000805635434 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fallow Gloves (L) + Fallow Gloves (L) + 5000805635435 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pistachio Scarf (XL) + Pistachio Scarf (XL) + 5000805635436 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Air Superiority Blue Beanie (S) + Air Superiority Blue Beanie (S) + 5000805635437 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sacramento State Green Boots (M) + Sacramento State Green Boots (M) + 5000805635438 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green Gloves (L) + Green Gloves (L) + 5000805635439 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Scarf (XL) + Rose Scarf (XL) + 5000805635440 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Old Rose Beanie (S) + Old Rose Beanie (S) + 5000805635441 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carmine (M&P) Boots (M) + Carmine (M&P) Boots (M) + 5000805635442 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Honolulu Blue Gloves (L) + Honolulu Blue Gloves (L) + 5000805635443 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Maroon (Html/Css) Scarf (XL) + Maroon (Html/Css) Scarf (XL) + 5000805635444 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue-Green Beanie (S) + Blue-Green Beanie (S) + 5000805635445 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Quartz Boots (M) + Rose Quartz Boots (M) + 5000805635446 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Black Gloves (L) + Black Gloves (L) + 5000805635447 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Black Bean Scarf (XL) + Black Bean Scarf (XL) + 5000805635448 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Lavender Beanie (S) + Pale Lavender Beanie (S) + 5000805635449 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tangerine Boots (M) + Tangerine Boots (M) + 5000805635450 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Royal Yellow Gloves (L) + Royal Yellow Gloves (L) + 5000805635451 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + India Green Scarf (XL) + India Green Scarf (XL) + 5000805635452 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Peru Beanie (S) + Peru Beanie (S) + 5000805635453 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cosmic Latte Boots (M) + Cosmic Latte Boots (M) + 5000805635454 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red Devil Gloves (L) + Red Devil Gloves (L) + 5000805635455 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yellow Scarf (XL) + Yellow Scarf (XL) + 5000805635456 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Daffodil Beanie (S) + Daffodil Beanie (S) + 5000805635457 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Magenta Boots (M) + Pastel Magenta Boots (M) + 5000805635458 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Flax Gloves (L) + Flax Gloves (L) + 5000805635459 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Fuchsia Scarf (XL) + Deep Fuchsia Scarf (XL) + 5000805635460 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Red Beanie (S) + Copper Red Beanie (S) + 5000805635461 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sunglow Boots (M) + Sunglow Boots (M) + 5000805635462 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bistre Gloves (L) + Bistre Gloves (L) + 5000805635463 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Café Au Lait Scarf (XL) + Café Au Lait Scarf (XL) + 5000805635464 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rajah Beanie (S) + Rajah Beanie (S) + 5000805635465 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Kenyan Copper Boots (M) + Kenyan Copper Boots (M) + 5000805635466 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Turquoise Green Gloves (L) + Turquoise Green Gloves (L) + 5000805635467 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Burnt Umber Scarf (XL) + Burnt Umber Scarf (XL) + 5000805635468 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Beanie (S) + Copper Beanie (S) + 5000805635469 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tangelo Boots (M) + Tangelo Boots (M) + 5000805635470 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cinnabar Gloves (L) + Cinnabar Gloves (L) + 5000805635471 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Usafa Blue Scarf (XL) + Usafa Blue Scarf (XL) + 5000805635472 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Slate Gray Beanie (S) + Light Slate Gray Beanie (S) + 5000805635473 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sap Green Boots (M) + Sap Green Boots (M) + 5000805635474 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Periwinkle Gloves (L) + Periwinkle Gloves (L) + 5000805635475 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Olive Drab #7 Scarf (XL) + Olive Drab #7 Scarf (XL) + 5000805635476 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Robin Egg Blue Beanie (S) + Robin Egg Blue Beanie (S) + 5000805635477 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pansy Purple Boots (M) + Pansy Purple Boots (M) + 5000805635478 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Slate Blue Gloves (L) + Slate Blue Gloves (L) + 5000805635479 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yellow Scarf (XL) + Yellow Scarf (XL) + 5000805635480 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Brown Beanie (S) + Pale Brown Beanie (S) + 5000805635481 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tea Rose Boots (M) + Tea Rose Boots (M) + 5000805635482 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + International Orange Gloves (L) + International Orange Gloves (L) + 5000805635483 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Midnight Blue Scarf (XL) + Dark Midnight Blue Scarf (XL) + 5000805635484 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Salmon Beanie (S) + Dark Salmon Beanie (S) + 5000805635485 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Congo Pink Boots (M) + Congo Pink Boots (M) + 5000805635486 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Ultramarine Gloves (L) + Electric Ultramarine Gloves (L) + 5000805635487 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Antique Fuchsia Scarf (XL) + Antique Fuchsia Scarf (XL) + 5000805635488 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Terra Cotta Beanie (S) + Terra Cotta Beanie (S) + 5000805635489 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Earth Yellow Boots (M) + Earth Yellow Boots (M) + 5000805635490 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Olivine Gloves (L) + Olivine Gloves (L) + 5000805635491 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Neon Green Scarf (XL) + Neon Green Scarf (XL) + 5000805635492 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bleu De France Beanie (S) + Bleu De France Beanie (S) + 5000805635493 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Granny Smith Apple Boots (M) + Granny Smith Apple Boots (M) + 5000805635494 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tiger'S Eye Gloves (L) + Tiger'S Eye Gloves (L) + 5000805635495 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + School Bus Yellow Scarf (XL) + School Bus Yellow Scarf (XL) + 5000805635496 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Field Drab Beanie (S) + Field Drab Beanie (S) + 5000805635497 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blanched Almond Boots (M) + Blanched Almond Boots (M) + 5000805635498 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Old Lavender Gloves (L) + Old Lavender Gloves (L) + 5000805635499 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Liver Scarf (XL) + Liver Scarf (XL) + 5000805635500 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chocolate Beanie (S) + Chocolate Beanie (S) + 5000805635501 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Peach-Yellow Boots (M) + Peach-Yellow Boots (M) + 5000805635502 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carnation Pink Gloves (L) + Carnation Pink Gloves (L) + 5000805635503 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Taupe Scarf (XL) + Dark Taupe Scarf (XL) + 5000805635504 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Mist Beanie (S) + Lavender Mist Beanie (S) + 5000805635505 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Pastel Blue Boots (M) + Dark Pastel Blue Boots (M) + 5000805635506 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chocolate Gloves (L) + Chocolate Gloves (L) + 5000805635507 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Slate Gray Scarf (XL) + Slate Gray Scarf (XL) + 5000805635508 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sapphire Beanie (S) + Sapphire Beanie (S) + 5000805635509 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Safety Orange (Blaze Orange) Boots (M) + Safety Orange (Blaze Orange) Boots (M) + 5000805635510 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Papaya Whip Gloves (L) + Papaya Whip Gloves (L) + 5000805635511 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + New York Pink Scarf (XL) + New York Pink Scarf (XL) + 5000805635512 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blush Beanie (S) + Blush Beanie (S) + 5000805635513 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Resolution Blue Boots (M) + Resolution Blue Boots (M) + 5000805635514 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Scarlet Gloves (L) + Dark Scarlet Gloves (L) + 5000805635515 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fluorescent Orange Scarf (XL) + Fluorescent Orange Scarf (XL) + 5000805635516 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chrome Yellow Beanie (S) + Chrome Yellow Beanie (S) + 5000805635517 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Blue Boots (M) + Medium Blue Boots (M) + 5000805635518 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Arylide Yellow Gloves (L) + Arylide Yellow Gloves (L) + 5000805635519 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Candy Apple Red Scarf (XL) + Candy Apple Red Scarf (XL) + 5000805635520 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Baby Pink Beanie (S) + Baby Pink Beanie (S) + 5000805635521 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Neon Carrot Boots (M) + Neon Carrot Boots (M) + 5000805635522 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Psychedelic Purple Gloves (L) + Psychedelic Purple Gloves (L) + 5000805635523 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rackley Scarf (XL) + Rackley Scarf (XL) + 5000805635524 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tropical Rain Forest Beanie (S) + Tropical Rain Forest Beanie (S) + 5000805635525 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green (Html/Css Green) Boots (M) + Green (Html/Css Green) Boots (M) + 5000805635526 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cardinal Gloves (L) + Cardinal Gloves (L) + 5000805635527 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Turquoise Scarf (XL) + Bright Turquoise Scarf (XL) + 5000805635528 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Beanie (S) + Blue Beanie (S) + 5000805635529 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Robin Egg Blue Boots (M) + Pale Robin Egg Blue Boots (M) + 5000805635530 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Lime Gloves (L) + French Lime Gloves (L) + 5000805635531 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Persian Blue Scarf (XL) + Medium Persian Blue Scarf (XL) + 5000805635532 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Old Mauve Beanie (S) + Old Mauve Beanie (S) + 5000805635533 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Desert Sand Boots (M) + Desert Sand Boots (M) + 5000805635534 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chartreuse Gloves (L) + Chartreuse Gloves (L) + 5000805635535 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bondi Blue Scarf (XL) + Bondi Blue Scarf (XL) + 5000805635536 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Olive Drab (Olive Drab #3) Beanie (S) + Olive Drab (Olive Drab #3) Beanie (S) + 5000805635537 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Columbia Blue Boots (M) + Columbia Blue Boots (M) + 5000805635538 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tangerine Yellow Gloves (L) + Tangerine Yellow Gloves (L) + 5000805635539 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Red Ochre Scarf (XL) + Light Red Ochre Scarf (XL) + 5000805635540 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Peach Puff Beanie (S) + Peach Puff Beanie (S) + 5000805635541 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Licorice Boots (M) + Licorice Boots (M) + 5000805635542 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Black Gloves (L) + Rich Black Gloves (L) + 5000805635543 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chamoisee Scarf (XL) + Chamoisee Scarf (XL) + 5000805635544 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Yellow Beanie (S) + Light Yellow Beanie (S) + 5000805635545 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Emerald Boots (M) + Emerald Boots (M) + 5000805635546 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Blue Gloves (L) + French Blue Gloves (L) + 5000805635547 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cerise Pink Scarf (XL) + Cerise Pink Scarf (XL) + 5000805635548 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Indigo Beanie (S) + Indigo Beanie (S) + 5000805635549 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Violet Boots (M) + Violet Boots (M) + 5000805635550 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadmium Green Gloves (L) + Cadmium Green Gloves (L) + 5000805635551 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Midnight Blue Scarf (XL) + Midnight Blue Scarf (XL) + 5000805635552 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ceil Beanie (S) + Ceil Beanie (S) + 5000805635553 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + International Orange (Golden Gate Bridge) Boots (M) + International Orange (Golden Gate Bridge) Boots (M) + 5000805635554 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Iceberg Gloves (L) + Iceberg Gloves (L) + 5000805635555 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Purple Scarf (XL) + Pastel Purple Scarf (XL) + 5000805635556 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Crimson Glory Beanie (S) + Crimson Glory Beanie (S) + 5000805635557 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Cerulean Boots (M) + Bright Cerulean Boots (M) + 5000805635558 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Non-Photo Blue Gloves (L) + Non-Photo Blue Gloves (L) + 5000805635559 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Royal Purple Scarf (XL) + Royal Purple Scarf (XL) + 5000805635560 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Royal Azure Beanie (S) + Royal Azure Beanie (S) + 5000805635561 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Champagne Boots (M) + Deep Champagne Boots (M) + 5000805635562 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Carrot Orange Gloves (L) + Deep Carrot Orange Gloves (L) + 5000805635563 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Azure Scarf (XL) + Azure Scarf (XL) + 5000805635564 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Ruby Beanie (S) + Medium Ruby Beanie (S) + 5000805635565 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Canary Yellow Boots (M) + Canary Yellow Boots (M) + 5000805635566 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Venetian Red Gloves (L) + Venetian Red Gloves (L) + 5000805635567 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Old Lace Scarf (XL) + Old Lace Scarf (XL) + 5000805635568 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mountbatten Pink Beanie (S) + Mountbatten Pink Beanie (S) + 5000805635569 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fawn Boots (M) + Fawn Boots (M) + 5000805635570 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Salmon Gloves (L) + Salmon Gloves (L) + 5000805635571 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cameo Pink Scarf (XL) + Cameo Pink Scarf (XL) + 5000805635572 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Melon Beanie (S) + Melon Beanie (S) + 5000805635573 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wood Brown Boots (M) + Wood Brown Boots (M) + 5000805635574 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Royal Blue Gloves (L) + Royal Blue Gloves (L) + 5000805635575 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Cerulean Scarf (XL) + Pale Cerulean Scarf (XL) + 5000805635576 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brown Beanie (S) + Brown Beanie (S) + 5000805635577 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Plum Boots (M) + Pale Plum Boots (M) + 5000805635578 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Arsenic Gloves (L) + Arsenic Gloves (L) + 5000805635579 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Air Force Blue Scarf (XL) + Air Force Blue Scarf (XL) + 5000805635580 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Maroon Beanie (S) + Maroon Beanie (S) + 5000805635581 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Imperial Blue Boots (M) + Imperial Blue Boots (M) + 5000805635582 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Purple Gloves (L) + Lavender Purple Gloves (L) + 5000805635583 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + British Racing Green Scarf (XL) + British Racing Green Scarf (XL) + 5000805635584 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Violet Beanie (S) + Electric Violet Beanie (S) + 5000805635585 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Golden Brown Boots (M) + Golden Brown Boots (M) + 5000805635586 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadet Blue Gloves (L) + Cadet Blue Gloves (L) + 5000805635587 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Harvest Gold Scarf (XL) + Harvest Gold Scarf (XL) + 5000805635588 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Myrtle Beanie (S) + Myrtle Beanie (S) + 5000805635589 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Otter Brown Boots (M) + Otter Brown Boots (M) + 5000805635590 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Grullo Gloves (L) + Grullo Gloves (L) + 5000805635591 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Laser Lemon Scarf (XL) + Laser Lemon Scarf (XL) + 5000805635592 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ball Blue Beanie (S) + Ball Blue Beanie (S) + 5000805635593 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Madder Boots (M) + Rose Madder Boots (M) + 5000805635594 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cerulean Frost Gloves (L) + Cerulean Frost Gloves (L) + 5000805635595 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Green Scarf (XL) + Electric Green Scarf (XL) + 5000805635596 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dandelion Beanie (S) + Dandelion Beanie (S) + 5000805635597 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sky Blue Boots (M) + Sky Blue Boots (M) + 5000805635598 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Charm Pink Gloves (L) + Charm Pink Gloves (L) + 5000805635599 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Bonbon Scarf (XL) + Rose Bonbon Scarf (XL) + 5000805635600 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Aqua Beanie (S) + Pale Aqua Beanie (S) + 5000805635601 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tickle Me Pink Boots (M) + Tickle Me Pink Boots (M) + 5000805635602 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Cerise Gloves (L) + Deep Cerise Gloves (L) + 5000805635603 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Peach Scarf (XL) + Peach Scarf (XL) + 5000805635604 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Orange (Web Color) Beanie (S) + Orange (Web Color) Beanie (S) + 5000805635605 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Duke Blue Boots (M) + Duke Blue Boots (M) + 5000805635606 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vermilion Gloves (L) + Vermilion Gloves (L) + 5000805635607 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Celadon Scarf (XL) + Celadon Scarf (XL) + 5000805635608 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Android Green Beanie (S) + Android Green Beanie (S) + 5000805635609 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dartmouth Green Boots (M) + Dartmouth Green Boots (M) + 5000805635610 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Upsdell Red Gloves (L) + Upsdell Red Gloves (L) + 5000805635611 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Red-Violet Scarf (XL) + Pale Red-Violet Scarf (XL) + 5000805635612 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cinnamon Beanie (S) + Cinnamon Beanie (S) + 5000805635613 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Baby Blue Boots (M) + Baby Blue Boots (M) + 5000805635614 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hot Pink Gloves (L) + Hot Pink Gloves (L) + 5000805635615 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cerulean Scarf (XL) + Cerulean Scarf (XL) + 5000805635616 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fandango Beanie (S) + Fandango Beanie (S) + 5000805635617 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Forest Green Boots (M) + Forest Green Boots (M) + 5000805635618 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mountain Meadow Gloves (L) + Mountain Meadow Gloves (L) + 5000805635619 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Blue Scarf (XL) + Persian Blue Scarf (XL) + 5000805635620 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mahogany Beanie (S) + Mahogany Beanie (S) + 5000805635621 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gray (X11 Gray) Boots (M) + Gray (X11 Gray) Boots (M) + 5000805635622 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Saffron Gloves (L) + Saffron Gloves (L) + 5000805635623 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Coffee Scarf (XL) + Deep Coffee Scarf (XL) + 5000805635624 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + English Lavender Beanie (S) + English Lavender Beanie (S) + 5000805635625 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Sienna Boots (M) + Dark Sienna Boots (M) + 5000805635626 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cyan Gloves (L) + Cyan Gloves (L) + 5000805635627 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Magenta Scarf (XL) + Deep Magenta Scarf (XL) + 5000805635628 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Violet Beanie (S) + Pastel Violet Beanie (S) + 5000805635629 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Kelly Green Boots (M) + Kelly Green Boots (M) + 5000805635630 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Camouflage Green Gloves (L) + Camouflage Green Gloves (L) + 5000805635631 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Firebrick Scarf (XL) + Firebrick Scarf (XL) + 5000805635632 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Pastel Green Beanie (S) + Dark Pastel Green Beanie (S) + 5000805635633 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cordovan Boots (M) + Cordovan Boots (M) + 5000805635634 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Telemagenta Gloves (L) + Telemagenta Gloves (L) + 5000805635635 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cool Grey Scarf (XL) + Cool Grey Scarf (XL) + 5000805635636 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chinese Red Beanie (S) + Chinese Red Beanie (S) + 5000805635637 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mulberry Boots (M) + Mulberry Boots (M) + 5000805635638 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple Gloves (L) + Purple Gloves (L) + 5000805635639 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Chestnut Scarf (XL) + Deep Chestnut Scarf (XL) + 5000805635640 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Anti-Flash White Beanie (S) + Anti-Flash White Beanie (S) + 5000805635641 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carmine Boots (M) + Carmine Boots (M) + 5000805635642 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Aurometalsaurus Gloves (L) + Aurometalsaurus Gloves (L) + 5000805635643 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Orchid Scarf (XL) + Orchid Scarf (XL) + 5000805635644 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Viridian Beanie (S) + Viridian Beanie (S) + 5000805635645 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Khaki (Light Khaki) Boots (M) + Khaki (Light Khaki) Boots (M) + 5000805635646 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Falu Red Gloves (L) + Falu Red Gloves (L) + 5000805635647 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Xanadu Scarf (XL) + Xanadu Scarf (XL) + 5000805635648 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Flamingo Pink Beanie (S) + Flamingo Pink Beanie (S) + 5000805635649 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Midnight Green (Eagle Green) Boots (M) + Midnight Green (Eagle Green) Boots (M) + 5000805635650 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Magenta Gloves (L) + Dark Magenta Gloves (L) + 5000805635651 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Magenta Scarf (XL) + Magenta Scarf (XL) + 5000805635652 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Nadeshiko Pink Beanie (S) + Nadeshiko Pink Beanie (S) + 5000805635653 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Alabama Crimson Boots (M) + Alabama Crimson Boots (M) + 5000805635654 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Cornflower Blue Gloves (L) + Light Cornflower Blue Gloves (L) + 5000805635655 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Pink Scarf (XL) + Pastel Pink Scarf (XL) + 5000805635656 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Pink Beanie (S) + Pale Pink Beanie (S) + 5000805635657 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rosewood Boots (M) + Rosewood Boots (M) + 5000805635658 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cobalt Gloves (L) + Cobalt Gloves (L) + 5000805635659 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Turquoise Scarf (XL) + Medium Turquoise Scarf (XL) + 5000805635660 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Indigo Beanie (S) + Indigo Beanie (S) + 5000805635661 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Sea Green Boots (M) + Medium Sea Green Boots (M) + 5000805635662 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red Gloves (L) + Red Gloves (L) + 5000805635663 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Aquamarine Scarf (XL) + Aquamarine Scarf (XL) + 5000805635664 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mint Cream Beanie (S) + Mint Cream Beanie (S) + 5000805635665 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + June Bud Boots (M) + June Bud Boots (M) + 5000805635666 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + La Salle Green Gloves (L) + La Salle Green Gloves (L) + 5000805635667 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Lilac Scarf (XL) + Rich Lilac Scarf (XL) + 5000805635668 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Peach Beanie (S) + Peach Beanie (S) + 5000805635669 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Powder Blue Boots (M) + Dark Powder Blue Boots (M) + 5000805635670 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ultramarine Gloves (L) + Ultramarine Gloves (L) + 5000805635671 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + North Texas Green Scarf (XL) + North Texas Green Scarf (XL) + 5000805635672 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Antique Ruby Beanie (S) + Antique Ruby Beanie (S) + 5000805635673 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rosy Brown Boots (M) + Rosy Brown Boots (M) + 5000805635674 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Linen Gloves (L) + Linen Gloves (L) + 5000805635675 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bottle Green Scarf (XL) + Bottle Green Scarf (XL) + 5000805635676 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Jungle Green Beanie (S) + Deep Jungle Green Beanie (S) + 5000805635677 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Teal Green Boots (M) + Teal Green Boots (M) + 5000805635678 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red-Violet Gloves (L) + Red-Violet Gloves (L) + 5000805635679 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Candy Apple Red Scarf (XL) + Medium Candy Apple Red Scarf (XL) + 5000805635680 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Apricot Beanie (S) + Light Apricot Beanie (S) + 5000805635681 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Carmine Pink Boots (M) + Light Carmine Pink Boots (M) + 5000805635682 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Languid Lavender Gloves (L) + Languid Lavender Gloves (L) + 5000805635683 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Usc Cardinal Scarf (XL) + Usc Cardinal Scarf (XL) + 5000805635684 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Floral White Beanie (S) + Floral White Beanie (S) + 5000805635685 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Debian Red Boots (M) + Debian Red Boots (M) + 5000805635686 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Taupe Gloves (L) + Taupe Gloves (L) + 5000805635687 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ku Crimson Scarf (XL) + Ku Crimson Scarf (XL) + 5000805635688 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Skobeloff Beanie (S) + Skobeloff Beanie (S) + 5000805635689 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brick Red Boots (M) + Brick Red Boots (M) + 5000805635690 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brilliant Rose Gloves (L) + Brilliant Rose Gloves (L) + 5000805635691 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Orange Scarf (XL) + Dark Orange Scarf (XL) + 5000805635692 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Coral Beanie (S) + Dark Coral Beanie (S) + 5000805635693 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Ube Boots (M) + Bright Ube Boots (M) + 5000805635694 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Regalia Gloves (L) + Regalia Gloves (L) + 5000805635695 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Caput Mortuum Scarf (XL) + Caput Mortuum Scarf (XL) + 5000805635696 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Catalina Blue Beanie (S) + Catalina Blue Beanie (S) + 5000805635697 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Café Noir Boots (M) + Café Noir Boots (M) + 5000805635698 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Naples Yellow Gloves (L) + Naples Yellow Gloves (L) + 5000805635699 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadmium Orange Scarf (XL) + Cadmium Orange Scarf (XL) + 5000805635700 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mordant Red 19 Beanie (S) + Mordant Red 19 Beanie (S) + 5000805635701 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Pink Boots (M) + Light Pink Boots (M) + 5000805635702 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Imperial Blue Gloves (L) + Dark Imperial Blue Gloves (L) + 5000805635703 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Salmon Pink Scarf (XL) + Salmon Pink Scarf (XL) + 5000805635704 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wine Beanie (S) + Wine Beanie (S) + 5000805635705 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + International Orange Boots (M) + International Orange Boots (M) + 5000805635706 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cg Blue Gloves (L) + Cg Blue Gloves (L) + 5000805635707 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ferrari Red Scarf (XL) + Ferrari Red Scarf (XL) + 5000805635708 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Banana Mania Beanie (S) + Banana Mania Beanie (S) + 5000805635709 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Byzantine Boots (M) + Byzantine Boots (M) + 5000805635710 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Palatinate Blue Gloves (L) + Palatinate Blue Gloves (L) + 5000805635711 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Glitter Scarf (XL) + Glitter Scarf (XL) + 5000805635712 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red Beanie (S) + Red Beanie (S) + 5000805635713 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lincoln Green Boots (M) + Lincoln Green Boots (M) + 5000805635714 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Gloves (L) + Blue Gloves (L) + 5000805635715 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Davy'S Grey Scarf (XL) + Davy'S Grey Scarf (XL) + 5000805635716 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brilliant Lavender Beanie (S) + Brilliant Lavender Beanie (S) + 5000805635717 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cool Black Boots (M) + Cool Black Boots (M) + 5000805635718 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Avocado Gloves (L) + Avocado Gloves (L) + 5000805635719 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Carmine Scarf (XL) + Pale Carmine Scarf (XL) + 5000805635720 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yellow Beanie (S) + Yellow Beanie (S) + 5000805635721 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Celestial Blue Boots (M) + Celestial Blue Boots (M) + 5000805635722 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Little Boy Blue Gloves (L) + Little Boy Blue Gloves (L) + 5000805635723 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Camel Scarf (XL) + Camel Scarf (XL) + 5000805635724 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tractor Red Beanie (S) + Tractor Red Beanie (S) + 5000805635725 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tyrian Purple Boots (M) + Tyrian Purple Boots (M) + 5000805635726 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Silver Gloves (L) + Pale Silver Gloves (L) + 5000805635727 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Citrine Scarf (XL) + Citrine Scarf (XL) + 5000805635728 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Raspberry Beanie (S) + Dark Raspberry Beanie (S) + 5000805635729 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Satin Sheen Gold Boots (M) + Satin Sheen Gold Boots (M) + 5000805635730 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Pink Gloves (L) + Dark Pink Gloves (L) + 5000805635731 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rusty Red Scarf (XL) + Rusty Red Scarf (XL) + 5000805635732 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Carmine Beanie (S) + Deep Carmine Beanie (S) + 5000805635733 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Moss Green Boots (M) + Moss Green Boots (M) + 5000805635734 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cambridge Blue Gloves (L) + Cambridge Blue Gloves (L) + 5000805635735 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mode Beige Scarf (XL) + Mode Beige Scarf (XL) + 5000805635736 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carnelian Beanie (S) + Carnelian Beanie (S) + 5000805635737 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sepia Boots (M) + Sepia Boots (M) + 5000805635738 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red Gloves (L) + Red Gloves (L) + 5000805635739 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Alizarin Crimson Scarf (XL) + Alizarin Crimson Scarf (XL) + 5000805635740 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadmium Red Beanie (S) + Cadmium Red Beanie (S) + 5000805635741 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carolina Blue Boots (M) + Carolina Blue Boots (M) + 5000805635742 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Celeste Gloves (L) + Celeste Gloves (L) + 5000805635743 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lion Scarf (XL) + Lion Scarf (XL) + 5000805635744 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Violet Beanie (S) + Dark Violet Beanie (S) + 5000805635745 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Taupe Boots (M) + Light Taupe Boots (M) + 5000805635746 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Auburn Gloves (L) + Auburn Gloves (L) + 5000805635747 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Lilac Scarf (XL) + French Lilac Scarf (XL) + 5000805635748 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + White Beanie (S) + White Beanie (S) + 5000805635749 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Khaki Boots (M) + Light Khaki Boots (M) + 5000805635750 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ghost White Gloves (L) + Ghost White Gloves (L) + 5000805635751 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Green Scarf (XL) + Pale Green Scarf (XL) + 5000805635752 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sinopia Beanie (S) + Sinopia Beanie (S) + 5000805635753 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sunset Boots (M) + Sunset Boots (M) + 5000805635754 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fuchsia Gloves (L) + Fuchsia Gloves (L) + 5000805635755 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ocean Boat Blue Scarf (XL) + Ocean Boat Blue Scarf (XL) + 5000805635756 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Gray Beanie (S) + Light Gray Beanie (S) + 5000805635757 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Jungle Green Boots (M) + Medium Jungle Green Boots (M) + 5000805635758 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Usc Gold Gloves (L) + Usc Gold Gloves (L) + 5000805635759 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Spring Bud Scarf (XL) + Medium Spring Bud Scarf (XL) + 5000805635760 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blizzard Blue Beanie (S) + Blizzard Blue Beanie (S) + 5000805635761 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Spring Bud Boots (M) + Pale Spring Bud Boots (M) + 5000805635762 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Red-Violet Gloves (L) + Medium Red-Violet Gloves (L) + 5000805635763 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Red Scarf (XL) + Persian Red Scarf (XL) + 5000805635764 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fashion Fuchsia Beanie (S) + Fashion Fuchsia Beanie (S) + 5000805635765 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Boots (M) + Blue Boots (M) + 5000805635766 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Office Green Gloves (L) + Office Green Gloves (L) + 5000805635767 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Paris Green Scarf (XL) + Paris Green Scarf (XL) + 5000805635768 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Maize Beanie (S) + Maize Beanie (S) + 5000805635769 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Celadon Blue Boots (M) + Celadon Blue Boots (M) + 5000805635770 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fuchsia Pink Gloves (L) + Fuchsia Pink Gloves (L) + 5000805635771 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Majorelle Blue Scarf (XL) + Majorelle Blue Scarf (XL) + 5000805635772 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Eggplant Beanie (S) + Eggplant Beanie (S) + 5000805635773 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Russet Boots (M) + Russet Boots (M) + 5000805635774 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Glaucous Gloves (L) + Glaucous Gloves (L) + 5000805635775 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tango Pink Scarf (XL) + Tango Pink Scarf (XL) + 5000805635776 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Orchid Beanie (S) + Dark Orchid Beanie (S) + 5000805635777 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sapphire Blue Boots (M) + Sapphire Blue Boots (M) + 5000805635778 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Screamin' Green Gloves (L) + Screamin' Green Gloves (L) + 5000805635779 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Pastel Red Scarf (XL) + Dark Pastel Red Scarf (XL) + 5000805635780 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Smokey Topaz Beanie (S) + Smokey Topaz Beanie (S) + 5000805635781 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lemon Boots (M) + Lemon Boots (M) + 5000805635782 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cerise Gloves (L) + Cerise Gloves (L) + 5000805635783 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Han Purple Scarf (XL) + Han Purple Scarf (XL) + 5000805635784 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Halayà úBe Beanie (S) + Halayà úBe Beanie (S) + 5000805635785 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wenge Boots (M) + Wenge Boots (M) + 5000805635786 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Puce Gloves (L) + Puce Gloves (L) + 5000805635787 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green Scarf (XL) + Green Scarf (XL) + 5000805635788 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Stormcloud Beanie (S) + Stormcloud Beanie (S) + 5000805635789 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Lavender Boots (M) + Dark Lavender Boots (M) + 5000805635790 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fuchsia Rose Gloves (L) + Fuchsia Rose Gloves (L) + 5000805635791 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple Taupe Scarf (XL) + Purple Taupe Scarf (XL) + 5000805635792 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Air Force Blue Beanie (S) + Air Force Blue Beanie (S) + 5000805635793 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Coral Pink Boots (M) + Coral Pink Boots (M) + 5000805635794 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Raspberry Gloves (L) + French Raspberry Gloves (L) + 5000805635795 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Brilliant Lavender Scarf (XL) + Rich Brilliant Lavender Scarf (XL) + 5000805635796 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Bell Beanie (S) + Blue Bell Beanie (S) + 5000805635797 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Copper Boots (M) + Pale Copper Boots (M) + 5000805635798 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Goldenrod Gloves (L) + Goldenrod Gloves (L) + 5000805635799 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ivory Scarf (XL) + Ivory Scarf (XL) + 5000805635800 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Lavender Beanie (S) + Bright Lavender Beanie (S) + 5000805635801 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Seashell Boots (M) + Seashell Boots (M) + 5000805635802 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Green Gloves (L) + Light Green Gloves (L) + 5000805635803 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Orange-Red Scarf (XL) + Orange-Red Scarf (XL) + 5000805635804 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dim Gray Beanie (S) + Dim Gray Beanie (S) + 5000805635805 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Teal Blue Boots (M) + Teal Blue Boots (M) + 5000805635806 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple Pizzazz Gloves (L) + Purple Pizzazz Gloves (L) + 5000805635807 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Maya Blue Scarf (XL) + Maya Blue Scarf (XL) + 5000805635808 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Razzle Dazzle Rose Beanie (S) + Razzle Dazzle Rose Beanie (S) + 5000805635809 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carrot Orange Boots (M) + Carrot Orange Boots (M) + 5000805635810 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Terra Cotta Gloves (L) + Dark Terra Cotta Gloves (L) + 5000805635811 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tuscan Red Scarf (XL) + Tuscan Red Scarf (XL) + 5000805635812 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Peach Beanie (S) + Deep Peach Beanie (S) + 5000805635813 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ruddy Brown Boots (M) + Ruddy Brown Boots (M) + 5000805635814 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tea Green Gloves (L) + Tea Green Gloves (L) + 5000805635815 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Golden Yellow Scarf (XL) + Golden Yellow Scarf (XL) + 5000805635816 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Sea Green Beanie (S) + Dark Sea Green Beanie (S) + 5000805635817 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Topaz Boots (M) + Topaz Boots (M) + 5000805635818 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Olive Green Gloves (L) + Dark Olive Green Gloves (L) + 5000805635819 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cornflower Blue Scarf (XL) + Cornflower Blue Scarf (XL) + 5000805635820 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Atomic Tangerine Beanie (S) + Atomic Tangerine Beanie (S) + 5000805635821 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Green Boots (M) + Bright Green Boots (M) + 5000805635822 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cream Gloves (L) + Cream Gloves (L) + 5000805635823 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Buff Scarf (XL) + Buff Scarf (XL) + 5000805635824 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tomato Beanie (S) + Tomato Beanie (S) + 5000805635825 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Antique White Boots (M) + Antique White Boots (M) + 5000805635826 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Champagne Gloves (L) + Medium Champagne Gloves (L) + 5000805635827 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Magenta Scarf (XL) + Magenta Scarf (XL) + 5000805635828 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Shocking Pink Beanie (S) + Shocking Pink Beanie (S) + 5000805635829 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Chestnut Boots (M) + Dark Chestnut Boots (M) + 5000805635830 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pearly Purple Gloves (L) + Pearly Purple Gloves (L) + 5000805635831 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Baby Blue Eyes Scarf (XL) + Baby Blue Eyes Scarf (XL) + 5000805635832 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ruby Beanie (S) + Ruby Beanie (S) + 5000805635833 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Pastel Purple Boots (M) + Dark Pastel Purple Boots (M) + 5000805635834 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Electric Blue Gloves (L) + Dark Electric Blue Gloves (L) + 5000805635835 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Turquoise Scarf (XL) + Dark Turquoise Scarf (XL) + 5000805635836 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Timberwolf Beanie (S) + Timberwolf Beanie (S) + 5000805635837 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Verdigris Boots (M) + Verdigris Boots (M) + 5000805635838 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Byzantium Gloves (L) + Byzantium Gloves (L) + 5000805635839 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Charcoal Scarf (XL) + Charcoal Scarf (XL) + 5000805635840 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Titanium Yellow Beanie (S) + Titanium Yellow Beanie (S) + 5000805635841 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pear Boots (M) + Pear Boots (M) + 5000805635842 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rosso Corsa Gloves (L) + Rosso Corsa Gloves (L) + 5000805635843 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Scarf (XL) + Blue Scarf (XL) + 5000805635844 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Orange Beanie (S) + Orange Beanie (S) + 5000805635845 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Coral Boots (M) + Coral Boots (M) + 5000805635846 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Spring Green Gloves (L) + Dark Spring Green Gloves (L) + 5000805635847 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Wine Dregs Scarf (XL) + Wine Dregs Scarf (XL) + 5000805635848 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cyan Beanie (S) + Cyan Beanie (S) + 5000805635849 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hunter Green Boots (M) + Hunter Green Boots (M) + 5000805635850 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Caribbean Green Gloves (L) + Caribbean Green Gloves (L) + 5000805635851 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mauve Taupe Scarf (XL) + Mauve Taupe Scarf (XL) + 5000805635852 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + American Rose Beanie (S) + American Rose Beanie (S) + 5000805635853 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Burnt Sienna Boots (M) + Burnt Sienna Boots (M) + 5000805635854 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lemon Chiffon Gloves (L) + Lemon Chiffon Gloves (L) + 5000805635855 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Straw Scarf (XL) + Straw Scarf (XL) + 5000805635856 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Beanie (S) + Blue Beanie (S) + 5000805635857 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lust Boots (M) + Lust Boots (M) + 5000805635858 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cg Red Gloves (L) + Cg Red Gloves (L) + 5000805635859 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Royal Blue Scarf (XL) + Royal Blue Scarf (XL) + 5000805635860 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Piggy Pink Beanie (S) + Piggy Pink Beanie (S) + 5000805635861 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Boots (M) + Lavender Boots (M) + 5000805635862 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lemon Lime Gloves (L) + Lemon Lime Gloves (L) + 5000805635863 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chestnut Scarf (XL) + Chestnut Scarf (XL) + 5000805635864 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Taupe Beanie (S) + Pale Taupe Beanie (S) + 5000805635865 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fulvous Boots (M) + Fulvous Boots (M) + 5000805635866 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + White Smoke Gloves (L) + White Smoke Gloves (L) + 5000805635867 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sangria Scarf (XL) + Sangria Scarf (XL) + 5000805635868 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Army Green Beanie (S) + Army Green Beanie (S) + 5000805635869 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Yellow Boots (M) + Electric Yellow Boots (M) + 5000805635870 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Shadow Gloves (L) + Shadow Gloves (L) + 5000805635871 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Taupe Scarf (XL) + Medium Taupe Scarf (XL) + 5000805635872 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green (Color Wheel) (X11 Green) Beanie (S) + Green (Color Wheel) (X11 Green) Beanie (S) + 5000805635873 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bulgarian Rose Boots (M) + Bulgarian Rose Boots (M) + 5000805635874 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Azure Mist/Web Gloves (L) + Azure Mist/Web Gloves (L) + 5000805635875 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ao Scarf (XL) + Ao Scarf (XL) + 5000805635876 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Beanie (S) + Blue Beanie (S) + 5000805635877 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Crimson Boots (M) + Crimson Boots (M) + 5000805635878 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Cyan Gloves (L) + Dark Cyan Gloves (L) + 5000805635879 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Warm Black Scarf (XL) + Warm Black Scarf (XL) + 5000805635880 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Turquoise Beanie (S) + Turquoise Beanie (S) + 5000805635881 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Yellow Boots (M) + Pastel Yellow Boots (M) + 5000805635882 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Scarlet Gloves (L) + Scarlet Gloves (L) + 5000805635883 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brown Scarf (XL) + Brown Scarf (XL) + 5000805635884 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Crimson Beanie (S) + Light Crimson Beanie (S) + 5000805635885 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sand Boots (M) + Sand Boots (M) + 5000805635886 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bittersweet Shimmer Gloves (L) + Bittersweet Shimmer Gloves (L) + 5000805635887 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Seal Brown Scarf (XL) + Seal Brown Scarf (XL) + 5000805635888 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ufo Green Beanie (S) + Ufo Green Beanie (S) + 5000805635889 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Green Boots (M) + Pastel Green Boots (M) + 5000805635890 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Sea Green Gloves (L) + Light Sea Green Gloves (L) + 5000805635891 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Green Scarf (XL) + Persian Green Scarf (XL) + 5000805635892 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Limerick Beanie (S) + Limerick Beanie (S) + 5000805635893 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sandy Taupe Boots (M) + Sandy Taupe Boots (M) + 5000805635894 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Taupe Gloves (L) + Rose Taupe Gloves (L) + 5000805635895 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yellow Orange Scarf (XL) + Yellow Orange Scarf (XL) + 5000805635896 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Cerulean Beanie (S) + Dark Cerulean Beanie (S) + 5000805635897 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Lavender Boots (M) + Rich Lavender Boots (M) + 5000805635898 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Cyan Gloves (L) + Electric Cyan Gloves (L) + 5000805635899 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cal Poly Green Scarf (XL) + Cal Poly Green Scarf (XL) + 5000805635900 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Selective Yellow Beanie (S) + Selective Yellow Beanie (S) + 5000805635901 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Violet-Red Boots (M) + Pale Violet-Red Boots (M) + 5000805635902 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Lavender Magenta Gloves (L) + Medium Lavender Magenta Gloves (L) + 5000805635903 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Chestnut Scarf (XL) + Pale Chestnut Scarf (XL) + 5000805635904 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gainsboro Beanie (S) + Gainsboro Beanie (S) + 5000805635905 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rufous Boots (M) + Rufous Boots (M) + 5000805635906 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Guppie Green Gloves (L) + Guppie Green Gloves (L) + 5000805635907 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Neon Fuchsia Scarf (XL) + Neon Fuchsia Scarf (XL) + 5000805635908 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Harlequin Beanie (S) + Harlequin Beanie (S) + 5000805635909 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Blue Boots (M) + Lavender Blue Boots (M) + 5000805635910 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Malachite Gloves (L) + Malachite Gloves (L) + 5000805635911 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yellow Scarf (XL) + Yellow Scarf (XL) + 5000805635912 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Coffee Beanie (S) + Coffee Beanie (S) + 5000805635913 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Forest Green Boots (M) + Forest Green Boots (M) + 5000805635914 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mint Gloves (L) + Mint Gloves (L) + 5000805635915 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Indigo Scarf (XL) + Electric Indigo Scarf (XL) + 5000805635916 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Yellow-Green Beanie (S) + Yellow-Green Beanie (S) + 5000805635917 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Lavender Boots (M) + Electric Lavender Boots (M) + 5000805635918 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Blush Gloves (L) + Lavender Blush Gloves (L) + 5000805635919 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Moonstone Blue Scarf (XL) + Moonstone Blue Scarf (XL) + 5000805635920 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pearl Aqua Beanie (S) + Pearl Aqua Beanie (S) + 5000805635921 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lavender Rose Boots (M) + Lavender Rose Boots (M) + 5000805635922 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lilac Gloves (L) + Lilac Gloves (L) + 5000805635923 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Electric Blue Scarf (XL) + Electric Blue Scarf (XL) + 5000805635924 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Slate Blue Beanie (S) + Dark Slate Blue Beanie (S) + 5000805635925 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Saffron Boots (M) + Deep Saffron Boots (M) + 5000805635926 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Indigo Gloves (L) + Persian Indigo Gloves (L) + 5000805635927 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Princeton Orange Scarf (XL) + Princeton Orange Scarf (XL) + 5000805635928 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Brown Beanie (S) + Light Brown Beanie (S) + 5000805635929 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Spring Green Boots (M) + Medium Spring Green Boots (M) + 5000805635930 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persian Rose Gloves (L) + Persian Rose Gloves (L) + 5000805635931 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vivid Tangerine Scarf (XL) + Vivid Tangerine Scarf (XL) + 5000805635932 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gold Beanie (S) + Gold Beanie (S) + 5000805635933 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Honeydew Boots (M) + Honeydew Boots (M) + 5000805635934 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rubine Red Gloves (L) + Rubine Red Gloves (L) + 5000805635935 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Eton Blue Scarf (XL) + Eton Blue Scarf (XL) + 5000805635936 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blast-Off Bronze Beanie (S) + Blast-Off Bronze Beanie (S) + 5000805635937 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ruddy Boots (M) + Ruddy Boots (M) + 5000805635938 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Golden Poppy Gloves (L) + Golden Poppy Gloves (L) + 5000805635939 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + True Blue Scarf (XL) + True Blue Scarf (XL) + 5000805635940 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Sky Blue Beanie (S) + Deep Sky Blue Beanie (S) + 5000805635941 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Sky Blue Boots (M) + Light Sky Blue Boots (M) + 5000805635942 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bubbles Gloves (L) + Bubbles Gloves (L) + 5000805635943 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Banana Yellow Scarf (XL) + Banana Yellow Scarf (XL) + 5000805635944 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Salmon Pink Beanie (S) + Light Salmon Pink Beanie (S) + 5000805635945 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Jungle Green Boots (M) + Dark Jungle Green Boots (M) + 5000805635946 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green Gloves (L) + Green Gloves (L) + 5000805635947 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vivid Auburn Scarf (XL) + Vivid Auburn Scarf (XL) + 5000805635948 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Red Beanie (S) + Pastel Red Beanie (S) + 5000805635949 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Onyx Boots (M) + Onyx Boots (M) + 5000805635950 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Boysenberry Gloves (L) + Boysenberry Gloves (L) + 5000805635951 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Burnt Orange Scarf (XL) + Burnt Orange Scarf (XL) + 5000805635952 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Saddle Brown Beanie (S) + Saddle Brown Beanie (S) + 5000805635953 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Lime (Color Wheel) Boots (M) + Lime (Color Wheel) Boots (M) + 5000805635954 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gamboge Gloves (L) + Gamboge Gloves (L) + 5000805635955 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Goldenrod Yellow Scarf (XL) + Light Goldenrod Yellow Scarf (XL) + 5000805635956 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Toolbox Beanie (S) + Toolbox Beanie (S) + 5000805635957 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Harvard Crimson Boots (M) + Harvard Crimson Boots (M) + 5000805635958 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Red-Orange Gloves (L) + Red-Orange Gloves (L) + 5000805635959 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Lava Scarf (XL) + Dark Lava Scarf (XL) + 5000805635960 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brink Pink Beanie (S) + Brink Pink Beanie (S) + 5000805635961 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Magic Mint Boots (M) + Magic Mint Boots (M) + 5000805635962 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Utah Crimson Gloves (L) + Utah Crimson Gloves (L) + 5000805635963 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Portland Orange Scarf (XL) + Portland Orange Scarf (XL) + 5000805635964 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Smalt (Dark Powder Blue) Beanie (S) + Smalt (Dark Powder Blue) Beanie (S) + 5000805635965 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fluorescent Yellow Boots (M) + Fluorescent Yellow Boots (M) + 5000805635966 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green Gloves (L) + Green Gloves (L) + 5000805635967 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sandy Brown Scarf (XL) + Sandy Brown Scarf (XL) + 5000805635968 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Amber Beanie (S) + Amber Beanie (S) + 5000805635969 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Beige Boots (M) + Beige Boots (M) + 5000805635970 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Magenta Gloves (L) + Pale Magenta Gloves (L) + 5000805635971 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gold (Golden) Scarf (XL) + Gold (Golden) Scarf (XL) + 5000805635972 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Unbleached Silk Beanie (S) + Unbleached Silk Beanie (S) + 5000805635973 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Amethyst Boots (M) + Amethyst Boots (M) + 5000805635974 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Aureolin Gloves (L) + Aureolin Gloves (L) + 5000805635975 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Silver Scarf (XL) + Silver Scarf (XL) + 5000805635976 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Vermilion Beanie (S) + Medium Vermilion Beanie (S) + 5000805635977 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Royal Fuchsia Boots (M) + Royal Fuchsia Boots (M) + 5000805635978 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Beau Blue Gloves (L) + Beau Blue Gloves (L) + 5000805635979 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pink-Orange Scarf (XL) + Pink-Orange Scarf (XL) + 5000805635980 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + China Rose Beanie (S) + China Rose Beanie (S) + 5000805635981 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tan Boots (M) + Tan Boots (M) + 5000805635982 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Rose Gloves (L) + Copper Rose Gloves (L) + 5000805635983 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Goldenrod Scarf (XL) + Dark Goldenrod Scarf (XL) + 5000805635984 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Celadon Green Beanie (S) + Celadon Green Beanie (S) + 5000805635985 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Deep Pink Boots (M) + Deep Pink Boots (M) + 5000805635986 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Penny Gloves (L) + Copper Penny Gloves (L) + 5000805635987 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Waterspout Scarf (XL) + Waterspout Scarf (XL) + 5000805635988 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Beaver Beanie (S) + Beaver Beanie (S) + 5000805635989 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Heliotrope Boots (M) + Heliotrope Boots (M) + 5000805635990 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Green Gloves (L) + Dark Green Gloves (L) + 5000805635991 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cocoa Brown Scarf (XL) + Cocoa Brown Scarf (XL) + 5000805635992 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Persimmon Beanie (S) + Persimmon Beanie (S) + 5000805635993 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadet Grey Boots (M) + Cadet Grey Boots (M) + 5000805635994 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pumpkin Gloves (L) + Pumpkin Gloves (L) + 5000805635995 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pale Gold Scarf (XL) + Pale Gold Scarf (XL) + 5000805635996 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Thistle Beanie (S) + Thistle Beanie (S) + 5000805635997 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Old Gold Boots (M) + Old Gold Boots (M) + 5000805635998 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mantis Gloves (L) + Mantis Gloves (L) + 5000805635999 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Pink Scarf (XL) + Bright Pink Scarf (XL) + 5000805636000 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mellow Apricot Beanie (S) + Mellow Apricot Beanie (S) + 5000805636001 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mint Green Boots (M) + Mint Green Boots (M) + 5000805636002 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jungle Green Gloves (L) + Jungle Green Gloves (L) + 5000805636003 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Magnolia Scarf (XL) + Magnolia Scarf (XL) + 5000805636004 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sienna Beanie (S) + Sienna Beanie (S) + 5000805636005 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Coral Red Boots (M) + Coral Red Boots (M) + 5000805636006 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ochre Gloves (L) + Ochre Gloves (L) + 5000805636007 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blond Scarf (XL) + Blond Scarf (XL) + 5000805636008 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Thulian Pink Beanie (S) + Thulian Pink Beanie (S) + 5000805636009 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Palatinate Purple Boots (M) + Palatinate Purple Boots (M) + 5000805636010 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Aquamarine Gloves (L) + Medium Aquamarine Gloves (L) + 5000805636011 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Stil De Grain Yellow Scarf (XL) + Stil De Grain Yellow Scarf (XL) + 5000805636012 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Barn Red Beanie (S) + Barn Red Beanie (S) + 5000805636013 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Brown Boots (M) + Pastel Brown Boots (M) + 5000805636014 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gray Gloves (L) + Gray Gloves (L) + 5000805636015 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rust Scarf (XL) + Rust Scarf (XL) + 5000805636016 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Beige Beanie (S) + French Beige Beanie (S) + 5000805636017 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hooker'S Green Boots (M) + Hooker'S Green Boots (M) + 5000805636018 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Burgundy Gloves (L) + Burgundy Gloves (L) + 5000805636019 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Purple Scarf (XL) + Purple Scarf (XL) + 5000805636020 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gray-Asparagus Beanie (S) + Gray-Asparagus Beanie (S) + 5000805636021 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Alloy Orange Boots (M) + Alloy Orange Boots (M) + 5000805636022 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Taupe Gray Gloves (L) + Taupe Gray Gloves (L) + 5000805636023 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Capri Scarf (XL) + Capri Scarf (XL) + 5000805636024 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Spring Green Beanie (S) + Spring Green Beanie (S) + 5000805636025 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Outrageous Orange Boots (M) + Outrageous Orange Boots (M) + 5000805636026 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Platinum Gloves (L) + Platinum Gloves (L) + 5000805636027 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Spring Bud Scarf (XL) + Spring Bud Scarf (XL) + 5000805636028 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Violet-Blue Beanie (S) + Violet-Blue Beanie (S) + 5000805636029 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Icterine Boots (M) + Icterine Boots (M) + 5000805636030 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Scarlet Gloves (L) + Scarlet Gloves (L) + 5000805636031 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hansa Yellow Scarf (XL) + Hansa Yellow Scarf (XL) + 5000805636032 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Carmine Beanie (S) + Rich Carmine Beanie (S) + 5000805636033 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mauve Boots (M) + Mauve Boots (M) + 5000805636034 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pink Pearl Gloves (L) + Pink Pearl Gloves (L) + 5000805636035 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ua Red Scarf (XL) + Ua Red Scarf (XL) + 5000805636036 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + University Of California Gold Beanie (S) + University Of California Gold Beanie (S) + 5000805636037 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Electric Blue Boots (M) + Medium Electric Blue Boots (M) + 5000805636038 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cornsilk Gloves (L) + Cornsilk Gloves (L) + 5000805636039 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ou Crimson Red Scarf (XL) + Ou Crimson Red Scarf (XL) + 5000805636040 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ginger Beanie (S) + Ginger Beanie (S) + 5000805636041 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Han Blue Boots (M) + Han Blue Boots (M) + 5000805636042 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ultramarine Blue Gloves (L) + Ultramarine Blue Gloves (L) + 5000805636043 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Fluorescent Pink Scarf (XL) + Fluorescent Pink Scarf (XL) + 5000805636044 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ash Grey Beanie (S) + Ash Grey Beanie (S) + 5000805636045 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Byzantium Boots (M) + Dark Byzantium Boots (M) + 5000805636046 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dodger Blue Gloves (L) + Dodger Blue Gloves (L) + 5000805636047 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Smoky Black Scarf (XL) + Smoky Black Scarf (XL) + 5000805636048 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Laurel Green Beanie (S) + Laurel Green Beanie (S) + 5000805636049 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Eggshell Boots (M) + Eggshell Boots (M) + 5000805636050 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Hot Magenta Gloves (L) + Hot Magenta Gloves (L) + 5000805636051 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rifle Green Scarf (XL) + Rifle Green Scarf (XL) + 5000805636052 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rose Gold Beanie (S) + Rose Gold Beanie (S) + 5000805636053 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Snow Boots (M) + Snow Boots (M) + 5000805636054 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Classic Rose Gloves (L) + Classic Rose Gloves (L) + 5000805636055 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Tufts Blue Scarf (XL) + Tufts Blue Scarf (XL) + 5000805636056 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Khaki (Html/Css) Beanie (S) + Khaki (Html/Css) Beanie (S) + 5000805636057 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cherry Blossom Pink Boots (M) + Cherry Blossom Pink Boots (M) + 5000805636058 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bronze Gloves (L) + Bronze Gloves (L) + 5000805636059 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Sea Blue Scarf (XL) + Sea Blue Scarf (XL) + 5000805636060 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Gray (Html/Css Gray) Beanie (S) + Gray (Html/Css Gray) Beanie (S) + 5000805636061 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Copper Boots (M) + Copper Boots (M) + 5000805636062 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Corn Gloves (L) + Corn Gloves (L) + 5000805636063 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Misty Rose Scarf (XL) + Misty Rose Scarf (XL) + 5000805636064 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cotton Candy Beanie (S) + Cotton Candy Beanie (S) + 5000805636065 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Opera Mauve Boots (M) + Opera Mauve Boots (M) + 5000805636066 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Green Gloves (L) + Green Gloves (L) + 5000805636067 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue-Violet Scarf (XL) + Blue-Violet Scarf (XL) + 5000805636068 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Boston University Red Beanie (S) + Boston University Red Beanie (S) + 5000805636069 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + French Rose Boots (M) + French Rose Boots (M) + 5000805636070 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Carmine Red Gloves (L) + Carmine Red Gloves (L) + 5000805636071 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Unmellow Yellow Scarf (XL) + Unmellow Yellow Scarf (XL) + 5000805636072 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Ecru Beanie (S) + Ecru Beanie (S) + 5000805636073 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Blue Boots (M) + Light Blue Boots (M) + 5000805636074 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Payne'S Grey Gloves (L) + Payne'S Grey Gloves (L) + 5000805636075 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Coral Scarf (XL) + Light Coral Scarf (XL) + 5000805636076 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Black Olive Beanie (S) + Black Olive Beanie (S) + 5000805636077 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Asparagus Boots (M) + Asparagus Boots (M) + 5000805636078 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Aqua Gloves (L) + Aqua Gloves (L) + 5000805636079 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Rich Electric Blue Scarf (XL) + Rich Electric Blue Scarf (XL) + 5000805636080 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Vivid Cerise Beanie (S) + Vivid Cerise Beanie (S) + 5000805636081 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Brown Boots (M) + Dark Brown Boots (M) + 5000805636082 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Cadmium Yellow Gloves (L) + Cadmium Yellow Gloves (L) + 5000805636083 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mustard Scarf (XL) + Mustard Scarf (XL) + 5000805636084 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Bright Maroon Beanie (S) + Bright Maroon Beanie (S) + 5000805636085 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Medium Violet-Red Boots (M) + Medium Violet-Red Boots (M) + 5000805636086 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Jonquil Gloves (L) + Jonquil Gloves (L) + 5000805636087 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dogwood Rose Scarf (XL) + Dogwood Rose Scarf (XL) + 5000805636088 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Blue Gray Beanie (S) + Blue Gray Beanie (S) + 5000805636089 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mikado Yellow Boots (M) + Mikado Yellow Boots (M) + 5000805636090 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Chartreuse Gloves (L) + Chartreuse Gloves (L) + 5000805636091 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Raspberry Scarf (XL) + Raspberry Scarf (XL) + 5000805636092 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Brass Beanie (S) + Brass Beanie (S) + 5000805636093 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Light Thulian Pink Boots (M) + Light Thulian Pink Boots (M) + 5000805636094 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pearl Gloves (L) + Pearl Gloves (L) + 5000805636095 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Mellow Yellow Scarf (XL) + Mellow Yellow Scarf (XL) + 5000805636096 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Dark Slate Gray Beanie (S) + Dark Slate Gray Beanie (S) + 5000805636097 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Burlywood Boots (M) + Burlywood Boots (M) + 5000805636098 + ACME + Apparel/Boots + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Alice Blue Gloves (L) + Alice Blue Gloves (L) + 5000805636099 + ACME + Apparel/Gloves + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Plum Scarf (XL) + Plum Scarf (XL) + 5000805636100 + ACME + Apparel/Scarf + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + + Pastel Gray Beanie (S) + Pastel Gray Beanie (S) + 5000805636101 + ACME + Apparel/Beanie + https://www.gs1.org/sites/all/themes/custom/gsone_phoenix_toolkit/images/GS1_Corporate_logo.png + + From 859ea774c5ddf09ebd6c9819896a389c9ed32b20 Mon Sep 17 00:00:00 2001 From: James Every Date: Thu, 22 Mar 2018 20:17:46 +0000 Subject: [PATCH 16/22] Built-in XML validator --- .../supply-chain/evrythng.eif/README.md | 15 ++++++++ .../supply-chain/evrythng.eif/build.gradle | 5 ++- .../XMLProductsLoaderPipeline.java | 6 ++- .../resources/org/schema/gs1.products.xsd | 38 +++++++++++++++++++ .../src/main/ruby/gen_products.rb | 2 +- 5 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/gs1.products.xsd diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index bc670ab..032e3e0 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -4,6 +4,20 @@ Reference implementation. See [evrythng/examples](https://github.com/evrythng/examples/tree/master/customer-solutions/supply-chain) +# Pipelines + +## GS1 XML Product Loader + +See [XMLProductsLoaderPipeline.java](src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java). This pipeline: + +1. reads a products.xml file dropped in [src/data](src/data) folder +2. converts GS1 Product to EVT Product - [ProductProcessor.java](src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java) +3. attempts to load the products into EVT using the `UnreliableProductLoader` +4. products that fail to load are put in the retry queue + +The pipeline loads products in parallel by specifying multiple consumers of the products queue `seda://products-xml?concurrentConsumers=4` + + # Local install When running locally: @@ -50,3 +64,4 @@ Once the pipeline is running (see above) you can generate and load products with Or generate products to a new file: ./gen_products.sh 1000 > /tmp/products.xml + diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index e99cf53..8527396 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.72' +version '0.18.73' apply plugin: 'java' @@ -20,6 +20,9 @@ dependencies { compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.0.11' compile group: 'com.rapid7', name: 'r7insight_java', version: '1.1.39' + compile 'org.xmlunit:xmlunit-core:2.5.1' + compile 'com.google.code.gson:gson:2.8.1' + testCompile group: 'junit', name: 'junit', version: '4.12' testCompile group: 'org.apache.camel', name: 'camel-test', version: '2.18.2' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java index b27708f..2d8caa8 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java @@ -23,7 +23,6 @@ public class XMLProductsLoaderPipeline extends RouteBuilder implements Runnable @Override public void configure() throws Exception { - from("file:src/data") .choice() .when(xpath("namespace-uri(/*) = 'http://schema.org/Product'")) @@ -39,7 +38,10 @@ public void configure() throws Exception { .process(new UnreliableProductLoader()) .errorHandler(deadLetterChannel("seda:errors")); from("seda:errors") - .log("Error!"); + .log("ERROR uploading Product to EVT"); + from("seda:xml-validation") + .to("validator:/org/schema/gs1.products.xsd"); +// .onException(org.xml.sax.SAXParseException.class); } @Override diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/gs1.products.xsd b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/gs1.products.xsd new file mode 100644 index 0000000..f8d3b18 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/org/schema/gs1.products.xsd @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + EAN. See https://en.wikipedia.org/wiki/International_Article_Number_%28EAN%29 + + + + + + + + + + + + + diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb index 51c8db8..6ee2432 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/ruby/gen_products.rb @@ -87,7 +87,7 @@ def products_xml(products) # First argument to this program is number of records to generate def product_count - ARGV.first.to_i + 1 + ARGV.first.to_i end puts products_xml(product_generator().take(product_count)) From 1abc8d023bf6b1791084170dfdae516989c4f77f Mon Sep 17 00:00:00 2001 From: James Every Date: Thu, 22 Mar 2018 20:27:26 +0000 Subject: [PATCH 17/22] Throttling TODO --- customer-solutions/supply-chain/evrythng.eif/build.gradle | 2 +- .../evrythng/demo/supplychain/XMLProductsLoaderPipeline.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 8527396..232f639 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.73' +version '0.18.80' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java index 2d8caa8..bc9073e 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java @@ -9,11 +9,12 @@ /** * Apache Camel Pipeline that reads GS1 Products XML file and * loads them as EVT Products. + * + * TODO convert EVT SDK into endpoint + * protect with throttling http://camel.apache.org/throttler.html */ public class XMLProductsLoaderPipeline extends RouteBuilder implements Runnable { - public static final int REQUESTS_PER_SECOND = 30; - /* Fan out with seda:queue?concurrentConsumers=x */ private static final int WRITER_THREADS = 4; From 00ffa19b79cbe3a338158e007434f8f0b96e49ae Mon Sep 17 00:00:00 2001 From: James Every Date: Tue, 27 Mar 2018 11:47:15 +0100 Subject: [PATCH 18/22] ActiveMQ with persistent queues PoC (#8) * ActiveMQ with persistent queues PoC * Ignore local queues --- .../supply-chain/evrythng.eif/.gitignore | 2 ++ .../supply-chain/evrythng.eif/build.gradle | 5 +++- .../java/com/evrythng/demo/mq/MQBroker.java | 19 +++++++++++++ .../evrythng/demo/supplychain/EVTLoader.java | 8 ++++-- .../XMLProductsLoaderPipeline.java | 28 +++++++++++++++---- .../src/main/java/org/schema/Products.java | 4 ++- 6 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/mq/MQBroker.java diff --git a/customer-solutions/supply-chain/evrythng.eif/.gitignore b/customer-solutions/supply-chain/evrythng.eif/.gitignore index 79c80fa..7b2281e 100644 --- a/customer-solutions/supply-chain/evrythng.eif/.gitignore +++ b/customer-solutions/supply-chain/evrythng.eif/.gitignore @@ -1,7 +1,9 @@ .gradle /build/ /out/ + /src/data +activemq-data/ # Ignore Gradle GUI config gradle-app.setting diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 232f639..fd5297f 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.80' +version '0.18.81' apply plugin: 'java' @@ -23,6 +23,9 @@ dependencies { compile 'org.xmlunit:xmlunit-core:2.5.1' compile 'com.google.code.gson:gson:2.8.1' + compile group: 'org.apache.activemq', name: 'activemq-all', version: '5.4.2' + compile group: 'org.apache.activemq', name: 'activemq-camel', version: '5.15.3' + testCompile group: 'junit', name: 'junit', version: '4.12' testCompile group: 'org.apache.camel', name: 'camel-test', version: '2.18.2' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/mq/MQBroker.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/mq/MQBroker.java new file mode 100644 index 0000000..f42c3c2 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/mq/MQBroker.java @@ -0,0 +1,19 @@ +package com.evrythng.demo.mq; + +import org.apache.activemq.broker.BrokerService; + +/** + * + */ +public class MQBroker implements Runnable { + @Override + public void run() { + BrokerService broker = new BrokerService(); + try { + broker.addConnector("tcp://localhost:61616"); + broker.start(); + } catch (Exception e) { + throw new RuntimeException("Unable to start ActiveMQ Broker", e); + } + } +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java index 2d90a68..2bf7317 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/EVTLoader.java @@ -12,12 +12,16 @@ public abstract class EVTLoader { public static ApiManager newApiManager() { - try { - URL url = new URL(System.getenv("EVT_URL")); + URL url = readEVTUrl(); String EVT_KEY = System.getenv("EVT_KEY"); ApiConfiguration apiConfiguration = new ApiConfiguration(EVT_KEY); apiConfiguration.setUrl(url.toString()); return new ApiManager(apiConfiguration); + } + + private static URL readEVTUrl() { + try { + return new URL(System.getenv("EVT_URL")); } catch (MalformedURLException e) { throw new RuntimeException("Malformed URL in ENV variable EVT_URL", e); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java index bc9073e..2d9b7e5 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java @@ -1,5 +1,6 @@ package com.evrythng.demo.supplychain; +import com.evrythng.demo.mq.MQBroker; import com.evrythng.demo.supplychain.products.ProductProcessor; import com.evrythng.demo.supplychain.products.UnreliableProductLoader; import org.apache.camel.builder.RouteBuilder; @@ -26,20 +27,26 @@ public class XMLProductsLoaderPipeline extends RouteBuilder implements Runnable public void configure() throws Exception { from("file:src/data") .choice() - .when(xpath("namespace-uri(/*) = 'http://schema.org/Product'")) + .when(xpath(String.format("namespace-uri(/*) = '%s'", Products.ns))) .log("Received XML file containing Products") - .split(Products.ns.xpath(Products.XPATH_PRODUCTS)) + .split(Products.namespaces.xpath(Products.XPATH_PRODUCTS)) .unmarshal().jaxb(Products.CONTEXT_PATH) - .to(productsXMLQueue) + .to("activemq:products") .endChoice() .otherwise() .log("Ignoring file"); + from("activemq:products") + .throttle(30) + .asyncDelayed() + .to(productsXMLQueue); from(productsXMLQueueConsumer) .process(new ProductProcessor()) .process(new UnreliableProductLoader()) - .errorHandler(deadLetterChannel("seda:errors")); - from("seda:errors") - .log("ERROR uploading Product to EVT"); + .errorHandler(deadLetterChannel("activemq:com.evrythng.retry")); + from("activemq:com.evrythng.retry") + .log("ERROR uploading Product to EVT") + .delayer(4 * 1000) + .to(productsXMLQueue); from("seda:xml-validation") .to("validator:/org/schema/gs1.products.xsd"); // .onException(org.xml.sax.SAXParseException.class); @@ -47,6 +54,11 @@ public void configure() throws Exception { @Override public void run() { + startMQBroker(); + startPipeline(); + } + + private void startPipeline() { Main main = new Main(); main.addRouteBuilder(new XMLProductsLoaderPipeline()); try { @@ -56,6 +68,10 @@ public void run() { } } + private void startMQBroker() { + new Thread(new MQBroker()).start(); + } + public static void main(String[] args) { new XMLProductsLoaderPipeline().run(); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java index cfb8ae2..8c9a92b 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/org/schema/Products.java @@ -9,7 +9,9 @@ @XmlRootElement(name="Products", namespace = "http://schema.org/Product") public class Products { - public static final Namespaces ns = new Namespaces("p", "http://schema.org/Product"); + public static final String ns = "http://schema.org/Product"; + + public static final Namespaces namespaces = new Namespaces("p", ns); public static final String CONTEXT_PATH = Products.class.getPackage().getName(); From 43e5e4aa702140a43263175222fcc26ff5ccf7e8 Mon Sep 17 00:00:00 2001 From: James Every Date: Tue, 27 Mar 2018 13:56:52 +0100 Subject: [PATCH 19/22] ActiveMQ queues. Retry queue. 75% upload success rate. --- .../supply-chain/evrythng.eif/README.md | 7 ++- .../supply-chain/evrythng.eif/build.gradle | 2 +- .../supply-chain/evrythng.eif/clear_queues.sh | 3 + .../XMLProductsLoaderPipeline.java | 59 ++++++++++++++----- .../supplychain/products/ProductLoader.java | 20 ++++--- .../products/ProductProcessor.java | 8 +-- .../products/UnreliableProductLoader.java | 5 +- 7 files changed, 73 insertions(+), 31 deletions(-) create mode 100755 customer-solutions/supply-chain/evrythng.eif/clear_queues.sh diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index 032e3e0..f60ccfc 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -13,10 +13,15 @@ See [XMLProductsLoaderPipeline.java](src/main/java/com/evrythng/demo/supplychain 1. reads a products.xml file dropped in [src/data](src/data) folder 2. converts GS1 Product to EVT Product - [ProductProcessor.java](src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java) 3. attempts to load the products into EVT using the `UnreliableProductLoader` -4. products that fail to load are put in the retry queue +4. products that fail to load are put in the persisted retry queue The pipeline loads products in parallel by specifying multiple consumers of the products queue `seda://products-xml?concurrentConsumers=4` +## Durability + +The pipeline uses persistent [ActiveMQ queues](http://activemq.apache.org/) in order to store the intermediate steps of a messages journey through the pipeline. If you stop the Pipeline during execution and restart it, pending messages from the previous run will complete. + +Use the script [clear_queues.sh](clear_queues.sh) to clear out the previous messages. # Local install diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index fd5297f..1b27af5 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.81' +version '0.18.82' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/clear_queues.sh b/customer-solutions/supply-chain/evrythng.eif/clear_queues.sh new file mode 100755 index 0000000..69d07e3 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/clear_queues.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +rm -rf ./activemq-data/* diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java index 2d9b7e5..4eab35d 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java @@ -7,21 +7,21 @@ import org.apache.camel.main.Main; import org.schema.Products; +import java.time.Duration; + /** * Apache Camel Pipeline that reads GS1 Products XML file and * loads them as EVT Products. - * - * TODO convert EVT SDK into endpoint - * protect with throttling http://camel.apache.org/throttler.html */ public class XMLProductsLoaderPipeline extends RouteBuilder implements Runnable { - /* Fan out with seda:queue?concurrentConsumers=x */ + /* Number of EVRYTHNG writers */ private static final int WRITER_THREADS = 4; - private static final String queueType = "seda"; + private static final String queueType = "activemq"; // [activemq|seda|sqs] private static final String productsXMLQueue = String.format("%s:%s", queueType, "products-xml"); - private static final String productsXMLQueueConsumer = String.format("%s?concurrentConsumers=%d", productsXMLQueue, WRITER_THREADS); + private static final String productsQueue = String.format("%s:%s", queueType, "products"); + private static final String retryQueue = String.format("%s:%s", queueType, "retry-products"); @Override public void configure() throws Exception { @@ -31,27 +31,36 @@ public void configure() throws Exception { .log("Received XML file containing Products") .split(Products.namespaces.xpath(Products.XPATH_PRODUCTS)) .unmarshal().jaxb(Products.CONTEXT_PATH) - .to("activemq:products") + .to(productsXMLQueue) .endChoice() .otherwise() .log("Ignoring file"); - from("activemq:products") + + // Transform GS1 Product to EVT Product, and throttle to 30 rps + from(productsXMLQueue) + .process(new ProductProcessor()) .throttle(30) .asyncDelayed() - .to(productsXMLQueue); - from(productsXMLQueueConsumer) - .process(new ProductProcessor()) + .to(productsQueue); + + // Load + from(fanOut(productsQueue, WRITER_THREADS)) .process(new UnreliableProductLoader()) - .errorHandler(deadLetterChannel("activemq:com.evrythng.retry")); - from("activemq:com.evrythng.retry") - .log("ERROR uploading Product to EVT") - .delayer(4 * 1000) - .to(productsXMLQueue); + .errorHandler(deadLetterChannel(retryQueue)); + + // If any uploads fail, wait 2 seconds and send the message back to the loader + from(fanOut(retryQueue)) + .log("RETRY") + .delayer(Duration.ofSeconds(2).toMillis()) + .to(productsQueue); + from("seda:xml-validation") .to("validator:/org/schema/gs1.products.xsd"); // .onException(org.xml.sax.SAXParseException.class); } + // Runner + @Override public void run() { startMQBroker(); @@ -75,4 +84,22 @@ private void startMQBroker() { public static void main(String[] args) { new XMLProductsLoaderPipeline().run(); } + + // Fan out + + // Run pipeline stage on all available cores + private static String fanOut(String queue) { + return fanOut(queue, threadCount()); + } + + private static String fanOut(String queue, int threads) { + return String.format("%s?concurrentConsumers=%d", queue, threads); + } + + // Number of cores available at runtime (between 4 and 32) + private static int threadCount() { + int p = Runtime.getRuntime().availableProcessors() * 2; + return Math.max(1, Math.min(p, 32)); + } + } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java index c64ae80..2e81343 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java @@ -20,13 +20,19 @@ public ProductLoader() { @Override public void process(Exchange exchange) throws Exception { - Product product = exchange.getIn().getMandatoryBody(Product.class); - product = productService.productCreator(product).execute(); - // TODO wrap in Circuit breaker - logger.info(new JSONObject() - .put("evt_id", product.getId()) - .put("identifiers", product.getIdentifiers()).toString()); + try { + Product product = exchange.getIn().getMandatoryBody(Product.class); + product = productService.productCreator(product).execute(); + // TODO wrap in Circuit breaker + logger.info(new JSONObject() + .put("evt_id", product.getId()) + .put("identifiers", product.getIdentifiers()) + .toString()); + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw e; + } } - private static Logger logger = LoggerFactory.getLogger("logentries"); + private static Logger logger = LoggerFactory.getLogger("load"); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java index 7a752ed..2465625 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java @@ -16,14 +16,14 @@ public class ProductProcessor implements Processor { @Override public void process(Exchange exchange) throws Exception { - Optional skuInfo = Optional.ofNullable(exchange.getIn().getBody(org.schema.Product.class)); - if (skuInfo.isPresent()) { + Optional product = Optional.ofNullable(exchange.getIn().getBody(org.schema.Product.class)); + if (product.isPresent()) { TransformGS1ProductToEVTProduct transformProduct = new TransformGS1ProductToEVTProduct(); Message message = new DefaultMessage(); - message.setBody(transformProduct.convert(skuInfo.get())); + message.setBody(transformProduct.convert(product.get())); exchange.setOut(message); } else { - throw new IllegalArgumentException("Not a SKU"); + throw new IllegalArgumentException("Product missing in Exchange!"); } } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java index fb2c028..9510e62 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java @@ -7,7 +7,7 @@ import java.util.Random; /** - * Fails to load products into EVT 50% of the time. + * Fails to load products into EVT 25% of the time. */ public class UnreliableProductLoader extends ProductLoader { @@ -22,7 +22,8 @@ public void process(Exchange exchange) throws Exception { } } + // 25% chance platform is unavailable private boolean platformTemporarilyOverloaded() { - return rnd.nextBoolean(); + return rnd.nextBoolean() && rnd.nextBoolean(); } } From 7d694421cc3d6fffa7a260e8dfeeed0bc5dadd1f Mon Sep 17 00:00:00 2001 From: James Every Date: Wed, 28 Mar 2018 15:11:56 +0100 Subject: [PATCH 20/22] EVRYTHNG Camel Component (#9) --- .../supply-chain/evrythng.eif/README.md | 25 ++++++++++- .../supply-chain/evrythng.eif/build.gradle | 2 +- .../com/evrythng/camel/EvrythngComponent.java | 29 +++++++++++++ .../com/evrythng/camel/EvrythngEndpoint.java | 43 +++++++++++++++++++ .../EvrythngProductProducer.java} | 27 ++++++------ .../XMLProductsLoaderPipeline.java | 3 +- .../products/UnreliableProductLoader.java | 29 ------------- .../org/apache/camel/component/evrythng | 1 + 8 files changed, 113 insertions(+), 46 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngComponent.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngEndpoint.java rename customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/{demo/supplychain/products/ProductLoader.java => camel/EvrythngProductProducer.java} (55%) delete mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java create mode 100644 customer-solutions/supply-chain/evrythng.eif/src/main/resources/META-INF/services/org/apache/camel/component/evrythng diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index f60ccfc..c6004fb 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -12,8 +12,8 @@ See [XMLProductsLoaderPipeline.java](src/main/java/com/evrythng/demo/supplychain 1. reads a products.xml file dropped in [src/data](src/data) folder 2. converts GS1 Product to EVT Product - [ProductProcessor.java](src/main/java/com/evrythng/demo/supplychain/products/ProductProcessor.java) -3. attempts to load the products into EVT using the `UnreliableProductLoader` -4. products that fail to load are put in the persisted retry queue +3. attempts to load the products into EVT using the Evrythng Camel Component +4. products that fail to load are put in the persisted retry queue and retried after 2 seconds The pipeline loads products in parallel by specifying multiple consumers of the products queue `seda://products-xml?concurrentConsumers=4` @@ -23,6 +23,27 @@ The pipeline uses persistent [ActiveMQ queues](http://activemq.apache.org/) in o Use the script [clear_queues.sh](clear_queues.sh) to clear out the previous messages. +## Connectivity with EVRYTHNG + +We have started the implementation of the [EVRYTHNG Camel Component](http://camel.apache.org/writing-components.html) which is a wrapper around the [EVRYTHNG Java SDK](https://github.com/evrythng/evrythng-java-sdk) - see the `com.evrythng.camel` package. Only creating Products are implemented. + +Example - reading Products and writing to EVRYTHNG: + +```java +from("activemq:products") + .to("evrythng:products") + .errorHandler(deadLetterChannel(retryQueue)); +``` + +The destination of the EVRYTHNG API is currently controlled with environment variables. It would be possible to extend this to set a dynamic endpoint in the route. For example: + +```java +from("activemq:products") + .to("evrythng:TRUSTEDAPPKEY@api-eu.evrythng.com/products") +``` + +This would allow us to create a pipeline between different API regions or accounts. + # Local install When running locally: diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index 1b27af5..dd964e1 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.82' +version '0.18.83' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngComponent.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngComponent.java new file mode 100644 index 0000000..a952873 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngComponent.java @@ -0,0 +1,29 @@ +package com.evrythng.camel; + +import com.evrythng.demo.supplychain.EVTLoader; +import com.evrythng.java.wrapper.ApiManager; +import org.apache.camel.Endpoint; +import org.apache.camel.impl.DefaultComponent; + +import java.util.Map; + +public class EvrythngComponent extends DefaultComponent { + + public EvrythngComponent() { + super(); + this.api = EVTLoader.newApiManager(); + } + + private final ApiManager api; + + @Override + public Endpoint createEndpoint(String uri) throws Exception { + return new EvrythngEndpoint(uri, this.api); + } + + @Override + protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception { + return createEndpoint(uri); + } + +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngEndpoint.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngEndpoint.java new file mode 100644 index 0000000..ef00d88 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngEndpoint.java @@ -0,0 +1,43 @@ +package com.evrythng.camel; + +import com.evrythng.java.wrapper.ApiManager; +import org.apache.camel.Consumer; +import org.apache.camel.Processor; +import org.apache.camel.Producer; +import org.apache.camel.impl.DefaultEndpoint; + +public class EvrythngEndpoint extends DefaultEndpoint { + + public EvrythngEndpoint(String uri, ApiManager api) { + super(); + this.api = api; + this.uri = uri; + } + + private final ApiManager api; + private final String uri; + + @Override + public String getEndpointUri() { + return this.uri; + } + + @Override + public Producer createProducer() throws Exception { + if (uri.endsWith("products")) { + return new EvrythngProductProducer(this, api.productService()); + } else { + throw new IllegalArgumentException(String.format("Unknown EVT resource '%s'", uri)); + } + } + + @Override + public Consumer createConsumer(Processor processor) throws Exception { + return null; + } + + @Override + public boolean isSingleton() { + return false; + } +} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngProductProducer.java similarity index 55% rename from customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java rename to customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngProductProducer.java index 2e81343..947ae85 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/ProductLoader.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/camel/EvrythngProductProducer.java @@ -1,19 +1,19 @@ -package com.evrythng.demo.supplychain.products; +package com.evrythng.camel; -import com.evrythng.demo.supplychain.EVTLoader; import com.evrythng.java.wrapper.service.ProductService; import com.evrythng.thng.resource.model.store.Product; +import org.apache.camel.Endpoint; import org.apache.camel.Exchange; -import org.apache.camel.Processor; +import org.apache.camel.impl.DefaultProducer; import org.json.JSONObject; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ProductLoader implements Processor { +public class EvrythngProductProducer extends DefaultProducer { - public ProductLoader() { - this.productService = EVTLoader.newApiManager().productService(); + EvrythngProductProducer(Endpoint endpoint, ProductService productService) { + super(endpoint); + this.productService = productService; } private final ProductService productService; @@ -23,16 +23,19 @@ public void process(Exchange exchange) throws Exception { try { Product product = exchange.getIn().getMandatoryBody(Product.class); product = productService.productCreator(product).execute(); - // TODO wrap in Circuit breaker - logger.info(new JSONObject() - .put("evt_id", product.getId()) - .put("identifiers", product.getIdentifiers()) - .toString()); + logProduct(product); } catch (Exception e) { logger.error(e.getMessage(), e); throw e; } } + private void logProduct(Product product) { + logger.info(new JSONObject() + .put("evt_id", product.getId()) + .put("identifiers", product.getIdentifiers()) + .toString()); + } + private static Logger logger = LoggerFactory.getLogger("load"); } diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java index 4eab35d..b16c311 100644 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/XMLProductsLoaderPipeline.java @@ -2,7 +2,6 @@ import com.evrythng.demo.mq.MQBroker; import com.evrythng.demo.supplychain.products.ProductProcessor; -import com.evrythng.demo.supplychain.products.UnreliableProductLoader; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.main.Main; import org.schema.Products; @@ -45,7 +44,7 @@ public void configure() throws Exception { // Load from(fanOut(productsQueue, WRITER_THREADS)) - .process(new UnreliableProductLoader()) + .to("evrythng:products") .errorHandler(deadLetterChannel(retryQueue)); // If any uploads fail, wait 2 seconds and send the message back to the loader diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java b/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java deleted file mode 100644 index 9510e62..0000000 --- a/customer-solutions/supply-chain/evrythng.eif/src/main/java/com/evrythng/demo/supplychain/products/UnreliableProductLoader.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.evrythng.demo.supplychain.products; - -import com.evrythng.java.wrapper.exception.EvrythngClientException; -import org.apache.camel.Exchange; - -import java.security.SecureRandom; -import java.util.Random; - -/** - * Fails to load products into EVT 25% of the time. - */ -public class UnreliableProductLoader extends ProductLoader { - - private final Random rnd = new SecureRandom(); - - @Override - public void process(Exchange exchange) throws Exception { - if (platformTemporarilyOverloaded()) { - throw new EvrythngClientException("504 Platform Temporarily Unavailable"); - } else { - super.process(exchange); - } - } - - // 25% chance platform is unavailable - private boolean platformTemporarilyOverloaded() { - return rnd.nextBoolean() && rnd.nextBoolean(); - } -} diff --git a/customer-solutions/supply-chain/evrythng.eif/src/main/resources/META-INF/services/org/apache/camel/component/evrythng b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/META-INF/services/org/apache/camel/component/evrythng new file mode 100644 index 0000000..f4f4859 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/src/main/resources/META-INF/services/org/apache/camel/component/evrythng @@ -0,0 +1 @@ +class=com.evrythng.camel.EvrythngComponent \ No newline at end of file From ec415296e07f66c24427757c12b4dce1deda6bb0 Mon Sep 17 00:00:00 2001 From: James Every Date: Thu, 29 Mar 2018 13:18:49 +0100 Subject: [PATCH 21/22] EVRYTHNG EIF AMI instructions --- .../supply-chain/evrythng.eif/README.md | 90 ++++++++++++++++++- .../supply-chain/evrythng.eif/build.gradle | 2 +- .../supply-chain/evrythng.eif/run_pipeline.sh | 9 ++ 3 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh diff --git a/customer-solutions/supply-chain/evrythng.eif/README.md b/customer-solutions/supply-chain/evrythng.eif/README.md index c6004fb..5fdec4d 100644 --- a/customer-solutions/supply-chain/evrythng.eif/README.md +++ b/customer-solutions/supply-chain/evrythng.eif/README.md @@ -55,11 +55,15 @@ Install Java and the [Gradle build tool](https://gradle.org/). On a Mac with [ho brew cask install java brew install gradle +On Ubuntu: (note you need jdk for gradle, not jre!) + + sudo apt-get -y install openjdk-8-jdk-headless gradle + Checkout the repository and build - git clone git@github.com:evrythng/examples.git + git clone https://github.com/evrythng/examples.git - cd customer-solutions/supply-chain/evrythng.eif + cd examples/customer-solutions/supply-chain/evrythng.eif gradle clean build This will make a JAR file containing all dependencies: @@ -75,12 +79,18 @@ There are two mandatory environment variables: It is not recommended to run with your Operator key, a trusted application key is all that is required for most interactions. +The application will run and await XML files to be dropped into the `src/data` folder. See [dropfile.sh](dropfile.sh) script for example of how to trigger a load: + java -jar build/libs/eif-0.18.*.jar -The application will run and await XML files to be dropped into the `src/data` folder. See [dropfile.sh](dropfile.sh) script for example of how to trigger a load. +When running in Ubuntu we serialize objects to queues and we need to tell ActiveMQ [which objects we trust](http://activemq.apache.org/objectmessage.html). Use the [run_pipeline.sh script](run_pipeline.sh) when running on a server. ## Data +Sample products can be dropped into the pipeline: + + cp src/test/resources/schema.org/apparel.xml src/data + There is a [ruby script](src/main/ruby/gen_products.rb) to generate GS1 Product xml files. See the header of the script for install instructions. Once the pipeline is running (see above) you can generate and load products with the script: @@ -91,3 +101,77 @@ Or generate products to a new file: ./gen_products.sh 1000 > /tmp/products.xml +To stop the pipeline, + + pkill -9 java + +## Logging + +The log entries logging token can be found in [logback.xml](src/main/resources/logback.xml) + +# AMI + +The steps required to make an Amazon Machine Image are: + +## 1 Launch a new instance to form a template + +* OS - Ubuntu 16.04 LTS +* t2.medium or an instance type with multiple cores +* create and download new key pair called `eif.pem` + +## 2 SSH into the new machine with the keypair + + chmod 600 eif.pem + ssh -i eif.pem ubuntu@ec2... + +## 3 Install Java JDK and Gradle + + sudo apt-get -y install openjdk-8-jdk-headless gradle git + +## 4 Download the reference implementation + + git clone https://github.com/evrythng/examples.git + + cd examples + +During development only, switch to branch: + + git checkout reference-imp-eif + +Build: + + cd customer-solutions/supply-chain/evrythng.eif + gradle clean build + +To run: + + ./run_pipeline.sh & + +To stop: + + pkill -9 java + + +## 5 Build the AMI + +From the AWS console, go to EC2 and running Instances. + +* Select your instance +* Actions, Image, Create Image +* name it 'evrythng-eif' + +Wait a few minutes for it to build + +## 6 Launch new instance based on AMI + +From the AWS console, go to EC2 and AMIs in LHS menu. + +* Select your AMI 'evrythng-eif' +* Launch +* Select spot pricing to save money +* Choose instance type with say 4 vCPU *t2.xlarge* +* Choose existing key-pair `eif.pem` + +Once the machine is launched, SSH in to the new IP address and + + cd examples/customer-solutions/supply-chain/evrythng.eif diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index dd964e1..d537a32 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -1,5 +1,5 @@ group 'com.evrythng' -version '0.18.83' +version '0.18.88' apply plugin: 'java' diff --git a/customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh b/customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh new file mode 100644 index 0000000..0e5e3b4 --- /dev/null +++ b/customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# See http://activemq.apache.org/objectmessage.html +EVT_MODEL=com.evrythng.thng.resource.model.store,org.apache.commons.collections.list +SERIALIZABLE_PACKAGES=java.lang,javax.security,java.util,org.apache.activemq,org.fusesource.hawtbuf,$EVT_MODEL + +JAR=`find build/libs/eif-0.18.*.jar | head -n 1` + +java -Dorg.apache.activemq.SERIALIZABLE_PACKAGES=$SERIALIZABLE_PACKAGES -jar $JAR & From 8111eb423f6dce3b5e5ef92a27116535491f53b9 Mon Sep 17 00:00:00 2001 From: James Every Date: Thu, 29 Mar 2018 14:50:25 +0100 Subject: [PATCH 22/22] Fix permissions and dependency on Ubuntu --- customer-solutions/supply-chain/evrythng.eif/build.gradle | 1 + customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh | 0 2 files changed, 1 insertion(+) mode change 100644 => 100755 customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh diff --git a/customer-solutions/supply-chain/evrythng.eif/build.gradle b/customer-solutions/supply-chain/evrythng.eif/build.gradle index d537a32..3982ec4 100644 --- a/customer-solutions/supply-chain/evrythng.eif/build.gradle +++ b/customer-solutions/supply-chain/evrythng.eif/build.gradle @@ -25,6 +25,7 @@ dependencies { compile group: 'org.apache.activemq', name: 'activemq-all', version: '5.4.2' compile group: 'org.apache.activemq', name: 'activemq-camel', version: '5.15.3' + compile 'org.apache.activemq:activemq-kahadb-store:5.15.3' testCompile group: 'junit', name: 'junit', version: '4.12' diff --git a/customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh b/customer-solutions/supply-chain/evrythng.eif/run_pipeline.sh old mode 100644 new mode 100755