Package complex.writer

Source Code of complex.writer.CheckCrossReferences

/*
* CheckCrossReferences.java
*
* Created on November 1, 2007, 1:49 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package complex.writer;

import complexlib.ComplexTestCase;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.UnoRuntime;

/**
*
* @author od138299
*/
public class CheckCrossReferences extends ComplexTestCase {

    private com.sun.star.text.XTextDocument xDoc;
    private com.sun.star.container.XEnumeration xParaEnum;
    private com.sun.star.container.XEnumeration xPortionEnum;
    private com.sun.star.util.XRefreshable xFldsRefresh;

    public String[] getTestMethodNames() {
        return new String[]{"checkCrossReferences"};
    }

    public com.sun.star.text.XTextField getNextField() {

        com.sun.star.text.XTextField xField = null;
        if ( xPortionEnum != null ) {
            try {
                while ( xPortionEnum.hasMoreElements() ) {
                    com.sun.star.beans.XPropertySet xPortionProps =
                            (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
                            com.sun.star.beans.XPropertySet.class , xPortionEnum.nextElement());
                    final String sPortionType =
                            xPortionProps.getPropertyValue( "TextPortionType" ).toString();
                    if ( sPortionType.equals( "TextField") ) {
                        xField = (com.sun.star.text.XTextField)UnoRuntime.queryInterface(
                                com.sun.star.text.XTextField.class,
                                xPortionProps.getPropertyValue( "TextField" ) );
                        if ( xField == null ) {
                            System.out.println("Cannot retrieve next field.");
                            failed("Cannot retrieve next field.");
                            return null;
                        }
                        return xField;
                    }
                }
            } catch (com.sun.star.container.NoSuchElementException e) {
                System.out.println("Cannot retrieve next field.");
                e.printStackTrace();
                failed(e.getMessage());
                return null;
            } catch (com.sun.star.beans.UnknownPropertyException e) {
                System.out.println("Cannot retrieve next field.");
                e.printStackTrace();
                failed(e.getMessage());
                return null;
            } catch (com.sun.star.lang.WrappedTargetException e) {
                System.out.println("Cannot retrieve next field.");
                e.printStackTrace();
                failed(e.getMessage());
                return null;
            }
        }

        while ( xParaEnum.hasMoreElements() ) {
            try {
                com.sun.star.container.XEnumerationAccess aPara =
                        (com.sun.star.container.XEnumerationAccess)UnoRuntime.queryInterface(
                        com.sun.star.container.XEnumerationAccess.class, xParaEnum.nextElement());
                xPortionEnum = aPara.createEnumeration();
                while ( xPortionEnum.hasMoreElements() ) {
                    com.sun.star.beans.XPropertySet xPortionProps =
                            (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
                            com.sun.star.beans.XPropertySet.class , xPortionEnum.nextElement());
                    final String sPortionType =
                            xPortionProps.getPropertyValue( "TextPortionType" ).toString();
                    if ( sPortionType.equals( "TextField") ) {
                        xField = (com.sun.star.text.XTextField)UnoRuntime.queryInterface(
                                com.sun.star.text.XTextField.class,
                                xPortionProps.getPropertyValue( "TextField" ) );
                        if ( xField == null ) {
                            System.out.println("Cannot retrieve next field.");
                            failed("Cannot retrieve next field.");
                            return null;
                        }
                        return xField;
                    }
                }
            } catch (com.sun.star.container.NoSuchElementException e) {
                System.out.println("Cannot retrieve next field.");
                e.printStackTrace();
                failed(e.getMessage());
                return null;
            } catch (com.sun.star.beans.UnknownPropertyException e) {
                System.out.println("Cannot retrieve next field.");
                e.printStackTrace();
                failed(e.getMessage());
                return null;
            } catch (com.sun.star.lang.WrappedTargetException e) {
                System.out.println("Cannot retrieve next field.");
                e.printStackTrace();
                failed(e.getMessage());
                return null;
            }
        }

        if ( xField == null ) {
            System.out.println("Cannot retrieve next field.");
            failed("Cannot retrieve next field.");
            return null;
        }

        return xField;
    }

    public com.sun.star.beans.XPropertySet getFieldProps(
            com.sun.star.text.XTextField xField ) {
        com.sun.star.beans.XPropertySet xProps =
                (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
                com.sun.star.beans.XPropertySet.class, xField );

        if ( xProps == null ) {
            System.out.println("Cannot retrieve field properties.");
            failed("Cannot retrieve field properties.");
            return null;
        }

        return xProps;
    }

    public void checkField( com.sun.star.text.XTextField xField,
            com.sun.star.beans.XPropertySet xProps,
            short nFormat,
            String aExpectedFldResult ) {
        // set requested format
        try {
            xProps.setPropertyValue("ReferenceFieldPart", new Short(nFormat));
        } catch (com.sun.star.lang.IllegalArgumentException e) {
            System.out.println("Cannot set ReferenceFieldPart property at field.");
            e.printStackTrace();
            failed(e.getMessage());
            return;
        } catch (com.sun.star.beans.PropertyVetoException e) {
            System.out.println("Cannot set ReferenceFieldPart property at field.");
            e.printStackTrace();
            failed(e.getMessage());
            return;
        } catch (com.sun.star.lang.WrappedTargetException e) {
            System.out.println("Cannot set ReferenceFieldPart property at field.");
            e.printStackTrace();
            failed(e.getMessage());
            return;
        } catch (com.sun.star.beans.UnknownPropertyException e) {
            System.out.println("Cannot set ReferenceFieldPart property at field.");
            e.printStackTrace();
            failed(e.getMessage());
            return;
        }
        // refresh fields in order to get new format applied
        xFldsRefresh.refresh();

        String aFldResult = xField.getPresentation( false );
        assure( "set reference field format doesn't result in correct field result",
                aFldResult.equals(aExpectedFldResult), true );
    }

    public void checkCrossReferences() throws com.sun.star.uno.Exception {
        // load test document
        try {
            XMultiServiceFactory xMSF = (XMultiServiceFactory)param.getMSF();
            xDoc = util.WriterTools.loadTextDoc( xMSF, util.utils.getFullTestURL("CheckCrossReferences.odt"));
        } catch(com.sun.star.uno.RuntimeException e) {
            System.out.println("Cannot load test document.");
            e.printStackTrace();
            failed(e.getMessage());
            return;
        }

        // setup paragraph enumeration
        {
            com.sun.star.container.XEnumerationAccess xParaEnumAccess =
                    (com.sun.star.container.XEnumerationAccess)UnoRuntime.queryInterface(
                    com.sun.star.container.XEnumerationAccess.class, xDoc.getText());
            xParaEnum = xParaEnumAccess.createEnumeration();
        }

        // get field refresher
        {
            com.sun.star.text.XTextFieldsSupplier xFieldSupp =
                    (com.sun.star.text.XTextFieldsSupplier)UnoRuntime.queryInterface(
                    com.sun.star.text.XTextFieldsSupplier.class, xDoc);
            xFldsRefresh = (com.sun.star.util.XRefreshable)UnoRuntime.queryInterface(
                    com.sun.star.util.XRefreshable.class, xFieldSupp.getTextFields());
        }

        // check first reference field
        {
            // strings for checking
            final String FldResult1 = "*i*";
            final String FldResult2 = "+b+*i*";
            final String FldResult3 = "-1-+b+*i*";
            final String FldResult4 = "1.";
            final String FldResult5 = " 1.";
            final String FldResult6 = "A. 1.";

            // variables for current field
            com.sun.star.text.XTextField xField = null;
            com.sun.star.beans.XPropertySet xProps = null;

            log.println( "Checking field reference formats NUMBER, NUMBER_NO_CONTEXT and NUMBER_FULL_CONTEXT for existing fields" );
            xField = getNextField();
            xProps = getFieldProps( xField );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult2 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult1 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult3 );

            xField = getNextField();
            xProps = getFieldProps( xField );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult1 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult1 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult3 );

            xField = getNextField();
            xProps = getFieldProps( xField );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult3 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult1 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult3 );

            xField = getNextField();
            xProps = getFieldProps( xField );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult5 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult4 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult6 );

            xField = getNextField();
            xProps = getFieldProps( xField );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult4 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult4 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult6 );

            xField = getNextField();
            xProps = getFieldProps( xField );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult6 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult4 );
            checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult6 );
        }

        // insert a certain cross-reference bookmark and a reference field to this bookmark
        {
            log.println("Checking insert of cross-reference bookmark and corresponding reference field");
            // restart paragraph enumeration
            com.sun.star.container.XEnumerationAccess xParaEnumAccess =
                    (com.sun.star.container.XEnumerationAccess)UnoRuntime.queryInterface(
                    com.sun.star.container.XEnumerationAccess.class, xDoc.getText());
            xParaEnum = xParaEnumAccess.createEnumeration();

            // iterate on the paragraphs to find certain paragraph to insert the bookmark
            com.sun.star.text.XTextRange xParaTextRange = null;
            while ( xParaEnum.hasMoreElements() ) {
                try {
                    xParaTextRange = (com.sun.star.text.XTextRange)UnoRuntime.queryInterface(
                            com.sun.star.text.XTextRange.class, xParaEnum.nextElement());
                    if ( xParaTextRange.getString().equals( "*i*J" ) ) {
                        break;
                    }
                } catch (com.sun.star.container.NoSuchElementException e) {
                    System.out.println("Cannot find paragraph to insert cross-reference bookmark.");
                    e.printStackTrace();
                    failed(e.getMessage());
                    return;
                } catch (com.sun.star.lang.WrappedTargetException e) {
                    System.out.println("Cannot find paragraph to insert cross-reference bookmark.");
                    e.printStackTrace();
                    failed(e.getMessage());
                    return;
                }
            }
            if ( xParaTextRange == null ) {
                System.out.println("Cannot find paragraph to insert cross-reference bookmark.");
                failed("Cannot find paragraph to insert cross-reference bookmark.");
                return;
            }

            // insert bookmark
            XMultiServiceFactory xFac = (XMultiServiceFactory)UnoRuntime.queryInterface(
                    XMultiServiceFactory.class, xDoc);
            final String cBookmarkName = "__RefNumPara__47114711";
            com.sun.star.text.XTextContent xBookmark = null;
            try {
                xBookmark = (com.sun.star.text.XTextContent)UnoRuntime.queryInterface(
                        com.sun.star.text.XTextContent.class,
                        xFac.createInstance( "com.sun.star.text.Bookmark" ) );
            } catch (com.sun.star.lang.IllegalArgumentException e) {
                System.out.println("Cannot create bookmark.");
                e.printStackTrace();
                failed(e.getMessage());
                return;
            } catch (com.sun.star.uno.Exception e) {
                System.out.println("Cannot create bookmark.");
                e.printStackTrace();
                failed(e.getMessage());
                return;
            }
            if ( xBookmark != null ) {
                com.sun.star.container.XNamed xName =
                        (com.sun.star.container.XNamed)UnoRuntime.queryInterface(
                        com.sun.star.container.XNamed.class, xBookmark );
                xName.setName( cBookmarkName );
                xBookmark.attach(xParaTextRange.getStart());
            }

            // insert reference field, which references the inserted bookmark
            com.sun.star.text.XTextContent xNewField = null;
            try {
                xNewField = (com.sun.star.text.XTextContent)UnoRuntime.queryInterface(
                        com.sun.star.text.XTextContent.class,
                        xFac.createInstance( "com.sun.star.text.TextField.GetReference" ) );
            } catch (com.sun.star.lang.IllegalArgumentException e) {
                System.out.println("Cannot create new field.");
                e.printStackTrace();
                failed(e.getMessage());
                return;
            } catch (com.sun.star.uno.Exception e) {
                System.out.println("Cannot create new field.");
                e.printStackTrace();
                failed(e.getMessage());
                return;
            }
            if ( xNewField != null ) {
                com.sun.star.beans.XPropertySet xFieldProps =
                        (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
                        com.sun.star.beans.XPropertySet.class, xNewField );
                xFieldProps.setPropertyValue( "ReferenceFieldPart", new Short(com.sun.star.text.ReferenceFieldPart.TEXT) );
                xFieldProps.setPropertyValue( "ReferenceFieldSource", new Short(com.sun.star.text.ReferenceFieldSource.BOOKMARK) );
                xFieldProps.setPropertyValue( "SourceName", cBookmarkName );
                com.sun.star.text.XTextRange xFieldTextRange =
                        (com.sun.star.text.XTextRange)UnoRuntime.queryInterface(
                        com.sun.star.text.XTextRange.class, xParaEnum.nextElement());
                xNewField.attach(xFieldTextRange.getEnd());
                xFldsRefresh.refresh();
            }

            // check inserted reference field
            com.sun.star.text.XTextField xField =
                    (com.sun.star.text.XTextField)UnoRuntime.queryInterface(
                    com.sun.star.text.XTextField.class, xNewField );
            assure( "inserted reference field doesn't has correct field result",
                    xField.getPresentation( false ).equals("J"), true );

            xParaTextRange.getStart().setString( "Hallo new bookmark: " );
            xFldsRefresh.refresh();
            assure( "inserted reference field doesn't has correct field result. Instead it's: "+xField.getPresentation( false ),
                    xField.getPresentation( false ).equals("Hallo new bookmark: J"), true );
        }

        // closing test document
        util.DesktopTools.closeDoc( xDoc );
    }
}
TOP

Related Classes of complex.writer.CheckCrossReferences

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.