[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