Package org.odftoolkit.simple.common.navigation

Source Code of org.odftoolkit.simple.common.navigation.FieldSelectionTest

/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you 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.odftoolkit.simple.common.navigation;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.odftoolkit.odfdom.dom.OdfContentDom;
import org.odftoolkit.odfdom.dom.OdfStylesDom;
import org.odftoolkit.odfdom.dom.element.OdfStyleBase;
import org.odftoolkit.odfdom.dom.element.text.TextAuthorInitialsElement;
import org.odftoolkit.odfdom.dom.element.text.TextAuthorNameElement;
import org.odftoolkit.odfdom.dom.element.text.TextChapterElement;
import org.odftoolkit.odfdom.dom.element.text.TextConditionalTextElement;
import org.odftoolkit.odfdom.dom.element.text.TextDateElement;
import org.odftoolkit.odfdom.dom.element.text.TextPageCountElement;
import org.odftoolkit.odfdom.dom.element.text.TextPageNumberElement;
import org.odftoolkit.odfdom.dom.element.text.TextReferenceRefElement;
import org.odftoolkit.odfdom.dom.element.text.TextSpanElement;
import org.odftoolkit.odfdom.dom.element.text.TextSubjectElement;
import org.odftoolkit.odfdom.dom.element.text.TextTimeElement;
import org.odftoolkit.odfdom.dom.element.text.TextTitleElement;
import org.odftoolkit.odfdom.dom.element.text.TextUserFieldGetElement;
import org.odftoolkit.odfdom.dom.style.OdfStyleFamily;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeAutomaticStyles;
import org.odftoolkit.odfdom.incubator.doc.text.OdfTextParagraph;
import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.simple.Document;
import org.odftoolkit.simple.TextDocument;
import org.odftoolkit.simple.common.field.Field;
import org.odftoolkit.simple.common.field.Fields;
import org.odftoolkit.simple.common.field.ReferenceField;
import org.odftoolkit.simple.common.field.VariableField;
import org.odftoolkit.simple.common.field.ReferenceField.DisplayType;
import org.odftoolkit.simple.utils.ResourceUtilities;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
* Test the method of class
* org.odftoolkit.simple.common.navigation.FieldSelection
*/
public class FieldSelectionTest {

  public static final String TEXT_FILE = "TextFieldSampleDocument.odt";
  public static final String SAVE_FILE_STYLE = "TextFieldResultStyle.odt";
  public static final String SAVE_FILE_REPLACE = "TextFieldResultReplace.odt";

  TextDocument doc;
  OdfFileDom contentDOM;
  TextNavigation search;

  @BeforeClass
  public static void setUpClass() throws Exception {
  }

  @AfterClass
  public static void tearDownClass() throws Exception {
  }

  @Before
  public void setUp() {
    try {
      doc = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(TEXT_FILE));
      contentDOM = doc.getContentDom();
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }

  /**
   * Test applyStyle method of
   * org.odftoolkit.simple.common.navigation.TextSelection append "T4" style
   * for all the 'delete' word, 'T4' in the original document is the 'bold'
   * style
   */
  @Test
  public void testApplyStyle() {
    search = null;
    search = new TextNavigation("delete", doc);
    OdfOfficeAutomaticStyles autoStyles = null;
    try {
      autoStyles = doc.getContentDom().getAutomaticStyles();
    } catch (Exception e1) {
      Assert.fail("Failed with " + e1.getClass().getName() + ": '" + e1.getMessage() + "'");
    }
    // T4 is the bold style for text
    OdfStyleBase style = autoStyles.getStyle("T4", OdfStyleFamily.Text);
    Assert.assertNotNull(style);

    while (search.hasNext()) {
      TextSelection item = (TextSelection) search.nextSelection();
      try {
        item.applyStyle(style);
      } catch (InvalidNavigationException e) {
        Assert.fail(e.getMessage());
      }
    }

    try {
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_STYLE));
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }

  @Test
  public void testReplaceWithSimpleField() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.FIXED_DATE_FIELD);
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }

  @Test
  public void testReplaceWithConditionField() {
    try {
      search = new TextNavigation("ReplaceConditionTarget", doc);
      // declare simple variable
      VariableField simpleVariableField = Fields.createSimpleVariableField(doc, "test_con_variable");
      OdfTextParagraph varParagraph = doc.newParagraph("test_con_variable:");
      simpleVariableField.updateField("true", varParagraph);
      // count the initial date field count.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 2 "ReplaceConditionTarget" to ConditionField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithConditionField("test_con_variable == \"true\"", "trueText", "falseText");
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }

  @Test
  public void testReplaceWithHiddenTextField() {
    try {
      search = new TextNavigation("ReplaceHiddenTextTarget", doc);
      // declare simple variable
      VariableField simpleVariableField = Fields.createSimpleVariableField(doc, "test_con_variable");
      OdfTextParagraph varParagraph = doc.newParagraph("test_con_variable:");
      simpleVariableField.updateField("true", varParagraph);

      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 2 "ReplaceHiddenTextTarget" to HiddenTextField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithHiddenTextField("test_con_variable == \"true\"", "hiddenText");
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextConditionalTextElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }

  @Test
  public void testReplaceWithReferenceField() {
    try {
      search = new TextNavigation("ReplaceReferenceTarget", doc);
      TextSpanElement newTextSpanElement = doc.newParagraph("Selection Reference Content:").newTextSpanElement();
      newTextSpanElement.setTextContent("This is a test selection reference content.");
      ReferenceField referenceField = Fields.createReferenceField(newTextSpanElement, "selection-test-ref");
      // count the initial reference field count.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextReferenceRefElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextReferenceRefElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 2 "ReplaceReferenceTarget" to ReferenceField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithReferenceField(referenceField, DisplayType.TEXT);
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextReferenceRefElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextReferenceRefElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }

  @Test
  public void testReplaceWithVariableField() {
    try {
      search = new TextNavigation("SelectionUserVariableTarget", doc);
      // declare variable
      VariableField userVariableField = Fields.createUserVariableField(doc, "selection_user_variable", "test");
      // count the initial variable field count.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextUserFieldGetElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextUserFieldGetElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "SelectionUserVariableTarget" to VariableField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithVariableField(userVariableField);
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextUserFieldGetElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextUserFieldGetElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
 
  @Test
  public void testReplaceWithSimpleField2() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        //fieldSelection.replaceWithSimpleField(Field.FieldType.FIXED_DATE_FIELD);
        fieldSelection.replaceWithSimpleField(Field.FieldType.DATE_FIELD)// 1
        //fieldSelection.replaceWithSimpleField(Field.FieldType.TIME_FIELD);  //3
        i++;
      }
     
      nodeList = contentDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextDateElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_time_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
     
      //change all <code>ext:fixed</code> value be false
      for(int k =0;k<nodeList.getLength();k++){
        Node nv = nodeList.item(k);
        if(nv.getFirstChild().getNodeValue().matches("^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$")){
          NamedNodeMap nameMap = nv.getAttributes();
          Node nfix = nameMap.getNamedItem("text:fixed");
          nfix.setNodeValue("false");
        }
      }
     
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        //fieldSelection.replaceWithSimpleField(Field.FieldType.FIXED_DATE_FIELD);
        fieldSelection.replaceWithSimpleField(Field.FieldType.TIME_FIELD);
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
      //validate 
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
      OdfContentDom contentDom1 = doc1.getContentDom();
     
      nodeList = contentDom1.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      for(int k =0;k<nodeList.getLength();k++){
        //
        Node nv = nodeList.item(k);
        if(nv.getFirstChild().getNodeValue().matches("^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$")){
          NamedNodeMap nameMap = nv.getAttributes();
          Node nfix = nameMap.getNamedItem("text:fixed");
          System.out.println("&&& " + nfix.getNodeValue());
          Assert.assertEquals("false", nfix.getNodeValue());
        }
      }
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_fixed_time_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
      NodeList nodeList = contentDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.FIXED_TIME_FIELD);
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextTimeElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 

  @Test
  public void testReplaceWithSimpleField_previous_page_number_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
     
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList1 = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      for(int k =0;k<nodeList1.getLength();k++){
        //
        Node nv = nodeList1.item(k);
        NamedNodeMap nameMap = nv.getAttributes();
        Node nfix = nameMap.getNamedItem("text:select-page");
        nfix.setNodeValue("previous");
      }
     
      NodeList nodeList = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.PREVIOUS_PAGE_NUMBER_FIELD);
        i++;
      }
      nodeList = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
      //validate
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
      OdfContentDom contentDom1 = doc1.getContentDom();
     
      nodeList = contentDom1.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      for(int k =0;k<nodeList.getLength();k++){
        Node nv = nodeList.item(k);
        NamedNodeMap nameMap = nv.getAttributes();
        Node nfix = nameMap.getNamedItem("text:select-page");
        Assert.assertEquals("previous", nfix.getNodeValue());
       
      }
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_current_page_number_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList1 = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      for(int k =0;k<nodeList1.getLength();k++){
        //
        Node nv = nodeList1.item(k);
        NamedNodeMap nameMap = nv.getAttributes();
        Node nfix = nameMap.getNamedItem("text:select-page");
        nfix.setNodeValue("current");
      }
     
      NodeList nodeList = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.CURRENT_PAGE_NUMBER_FIELD);
        i++;
      }
     
      //value
      nodeList = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
      //validate
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
      OdfContentDom contentDom1 = doc1.getContentDom();
     
      nodeList = contentDom1.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      for(int k =0;k<nodeList.getLength();k++){
        Node nv = nodeList.item(k);
        NamedNodeMap nameMap = nv.getAttributes();
        Node nfix = nameMap.getNamedItem("text:select-page");
        System.out.println(nfix.getNodeValue());
        Assert.assertEquals("current", nfix.getNodeValue());
      }
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
 
  @Test
  public void testReplaceWithSimpleField_next_page_number_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList1 = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      for(int k =0;k<nodeList1.getLength();k++){
        //
        Node nv = nodeList1.item(k);
        NamedNodeMap nameMap = nv.getAttributes();
        Node nfix = nameMap.getNamedItem("text:select-page");
        nfix.setNodeValue("next");
      }
     
      NodeList nodeList = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.NEXT_PAGE_NUMBER_FIELD);
        i++;
      }
     
      //validate
      nodeList = contentDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
      //validate
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
      OdfContentDom contentDom1 = doc1.getContentDom();
     
      nodeList = contentDom1.getElementsByTagName(TextPageNumberElement.ELEMENT_NAME.getQName());
      for(int k =0;k<nodeList.getLength();k++){
        Node nv = nodeList.item(k);
        NamedNodeMap nameMap = nv.getAttributes();
        Node nfix = nameMap.getNamedItem("text:select-page");
        System.out.println(nfix.getNodeValue());
        Assert.assertEquals("next", nfix.getNodeValue());
      }
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_page_count_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList = contentDom.getElementsByTagName(TextPageCountElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextPageCountElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.PAGE_COUNT_FIELD);
        i++;
      }
     
      //validate
      nodeList = contentDom.getElementsByTagName(TextPageCountElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextPageCountElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
 
  @Test
  public void testReplaceWithSimpleField_title_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList = contentDom.getElementsByTagName(TextTitleElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextTitleElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.TITLE_FIELD);
        i++;
      }
     
      //validate
      nodeList = contentDom.getElementsByTagName(TextTitleElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextTitleElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_subject_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList = contentDom.getElementsByTagName(TextSubjectElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextSubjectElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.SUBJECT_FIELD);
        i++;
      }
     
      //validate
      nodeList = contentDom.getElementsByTagName(TextSubjectElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextSubjectElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
 
  @Test
  public void testReplaceWithSimpleField_author_name_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList = contentDom.getElementsByTagName(TextAuthorNameElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextAuthorNameElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.AUTHOR_NAME_FIELD);
        i++;
      }
     
      //validate
      nodeList = contentDom.getElementsByTagName(TextAuthorNameElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextAuthorNameElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
 
  @Test
  public void testReplaceWithSimpleField_author_initials_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList = contentDom.getElementsByTagName(TextAuthorInitialsElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextAuthorInitialsElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.AUTHOR_INITIALS_FIELD);
        i++;
      }
     
      //validate
      nodeList = contentDom.getElementsByTagName(TextAuthorInitialsElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextAuthorInitialsElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_chapter_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      // count the initial date field count. should be 1.
      OdfContentDom contentDom = doc.getContentDom();
     
      NodeList nodeList = contentDom.getElementsByTagName(TextChapterElement.ELEMENT_NAME.getQName());
      int i = nodeList.getLength();
      OdfStylesDom styleDom = doc.getStylesDom();
      nodeList = styleDom.getElementsByTagName(TextChapterElement.ELEMENT_NAME.getQName());
      i += nodeList.getLength();
      // replace all the 3 "ReplaceDateTarget" to FixedDateField.
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.CHAPTER_FIELD);
        i++;
      }
     
      //validate
      nodeList = contentDom.getElementsByTagName(TextChapterElement.ELEMENT_NAME.getQName());
      int j = nodeList.getLength();
      nodeList = styleDom.getElementsByTagName(TextChapterElement.ELEMENT_NAME.getQName());
      j += nodeList.getLength();
      Assert.assertEquals(j, i);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_reference_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.REFERENCE_FIELD);
      }
    } catch (Exception e) {
      //Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.assertTrue(e instanceof IllegalArgumentException);
      Assert.assertEquals("this is not a vaild simple field type.", e.getMessage());
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_simple_variable_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.SIMPLE_VARIABLE_FIELD);
      }
    } catch (Exception e) {
      //Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.assertTrue(e instanceof IllegalArgumentException);
      Assert.assertEquals("this is not a vaild simple field type.", e.getMessage());
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_user_variable_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.USER_VARIABLE_FIELD);
      }
    } catch (Exception e) {
      //Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.assertTrue(e instanceof IllegalArgumentException);
      Assert.assertEquals("this is not a vaild simple field type.", e.getMessage());
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_condition_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.CONDITION_FIELD);
      }
    } catch (Exception e) {
      //Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.assertTrue(e instanceof IllegalArgumentException);
      Assert.assertEquals("this is not a vaild simple field type.", e.getMessage());
    }
  }
 
  @Test
  public void testReplaceWithSimpleField_hidden_text_field() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWithSimpleField(Field.FieldType.HIDDEN_TEXT_FIELD);
      }
    } catch (Exception e) {
      //Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.assertTrue(e instanceof IllegalArgumentException);
      Assert.assertEquals("this is not a vaild simple field type.", e.getMessage());
    }
  }
 
 
  @Test
  public void testReplaceWith() {
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      int i =0;
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.replaceWith("hello world.");
        i++;
      }
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));

      //validate 
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
     
      search = new TextNavigation("ReplaceDateTarget", doc1);
      if (search.hasNext()) {
        Assert.fail();
      }
     
      search = new TextNavigation("hello world.", doc1);
      int j =0;
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        item.replaceWith("hi world.");
        j++;
      }
      Assert.assertEquals(i, j);
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }

 
  @Test
  public void testPasteAtEndOf() {
    try {
     
      //count of TextSelection("ReplaceDateTargetchange")
      TextNavigation search3 = new TextNavigation("ReplaceDateTargetchange", doc);
      int j = 0;
      while(search3.hasNext()){
        TextSelection item = (TextSelection) search3.nextSelection();
        item.getText();
        j++;
      }
     
      search = new TextNavigation("ReplaceDateTarget", doc);
      TextNavigation search2 = new TextNavigation("change", doc);
      TextSelection pastesource = null;
      if(search2.hasNext()){
        pastesource = (TextSelection)search2.nextSelection();
      }
      if(pastesource == null)
        Assert.fail("pastesource == null.");
     
      int i =0;
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        pastesource.pasteAtEndOf(item);
        i++;
      }
     
      int count = i+j;
      System.out.println(count);
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));

      //validate 
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
      TextNavigation search4 = new TextNavigation("ReplaceDateTargetchange", doc1);
      int resultcount = 0;
      while (search4.hasNext()) {
        TextSelection item = (TextSelection) search4.nextSelection();
        item.getText();
        //System.out.println(item.getText());
       
        resultcount++;
      }
     
      Assert.assertEquals(count, resultcount);
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
  @Test
  public void testPasteAtFrontOf() {
    try {
     
      //count of TextSelection("ReplaceDateTargetchange")
      TextNavigation search3 = new TextNavigation("changeReplaceDateTarget", doc);
      int j = 0;
      while(search3.hasNext()){
        TextSelection item = (TextSelection) search3.nextSelection();
        item.getText();
        j++;
      }
     
      search = new TextNavigation("ReplaceDateTarget", doc);
      TextNavigation search2 = new TextNavigation("change", doc);
      TextSelection pastesource = null;
      if(search2.hasNext()){
        pastesource = (TextSelection)search2.nextSelection();
      }
      if(pastesource == null)
        Assert.fail("pastesource == null.");
     
      int i =0;
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        pastesource.pasteAtFrontOf(item);
        i++;
      }
     
      int count = i+j;

      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));

      //validate 
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
      TextNavigation search4 = new TextNavigation("changeReplaceDateTarget", doc1);
      int resultcount = 0;
      while (search4.hasNext()) {
        TextSelection item = (TextSelection) search4.nextSelection();
        item.getText();
        //System.out.println(item.getText());
       
        resultcount++;
      }
      System.out.println(count);
      System.out.println(resultcount);
     
      Assert.assertEquals(count, resultcount);
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  }
 
 
  @Test
  public void testCut() throws Exception{
    try {
      search = new TextNavigation("ReplaceDateTarget", doc);
      while (search.hasNext()) {
        TextSelection item = (TextSelection) search.nextSelection();
        FieldSelection fieldSelection = new FieldSelection(item);
        fieldSelection.cut();
      }
     
      //save
      doc.save(ResourceUtilities.newTestOutputFile(SAVE_FILE_REPLACE));

      //validate 
      TextDocument doc1 = (TextDocument) Document.loadDocument(ResourceUtilities.getAbsolutePath(SAVE_FILE_REPLACE));
     
      TextNavigation searchafter = new TextNavigation("ReplaceDateTarget", doc1);
      if (searchafter.hasNext()) {
        Assert.fail();
      }
     
    } catch (Exception e) {
      Logger.getLogger(FieldSelectionTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
      Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
    }
  } 
}
TOP

Related Classes of org.odftoolkit.simple.common.navigation.FieldSelectionTest

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.