Search in sources :

Example 1 with CData

use of org.openntf.domino.nsfdata.structs.cd.CData in project org.openntf.domino by OpenNTF.

the class AbstractDesignFileResource method getFileDataRaw.

/**
 * Reads a FileData Item in RAW-mode
 *
 * @param itemName
 * @return
 */
protected byte[] getFileDataRaw(final String itemName) {
    try {
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
        for (XMLNode rawitemdata : // 
        getDxl().selectNodes("//item[@name='" + XMLDocument.escapeXPathValue(itemName) + "']/rawitemdata")) {
            // $NON-NLS-1$ //$NON-NLS-2$
            String rawData = rawitemdata.getText();
            byte[] thisData = parseBase64Binary(rawData);
            byteStream.write(thisData);
        }
        if (byteStream.size() > 0) {
            byte[] data = byteStream.toByteArray();
            CData cdata = new CData(data);
            CDObject obj = CDObject.create(cdata);
            // Files may be attached either as FILE or as EVENT... (ssjs for example) Damn. This makes everything quite complex
            if (obj instanceof CDResourceFile)
                return ((CDResourceFile) obj).getFileData();
            if (obj instanceof CDResourceEvent)
                return ((CDResourceEvent) obj).getFileData();
            // $NON-NLS-1$
            throw new IllegalStateException("Cannot decode " + obj.getClass().getName());
        } else {
            byteStream = new ByteArrayOutputStream();
            for (XMLNode rawitemdata : // 
            getDxl().selectNodes("//file[@name='" + XMLDocument.escapeXPathValue(itemName) + "']/filedata")) {
                // $NON-NLS-1$ //$NON-NLS-2$
                String rawData = rawitemdata.getText();
                byte[] thisData = parseBase64Binary(rawData);
                byteStream.write(thisData);
            }
            return byteStream.toByteArray();
        }
    } catch (IOException ioe) {
        DominoUtils.handleException(ioe);
        return null;
    }
}
Also used : CDResourceEvent(org.openntf.domino.nsfdata.structs.obj.CDResourceEvent) XMLNode(org.openntf.domino.utils.xml.XMLNode) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) CDObject(org.openntf.domino.nsfdata.structs.obj.CDObject) CData(org.openntf.domino.nsfdata.structs.cd.CData) CDResourceFile(org.openntf.domino.nsfdata.structs.obj.CDResourceFile)

Example 2 with CData

use of org.openntf.domino.nsfdata.structs.cd.CData in project org.openntf.domino by OpenNTF.

the class DXLNote method extractFileResource.

// TODO Make sure it works with multiple files
@Override
public void extractFileResource(final String itemName, final java.io.OutputStream os) {
    Collection<NSFItem> items = getItems(itemName);
    int segmentCount = 0;
    int totalSegments = 0;
    for (NSFItem item : items) {
        if (item instanceof DXLItemComposite) {
            CData cdata = ((DXLItemComposite) item).getValue();
            int breaker = 0;
            for (CDRecord record : cdata) {
                if (breaker++ > 1000) {
                    System.out.println("we went too deep!");
                    break;
                }
                if (record instanceof CDFILEHEADER) {
                    CDFILEHEADER header = (CDFILEHEADER) record;
                    totalSegments = (int) header.SegCount.get();
                    segmentCount = 0;
                }
                if (record instanceof CDFILESEGMENT) {
                    CDFILESEGMENT seg = (CDFILESEGMENT) record;
                    ByteBuffer data = ByteBuffer.wrap(seg.getFileData());
                    data.order(ByteOrder.LITTLE_ENDIAN);
                    try {
                        os.write(data.array(), data.position(), data.limit() - data.position());
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                    if (++segmentCount >= totalSegments) {
                        try {
                            os.flush();
                            return;
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    }
                }
            }
        }
    }
}
Also used : CDFILESEGMENT(org.openntf.domino.nsfdata.structs.cd.CDFILESEGMENT) NSFItem(org.openntf.domino.nsfdata.NSFItem) CDRecord(org.openntf.domino.nsfdata.structs.cd.CDRecord) IOException(java.io.IOException) CData(org.openntf.domino.nsfdata.structs.cd.CData) ByteBuffer(java.nio.ByteBuffer) DXLItemComposite(org.openntf.domino.nsfdata.impldxl.item.DXLItemComposite) CDFILEHEADER(org.openntf.domino.nsfdata.structs.cd.CDFILEHEADER)

Aggregations

IOException (java.io.IOException)2 CData (org.openntf.domino.nsfdata.structs.cd.CData)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 ByteBuffer (java.nio.ByteBuffer)1 NSFItem (org.openntf.domino.nsfdata.NSFItem)1 DXLItemComposite (org.openntf.domino.nsfdata.impldxl.item.DXLItemComposite)1 CDFILEHEADER (org.openntf.domino.nsfdata.structs.cd.CDFILEHEADER)1 CDFILESEGMENT (org.openntf.domino.nsfdata.structs.cd.CDFILESEGMENT)1 CDRecord (org.openntf.domino.nsfdata.structs.cd.CDRecord)1 CDObject (org.openntf.domino.nsfdata.structs.obj.CDObject)1 CDResourceEvent (org.openntf.domino.nsfdata.structs.obj.CDResourceEvent)1 CDResourceFile (org.openntf.domino.nsfdata.structs.obj.CDResourceFile)1 XMLNode (org.openntf.domino.utils.xml.XMLNode)1