Package org.glox4j.samples

Source Code of org.glox4j.samples.ExtractGloxFromExemplar

package org.glox4j.samples;

import java.util.Map.Entry;

import javax.xml.bind.JAXBElement;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.docx4j.XmlUtils;
import org.docx4j.dml.diagram.CTDataModel;
import org.docx4j.dml.diagram.CTDescription;
import org.docx4j.dml.diagram.CTDiagramDefinitionHeader;
import org.docx4j.dml.diagram.CTElemPropSet;
import org.docx4j.dml.diagram.CTName;
import org.docx4j.dml.diagram.CTPt;
import org.docx4j.dml.diagram.CTSampleData;
import org.docx4j.dml.diagram.ObjectFactory;
import org.docx4j.dml.wordprocessingDrawing.Inline;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.contenttype.ContentTypes;
import org.docx4j.openpackaging.packages.OpcPackage;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.Part;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.DrawingML.DiagramColorsPart;
import org.docx4j.openpackaging.parts.DrawingML.DiagramDataPart;
import org.docx4j.openpackaging.parts.DrawingML.DiagramLayoutHeaderPart;
import org.docx4j.openpackaging.parts.DrawingML.DiagramLayoutPart;
import org.docx4j.openpackaging.parts.DrawingML.DiagramStylePart;
import org.docx4j.samples.AbstractSample;
import org.docx4j.wml.P;
import org.glox4j.openpackaging.packages.GloxPackage;

/**
* This sample can be used to generate a
* SmartArt glox file from an exemplar
* docx or pptx containing SmartArt.
*
* The exemplar is assumed to contain
* only one piece of SmartArt.
*
* @author jharrop
*
*/
public class ExtractGloxFromExemplar extends AbstractSample {
 
  private static Logger log = LoggerFactory.getLogger(ExtractGloxFromExemplar.class);           

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
   
    try {
      getInputFilePath(args);
    } catch (IllegalArgumentException e) {
      inputfilepath = System.getProperty("user.dir") + "/sample-docs/glox/extracted/CirclePictureHierarchy.docx";
    }
    String outputdir = inputfilepath.substring(0, inputfilepath.lastIndexOf("/")+1);
    String outputfilename = inputfilepath.substring(inputfilepath.lastIndexOf("/"))+ ".glox";
   
    OpcPackage opcPackage = OpcPackage.load(new java.io.File(inputfilepath));   
   
    GloxPackage gloxPackage = new GloxPackage();   
   
    // DiagramLayoutPart - from the exemplar docx or pptx 
    // .. just the first one we encounter
    DiagramLayoutPart source = null;
    for (Entry<PartName,Part> entry : opcPackage.getParts().getParts().entrySet() ) {
     
      if (entry.getValue().getContentType().equals(
          ContentTypes.DRAWINGML_DIAGRAM_LAYOUT )) {
        source = (DiagramLayoutPart)entry.getValue();
        break;
      }
    }
    if (source==null) {
      System.out.println("No SmartArt found in " + inputfilepath);
      return
    }

    // .. don't bother cloning, just attach it
    DiagramLayoutPart target = new DiagramLayoutPart(new PartName("/diagrams/layout1.xml"));
    target.setJaxbElement(
        XmlUtils.deepCopy(source.getJaxbElement()) );
    gloxPackage.addTargetPart(target);
   
    // DiagramLayoutHeaderPart
    DiagramLayoutHeaderPart diagramLayoutHeaderPart = new DiagramLayoutHeaderPart();
    ObjectFactory factory = new ObjectFactory();
    CTDiagramDefinitionHeader header = factory.createCTDiagramDefinitionHeader();
    diagramLayoutHeaderPart.setJaxbElement(header);
   
    String uniqueId = target.getJaxbElement().getUniqueId();
    if (uniqueId!=null) {
      header.setUniqueId( uniqueId );
      System.out.println("Creating glox for " + uniqueId);
     
      // Can we make a filename out of this?
      if (uniqueId.indexOf("/")>0
          && uniqueId.lastIndexOf("/")!= uniqueId.length()-1 ) {
        outputfilename = uniqueId.substring(uniqueId.lastIndexOf("/")+1) + ".glox";
      }
    }
   
    if (target.getJaxbElement().getTitle()==null
        || target.getJaxbElement().getTitle().isEmpty()
        || (target.getJaxbElement().getTitle().size()==1
            && target.getJaxbElement().getTitle().get(0).getVal().isEmpty())) {
      CTName title = factory.createCTName();
      title.setVal("some title");
      header.getTitle().add(title);
    } else {
      header.getTitle().addAll(target.getJaxbElement().getTitle() );     
    }

    if (target.getJaxbElement().getDesc()==null
        || target.getJaxbElement().getDesc().isEmpty()
        || (target.getJaxbElement().getDesc().size()==1
            && target.getJaxbElement().getDesc().get(0).getVal().isEmpty())) {
      CTDescription desc = factory.createCTDescription();
      desc.setVal("some desc");
      header.getDesc().add(desc);
    } else {
      header.getDesc().addAll(target.getJaxbElement().getDesc() );     
    }
   
    gloxPackage.addTargetPart(diagramLayoutHeaderPart);
   

    // All done..
    String outfile = outputdir + outputfilename;
    System.out.println("Writing " + outfile);
    gloxPackage.save(new java.io.File(outfile ));
   
    System.out.println("Done!");
   
  }
 
 
}
TOP

Related Classes of org.glox4j.samples.ExtractGloxFromExemplar

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.