Package org.docx4j.model.fields

Source Code of org.docx4j.model.fields.AbstractFormattingSwitchTest

package org.docx4j.model.fields;

import java.util.ArrayList;
import java.util.List;

import javax.xml.transform.TransformerException;

import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.DocPropsCustomPart;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.CTSimpleField;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.R;
import org.docx4j.wml.Text;
import org.junit.Ignore;

/**
* Please note, these aren't tests as such, but rather
* code which helps you to understand how Word formats
* fields, how it compares to what docx4j does, and
* opportunities to improve docx4j's ability to mimic
* Word.
*
* Real JUnit tests can be found in src/test/java.
*
*/
@Ignore
public class AbstractFormattingSwitchTest {

  List<SwitchTestQuad> quads = new ArrayList<SwitchTestQuad>();

  String formattingSwitch = null;
  String instruction = null;

  /**
   * @param args
   * @throws Docx4JException
   */
  public static void main(String[] args) throws Docx4JException {

    AbstractFormattingSwitchTest nfst = new AbstractFormattingSwitchTest();
    nfst.testFormatting();
  }

//  @Test
  public void testFormatting() throws Docx4JException {

    StringBuffer sb = new StringBuffer();
   
    NumberExtractor nex = new NumberExtractor(".");   

    int i = 1;
    for (SwitchTestQuad tt : quads) {

      CTSimpleField simpleField = createSimpleField(tt, "myvar" +i, false);

      //System.out.println(XmlUtils.marshaltoString(simpleField, true, true));
      sb.append("\n\n" + simpleField.getInstr());

      FldSimpleModel fsm = new FldSimpleModel();
      try {
        fsm.build(simpleField.getInstr());
      } catch (TransformerException e) {
        e.printStackTrace();
      }

      try {
        //sb.append("\n" + "TOBE: " + tt.expectedResult);
        String result = FormattingSwitchHelper.applyFormattingSwitch(null, fsm, fsm.getFldArgument() );
          // setting pkg to null means we can't get the decimal symbol setting
       
       
        //sb.append("\n" + "ASIS: " + result);

//        assertEquals(result, tt.expectedResult);

        if (result.equals(tt.expectedResult)) {
          sb.append("\n OK");
        } else {
          sb.append("\n" + "ASIS: " + result);
          sb.append("\n" + "WORD: " + tt.word2010Emits);
        }
      } catch (Exception iae ) {
//        iae.printStackTrace();

//        assertEquals(tt.expectedResult, iae.getClass());

        if (tt.expectedResult==iae.getClass()) {
          sb.append("\n OK");
        } else {
          sb.append("\n" + iae.getMessage());
          sb.append("\n" + "WORD: " + tt.word2010Emits);
        }
      }
//      List<String> params = fsm.splitParameters(fsm.getFldParameterString());
//      for (String param : params) {
//        System.out.println(param);
//        if (param.startsWith("\\@")) {
//          System.out.println(FormattingSwitchHelper.formatDate(fsm));
//        }
//      }
//
//      String key = params.get(0);
//
//      System.out.println(dpr.getValue(key));
     
      if (formattingSwitch.equals("\\#")) {
        try {
          System.out.println(tt.val + " is " + nex.extractNumber(tt.val));                 
        } catch (java.lang.IllegalStateException e) {
          System.out.println(e.getMessage())
        }
      }

     
      i++;
    }

    System.out.println(sb.toString() );
   
  }

//  public void generateJUnitTestGeneral() throws Docx4JException {
//
//    StringBuffer sb = new StringBuffer();
//    for (SwitchTestQuad tt : quads) {
//     
//      // public void testApplyFormattingSwitch() throws TransformerException, Docx4JException {
//      if (this.formattingSwitch.equals("\\*")) {
//        sb.append("public void test" + this.instruction.trim().toLowerCase() + "String" + tt.format + "() throws TransformerException, Docx4JException {" );
//      } else if (this.formattingSwitch.equals("\\@")) {
//          sb.append("public void test" + this.instruction.trim().toLowerCase() + "Date" + tt.format + "() throws TransformerException, Docx4JException {" );
//      } else if (this.formattingSwitch.equals("\\#")) {
//        sb.append("public void test" + this.instruction.trim().toLowerCase() + "Number" + tt.format + "() throws TransformerException, Docx4JException {" );
//      }
//      sb.append("\n");
//     
//      // SwitchTestData triple = new SwitchTestData("MERGEFIELD", "\\* Upper", "Mary", "MARY");
//      sb.append("   SwitchTestData triple = new SwitchTestData(\"" + this.instruction + "\", \"\\" + this.formattingSwitch + " " + tt.format + "\", \"" + escape(tt.val) + "\", \"" + escape(tt.expectedResult.toString()) + "\");" );     
//      sb.append("\n");
//      sb.append("\n");
//    }
//    System.out.println(sb.toString() );
//  }

  public void generateJUnitTest() throws Docx4JException {

    StringBuffer sb = new StringBuffer();
    int i=1;
    for (SwitchTestQuad tt : quads) {
     
      sb.append("@Test\n");
      sb.append("public void testDate" + i + "() throws TransformerException, Docx4JException {" );
      sb.append("\n");
     
      // SwitchTestData triple = new SwitchTestData("\\* Upper", "Mary");
      sb.append("   SwitchTestData data = new SwitchTestData(\"\\" + this.formattingSwitch + " " + tt.format + "\", \"" + escape(tt.val.toString()) + "\");" );     
      sb.append("\n");

      // doit("MERGEFIELD", data, "Mary Smith");
      sb.append("   doit(\"MERGEFIELD\", data, \"" + escape(tt.expectedResult.toString()) + "\");" );     
      sb.append("\n");
     
      // doit("DOCPROPERTY", data, "Mary Smith");
      sb.append("   doit(\"DOCPROPERTY\", data, \"" + escape(tt.expectedResult.toString()) + "\");" );     
      sb.append("\n");
     
     
     
      sb.append("} \n \n");
      i++;
    }

    System.out.println(sb.toString() );
   
  }

 
  private String escape(String input) {
    return input.replace("\"", "\\\"");
  }

  public void generateSampleDocx(String filename) throws Docx4JException {
   
    // Also create mailmerge data source
    StringBuilder fieldname = new StringBuilder();
    StringBuilder row1 = new StringBuilder();

    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
    MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();

    org.docx4j.openpackaging.parts.DocPropsCustomPart docPropsCustomPart = new DocPropsCustomPart();
    wordMLPackage.addTargetPart(docPropsCustomPart);
    org.docx4j.docProps.custom.ObjectFactory cpfactory = new org.docx4j.docProps.custom.ObjectFactory();
    org.docx4j.docProps.custom.Properties customProps = cpfactory.createProperties();
    docPropsCustomPart.setJaxbElement(customProps);
   

    org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory();

    int i = 1;
    for (SwitchTestQuad tt : quads) {
      //org.docx4j.wml.P  p = factory.createP();
      org.docx4j.wml.P  p = mdp.addParagraphOfText(tt.val  +" " +  tt.format + " --> ");
     
      p.getContent().add(createSimpleField(tt, "myvar"+i, true));
     
      // Ok, let's add a custom property.
      org.docx4j.docProps.custom.Properties.Property newProp = cpfactory.createPropertiesProperty();
      newProp.setName("myvar"+i);
      newProp.setFmtid(docPropsCustomPart.fmtidValLpwstr ); // Magic string
      newProp.setPid( customProps.getNextId() );
      newProp.setLpwstr(tt.val);
     
      // .. add it
      customProps.getProperty().add(newProp);
     
      // For mailmerge
      fieldname.append("\"myvar" + i + "\",");
      row1.append("\"" + tt.val + "\",");
     
      i++;
    }


       // Pretty print the main document part
//    System.out.println(
//        XmlUtils.marshaltoString(mdp.getJaxbElement(), true, true) );

    // Optionally save it
    String path = System.getProperty("user.dir") + "/" + filename;
    wordMLPackage.save(new java.io.File(path) );
    System.out.println("Saved " + path);
   
    System.out.println(fieldname.toString());
    System.out.println(row1.toString());
  }

  private CTSimpleField createSimpleField(SwitchTestQuad triple, String varname, boolean useVarname) {

    ObjectFactory wmlObjectFactory = Context.getWmlObjectFactory();

    CTSimpleField field = wmlObjectFactory.createCTSimpleField();
    String instr = null;
    if (triple.format==null ) {
      if (useVarname && (instruction.equals("DOCPROPERTY ")
          || instruction.equals("MERGEFIELD "))) {
        instr = instruction + varname + " " + formattingSwitch;       
      } else {
        instr = instruction +triple.val + " " + formattingSwitch;
      }
    } else {
      if (useVarname && (instruction.equals("DOCPROPERTY ")
          || instruction.equals("MERGEFIELD "))) {
        if (triple.format.equals("")) {
          instr = instruction + varname  + " " + formattingSwitch;
        } else
        {
          instr = instruction + varname + " " + formattingSwitch + " " + triple.format;
        }
      } else {
        instr = instruction + triple.val + " " + formattingSwitch + " " + triple.format;
      }
    }

    field.setInstr(instr);

    R r = wmlObjectFactory.createR();
    Text t = wmlObjectFactory.createText();

    r.getContent().add(t);
    field.getContent().add(r);

    t.setValue("guess");

    return field;
  }


  public static class SwitchTestQuad {

    String val;
    String format;
    Object expectedResult;
    String word2010Emits;

    public SwitchTestQuad(String val, String format, String word2010Emits, Object expectedResult) {

      this.val = val;
      this.format = format;
      this.word2010Emits = word2010Emits;
      this.expectedResult = expectedResult;

    }

    public SwitchTestQuad(String val, String format, String expectedResult) {

      this.val = val;
      this.format = format;
      this.expectedResult = expectedResult;
      this.word2010Emits = expectedResult;

    }


  }

}
TOP

Related Classes of org.docx4j.model.fields.AbstractFormattingSwitchTest

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.