Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Copyright 2007-2008, Plutext Pty Ltd.
   *   
   *  This file is part of docx4j.
  
      docx4j is 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.docx4j.openpackaging.parts.PresentationML;
 
 import java.util.List;
 
 
 
 
 
 public final class SlidePart extends JaxbPmlPart<Sld> {
 	
 	protected static Logger log = LoggerFactory.getLogger(SlidePart.class);	
 	
 	public SlidePart(PartName partNamethrows InvalidFormatException {
 		super(partName);
 		init();
 	}
 
 	public SlidePart() throws InvalidFormatException {
 		super(new PartName("/ppt/slides/slide1.xml"));
 		init();
 	}
 	
 	public void init() {		
 		// Used if this Part is added to [Content_Types].xml 
 
 		// Used when this Part is added to a rels 
 		
 	}
 	
 	
 	public static Sld createSld() throws JAXBException {
 
 		ObjectFactory factory = Context.getpmlObjectFactory(); 
 		Sld sld = factory.createSld();
 		sld.setCSld
 		// sld.setClrMapOvr(value)
 		
 		return sld;		
 	}
 	
 		if (!=null) {
 			return ;		
 		}
 		
 		 = ResolvedLayout.resolveSlideLayout(this);
 		return ;
 	}	


    
Unmarshal XML data from the specified InputStream and return the resulting content tree. Validation event location information may be incomplete when using this form of the unmarshal API.

Implements Unmarshal Global Root Element.

Parameters:
is the InputStream to unmarshal XML data from
Returns:
the newly created root object of the java content tree
Throws:
javax.xml.bind.JAXBException If any unexpected errors occur while unmarshalling
    public Sld unmarshaljava.io.InputStream is ) throws JAXBException {
    	
		try {
			// InputStream to Document
				= DocumentBuilderFactory.newInstance();
			/* Note: 2013 04 25
			 * 
			 * If a slide contains:
			 * 
		          <a:graphicData uri="http://schemas.openxmlformats.org/presentationml/2006/ole">
		            <mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
		              <mc:Choice xmlns:v="urn:schemas-microsoft-com:vml" Requires="v">
		                <p:oleObj spid="_x0000_s574471" name="Slide" 
		                          r:id="rId4" imgW="4657680" imgH="3492360" progId="PowerPoint.Slide.8">
		                  <p:embed/>
		                </p:oleObj>
		              </mc:Choice>			 
		     * 
		     * this alternate content wouldn't get stripped by:
		     * 
		     * 		(Sld) binder.unmarshal( doc );
		     * 
		     * because the content model for a:graphicData is:
		     * 
		     *     <xsd:sequence>
				      <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="strict"/>
				    </xsd:sequence>
		     * 
		     * The problem with this is that JAXB marshalls it as:
		     * 
		          <a:graphicData uri="http://schemas.openxmlformats.org/presentationml/2006/ole">
		            <mc:AlternateContent>
		              <mc:Choice Requires="v">
		                <p:oleObj xmlns:v="urn:schemas-microsoft-com:vml" imgH="3492360" imgW="4657680" name="Slide" progId="PowerPoint.Slide.8" r:id="rId4" spid="_x0000_s574471">
		                  <p:embed/>
		                </p:oleObj>
		              </mc:Choice>
		     *
		     * (note the namespace declaration is legitimately missing from the mc:Choice element;
		     *  but this causes Powerpoint 2010 to say the file needs to be repaired!!!).
		     *  
		     *  I don't think there's a way to cajole JAXB to add a namespace where it is not necessary.
		     *  After marshalling, we could post process to add it back in (not with XSLT, since
		     *  that'll do its own thing with namespaces, but we could with regex).
		     *  
		     *  But it is better, I think to always get rid of the alternate content entirely.
			 */
			.info("proactively pre-processing to remove any AlternateContent");
			eventHandler.setContinue(true);
			// There is no JAXBResult(binder),
			// so use a 
			DOMResult result = new DOMResult();
			Templates mcPreprocessorXslt = JaxbValidationEventHandler.getMcPreprocessor();
			XmlUtils.transform(docmcPreprocessorXsltnullresult);
			doc = (org.w3c.dom.Document)result.getNode();
			try {
//				eventHandler.setContinue(false); // review 
				.setEventHandler(eventHandler);
				 =  (Sld.unmarshaldoc );
catch (ClassCastException cce) {
 
				.warn("Binder not available for this slide");
				 = (Sldu.unmarshaldoc );					
				/* 
				 * Work around for issue with JAXB binder, in Java 1.6 
				 * encountered with /src/test/resources/jaxb-binder-issue.docx 
				 * See http://old.nabble.com/BinderImpl.associativeUnmarshal-ClassCastException-casting-to-JAXBElement-td32456585.html
				 * and  http://java.net/jira/browse/JAXB-874
				 * 
				 * java.lang.ClassCastException: org.docx4j.wml.PPr cannot be cast to javax.xml.bind.JAXBElement
					at com.sun.xml.internal.bind.v2.runtime.ElementBeanInfoImpl$IntercepterLoader.intercept(Unknown Source)
					at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(Unknown Source)
					at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.endElement(Unknown Source)
					at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement(Unknown Source)
					at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(Unknown Source)
					at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(Unknown Source)
					at com.sun.xml.internal.bind.v2.runtime.BinderImpl.associativeUnmarshal(Unknown Source)
					at com.sun.xml.internal.bind.v2.runtime.BinderImpl.unmarshal(Unknown Source)
					at org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart.unmarshal(MainDocumentPart.java:321)
				 */
			}
			return ;
catch (Exception e ) {
			return null;
		}
    }
    public Sld unmarshal(org.w3c.dom.Element elthrows JAXBException {
    	// Note comments above about AlternateContent.  
    	// unmarshalling here from an Element doesn't implement that fix, so beware.
    	
		try {
			eventHandler.setContinue(false);
			.setEventHandler(eventHandler);
			try {
				 =  (Sld.unmarshalel );
catch (UnmarshalException ue) {
				.info("encountered unexpected content; pre-processing");
				try {
					if (el instanceof org.w3c.dom.Document) {
						doc = (org.w3c.dom.Documentel;
else {
						// Hope for the best. Dodgy though; what if this is
						// being used on something deep in the tree?
						// TODO: revisit
						doc = el.getOwnerDocument();
					}
					eventHandler.setContinue(true);
					DOMResult result = new DOMResult();
					Templates mcPreprocessorXslt = JaxbValidationEventHandler
					XmlUtils.transform(docmcPreprocessorXsltnullresult);
					doc = (org.w3c.dom.Documentresult.getNode();
							.unmarshal(doc);
catch (Exception e) {
					throw new JAXBException("Preprocessing exception"e);
				}
			}
			return ;
catch (JAXBException e) {
			throw e;
		}
	}	
    
    
	public boolean setPartShortcut(Part part) {
		if (part == null ){
			return false;
else {
			return setPartShortcut(partpart.getRelationshipType() );
		}
	}	
	public boolean setPartShortcut(Part partString relationshipType) {
		// Since each part knows its relationshipsType,
		// why is this passed in as an arg?
		// Answer: where the relationshipType is ascertained
		// from the rel itself, it is the most authoritative.
		// Note that we normally use the info in [Content_Types]
		// to create a part of the correct type.  This info
		// will not necessary correspond to the info in the rel!
		if (relationshipType==null) {
			.warn("trying to set part shortcut against a null relationship type.");
			return false;
		}
		if (relationshipType.equals(.)) {
			return true;			
else if (relationshipType.equals(.)) {
			return true;					
else {	
			return false;
		}
	}
		return ;
	}
		return ;
	}
    
New to GrepCode? Check out our FAQ X