[jbpm-commits] JBoss JBPM SVN: r2391 - jbpm3/branches/aguizar/modules/core/src/main/java/org/jbpm/bytes.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Sep 26 01:26:28 EDT 2008


Author: alex.guizar at jboss.com
Date: 2008-09-26 01:26:28 -0400 (Fri, 26 Sep 2008)
New Revision: 2391

Modified:
   jbpm3/branches/aguizar/modules/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java
Log:
[JBPM-702] correction to sybase's trailing zeros truncation

Modified: jbpm3/branches/aguizar/modules/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java
===================================================================
--- jbpm3/branches/aguizar/modules/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java	2008-09-25 22:21:39 UTC (rev 2390)
+++ jbpm3/branches/aguizar/modules/core/src/main/java/org/jbpm/bytes/ByteBlockChopper.java	2008-09-26 05:26:28 UTC (rev 2391)
@@ -22,6 +22,7 @@
 package org.jbpm.bytes;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
@@ -42,12 +43,12 @@
   }
 
   public static List chopItUp(byte[] byteArray) {
-    int blockSize = JbpmConfiguration.Configs.getInt("jbpm.byte.block.size");
     List bytes = null;
     if ( (byteArray!=null)
          && (byteArray.length>0) ){
       log.debug("chopping " + byteArray.length + " bytes");
       bytes = new ArrayList();
+      int blockSize = JbpmConfiguration.Configs.getInt("jbpm.byte.block.size");
       int offset = 0;
       while ( (byteArray.length-offset) > blockSize ) {
         bytes.add(subArray(byteArray, offset, blockSize));
@@ -68,25 +69,35 @@
   public static byte[] glueChopsBackTogether(List bytes) {
     byte[] byteArray = null;
     
-    if (bytes!=null && !bytes.isEmpty()) {
-      if (bytes.size() == 1) {
+    if (bytes!=null) {
+      int blockCount = bytes.size();
+      switch (blockCount) {
+      case 0:
+        break;
+      case 1:
         byteArray = (byte[]) bytes.get(0);
-      }
-      else {
-        int totalLength = 0;
-        for (int i = 0, n = bytes.size(); i < n; i++) {
-          byte[] block = (byte[]) bytes.get(i);
-          totalLength += block.length;
-        }
-        log.debug("gluing " + totalLength + " bytes");
-        byteArray = new byte[totalLength];
+        break;
+      default:
+        int blockSize = JbpmConfiguration.Configs.getInt("jbpm.byte.block.size");
+        byte[] lastBlock = (byte[]) bytes.get(blockCount - 1);
+        int byteCount = blockSize * (blockCount - 1) + lastBlock.length;
+        log.debug("gluing " + byteCount + " bytes");
+        byteArray = new byte[byteCount];
         int offset = 0;
-        for (int i = 0, n = bytes.size(); i < n; i++) {
+        for (int i = 0, n = blockCount; i < n; i++) {
           byte[] block = (byte[]) bytes.get(i);
-          int blockLength = block.length;
-          System.arraycopy(block, 0, byteArray, offset, blockLength);
-          log.debug("glued " + blockLength + " bytes beggining at " + offset);
-          offset += blockLength;
+          int length = block.length;
+          System.arraycopy(block, 0, byteArray, offset, length);
+          log.debug("glued " + length + " bytes beggining at " + offset);
+          // JBPM-702 sybase truncates trailing zeros
+          if (length < blockSize && i < n-1) {
+            Arrays.fill(byteArray, offset + length, offset + blockSize, (byte) 0);
+            log.debug("zero filled " + (blockSize - length) + " trailing bytes");
+            offset += blockSize;
+          }
+          else {
+            offset += length;            
+          }
         }
       }
     }




More information about the jbpm-commits mailing list