ASF Bugzilla – Attachment 32955 Details for
Bug 58205
getSlideMasters() returns the master slides in the incorrect order
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch with proposed changes
0001-BUG-XMLSlideShow.getSlideMasters-returns-the-master-.patch (text/plain), 5.16 KB, created by
mark.o
on 2015-08-04 08:29:14 UTC
(
hide
)
Description:
patch with proposed changes
Filename:
MIME Type:
Creator:
mark.o
Created:
2015-08-04 08:29:14 UTC
Size:
5.16 KB
patch
obsolete
>From 8a87034826eb855c8d71dc3df66510738e6d4451 Mon Sep 17 00:00:00 2001 >From: Mark Olesen <Mark.Olesen@faurecia.com> >Date: Tue, 4 Aug 2015 10:21:36 +0200 >Subject: [PATCH] BUG: XMLSlideShow.getSlideMasters() returns the master slides in the incorrect order > >- Relying on the order returned by HashMap is dubious. > In my case it returned [slideMaster2, slideMaster1] > > Instead, build the list as per the slide-list creation. > >- as an alternative, could use LinkedHashMap for storage, but there is > no real advantage since the lookup isn't needed now. >--- > .../apache/poi/xslf/usermodel/XMLSlideShow.java | 30 +++++++++++-------- > 1 files changed, 17 insertions(+), 13 deletions(-) > >diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java >index 453c1b1..4ea19e6 100644 >--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java >+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java >@@ -57,6 +57,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMasterIdListE > import org.openxmlformats.schemas.presentationml.x2006.main.CTPresentation; > import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdList; > import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry; >+import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdListEntry; > import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideSize; > import org.openxmlformats.schemas.presentationml.x2006.main.PresentationDocument; > >@@ -72,7 +73,7 @@ public class XMLSlideShow extends POIXMLDocument implements SlideShow { > > private CTPresentation _presentation; > private List<XSLFSlide> _slides; >- private Map<String, XSLFSlideMaster> _masters; >+ private List<XSLFSlideMaster> _masters; > private List<XSLFPictureData> _pictures; > private XSLFTableStyles _tableStyles; > private XSLFNotesMaster _notesMaster; >@@ -126,15 +127,14 @@ public class XMLSlideShow extends POIXMLDocument implements SlideShow { > PresentationDocument doc = > PresentationDocument.Factory.parse(getCorePart().getInputStream()); > _presentation = doc.getPresentation(); >- Map<String, XSLFSlide> shIdMap = new HashMap<String, XSLFSlide>(); > >- _masters = new HashMap<String, XSLFSlideMaster>(); >+ Map<String, XSLFSlideMaster> masterMap = new HashMap<String, XSLFSlideMaster>(); >+ Map<String, XSLFSlide> shIdMap = new HashMap<String, XSLFSlide>(); > for (POIXMLDocumentPart p : getRelations()) { > if (p instanceof XSLFSlide) { > shIdMap.put(p.getPackageRelationship().getId(), (XSLFSlide) p); > } else if (p instanceof XSLFSlideMaster) { >- XSLFSlideMaster master = (XSLFSlideMaster)p; >- _masters.put(p.getPackageRelationship().getId(), master); >+ masterMap.put(p.getPackageRelationship().getId(), (XSLFSlideMaster) p); > } else if (p instanceof XSLFTableStyles){ > _tableStyles = (XSLFTableStyles)p; > } else if (p instanceof XSLFNotesMaster) { >@@ -144,9 +144,15 @@ public class XMLSlideShow extends POIXMLDocument implements SlideShow { > } > } > >- _slides = new ArrayList<XSLFSlide>(); >+ _masters = new ArrayList<XSLFSlideMaster>(masterMap.size()); >+ for (CTSlideMasterIdListEntry masterId : _presentation.getSldMasterIdLst().getSldMasterIdList()) { >+ XSLFSlideMaster master = masterMap.get(masterId.getId2()); >+ _masters.add(master); >+ } >+ >+ _slides = new ArrayList<XSLFSlide>(shIdMap.size()); > if (_presentation.isSetSldIdLst()) { >- for (CTSlideIdListEntry slId : _presentation.getSldIdLst().getSldIdArray()) { >+ for (CTSlideIdListEntry slId : _presentation.getSldIdLst().getSldIdList()) { > XSLFSlide sh = shIdMap.get(slId.getId2()); > if (sh == null) { > _logger.log(POILogger.WARN, "Slide with r:id " + slId.getId() + " was defined, but didn't exist in package, skipping"); >@@ -239,13 +245,11 @@ public class XMLSlideShow extends POIXMLDocument implements SlideShow { > } > > /** >- * Create a blank slide. >+ * Create a blank slide using the default (first) master. > */ >+ @Override > public XSLFSlide createSlide() { >- String masterId = _presentation.getSldMasterIdLst().getSldMasterIdArray(0).getId2(); >- XSLFSlideMaster master = _masters.get(masterId); >- >- XSLFSlideLayout layout = master.getLayout(SlideLayout.BLANK); >+ XSLFSlideLayout layout = _masters.get(0).getLayout(SlideLayout.BLANK); > if(layout == null) throw new IllegalArgumentException("Blank layout was not found"); > > return createSlide(layout); >@@ -350,7 +354,7 @@ public class XMLSlideShow extends POIXMLDocument implements SlideShow { > > @Override > public List<XSLFSlideMaster> getSlideMasters() { >- return new ArrayList<XSLFSlideMaster>(_masters.values()); >+ return _masters; > } > > /** >-- >1.7.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 58205
: 32955