1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski package fvt.uno.sw.field; 22*b1cdbd2cSJim Jagielski import static org.junit.Assert.assertEquals; 23*b1cdbd2cSJim Jagielski import static org.junit.Assert.assertTrue; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import org.junit.After; 26*b1cdbd2cSJim Jagielski import org.junit.AfterClass; 27*b1cdbd2cSJim Jagielski import org.junit.Before; 28*b1cdbd2cSJim Jagielski import org.junit.BeforeClass; 29*b1cdbd2cSJim Jagielski import org.junit.Test; 30*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Testspace; 31*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import testlib.uno.SWUtil; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 36*b1cdbd2cSJim Jagielski import com.sun.star.container.XEnumeration; 37*b1cdbd2cSJim Jagielski import com.sun.star.container.XEnumerationAccess; 38*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 39*b1cdbd2cSJim Jagielski import com.sun.star.style.NumberingType; 40*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextDocument; 41*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextField; 42*b1cdbd2cSJim Jagielski import com.sun.star.text.XTextFieldsSupplier; 43*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski public class PageNumberField { 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski private static final UnoApp app = new UnoApp(); 49*b1cdbd2cSJim Jagielski private static XTextDocument odtDocument = null; 50*b1cdbd2cSJim Jagielski private static XTextDocument docDocument = null; 51*b1cdbd2cSJim Jagielski private static String odtSample = "uno/sw/field/PageNumberFieldTest.odt"; 52*b1cdbd2cSJim Jagielski private static String docSample = "uno/sw/field/PageNumberFieldTest.doc"; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski private static String odtSaveAsDocSample = "uno/sw/field/PageNumberFieldTest_1.doc"; 55*b1cdbd2cSJim Jagielski private static String docSaveAsODTSample = "uno/sw/field/PageNumberFieldTest_1.odt"; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski @Before setUpDocument()58*b1cdbd2cSJim Jagielski public void setUpDocument() throws Exception { 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski } 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski @After tearDownDocument()63*b1cdbd2cSJim Jagielski public void tearDownDocument() { 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski } 67*b1cdbd2cSJim Jagielski @BeforeClass setUpConnection()68*b1cdbd2cSJim Jagielski public static void setUpConnection() throws Exception { 69*b1cdbd2cSJim Jagielski app.start(); 70*b1cdbd2cSJim Jagielski } 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski @AfterClass tearDownConnection()74*b1cdbd2cSJim Jagielski public static void tearDownConnection() throws InterruptedException, 75*b1cdbd2cSJim Jagielski Exception { 76*b1cdbd2cSJim Jagielski app.close(); 77*b1cdbd2cSJim Jagielski } 78*b1cdbd2cSJim Jagielski /** 79*b1cdbd2cSJim Jagielski * There is a bug : Bug 120625 80*b1cdbd2cSJim Jagielski * Test Page Number Field Can created and Saved in odt file 81*b1cdbd2cSJim Jagielski * 1.launch a odt document 82*b1cdbd2cSJim Jagielski * 2.Create a page number field at end of this page 83*b1cdbd2cSJim Jagielski * 3.Save and Reopen this document 84*b1cdbd2cSJim Jagielski * 4.Save it as doc format and reload 85*b1cdbd2cSJim Jagielski * @throws Throwable 86*b1cdbd2cSJim Jagielski */ 87*b1cdbd2cSJim Jagielski @Test 88*b1cdbd2cSJim Jagielski testPageNumberFieldODT()89*b1cdbd2cSJim Jagielski public void testPageNumberFieldODT() throws Throwable { 90*b1cdbd2cSJim Jagielski odtDocument = SWUtil.openDocument(Testspace.prepareData(odtSample), app); 91*b1cdbd2cSJim Jagielski createPageNumberFiled(odtDocument); 92*b1cdbd2cSJim Jagielski int pageNumber = getPageNumber(odtDocument); 93*b1cdbd2cSJim Jagielski assertEquals("Verify page number created in exist odt sample file.", 3, pageNumber); 94*b1cdbd2cSJim Jagielski odtDocument = SWUtil.saveAndReload(odtDocument, app); 95*b1cdbd2cSJim Jagielski assertTrue("Test page number field still exist after odt sample file saved", isContainPageNumberField(odtDocument)); 96*b1cdbd2cSJim Jagielski pageNumber = getPageNumber(odtDocument); 97*b1cdbd2cSJim Jagielski assertEquals("Verify page number value still exist after saved.", 3, pageNumber); 98*b1cdbd2cSJim Jagielski SWUtil.saveAsDoc(odtDocument, Testspace.getUrl(odtSaveAsDocSample)); 99*b1cdbd2cSJim Jagielski app.closeDocument(odtDocument); 100*b1cdbd2cSJim Jagielski docDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(odtSaveAsDocSample), app); 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski assertTrue("Test page number field still exist after odt sample file save as doc format", isContainPageNumberField(docDocument)); 103*b1cdbd2cSJim Jagielski pageNumber = getPageNumber(docDocument); 104*b1cdbd2cSJim Jagielski assertEquals("Verify page number value still exist after saved as doc format.", 3, pageNumber); 105*b1cdbd2cSJim Jagielski app.closeDocument(docDocument); 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski /** 109*b1cdbd2cSJim Jagielski * Bug 120625 110*b1cdbd2cSJim Jagielski * Test Page Number Field Can created and Saved in Doc file 111*b1cdbd2cSJim Jagielski * 1.launch a doc document 112*b1cdbd2cSJim Jagielski * 2.Create a page number field at end of this page 113*b1cdbd2cSJim Jagielski * 3.Save and Reopen this document, check page number field 114*b1cdbd2cSJim Jagielski * 3.Save as odt format and reload 115*b1cdbd2cSJim Jagielski * @throws Throwable 116*b1cdbd2cSJim Jagielski */ 117*b1cdbd2cSJim Jagielski @Test testPageNumberFieldDOC()118*b1cdbd2cSJim Jagielski public void testPageNumberFieldDOC() throws Throwable { 119*b1cdbd2cSJim Jagielski docDocument = SWUtil.openDocument(Testspace.prepareData(docSample), app); 120*b1cdbd2cSJim Jagielski createPageNumberFiled(docDocument); 121*b1cdbd2cSJim Jagielski int pageNumber = getPageNumber(docDocument); 122*b1cdbd2cSJim Jagielski assertEquals("Verify page number created in exist doc sample file.", 2, pageNumber); 123*b1cdbd2cSJim Jagielski docDocument = SWUtil.saveAndReload(docDocument, app); 124*b1cdbd2cSJim Jagielski assertTrue("Test page number field still exist after doc sample file saved", isContainPageNumberField(docDocument)); 125*b1cdbd2cSJim Jagielski pageNumber = getPageNumber(docDocument); 126*b1cdbd2cSJim Jagielski assertEquals("Verify page number value still exist after saved.", 2, pageNumber); 127*b1cdbd2cSJim Jagielski SWUtil.saveAsODT(docDocument, Testspace.getUrl(docSaveAsODTSample)); 128*b1cdbd2cSJim Jagielski app.closeDocument(docDocument); 129*b1cdbd2cSJim Jagielski odtDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(docSaveAsODTSample), app); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski assertTrue("Test page number field still exist after doc sample file save as odt format", isContainPageNumberField(odtDocument)); 132*b1cdbd2cSJim Jagielski pageNumber = getPageNumber(odtDocument); 133*b1cdbd2cSJim Jagielski assertEquals("Verify page number value still exist after saved as doc format.", 2, pageNumber); 134*b1cdbd2cSJim Jagielski app.closeDocument(odtDocument); 135*b1cdbd2cSJim Jagielski } 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski /** 140*b1cdbd2cSJim Jagielski * Create a page number field at end of this document 141*b1cdbd2cSJim Jagielski * @param document 142*b1cdbd2cSJim Jagielski * @throws Exception 143*b1cdbd2cSJim Jagielski */ createPageNumberFiled(XTextDocument document)144*b1cdbd2cSJim Jagielski private void createPageNumberFiled(XTextDocument document) throws Exception { 145*b1cdbd2cSJim Jagielski XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); 146*b1cdbd2cSJim Jagielski XTextField pageNumberFiled = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.PageNumber")); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, pageNumberFiled); 149*b1cdbd2cSJim Jagielski props.setPropertyValue("NumberingType", NumberingType.ARABIC);//Set page number display as Arabic 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski SWUtil.moveCuror2End(document); 152*b1cdbd2cSJim Jagielski document.getText().insertTextContent(document.getText().getEnd(), pageNumberFiled, true); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski /** 157*b1cdbd2cSJim Jagielski * Get the page number by getText 158*b1cdbd2cSJim Jagielski * This page number is at end of this document 159*b1cdbd2cSJim Jagielski * @param document 160*b1cdbd2cSJim Jagielski * @return 161*b1cdbd2cSJim Jagielski */ getPageNumber(XTextDocument document)162*b1cdbd2cSJim Jagielski private int getPageNumber(XTextDocument document) { 163*b1cdbd2cSJim Jagielski try { 164*b1cdbd2cSJim Jagielski Thread.sleep(5*1000); //sleep before get page number field, there is a bug:120625 165*b1cdbd2cSJim Jagielski } catch (InterruptedException e) { 166*b1cdbd2cSJim Jagielski e.printStackTrace(); 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski String documentString = document.getText().getString().trim(); 169*b1cdbd2cSJim Jagielski int length = documentString.length(); 170*b1cdbd2cSJim Jagielski String strNum = String.valueOf(documentString.charAt(length -1)); 171*b1cdbd2cSJim Jagielski int number = Integer.valueOf(strNum); 172*b1cdbd2cSJim Jagielski return number; 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski /** 177*b1cdbd2cSJim Jagielski * Check is contain page number field 178*b1cdbd2cSJim Jagielski * @param document 179*b1cdbd2cSJim Jagielski * @throws Exception 180*b1cdbd2cSJim Jagielski */ isContainPageNumberField(XTextDocument document)181*b1cdbd2cSJim Jagielski private boolean isContainPageNumberField(XTextDocument document) throws Exception { 182*b1cdbd2cSJim Jagielski XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); 183*b1cdbd2cSJim Jagielski XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields(); 184*b1cdbd2cSJim Jagielski XEnumeration enumeration = xEnumeratedFields.createEnumeration(); 185*b1cdbd2cSJim Jagielski while (enumeration.hasMoreElements()) { 186*b1cdbd2cSJim Jagielski Object field = enumeration.nextElement(); 187*b1cdbd2cSJim Jagielski XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field); 188*b1cdbd2cSJim Jagielski short numberType = (Short) props.getPropertyValue("NumberingType"); 189*b1cdbd2cSJim Jagielski return numberType == 4; 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski } 192*b1cdbd2cSJim Jagielski return false; 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski } 195*b1cdbd2cSJim Jagielski } 196