Author: nick
Date: Mon Mar 27 11:42:13 2006
New Revision: 389234

URL: http://svn.apache.org/viewcvs?rev=389234&view=rev
Log:
Developer helper program to try to help match Slide IDs between 
SlidePersistAtoms and Slides

Added:
    
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/dev/SlideIdListing.java

Added: 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/dev/SlideIdListing.java
URL: 
http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/dev/SlideIdListing.java?rev=389234&view=auto
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/dev/SlideIdListing.java
 (added)
+++ 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/dev/SlideIdListing.java
 Mon Mar 27 11:42:13 2006
@@ -0,0 +1,164 @@
+
+/* ====================================================================
+   Copyright 2002-2004   Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+
+
+package org.apache.poi.hslf.dev;
+
+import org.apache.poi.hslf.*;
+import org.apache.poi.hslf.record.*;
+import org.apache.poi.hslf.usermodel.SlideShow;
+
+import org.apache.poi.util.LittleEndian;
+
+import java.io.*;
+import java.util.Hashtable;
+
+/**
+ * Gets all the different things that have Slide IDs (of sorts)
+ *  in them, and displays them, so you can try to guess what they
+ *  all mean
+ */
+public class SlideIdListing {
+       private static byte[] fileContents;
+
+       public static void main(String[] args) throws Exception {
+               if(args.length < 1) {
+                       System.err.println("Need to give a filename");
+                       System.exit(1);
+               }
+
+
+               // Create the slideshow object, for normal working with
+               HSLFSlideShow hss = new HSLFSlideShow(args[0]);
+               SlideShow ss = new SlideShow(hss);
+               
+               // Grab the base contents
+               fileContents = hss.getUnderlyingBytes();
+               Record[] records = hss.getRecords();
+               Record[] latestRecords = ss.getMostRecentCoreRecords();
+               
+               // Grab any records that interest us
+               Document document = null;
+               for(int i=0; i<latestRecords.length; i++) {
+                       if(latestRecords[i] instanceof Document) {
+                               document = (Document)latestRecords[i];
+                       }
+               }
+               
+               System.out.println("");
+               
+               
+               // Look for SlidePersistAtoms, and report what they have to
+               //  say about possible slide IDs
+               SlideListWithText[] slwts = document.getSlideListWithTexts();
+               for(int i=0; i<slwts.length; i++) {
+                       Record[] cr = slwts[i].getChildRecords();
+                       for(int j=0; j<cr.length; j++) {
+                               if(cr[j] instanceof SlidePersistAtom) {
+                                       SlidePersistAtom spa = 
(SlidePersistAtom)cr[j];
+                                       System.out.println("SlidePersistAtom 
knows about slide:");
+                                       System.out.println("\t" + 
spa.getRefID());
+                                       System.out.println("\t" + 
spa.getSlideIdentifier());
+                               }
+                       }
+               }
+               
+               System.out.println("");
+               
+               // Look for latest core records that are slides or notes
+               for(int i=0; i<latestRecords.length; i++) {
+                       if(latestRecords[i] instanceof Slide) {
+                               Slide s = (Slide)latestRecords[i];
+                               SlideAtom sa = s.getSlideAtom();
+                               System.out.println("Found the latest version of 
a slide record:");
+                               System.out.println("\tCore ID is " + 
s.getSheetId());
+                               System.out.println("\t(Core Records count is " 
+ i + ")");
+                               System.out.println("\tDisk Position is " + 
s.getLastOnDiskOffset());
+                               System.out.println("\tMaster ID is " + 
sa.getMasterID());
+                               System.out.println("\tNotes ID is " + 
sa.getNotesID());
+                       }
+               }
+               System.out.println("");
+               for(int i=0; i<latestRecords.length; i++) {
+                       if(latestRecords[i] instanceof Notes) {
+                               Notes n = (Notes)latestRecords[i];
+                               NotesAtom na = n.getNotesAtom();
+                               System.out.println("Found the latest version of 
a notes record:");
+                               System.out.println("\tCore ID is " + 
n.getSheetId());
+                               System.out.println("\t(Core Records count is " 
+ i + ")");
+                               System.out.println("\tDisk Position is " + 
n.getLastOnDiskOffset());
+                               System.out.println("\tMatching slide is " + 
na.getSlideID());
+                       }
+               }
+
+               System.out.println("");
+               
+               // Find any persist ones first
+               int pos = 0;
+               for(int i=0; i<records.length; i++) {
+                       Record r = records[i];
+
+                       if(r.getRecordType() == 6001l) {
+                               // PersistPtrFullBlock
+                               System.out.println("Found PersistPtrFullBlock 
at " + pos + " (" + Integer.toHexString(pos) + ")");
+                       }
+                       if(r.getRecordType() == 6002l) {
+                               // PersistPtrIncrementalBlock
+                               System.out.println("Found 
PersistPtrIncrementalBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
+                               PersistPtrHolder pph = (PersistPtrHolder)r;
+
+                               // Check the sheet offsets
+                               int[] sheetIDs = pph.getKnownSlideIDs();
+                               Hashtable sheetOffsets = 
pph.getSlideLocationsLookup();
+                               for(int j=0; j<sheetIDs.length; j++) {
+                                       Integer id = new Integer(sheetIDs[j]);
+                                       Integer offset = 
(Integer)sheetOffsets.get(id);
+
+                                       System.out.println("  Knows about sheet 
" + id);
+                                       System.out.println("    That sheet 
lives at " + offset);
+
+                                       Record atPos = 
findRecordAtPos(offset.intValue());
+                                       System.out.println("    The record at 
that pos is of type " + atPos.getRecordType());
+                                       System.out.println("    The record at 
that pos has class " + atPos.getClass().getName());
+
+                                       if(! (atPos instanceof 
PositionDependentRecord)) {
+                                               System.out.println("    ** The 
record class isn't position aware! **");
+                                       }
+                               }
+                       }
+
+                       // Increase the position by the on disk size
+                       ByteArrayOutputStream baos = new 
ByteArrayOutputStream();
+                       r.writeOut(baos);
+                       pos += baos.size();
+               }
+
+               System.out.println("");
+       }
+
+
+       // Finds the record at a given position
+       public static Record findRecordAtPos(int pos) {
+               long type = LittleEndian.getUShort(fileContents, pos+2);
+               long rlen = LittleEndian.getUInt(fileContents, pos+4);
+
+               Record r = 
Record.createRecordForType(type,fileContents,pos,(int)rlen+8);
+               
+               return r;
+       }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/

Reply via email to