ASF Bugzilla – Attachment 31296 Details for
Bug 54916
[PATCH] POI does not always read all the slides in pptx files
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
delegate-example to handle parent relations
DelegateTest.java (text/plain), 4.01 KB, created by
Andreas Beeker
on 2014-02-08 21:51:37 UTC
(
hide
)
Description:
delegate-example to handle parent relations
Filename:
MIME Type:
Creator:
Andreas Beeker
Created:
2014-02-08 21:51:37 UTC
Size:
4.01 KB
patch
obsolete
>package de.kiwiwings.javatests; > >import java.util.HashMap; >import java.util.Map; > >public class DelegateTest { > public static void main(String[] args) { > XSLFSlide slide1 = new XSLFSlide(); > XSLFSlide slide2 = new XSLFSlide(); > XSLFSlide slide3 = new XSLFSlide(); > XSLFSlideMaster sm = new XSLFSlideMaster(); > XSLFSlideMaster sm2 = sm.addParentRelation(slide1, new PackageRelationship("refId2", "slide1", "master1")); > assert(sm == sm2); > XSLFSlideMaster sm3 = sm.addParentRelation(slide2, new PackageRelationship("refId2", "slide2", "master1")); > assert(sm != sm3); > XSLFSlideMaster sm4 = sm3.addParentRelation(slide3, new PackageRelationship("refId3", "slide3", "master1")); > > for (POIXMLDocumentPart oc : new POIXMLDocumentPart[]{ slide1, sm2, sm3, sm4 }) { > POIXMLDocumentPart p = oc.getParent(); > assert( (oc.isDelegate() && oc.instanceId == 2) || (!oc.isDelegate() && oc.instanceId == 1) ); > String str = "Parent: "+(p == null ? null : p.instanceId) > +"\tPack-Rel: "+oc.getParentRef() > +"\tSubClass: "+oc.getThis().getClass().getSimpleName() > +" ("+(oc.instanceId==1?"original":"delegate")+")"; > System.out.println(str); > } > } >} > >abstract class POIXMLDocumentPart { > private Map<POIXMLDocumentPart,PackageRelationship> parentRefs; > private POIXMLDocumentPart _parent; > > public final int instanceId = (getThis() == null ? 0 : getThis().instanceId+1); // only for test > > protected POIXMLDocumentPart addParentRelation(POIXMLDocumentPart parent, PackageRelationship ref) { > if (isDelegate()) { > return getThis().addParentRelation(parent, ref); > } > > assert(parent != null); > POIXMLDocumentPart ret = (_parent == null) ? this : createDelegate(); > ret._parent = parent; > setParentRef(parent, ref); > return ret; > } > > protected POIXMLDocumentPart getThis() { > return this; > } > > protected boolean isDelegate() { > return this != getThis(); > } > > protected abstract POIXMLDocumentPart createDelegate(); > > public POIXMLDocumentPart getParent() { > return _parent; > } > > public PackageRelationship getParentRef() { > return getParentRef(_parent); > } > > public PackageRelationship getParentRef(POIXMLDocumentPart parent) { > if (isDelegate()) { > return getThis().getParentRef(parent); > } > if (parentRefs == null) return null; > PackageRelationship i = parentRefs.get(parent); > return (i != null ? i : null); > } > > protected void setParentRef(POIXMLDocumentPart parent, PackageRelationship ref) { > if (isDelegate()) { > getThis().setParentRef(parent, ref); > } > if (parentRefs == null) { > parentRefs = new HashMap<POIXMLDocumentPart,PackageRelationship>(); > } > parentRefs.put(parent, ref); > } >} > >abstract class XSLFSheet extends POIXMLDocumentPart { > >} > >class XSLFSlide extends XSLFSheet { > > class XSLFSlideDelegate extends XSLFSlide { > protected XSLFSlide getThis() { > return XSLFSlide.this; > } > } > > protected XSLFSlide getThis() { > return this; > } > > protected POIXMLDocumentPart createDelegate() { > return new XSLFSlideDelegate(); > } > > // narrow cast for convenience > public XSLFSlide addParentRelation(POIXMLDocumentPart parent, PackageRelationship ref) { > return (XSLFSlide)super.addParentRelation(parent, ref); > } >} > >class XSLFSlideMaster extends XSLFSheet { > class XSLFSlideMasterDelegate extends XSLFSlideMaster { > protected XSLFSlideMaster getThis() { > return XSLFSlideMaster.this; > } > } > > protected XSLFSlideMaster getThis() { > return this; > } > > protected POIXMLDocumentPart createDelegate() { > return new XSLFSlideMasterDelegate(); > } > > protected XSLFSlideMaster addParentRelation(POIXMLDocumentPart parent, PackageRelationship ref) { > return (XSLFSlideMaster)super.addParentRelation(parent, ref); > } >} > >class PackageRelationship { > String id; > String source; > String target; > public PackageRelationship(String id, String source, String target) { > this.id = id; > this.source = source; > this.target = target; > } > public String toString() { > return source+"--("+id+")-->"+target; > } >}
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 Raw
Actions:
View
Attachments on
bug 54916
:
30248
|
30249
|
31296
|
33343
|
33392