]> git.mxchange.org Git - jcustomer-core.git/commitdiff
Continued with customer number generator:
authorRoland Häder <roland@mxchange.org>
Tue, 26 Apr 2016 07:43:24 +0000 (09:43 +0200)
committerRoland Häder <roland@mxchange.org>
Tue, 26 Apr 2016 07:47:39 +0000 (09:47 +0200)
- the customer number generator can generated numbers like XXXXX-XXXXX-XXX (10 characters total length, number "block" of 5 characters with leading zeros and dashes as separator)
- added common-lang3 jar as an updated StringUtils is needed
- ignored strings for i18n

lib/commons-lang3-3.4.jar [new file with mode: 0644]
nbproject/project.properties
src/org/mxchange/jcustomercore/utils/CustomerUtils.java

diff --git a/lib/commons-lang3-3.4.jar b/lib/commons-lang3-3.4.jar
new file mode 100644 (file)
index 0000000..8ec91d4
Binary files /dev/null and b/lib/commons-lang3-3.4.jar differ
index c7f19520bb5a8bad2a27114eb40148e0e0148e05..66db30694583082e09be10ab371e83d9ddd05b1a 100644 (file)
-annotation.processing.enabled=true
-annotation.processing.enabled.in.editor=true
-annotation.processing.processors.list=
-annotation.processing.run.all.processors=true
-annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
-application.title=jcustomer-core
-application.vendor=Roland Haeder
-auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-build.generated.sources.dir=${build.dir}/generated-sources
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-# Uncomment to specify the preferred debugger connection transport:
-#debug.transport=dt_socket
-debug.classpath=\
-    ${run.classpath}
-debug.test.classpath=\
-    ${run.test.classpath}
-# Files in build.classes.dir which should be excluded from distribution jar
-dist.archive.excludes=
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/jcustomer-core.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-endorsed.classpath=
-excludes=
-file.reference.commons-codec-1.10.jar=lib/commons-codec-1.10.jar
-file.reference.jcontacts-core.jar=lib/jcontacts-core.jar
-file.reference.jcore.jar=lib/jcore.jar
-file.reference.jcoreee.jar=lib/jcoreee.jar
-includes=**
-jar.archive.disabled=${jnlp.enabled}
-jar.compress=false
-jar.index=${jnlp.enabled}
-javac.classpath=\
-    ${file.reference.jcore.jar}:\
-    ${file.reference.jcoreee.jar}:\
-    ${file.reference.jcontacts-core.jar}:\
-    ${file.reference.commons-codec-1.10.jar}:\
-    ${libs.javaee-api-7.0.classpath}
-# Space-separated list of extra javac options
-javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
-javac.deprecation=true
-javac.external.vm=false
-javac.processorpath=\
-    ${javac.classpath}
-javac.source=1.7
-javac.target=1.7
-javac.test.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-javac.test.processorpath=\
-    ${javac.test.classpath}
-javadoc.additionalparam=
-javadoc.author=true
-javadoc.encoding=${source.encoding}
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=true
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=true
-javadoc.windowtitle=Java Shop Core
-jnlp.codebase.type=no.codebase
-jnlp.descriptor=application
-jnlp.enabled=false
-jnlp.mixed.code=default
-jnlp.offline-allowed=false
-jnlp.signed=false
-jnlp.signing=
-jnlp.signing.alias=
-jnlp.signing.keystore=
-# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed
-manifest.custom.codebase=
-# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)
-manifest.custom.permissions=
-meta.inf.dir=${src.dir}/META-INF
-mkdist.disabled=true
-platform.active=default_platform
-project.license=gpl30
-run.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project.
-# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
-# To set system properties for unit tests define test-sys-prop.name=value:
-run.jvmargs=
-run.test.classpath=\
-    ${javac.test.classpath}:\
-    ${build.test.classes.dir}
-source.encoding=UTF-8
-source.reference.jcontacts-core.jar=../jcontacts-core/src/
-source.reference.jcore.jar=../jcore/src/
-source.reference.jcoreee.jar=../jcoreee/src/
-src.dir=src
-test.src.dir=test
+annotation.processing.enabled=true\r
+annotation.processing.enabled.in.editor=true\r
+annotation.processing.processors.list=\r
+annotation.processing.run.all.processors=true\r
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output\r
+application.title=jcustomer-core\r
+application.vendor=Roland Haeder\r
+auxiliary.org-netbeans-spi-editor-hints-projects.perProjectHintSettingsFile=nbproject/cfg_hints.xml\r
+build.classes.dir=${build.dir}/classes\r
+build.classes.excludes=**/*.java,**/*.form\r
+# This directory is removed when the project is cleaned:\r
+build.dir=build\r
+build.generated.dir=${build.dir}/generated\r
+build.generated.sources.dir=${build.dir}/generated-sources\r
+# Only compile against the classpath explicitly listed here:\r
+build.sysclasspath=ignore\r
+build.test.classes.dir=${build.dir}/test/classes\r
+build.test.results.dir=${build.dir}/test/results\r
+# Uncomment to specify the preferred debugger connection transport:\r
+#debug.transport=dt_socket\r
+debug.classpath=\\r
+    ${run.classpath}\r
+debug.test.classpath=\\r
+    ${run.test.classpath}\r
+# Files in build.classes.dir which should be excluded from distribution jar\r
+dist.archive.excludes=\r
+# This directory is removed when the project is cleaned:\r
+dist.dir=dist\r
+dist.jar=${dist.dir}/jcustomer-core.jar\r
+dist.javadoc.dir=${dist.dir}/javadoc\r
+endorsed.classpath=\r
+excludes=\r
+file.reference.commons-codec-1.10.jar=lib/commons-codec-1.10.jar\r
+file.reference.commons-lang3-3.4.jar=lib/commons-lang3-3.4.jar\r
+file.reference.jcontacts-core.jar=lib/jcontacts-core.jar\r
+file.reference.jcore.jar=lib/jcore.jar\r
+file.reference.jcoreee.jar=lib/jcoreee.jar\r
+includes=**\r
+jar.archive.disabled=${jnlp.enabled}\r
+jar.compress=false\r
+jar.index=${jnlp.enabled}\r
+javac.classpath=\\r
+    ${file.reference.jcore.jar}:\\r
+    ${file.reference.jcoreee.jar}:\\r
+    ${file.reference.jcontacts-core.jar}:\\r
+    ${file.reference.commons-codec-1.10.jar}:\\r
+    ${file.reference.commons-lang3-3.4.jar}:\\r
+    ${libs.javaee-api-7.0.classpath}\r
+# Space-separated list of extra javac options\r
+javac.compilerargs=-Xlint:unchecked -Xlint:deprecation\r
+javac.deprecation=true\r
+javac.external.vm=false\r
+javac.processorpath=\\r
+    ${javac.classpath}\r
+javac.source=1.7\r
+javac.target=1.7\r
+javac.test.classpath=\\r
+    ${javac.classpath}:\\r
+    ${build.classes.dir}\r
+javac.test.processorpath=\\r
+    ${javac.test.classpath}\r
+javadoc.additionalparam=\r
+javadoc.author=true\r
+javadoc.encoding=${source.encoding}\r
+javadoc.noindex=false\r
+javadoc.nonavbar=false\r
+javadoc.notree=false\r
+javadoc.private=true\r
+javadoc.reference.commons-lang3-3.4.jar=https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/\r
+javadoc.splitindex=true\r
+javadoc.use=true\r
+javadoc.version=true\r
+javadoc.windowtitle=Java Shop Core\r
+jnlp.codebase.type=no.codebase\r
+jnlp.descriptor=application\r
+jnlp.enabled=false\r
+jnlp.mixed.code=default\r
+jnlp.offline-allowed=false\r
+jnlp.signed=false\r
+jnlp.signing=\r
+jnlp.signing.alias=\r
+jnlp.signing.keystore=\r
+# Optional override of default Codebase manifest attribute, use to prevent RIAs from being repurposed\r
+manifest.custom.codebase=\r
+# Optional override of default Permissions manifest attribute (supported values: sandbox, all-permissions)\r
+manifest.custom.permissions=\r
+meta.inf.dir=${src.dir}/META-INF\r
+mkdist.disabled=true\r
+platform.active=default_platform\r
+project.license=gpl30\r
+run.classpath=\\r
+    ${javac.classpath}:\\r
+    ${build.classes.dir}\r
+# Space-separated list of JVM arguments used when running the project.\r
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.\r
+# To set system properties for unit tests define test-sys-prop.name=value:\r
+run.jvmargs=\r
+run.test.classpath=\\r
+    ${javac.test.classpath}:\\r
+    ${build.test.classes.dir}\r
+source.encoding=UTF-8\r
+source.reference.jcontacts-core.jar=../jcontacts-core/src/\r
+source.reference.jcore.jar=../jcore/src/\r
+source.reference.jcoreee.jar=../jcoreee/src/\r
+src.dir=src\r
+test.src.dir=test\r
index c26bccda1d97977075eb2671977038c783530fde..be29c8dc8176f342ed645ddd331c90c3e3994547 100644 (file)
@@ -17,7 +17,9 @@
 package org.mxchange.jcustomercore.utils;
 
 import java.security.SecureRandom;
+import java.text.MessageFormat;
 import java.util.Random;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * Customer utilities
@@ -42,12 +44,58 @@ public class CustomerUtils {
        /**
         * Generates a random customer number with some dashes in it
         * <p>
-        * @param length Length of the number
+        * @param totalLength Length of the number
+        * @param blockSize Block size
+        * @param separator Seperator
         * <p>
         * @return Generated customer number
         */
-       public static String generateCustomerNumber (final long length) {
-               throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+       public static String generateCustomerNumber (final int totalLength, final short blockSize, final char separator) {
+               // All parameters must be set
+               if (totalLength < 5) {
+                       // Total length is to short
+                       throw new IllegalArgumentException(MessageFormat.format("Total length of{0} characters is to short (5 minimum)", totalLength)); //NOI18N
+               } else if (blockSize < 3) {
+                       // 3 charcters is minimum
+                       throw new IllegalArgumentException(MessageFormat.format("Block size of {0} characters is to short (3 minimum)", blockSize)); //NOI18N
+               }
+
+               // Init number
+               StringBuilder customerNumber = new StringBuilder(totalLength);
+
+               // Calculate total blockas
+               long totalBlocks = Math.round(totalLength / (blockSize - 1) - 0.5);
+
+               // Generate CN
+               for (int i = 0; i < totalBlocks; i++) {
+                       // Fill it up with leading zeros and append it + separator character
+                       customerNumber.append(genrateBlock(blockSize)).append(separator);
+               }
+
+               // Calculate remaining charcters
+               long remain = totalLength - blockSize * totalBlocks;
+
+               // Generate new block and append it
+               customerNumber.append(genrateBlock((short) remain));
+
+               // Return finished number
+               return customerNumber.toString();
+       }
+
+       /**
+        * Generates a block of numbers with leading zeros, if the random number is
+        * shorter than block size
+        * <p>
+        * @param blockSize Block size
+        * <p>
+        * @return Generated block
+        */
+       private static String genrateBlock (final short blockSize) {
+               // Generate random number
+               int num = RANDOM_NUMBER_GENERATOR.nextInt(10 ^ blockSize);
+
+               // Generate "block" and return it
+               return StringUtils.leftPad(String.valueOf(num), blockSize, '0');
        }
 
        /**