Package com.sun.star.wizards.report

Source Code of com.sun.star.wizards.report.ReportDocument

/*************************************************************************
*
*  OpenOffice.org - a multi-platform office productivity suite
*
*  $RCSfile: ReportDocument.java,v $
*
*  $Revision: 1.53 $
*
*  last change: $Author: ihi $ $Date: 2007/04/16 16:53:23 $
*
*  The Contents of this file are made available subject to
*  the terms of GNU Lesser General Public License Version 2.1.
*
*
*    GNU Lesser General Public License Version 2.1
*    =============================================
*    Copyright 2005 by Sun Microsystems, Inc.
*    901 San Antonio Road, Palo Alto, CA 94303, USA
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License version 2.1, as published by the Free Software Foundation.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*
*    You should have received a copy of the GNU Lesser General Public
*    License along with this library; if not, write to the Free Software
*    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
*    MA  02111-1307  USA
*
************************************************************************/package com.sun.star.wizards.report;

import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.text.XRelativeTextContentRemove;
import com.sun.star.text.XTextContent;
import java.util.Comparator;
import java.util.Vector;

import com.sun.star.awt.Rectangle;
import com.sun.star.awt.VclWindowPeerAttribute;
import com.sun.star.container.XNameAccess;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.wizards.db.*;
import com.sun.star.wizards.common.*;
import com.sun.star.wizards.ui.*;
import com.sun.star.sdb.CommandType;
import com.sun.star.table.XCell;
import com.sun.star.text.XTextDocument;
import com.sun.star.wizards.common.JavaTools;
import com.sun.star.wizards.text.TextTableHandler;
import com.sun.star.wizards.text.TextSectionHandler;
import com.sun.star.wizards.text.TextStyleHandler;
import com.sun.star.wizards.text.TextFieldHandler;
import com.sun.star.wizards.text.ViewHandler;
import com.sun.star.wizards.document.FormHandler;


class ReportDocument extends com.sun.star.wizards.text.TextDocument implements Comparator{
    private Object ReportPageStyle;
    private Object FirstPageStyle;
    private int PageWidth;
    private Rectangle PosSize;
    private String ReportFolderName;
    public Vector DBColumnsVector;
    private RecordTable CurRecordTable;
    public RecordParser CurDBMetaData;
    private String sMsgTableNotExisting;
    private String sMsgCommonReportError;
    private String ContentTemplatePath;
    private String LayoutTemplatePath;
    private String sMsgInvalidTextField;
    private String sMsgEndAutopilot;
    public boolean bIsCurLandscape;
    public TextTableHandler oTextTableHandler;
    public TextSectionHandler oTextSectionHandler;
    public FormHandler oFormHandler;
    public TextStyleHandler oTextStyleHandler;
    public TextFieldHandler oTextFieldHandler;
    public ViewHandler oViewHandler;
    public NumberFormatter oNumberFormatter;
    public static final String TBLRECORDSECTION = "Tbl_RecordSection";
    public static final String TBLGROUPSECTION = "Tbl_GroupField";
    public static final String RECORDSECTION = "RecordSection";
    public static final String GROUPSECTION = "GroupField";
    public static final String COPYOFTBLRECORDSECTION = "CopyOf" + TBLRECORDSECTION;
    public static final String COPYOFTBLGROUPSECTION = "CopyOf" + TBLGROUPSECTION;
    public static final String COPYOFRECORDSECTION = "CopyOf" + RECORDSECTION;
    public static final String COPYOFGROUPSECTION = "CopyOf" + GROUPSECTION;



    /** Creates new ReportDocument */
    public ReportDocument(XMultiServiceFactory xMSF,XTextDocument _textDocument, Resource oResource) {
    super(xMSF, _textDocument, false);
        lateInit(oResource);
    }

    public ReportDocument(XMultiServiceFactory xMSF, String _sPreviewURL, Resource oResource ) {
    super(xMSF, _sPreviewURL, true, null);
        lateInit(oResource);
    }

    void lateInit(Resource oResource){
        oTextTableHandler = new TextTableHandler(xMSFDoc, xTextDocument);
        oTextSectionHandler = new TextSectionHandler(xMSFDoc, xTextDocument);
        oFormHandler = new FormHandler(xMSFDoc, xTextDocument);
        oTextStyleHandler = new TextStyleHandler(xMSFDoc, xTextDocument);
        oViewHandler = new ViewHandler(xMSFDoc, xTextDocument);
        oTextFieldHandler = new TextFieldHandler(xMSFDoc, xTextDocument);
        DBColumnsVector = new java.util.Vector();
        oNumberFormatter = oTextTableHandler.getNumberFormatter();
        CurDBMetaData = new RecordParser(xMSF); //, CharLocale, oNumberFormatter);
        long lDateCorrection = oNumberFormatter.getNullDateCorrection();
        oNumberFormatter.setBooleanReportDisplayNumberFormat();
        oNumberFormatter.setNullDateCorrection(lDateCorrection);
        sMsgInvalidTextField = oResource.getResText(UIConsts.RID_REPORT + 73);
        sMsgTableNotExisting = oResource.getResText(UIConsts.RID_REPORT + 61);
        sMsgCommonReportError = oResource.getResText(UIConsts.RID_REPORT + 72);
        sMsgCommonReportError = JavaTools.replaceSubString(sMsgCommonReportError, String.valueOf((char)13), "<BR>");
        sMsgEndAutopilot = oResource.getResText(UIConsts.RID_DB_COMMON + 33);
        sMsgTableNotExisting = sMsgTableNotExisting + (char) 13 + sMsgEndAutopilot;
        bIsCurLandscape = true;
        getReportPageStyles();
    }


    public NumberFormatter getNumberFormatter(){
        return oNumberFormatter;
    }


    public boolean checkReportLayoutMode( String[] GroupFieldNames){
    try{
        XNameAccess xTextSections = oTextSectionHandler.xTextSectionsSupplier.getTextSections();
        Object oTextSection;
        if (GroupFieldNames.length > 0)
            oTextSection = xTextSections.getByName(GROUPSECTION + String.valueOf(1));
        else
            oTextSection = xTextSections.getByName(RECORDSECTION);
        boolean bLayoutMode = AnyConverter.toBoolean(Helper.getUnoPropertyValue(oTextSection, "IsVisible"));
        return bLayoutMode;
    }
    catch( Exception exception ){
        exception.printStackTrace(System.out);
    // In doubt we rather suggest this is LayoutMode...
    return true;
    }}


    public void swapContentTemplate(String ContentTemplatePath){
//  unlockallControllers();
        xProgressBar.start("", 10);
        this.ContentTemplatePath = ContentTemplatePath;
        loadSectionsfromTemplate(ContentTemplatePath);
        xProgressBar.setValue(40);
        oTextStyleHandler.loadStyleTemplates(ContentTemplatePath, "LoadTextStyles");
        xProgressBar.setValue(70);
        if (CurRecordTable != null)
            CurRecordTable.adjustOptimalTableWidths(xMSF, oViewHandler);
        xProgressBar.setValue(100);
        oViewHandler.selectFirstPage(oTextTableHandler);
        xProgressBar.end();
    }


    public void swapLayoutTemplate(String LayoutTemplatePath, String BitmapPath){
    try{
        xProgressBar.start("", 10);
        this.LayoutTemplatePath = LayoutTemplatePath;
        boolean bOldIsCurLandscape = AnyConverter.toBoolean(Helper.getUnoPropertyValue(ReportPageStyle, "IsLandscape"));
        oTextStyleHandler.loadStyleTemplates(LayoutTemplatePath, "LoadPageStyles");
        xProgressBar.setValue(60);
        changePageOrientation(bOldIsCurLandscape);
        xProgressBar.setValue(100);
        oViewHandler.selectFirstPage(oTextTableHandler);
        xProgressBar.end();
    }
    catch( Exception exception ){
        exception.printStackTrace(System.out);
    }}


    public void createReportForm(String SOREPORTFORMNAME){
        com.sun.star.container.XNameContainer xNamedForm = oFormHandler.insertFormbyName(SOREPORTFORMNAME);
        XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, xNamedForm);
        oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "CommandType", new String(Integer.toString(CurDBMetaData.getCommandType())));
        if (CurDBMetaData.getCommandType() == CommandType.QUERY){
            oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "QueryName", CurDBMetaData.getCommandName());
            oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "Command", "");
        }
        else{
            oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "QueryName", "");
            oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "Command", CurDBMetaData.Command);
        }
        oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "GroupFieldNames", JavaTools.ArraytoString(CurDBMetaData.GroupFieldNames));
        oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "FieldNames", JavaTools.ArraytoString(CurDBMetaData.getFieldNames()));
        oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "RecordFieldNames", JavaTools.ArraytoString(CurDBMetaData.RecordFieldNames));
    }


    public void updateReportTitle(com.sun.star.awt.XTextComponent xTitleTextBox){
        String TitleName = xTitleTextBox.getText();
        Helper.setUnoPropertyValue(xDocInfo, "Title", TitleName);
    }


    public void getReportPageStyles(){
    try{
        Object oPageStyleFamily = oTextStyleHandler.xStyleFamiliesSupplier.getStyleFamilies().getByName("PageStyles");
        ReportPageStyle  = Helper.getUnoObjectbyName(oPageStyleFamily, "Standard");
        FirstPageStyle = Helper.getUnoObjectbyName(oPageStyleFamily, "First Page");
    }
    catch(Exception exception){
        exception.printStackTrace(System.out);
    }}


    public void changePageOrientation(boolean bNewLandscape){
    try{
        com.sun.star.awt.Size oNewSize;
        getReportPageStyles();
            com.sun.star.awt.Size oLocSize = (com.sun.star.awt.Size) Helper.getUnoStructValue(ReportPageStyle, "Size");
            bIsCurLandscape = AnyConverter.toBoolean(Helper.getUnoPropertyValue(ReportPageStyle, "IsLandscape"));
            if (bIsCurLandscape != bNewLandscape){
                oNewSize = new com.sun.star.awt.Size(oLocSize.Height, oLocSize.Width);
                Helper.setUnoPropertyValue(ReportPageStyle, "IsLandscape", new Boolean(bNewLandscape));
                Helper.setUnoPropertyValue(ReportPageStyle, "Size", oNewSize);
                Helper.setUnoPropertyValue(FirstPageStyle, "IsLandscape", new Boolean(bNewLandscape));
            Helper.setUnoPropertyValue(FirstPageStyle, "Size", oNewSize);
            int iLeftMargin = AnyConverter.toInt(Helper.getUnoPropertyValue(ReportPageStyle, "LeftMargin"));
            int iRightMargin = AnyConverter.toInt(Helper.getUnoPropertyValue(ReportPageStyle, "RightMargin"));
            PageWidth = oNewSize.Width - iLeftMargin - iRightMargin;
            if (CurRecordTable != null)
            CurRecordTable.adjustOptimalTableWidths(xMSF, oViewHandler);
        }
    }
    catch(Exception exception){
        exception.printStackTrace(System.out);
    }}


    public boolean loadSectionsfromTemplate(String sTemplateUrl){
    try{
        int i;
        DBColumn CurDBColumn;
        int GroupCount = CurDBMetaData.GroupFieldNames.length;
        CurRecordTable = null;
        for (i = 0; i< GroupCount; i++){
            String SectionName = GROUPSECTION + Integer.toString(i + 1);
            oTextTableHandler.renameTextTable("Tbl_" + SectionName, "MyTextTable");
            oTextSectionHandler.linkSectiontoTemplate(sTemplateUrl, SectionName);
            oTextTableHandler.renameTextTable("MyTextTable", "Tbl_" + SectionName);
        }
        if (oTextSectionHandler.xTextSectionsSupplier.getTextSections().getElementNames().length > CurDBMetaData.GroupFieldNames.length){
            oTextSectionHandler.linkSectiontoTemplate(sTemplateUrl, RECORDSECTION);
            CurRecordTable = new RecordTable(oTextTableHandler);
            insertColumnstoRecordTable();
        }
        for (i = 0; i < GroupCount; i++){
            CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, CurDBMetaData.GroupFieldNames[i], i, TBLGROUPSECTION + (i + 1));
            if (CurDBColumn == null)
                return false;
            else{
                CurDBColumn.formatValueCell();
                DBColumnsVector.set(i, CurDBColumn);
                replaceFieldValueInGroupTable(CurDBColumn, i);
            }
        }
        return true;
    }
    catch( Exception exception ){
        exception.printStackTrace(System.out);
    return false;
    }}


    public void setupRecordSection(String TemplateName){
    this.ContentTemplatePath = TemplateName;
    if (CurDBMetaData.RecordFieldNames.length > 0){
      boolean bAddParagraph = true;
      if (CurDBMetaData.GroupFieldNames != null){
            bAddParagraph = (CurDBMetaData.GroupFieldNames.length == 0);
      }
        oTextSectionHandler.insertTextSection(RECORDSECTION, TemplateName, bAddParagraph);
        CurRecordTable = new RecordTable(oTextTableHandler);
        insertColumnstoRecordTable();
        if (CurRecordTable != null)
            CurRecordTable.adjustOptimalTableWidths(xMSF, oViewHandler);
    }
    else
        CurRecordTable = null;
    }


    public void refreshGroupFields(String[] _sNewNames){
        for (int i = 0; i < DBColumnsVector.size(); i++){
            DBColumn CurDBColumn = (DBColumn) DBColumnsVector.elementAt(i);
            if (!CurDBColumn.CurDBField.FieldName.equals(_sNewNames[i])){
        CurDBColumn.CurDBField = CurDBMetaData.getFieldColumnByDisplayName(_sNewNames[i]);
                CurDBColumn.insertColumnData(oTextFieldHandler, bIsCurLandscape);
            }
        }
    }


    public boolean isGroupField(String _FieldName){
        return (JavaTools.FieldInList(CurDBMetaData.GroupFieldNames, _FieldName) != -1);
    }

    public void replaceFieldValueInRecordSection(int RecordCount){
        int GroupCount = CurDBMetaData.GroupFieldNames.length;
    int FieldCount = CurDBMetaData.getFieldNames().length;
        for (int i = GroupCount; i < FieldCount; i++)
            ((DBColumn) DBColumnsVector.elementAt(i)).insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
    }


    public void updateTextSections(String[] SelGroupNames) throws Exception{
    String TableName;
    DBColumn OldDBColumn;
    DBColumn CurDBColumn;
    XNameAccess xTableNames = oTextTableHandler.xTextTablesSupplier.getTextTables();
    int GroupFieldCount = SelGroupNames.length;
        for (int i = 0; i < GroupFieldCount; i++){
            TableName = TBLGROUPSECTION + Integer.toString(i + 1);
            OldDBColumn = (DBColumn) DBColumnsVector.get(i);
            CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, SelGroupNames[i], i, TableName, OldDBColumn);
            CurDBColumn.formatValueCell();
            DBColumnsVector.setElementAt(CurDBColumn, i);
            CurDBColumn.insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
        }
    }


    public void replaceFieldValueInGroupTable(DBColumn CurDBColumn, int TableIndex){
        String TableName = TBLGROUPSECTION + (TableIndex + 1);
        // Note: for some reason the table might lose its name and has to be renamed therefor
        String OldTableName = CurDBColumn.xTableName.getName();
        if (OldTableName.compareTo(TableName) != 0)
            CurDBColumn.xTableName.setName(TableName);
        CurDBColumn.insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
        CurDBColumn.setCellFont();
    }


    public void replaceFieldValueInRecordTable(){
        String TableName = TBLRECORDSECTION;
        String OldTableName = CurRecordTable.xTableName.getName();
        if (OldTableName.compareTo(TableName) != 0)
            CurRecordTable.xTableName.setName(TableName);
        int GroupCount = CurDBMetaData.GroupFieldNames.length;
        int RecordCount = CurDBMetaData.RecordFieldNames.length;
        for (int i = GroupCount; i < RecordCount; i++)
            ((DBColumn) DBColumnsVector.elementAt(i)).insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
    }


    public void insertColumnstoRecordTable(){
    try{
        int GroupCount = CurDBMetaData.GroupFieldNames.length;
        DBColumn  CurDBColumn;
        // Note for some reason the table might lose its name and has to be renamed therefor
        String OldTableName = CurRecordTable.xTableName.getName();
        if (OldTableName.compareTo(TBLRECORDSECTION) != 0)
            CurRecordTable = new RecordTable(oTextTableHandler);
        com.sun.star.table.XTableColumns xColumns = CurRecordTable.xTextTable.getColumns();
        int ColCount = xColumns.getCount();
        int RecordCount = CurDBMetaData.RecordFieldNames.length;
        if (ColCount > RecordCount){
            int RemoveCount = ColCount - RecordCount;
            xColumns.removeByIndex(0, RemoveCount);
        }
        else if (ColCount < RecordCount){
            int AddCount = RecordCount - ColCount;
            CurRecordTable.xTextTable.getColumns().insertByIndex(ColCount, AddCount);
        }
        for (int i = 0; i < RecordCount; i++){
            CurDBColumn = new DBColumn(CurRecordTable, oTextTableHandler, CurDBMetaData, i, true);
            CurDBColumn.initializeNumberFormat();
            CurDBColumn.insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
            if (DBColumnsVector.size() <= (i + GroupCount))
                DBColumnsVector.add(CurDBColumn);
            else
                DBColumnsVector.set(i+GroupCount,CurDBColumn);
        }
    }
    catch(Exception exception){
        showCommonReportErrorBox(exception);
    }}


    public boolean addGroupNametoDocument(String[] GroupNames, String CurGroupTitle, Vector GroupFieldVector, String ReportPath, int iSelCount){
    DBColumn CurDBColumn = null;
    try{
        int GroupCount = GroupFieldVector.size();
        if (GroupCount < 4){
            removeGroupNamesofRecordTable(iSelCount);
            FieldColumn CurFieldColumn = CurDBMetaData.getFieldColumnByTitle(CurGroupTitle);
            GroupFieldVector.addElement(CurFieldColumn.FieldName);
            GroupCount += 1;
            oTextSectionHandler.insertTextSection(GROUPSECTION + GroupCount, ReportPath + "/cnt-default.ott", GroupCount == 1);
            CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, CurFieldColumn.FieldName, GroupCount-1, TBLGROUPSECTION + (GroupCount));
            CurDBColumn.formatValueCell();
            if (CurDBColumn != null){
                DBColumnsVector.addElement(CurDBColumn);
                replaceFieldValueInGroupTable(CurDBColumn, GroupCount-1);
            }
            else{
                String sMessage = JavaTools.replaceSubString(sMsgTableNotExisting, TBLGROUPSECTION + (GroupCount), "<TABLENAME>");
                CurDBMetaData.showMessageBox("ErrorBox", VclWindowPeerAttribute.OK, sMessage);
            }
        }
    }
    catch(Exception exception){
        showCommonReportErrorBox(exception);
    }
    return (CurDBColumn != null);
    }


    public void removeGroupName(String[] NewSelGroupNames, String CurGroupTitle, java.util.Vector GroupFieldVector){
    try{
        removeGroupNamesofRecordTable(NewSelGroupNames.length + 1);
    FieldColumn CurFieldColumn = CurDBMetaData.getFieldColumnByTitle(CurGroupTitle);
    GroupFieldVector.removeElement(CurFieldColumn.FieldName);
        oTextSectionHandler.removeLastTextSection();
        oTextTableHandler.removeLastTextTable();
        // if the previously selected item is somewhere in the middle of the listbox (and not at the end) the
        // Textsections have to be updated
        if (JavaTools.FieldInList(NewSelGroupNames, CurGroupTitle) == -1)
            updateTextSections(NewSelGroupNames);
        int iSelItemCount = (int) NewSelGroupNames.length;
        DBColumnsVector.remove(iSelItemCount);
    }
    catch(Exception exception){
        showCommonReportErrorBox(exception);
    }}



    public void removeGroupNamesofRecordTable(int GroupFieldCount){
    int CurFieldCount = DBColumnsVector.size();
        if (CurFieldCount > GroupFieldCount){
            for (int i = CurFieldCount-1; i >= GroupFieldCount; i--){
                DBColumnsVector.removeElementAt(i);
            }
        }
    }


    public void showCommonReportErrorBox(Exception exception){
        String SystemContentPath = JavaTools.convertfromURLNotation(ContentTemplatePath);
        String sMsgCurCommonReportError = JavaTools.replaceSubString(sMsgCommonReportError, SystemContentPath, "%PATH");
        CurDBMetaData.showMessageBox("ErrorBox", VclWindowPeerAttribute.OK, sMsgCurCommonReportError);
        exception.printStackTrace(System.out);
    }



    public void getallDBColumns(){
    try{
        DBColumn CurDBColumn;
    for (int i = 0; i < CurDBMetaData.FieldColumns.length; i++){
            if (i < CurDBMetaData.GroupFieldNames.length)
                CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, CurDBMetaData.GroupFieldNames[i], i, COPYOFTBLGROUPSECTION + (i + 1));
            else{
                if (CurRecordTable == null)
                    CurRecordTable = new RecordTable(oTextTableHandler);
                CurDBColumn = new DBColumn(CurRecordTable, oTextTableHandler, CurDBMetaData, i-CurDBMetaData.GroupFieldNames.length);
            }
            if (CurDBColumn != null){
                if (CurDBColumn.xNameCell != null)
                    DBColumnsVector.addElement(CurDBColumn);
                else{
                    String DelFieldName;
                    if (i < CurDBMetaData.GroupFieldNames.length){
                        DelFieldName = CurDBMetaData.GroupFieldNames[i];
                        CurDBMetaData.GroupFieldNames = JavaTools.removefromList(CurDBMetaData.GroupFieldNames, new String[] {DelFieldName});
                        CurDBMetaData.GroupFieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.GroupFieldColumns);
                    }
                    else{
                        DelFieldName = CurDBMetaData.RecordFieldNames[i-CurDBMetaData.GroupFieldNames.length];
                        CurDBMetaData.RecordFieldNames = JavaTools.removefromList(CurDBMetaData.RecordFieldNames, new String[] {DelFieldName});
                        CurDBMetaData.RecordFieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.RecordFieldColumns);
                        CurDBMetaData.FieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.FieldColumns);

                    }
                    i--;
                }
            }
            else{
                String sMessage = JavaTools.replaceSubString(sMsgTableNotExisting, TBLGROUPSECTION + (CurDBMetaData.GroupFieldNames.length), "<TABLENAME>");
                CurDBMetaData.showMessageBox("ErrorBox", VclWindowPeerAttribute.OK, sMessage);
            }
        }
    java.util.Arrays.sort(CurDBMetaData.RecordFieldColumns, this);
    }
    catch(Exception exception){
        showCommonReportErrorBox(exception);
    }}


    public int compare(Object _oObject1, Object _oObject2){
      FieldColumn oFieldColumn1 = (FieldColumn) _oObject1;
      FieldColumn oFieldColumn2 = (FieldColumn) _oObject2;
      DBColumn oDBColumn1 = getDBColumnByName(oFieldColumn1.FieldName);
      DBColumn oDBColumn2 = getDBColumnByName(oFieldColumn2.FieldName);
      if (oDBColumn1.ValColumn < oDBColumn2.ValColumn){
        return -1;
      }
      else if (oDBColumn1.ValColumn == oDBColumn2.ValColumn){
        return 0;
      }
      else
        return 1;
    }


    private DBColumn getDBColumnByName(String _FieldName){
      for (int i = 0; i < DBColumnsVector.size(); i++){
        DBColumn oDBColumn = (DBColumn) DBColumnsVector.get(i);
        if (oDBColumn.CurDBField.FieldName.equals(_FieldName))
          return oDBColumn;
      }
      return null;
    }


    public static FieldColumn[] removeFieldColumnByFieldName(String _FieldName, FieldColumn[] _FieldColumns) {
    try {
        Vector aFieldColumns = new Vector();
        for (int i = 0; i < _FieldColumns.length; i++) {
            FieldColumn CurFieldColumn = (FieldColumn) _FieldColumns[i];
            if (!CurFieldColumn.FieldName.equals(_FieldName))
                aFieldColumns.add(CurFieldColumn);
        }
        FieldColumn[] aRetList = new FieldColumn[aFieldColumns.size()];
        aFieldColumns.toArray(aRetList);
        return aRetList;
    } catch (RuntimeException e) {
        e.printStackTrace(System.out);
        return null;
    }}



    public void removeAllVisibleTextSections(){
        int GroupCount = CurDBMetaData.GroupFieldNames.length;
        String[] sInvisibleSectionNames = new String[GroupCount + 1];
        sInvisibleSectionNames[0] = RECORDSECTION;
        for (int i = 1; i <= GroupCount; i++){
            sInvisibleSectionNames[i] = GROUPSECTION + i;
        }
        XNameAccess xNameAccessTextSections = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oTextSectionHandler.xTextSectionsSupplier.getTextSections());
        String[] sSectionNames = xNameAccessTextSections.getElementNames();
        for (int i = 0; i < sSectionNames.length; i++){
            String sSectionName = sSectionNames[i];
            if (JavaTools.FieldInList(sInvisibleSectionNames, sSectionName) < 0){
                oTextSectionHandler.removeTextSectionbyName(sSectionName);
            }
        }
    }

    private String[] getLayoutTextTableNames(){
        int GroupCount = CurDBMetaData.GroupFieldNames.length;
        String[] sLayoutTableNames = new String[GroupCount + 1];
        for (int i = 0; i < GroupCount; i++){
            sLayoutTableNames[i] = TBLGROUPSECTION + (i + 1);
        }
        sLayoutTableNames[GroupCount] = TBLRECORDSECTION;
        return sLayoutTableNames;
    }


    public void removeNonLayoutTextTables(){
        String[] sLayoutTableNames = getLayoutTextTableNames();
        XNameAccess xNameAccessTextTables = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oTextTableHandler.xTextTablesSupplier.getTextTables());
        String[] sTableNames = xNameAccessTextTables.getElementNames();
        for (int i = 0; i < sTableNames.length; i++){
            String sTableName = sTableNames[i];
            if (JavaTools.FieldInList(sLayoutTableNames, sTableName) < 0){
                oTextTableHandler.removeTextTablebyName(sTableName);
            }
        }
    }

    public void removeLayoutTextTables(){
        String[] sLayoutTableNames = getLayoutTextTableNames();
        XNameAccess xNameAccessTextTables = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oTextTableHandler.xTextTablesSupplier.getTextTables());
        XRelativeTextContentRemove xRelativeTextContentRemove = (XRelativeTextContentRemove) UnoRuntime.queryInterface(XRelativeTextContentRemove.class, xText);
        String[] sTableNames = xNameAccessTextTables.getElementNames();
        for (int i = 0; i < sTableNames.length; i++){
            String sTableName = sTableNames[i];
            if (JavaTools.FieldInList(sLayoutTableNames, sTableName) > -1){
                if (!sTableName.equals(sLayoutTableNames[0])){
                    XTextContent xTextContent = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, oTextTableHandler.getByName(sTableName));
                        boolean bleaveloop = false;
                        while (!bleaveloop){
                            try{
//                                xRelativeTextContentRemove.removeTextContentBefore(xTextContent);
                        xRelativeTextContentRemove.removeTextContentAfter(xTextContent);
                        // IllegalArgumentException may be thrown when no paragraphbreak is there
                            } catch (IllegalArgumentException iexception) {
                                bleaveloop = true;
                            }
                        }
                }
                oTextTableHandler.removeTextTablebyName(sTableName);
            }
        }
    }


    public void setLayoutSectionsVisible(boolean _IsVisible){
        try {
            XNameAccess xTextSections = oTextSectionHandler.xTextSectionsSupplier.getTextSections();
            Object oTextSection;
            int GroupFieldCount = CurDBMetaData.GroupFieldNames.length;
            for (int i = 0; i < GroupFieldCount; i++) {
                oTextSection = xTextSections.getByName(GROUPSECTION + String.valueOf(i + 1));
                Helper.setUnoPropertyValue(oTextSection, "IsVisible", new Boolean(_IsVisible));
            }
            if (xTextSections.hasByName(RECORDSECTION)) {
                oTextSection = xTextSections.getByName(RECORDSECTION);
                Helper.setUnoPropertyValue(oTextSection, "IsVisible", new Boolean(_IsVisible));
            }
        } catch (Exception exception) {
            exception.printStackTrace(System.out);
        }
    }


    public void removeCopiedTextSections(){
        int GroupCount = CurDBMetaData.GroupFieldNames.length;
        String[] sCopyTextSections = new String[GroupCount + 1];
        String[] sCopyTextTables = new String[GroupCount + 1];
        sCopyTextSections[0] = COPYOFRECORDSECTION;
        sCopyTextTables[0] = COPYOFTBLRECORDSECTION;
        for (int i = 1; i <= GroupCount; i++){
            sCopyTextSections[i] = COPYOFGROUPSECTION + (i);
            sCopyTextTables[i] = COPYOFTBLGROUPSECTION + (i);
        }
        for (int i = 0; i <= GroupCount; i++){
            oTextTableHandler.removeTextTablebyName(sCopyTextTables[i]);
            oTextSectionHandler.removeTextSectionbyName(sCopyTextSections[i]);
        }
    }

}
TOP

Related Classes of com.sun.star.wizards.report.ReportDocument

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.