for (Map.Entry<Integer,Integer> me : pph.getSlideLocationsLookup().entrySet()) { Integer oldOffset = slideLocations.put(me.getKey(), me.getValue()); if (oldOffset != null) { if (uea == null || pph == null || uea.getPersistPointersOffset() != pph.getLastOnDiskOffset()) { throw new EncryptedDocumentException("UserEditAtom and PersistPtrHolder must exist and their offset need to match."); recordMap.put(pph.getLastOnDiskOffset(), pph); recordMap.put(uea.getLastOnDiskOffset(), uea); pph.clear(); for (Map.Entry<Integer,Integer> me : slideLocations.entrySet()) { pph.addSlideLookup(me.getKey(), me.getValue());
int[] ids = pph.getKnownSlideIDs(); for (int j = 0; j < ids.length; j++) { Integer id = Integer.valueOf(ids[j]); Hashtable<Integer,Integer> thisSetOfLocations = pph.getSlideLocationsLookup(); for (int j = 0; j < ids.length; j++) { Integer id = Integer.valueOf(ids[j]);
/** * Write the contents of the record back, so it can be written * to disk */ @Override public void writeOut(OutputStream out) throws IOException { normalizePersistDirectory(); out.write(_header); out.write(_ptrData); }
TreeMap<Integer,Integer> tm = new TreeMap<>(ptr.getSlideLocationsLookup()); ptr.clear(); int maxSlideId = -1; for (Map.Entry<Integer,Integer> me : tm.entrySet()) { continue; ptr.addSlideLookup(me.getKey(), me.getValue()); maxSlideId = Math.max(me.getKey(), maxSlideId);
private int addPersistentObject(PositionDependentRecord slideRecord) { slideRecord.setLastOnDiskOffset(HSLFSlideShowImpl.UNSET_OFFSET); _hslfSlideShow.appendRootLevelRecord((Record)slideRecord); // For position dependent records, hold where they were and now are // As we go along, update, and hand over, to any Position Dependent // records we happen across Map<RecordTypes,PositionDependentRecord> interestingRecords = new HashMap<>(); try { _hslfSlideShow.updateAndWriteDependantRecords(null,interestingRecords); } catch (IOException e) { throw new HSLFException(e); } PersistPtrHolder ptr = (PersistPtrHolder)interestingRecords.get(RecordTypes.PersistPtrIncrementalBlock); UserEditAtom usr = (UserEditAtom)interestingRecords.get(RecordTypes.UserEditAtom); // persist ID is UserEditAtom.maxPersistWritten + 1 int psrId = usr.getMaxPersistWritten() + 1; // Last view is now of the slide usr.setLastViewType((short) UserEditAtom.LAST_VIEW_SLIDE_VIEW); // increment the number of persistent objects usr.setMaxPersistWritten(psrId); // Add the new slide into the last PersistPtr // (Also need to tell it where it is) int slideOffset = slideRecord.getLastOnDiskOffset(); slideRecord.setLastOnDiskOffset(slideOffset); ptr.addSlideLookup(psrId, slideOffset); logger.log(POILogger.INFO, "New slide/object ended up at " + slideOffset); return psrId; }
PersistPtrHolder ptr = (PersistPtrHolder)records[ptrIdx]; UserEditAtom uea = ((UserEditAtom)records[ueaIdx]); dea.setLastOnDiskOffset(ptr.getLastOnDiskOffset()-1); int nextSlideId = uea.getMaxPersistWritten()+1; ptr.addSlideLookup(nextSlideId, ptr.getLastOnDiskOffset()-1); uea.setEncryptSessionPersistIdRef(nextSlideId); uea.setMaxPersistWritten(nextSlideId);
Hashtable<Integer,Integer> entries = ptr.getSlideLocationsLookup(); for(Integer id : entries.keySet()) { Integer offset = entries.get(id);
/** * At write-out time, update the references to the sheets to their * new positions */ public void updateOtherRecordReferences(Hashtable<Integer,Integer> oldToNewReferencesLookup) { int[] slideIDs = getKnownSlideIDs(); // Loop over all the slides we know about // Find where they used to live, and where they now live // Then, update the right bit of _ptrData with their new location for(int i=0; i<slideIDs.length; i++) { Integer id = Integer.valueOf(slideIDs[i]); Integer oldPos = (Integer)_slideLocations.get(id); Integer newPos = (Integer)oldToNewReferencesLookup.get(oldPos); if(newPos == null) { logger.log(POILogger.WARN, "Couldn't find the new location of the \"slide\" with id " + id + " that used to be at " + oldPos); logger.log(POILogger.WARN, "Not updating the position of it, you probably won't be able to find it any more (if you ever could!)"); newPos = oldPos; } // Write out the new location Integer dataOffset = (Integer)_slideOffsetDataLocation.get(id); LittleEndian.putInt(_ptrData,dataOffset.intValue(),newPos.intValue()); // Update our hashtable _slideLocations.remove(id); _slideLocations.put(id,newPos); } }
ptr.addSlideLookup(psrId, slideOffset);
recordMap.put(psrOffset, ptr); for (Map.Entry<Integer, Integer> entry : ptr.getSlideLocationsLookup().entrySet()) { Integer offset = entry.getValue(); Integer id = entry.getKey();
int[] ids = pph.getKnownSlideIDs(); for (int id : ids) { mostRecentByBytes.remove(id); Map<Integer,Integer> thisSetOfLocations = pph.getSlideLocationsLookup(); for (int id : ids) { mostRecentByBytes.put(id, thisSetOfLocations.get(id));
ptr.addSlideLookup(sp.getRefID(), slideOffset); logger.log(POILogger.INFO, "New slide ended up at " + slideOffset);
PersistPtrHolder ptr = (PersistPtrHolder)r; Integer encOffset = ptr.getSlideLocationsLookup().get(userEditAtomWithEncryption.getEncryptSessionPersistIdRef()); if (encOffset == null) {
int[] sheetIDs = pph.getKnownSlideIDs(); Hashtable sheetOffsets = pph.getSlideLocationsLookup(); for(int j=0; j<sheetIDs.length; j++) { Integer id = Integer.valueOf(sheetIDs[j]);
for (Map.Entry<Integer, Integer> entry : ptr.getSlideLocationsLookup().entrySet()) { persistIds.put(oldToNewPositions.get(entry.getValue()), entry.getKey());
Map<Integer,Integer> sheetOffsets = pph.getSlideLocationsLookup(); for(int id : pph.getKnownSlideIDs()) { Integer offset = sheetOffsets.get(id);
int[] sheetIDs = pph.getKnownSlideIDs(); Hashtable sheetOffsets = pph.getSlideLocationsLookup(); for(int j=0; j<sheetIDs.length; j++) { Integer id = Integer.valueOf(sheetIDs[j]);
int[] sheetIDs = pph.getKnownSlideIDs(); Map<Integer,Integer> sheetOffsets = pph.getSlideLocationsLookup(); for(int j=0; j<sheetIDs.length; j++) { Integer id = sheetIDs[j];
int[] slideIds = pph.getKnownSlideIDs(); int maxSlideId = -1; for(int i=0; i<slideIds.length; i++) { (Integer)pph.getSlideLocationsLookup().get( Integer.valueOf(maxSlideId) ) ).intValue();