(DBElement element)
| 591 | } |
| 592 | |
| 593 | private int encodeField(DBElement element) |
| 594 | throws DBException |
| 595 | { |
| 596 | int fieldType = element.getType(); |
| 597 | |
| 598 | String fieldLabel = element.getLabel(); |
| 599 | if (fieldLabel.length() == 0) { |
| 600 | throw new DBException("Field does not have a label"); |
| 601 | } |
| 602 | byte[] labelBytes = fieldLabel.getBytes(); |
| 603 | byte[] label = new byte[16]; |
| 604 | boolean match = false; |
| 605 | System.arraycopy(labelBytes, 0, label, 0, Math.min(labelBytes.length, 16)); |
| 606 | int labelIndex; |
| 607 | for (labelIndex = 0; labelIndex < this.labelArrayCount; labelIndex++) { |
| 608 | int labelOffset = labelIndex * 16; |
| 609 | match = true; |
| 610 | for (int i = 0; i < 16; i++) { |
| 611 | if (this.labelBuffer[(labelOffset + i)] != label[i]) { |
| 612 | match = false; |
| 613 | break; |
| 614 | } |
| 615 | } |
| 616 | |
| 617 | if (match) { |
| 618 | break; |
| 619 | } |
| 620 | } |
| 621 | if (!match) { |
| 622 | if (this.labelArrayCount == this.labelArraySize) { |
| 623 | this.labelArraySize += 1000; |
| 624 | byte[] buffer = new byte[16 * this.labelArraySize]; |
| 625 | System.arraycopy(this.labelBuffer, 0, buffer, 0, this.labelArrayCount * 16); |
| 626 | this.labelBuffer = buffer; |
| 627 | } |
| 628 | |
| 629 | labelIndex = this.labelArrayCount++; |
| 630 | int labelOffset = labelIndex * 16; |
| 631 | System.arraycopy(label, 0, this.labelBuffer, labelOffset, 16); |
| 632 | } |
| 633 | |
| 634 | Object fieldValue = element.getValue(); |
| 635 | int dataOffset; |
| 636 | switch (fieldType) { |
| 637 | case 15: |
| 638 | dataOffset = encodeList(element); |
| 639 | break; |
| 640 | case 14: |
| 641 | dataOffset = encodeStruct(element); |
| 642 | break; |
| 643 | case 0: |
| 644 | dataOffset = ((Integer)fieldValue).intValue() & 0xFF; |
| 645 | break; |
| 646 | case 1: |
| 647 | dataOffset = ((Character)fieldValue).charValue() & 0xFFFF; |
| 648 | break; |
| 649 | case 2: |
| 650 | case 3: |
no test coverage detected