super.startElement(new SabreUDFElement(SabreUDFElement.UDFElementType.DescriptorTag));
super.data(new WordDataReference(261)); // tag identifier
super.data(new WordDataReference(myFileEntry.DescriptorTag.TagLocation)); // tag location
super.data(new WordDataReference(tagSerialNumber)); // tag serial number
super.data(new WordDataReference(descriptorVersion)); // descriptor version
super.data(new ByteArrayDataReference(myFileEntry.getBytesWithoutDescriptorTag()));
super.endElement();
} else {
// store as exernal file data with Short_ad
myFileEntry.ICBTag.Flags = 0; // storage type short_ad
myFileEntry.LogicalBlocksRecorded = (long) (directoryFileDataLength / blockSize);
if (directoryFileDataLength % blockSize != 0) {
myFileEntry.LogicalBlocksRecorded++;
}
Short_ad allocationDescriptor = new Short_ad();
allocationDescriptor.ExtentLength = directoryFileDataLength;
allocationDescriptor.ExtentPosition = dataLocation;
if (directoryFileDataLength % blockSize != 0) {
directoryFileDataLength += blockSize - (directoryFileDataLength % blockSize);
}
byte[] data = new byte[directoryFileDataLength];
long currentRealPosition = dataLocation * blockSize;
int pos = 0;
for (int i = 0; i < childFileIdentifierDescriptors.size(); ++i) {
long tagLocationBlock = (long) (currentRealPosition / blockSize);
FileIdentifierDescriptor childFileIdentifierDescriptor = childFileIdentifierDescriptors.get(i);
childFileIdentifierDescriptor.DescriptorTag.TagLocation = tagLocationBlock;
byte childFileIdentifierDescriptorBytes[] = childFileIdentifierDescriptors.get(i).getBytes();
System.arraycopy(childFileIdentifierDescriptorBytes, 0, data, pos,
childFileIdentifierDescriptorBytes.length);
pos += childFileIdentifierDescriptorBytes.length;
currentRealPosition += childFileIdentifierDescriptorBytes.length;
}
myFileEntry.AllocationDescriptors = allocationDescriptor.getBytes();
myFileEntry.LengthofAllocationDescriptors = myFileEntry.AllocationDescriptors.length;
/*
// full element with descriptor tag
super.data( new ByteArrayDataReference( myFileEntry.getBytes( blockSize ) ) );
*/
// without descriptor tag (handled in next pipeline section)
super.startElement(new SabreUDFElement(SabreUDFElement.UDFElementType.DescriptorTag));
super.data(new WordDataReference(261)); // tag identifier
super.data(new WordDataReference(myFileEntry.DescriptorTag.TagLocation)); // tag location
super.data(new WordDataReference(tagSerialNumber)); // tag serial number
super.data(new WordDataReference(descriptorVersion)); // descriptor version
super.data(new ByteArrayDataReference(myFileEntry.getBytesWithoutDescriptorTag()));
super.endElement();
super.data(new ByteArrayDataReference(data));
}
}