Fix the indenting on write(), which has been messed up for an age

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@576475 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2007-09-17 15:21:34 +00:00
parent 58eb278989
commit 7c257557fa

View File

@ -356,95 +356,111 @@ public class HSLFSlideShow extends POIDocument
} }
/** /**
* Writes out the slideshow file the is represented by an instance of * Writes out the slideshow file the is represented by an instance
* this class * of this class.
* @param out The OutputStream to write to. * It will write out the common OLE2 streams. If you require all
* @throws IOException If there is an unexpected IOException from the passed * streams to be written out, pass in preserveNodes
* in OutputStream * @param out The OutputStream to write to.
*/ * @throws IOException If there is an unexpected IOException from
public void write(OutputStream out) throws IOException { * the passed in OutputStream
// Get a new Filesystem to write into */
POIFSFileSystem outFS = new POIFSFileSystem(); public void write(OutputStream out) throws IOException {
// Write out, but only the common streams
write(out,false);
}
/**
* Writes out the slideshow file the is represented by an instance
* of this class.
* If you require all streams to be written out (eg Marcos, embeded
* documents), then set preserveNodes to true
* @param out The OutputStream to write to.
* @param preserveNodes Should all OLE2 streams be written back out, or only the common ones?
* @throws IOException If there is an unexpected IOException from
* the passed in OutputStream
*/
public void write(OutputStream out, boolean preserveNodes) throws IOException {
// Get a new Filesystem to write into
POIFSFileSystem outFS = new POIFSFileSystem();
// Write out the Property Streams // Write out the Property Streams
writeProperties(outFS); writeProperties(outFS);
// For position dependent records, hold where they were and now are // For position dependent records, hold where they were and now are
// As we go along, update, and hand over, to any Position Dependent // As we go along, update, and hand over, to any Position Dependent
// records we happen across // records we happen across
Hashtable oldToNewPositions = new Hashtable(); Hashtable oldToNewPositions = new Hashtable();
// First pass - figure out where all the position dependent
// records are going to end up, in the new scheme
// (Annoyingly, some powerpoing files have PersistPtrHolders
// that reference slides after the PersistPtrHolder)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int i=0; i<_records.length; i++) {
if(_records[i] instanceof PositionDependentRecord) {
PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
int oldPos = pdr.getLastOnDiskOffset();
int newPos = baos.size();
pdr.setLastOnDiskOffset(newPos);
oldToNewPositions.put(new Integer(oldPos),new Integer(newPos));
//System.out.println(oldPos + " -> " + newPos);
}
// Dummy write out, so the position winds on properly
_records[i].writeOut(baos);
}
// No go back through, actually writing ourselves out // First pass - figure out where all the position dependent
baos.reset(); // records are going to end up, in the new scheme
for(int i=0; i<_records.length; i++) { // (Annoyingly, some powerpoing files have PersistPtrHolders
// For now, we're only handling PositionDependentRecord's that // that reference slides after the PersistPtrHolder)
// happen at the top level. ByteArrayOutputStream baos = new ByteArrayOutputStream();
// In future, we'll need the handle them everywhere, but that's for(int i=0; i<_records.length; i++) {
// a bit trickier if(_records[i] instanceof PositionDependentRecord) {
if(_records[i] instanceof PositionDependentRecord) { PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
// We've already figured out their new location, and int oldPos = pdr.getLastOnDiskOffset();
// told them that int newPos = baos.size();
// Tell them of the positions of the other records though pdr.setLastOnDiskOffset(newPos);
PositionDependentRecord pdr = (PositionDependentRecord)_records[i]; oldToNewPositions.put(new Integer(oldPos),new Integer(newPos));
pdr.updateOtherRecordReferences(oldToNewPositions); //System.out.println(oldPos + " -> " + newPos);
} }
// Whatever happens, write out that record tree // Dummy write out, so the position winds on properly
_records[i].writeOut(baos); _records[i].writeOut(baos);
} }
// Update our cached copy of the bytes that make up the PPT stream
_docstream = baos.toByteArray();
// Write the PPT stream into the POIFS layer // No go back through, actually writing ourselves out
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); baos.reset();
outFS.createDocument(bais,"PowerPoint Document"); for(int i=0; i<_records.length; i++) {
// For now, we're only handling PositionDependentRecord's that
// happen at the top level.
// In future, we'll need the handle them everywhere, but that's
// a bit trickier
if(_records[i] instanceof PositionDependentRecord) {
// We've already figured out their new location, and
// told them that
// Tell them of the positions of the other records though
PositionDependentRecord pdr = (PositionDependentRecord)_records[i];
pdr.updateOtherRecordReferences(oldToNewPositions);
}
// Whatever happens, write out that record tree
_records[i].writeOut(baos);
}
// Update our cached copy of the bytes that make up the PPT stream
_docstream = baos.toByteArray();
// Write the PPT stream into the POIFS layer
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
outFS.createDocument(bais,"PowerPoint Document");
// Update and write out the Current User atom // Update and write out the Current User atom
int oldLastUserEditAtomPos = (int)currentUser.getCurrentEditOffset(); int oldLastUserEditAtomPos = (int)currentUser.getCurrentEditOffset();
Integer newLastUserEditAtomPos = (Integer)oldToNewPositions.get(new Integer(oldLastUserEditAtomPos)); Integer newLastUserEditAtomPos = (Integer)oldToNewPositions.get(new Integer(oldLastUserEditAtomPos));
if(newLastUserEditAtomPos == null) { if(newLastUserEditAtomPos == null) {
throw new HSLFException("Couldn't find the new location of the UserEditAtom that used to be at " + oldLastUserEditAtomPos); throw new HSLFException("Couldn't find the new location of the UserEditAtom that used to be at " + oldLastUserEditAtomPos);
} }
currentUser.setCurrentEditOffset(newLastUserEditAtomPos.intValue()); currentUser.setCurrentEditOffset(newLastUserEditAtomPos.intValue());
currentUser.writeToFS(outFS); currentUser.writeToFS(outFS);
// Write any pictures, into another stream // Write any pictures, into another stream
if (_pictures != null) { if (_pictures != null) {
ByteArrayOutputStream pict = new ByteArrayOutputStream(); ByteArrayOutputStream pict = new ByteArrayOutputStream();
for (int i = 0; i < _pictures.length; i++ ) { for (int i = 0; i < _pictures.length; i++ ) {
_pictures[i].write(pict); _pictures[i].write(pict);
} }
outFS.createDocument( outFS.createDocument(
new ByteArrayInputStream(pict.toByteArray()), "Pictures" new ByteArrayInputStream(pict.toByteArray()), "Pictures"
); );
} }
// Send the POIFSFileSystem object out to the underlying stream // Send the POIFSFileSystem object out to the underlying stream
outFS.writeFilesystem(out); outFS.writeFilesystem(out);
} }
/* ******************* adding methods follow ********************* */ /* ******************* adding methods follow ********************* */