FileDocCategorySizeDatePackage
PPDrawingGroup.javaAPI DocApache Poi 3.0.14173Sun Mar 11 12:59:30 GMT 2007org.apache.poi.hslf.record

PPDrawingGroup

public class PPDrawingGroup extends RecordAtom
Container records which always exists inside Document. It always acts as a holder for escher DGG container which may contain which Escher BStore container information about pictures containes in the presentation (if any).
author
Yegor Kozlov

Fields Summary
private byte[]
_header
private EscherContainerRecord
dggContainer
Constructors Summary
protected PPDrawingGroup(byte[] source, int start, int len)

        // Get the header
        _header = new byte[8];
        System.arraycopy(source,start,_header,0,8);

        // Get the contents for now
        byte[] contents = new byte[len];
        System.arraycopy(source,start,contents,0,len);

        DefaultEscherRecordFactory erf = new DefaultEscherRecordFactory();
        EscherRecord child = erf.createRecord(contents, 0);
        child.fillFields( contents, 0, erf );
        dggContainer = (EscherContainerRecord)child.getChild(0);
    
Methods Summary
public org.apache.poi.hslf.record.Record[]getChildRecords()
We're pretending to be an atom, so return null

        return null;
    
public org.apache.poi.ddf.EscherContainerRecordgetDggContainer()

        return dggContainer;
    
public longgetRecordType()
We are type 1035

        return RecordTypes.PPDrawingGroup.typeID;
    
public voidwriteOut(java.io.OutputStream out)

        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        List child = dggContainer.getChildRecords();
        for (int i = 0; i < child.size(); i++) {
            EscherRecord r = (EscherRecord)child.get(i);
            if (r.getRecordId() == EscherContainerRecord.BSTORE_CONTAINER){
                EscherContainerRecord bstore = (EscherContainerRecord)r;

                ByteArrayOutputStream b2 = new ByteArrayOutputStream();
                List blip = bstore.getChildRecords();
                for (Iterator it=blip.iterator(); it.hasNext();) {
                    EscherBSERecord bse = (EscherBSERecord)it.next();
                    byte[] b = new byte[36+8];
                    bse.serialize(0, b);
                    b2.write(b);
                }
                byte[] bstorehead = new byte[8];
                LittleEndian.putShort(bstorehead, 0, bstore.getOptions());
                LittleEndian.putShort(bstorehead, 2, bstore.getRecordId());
                LittleEndian.putInt(bstorehead, 4, b2.size());
                bout.write(bstorehead);
                bout.write(b2.toByteArray());

            } else {
                bout.write(r.serialize());
            }
        }
        int size = bout.size();

        // Update the size (header bytes 5-8)
        LittleEndian.putInt(_header,4,size+8);

        // Write out our header
        out.write(_header);

        byte[] dgghead = new byte[8];
        LittleEndian.putShort(dgghead, 0, dggContainer.getOptions());
        LittleEndian.putShort(dgghead, 2, dggContainer.getRecordId());
        LittleEndian.putInt(dgghead, 4, size);
        out.write(dgghead);

        // Finally, write out the children
        out.write(bout.toByteArray());