| /************************************************************** |
| * |
| * 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 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.ArrayList; |
| 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; |
| import java.util.logging.Level; |
| import java.util.logging.Logger; |
| |
| class ReportTextDocument extends com.sun.star.wizards.text.TextDocument implements Comparator |
| { |
| |
| private static final String ISLANDSCAPE = "IsLandscape"; |
| private static final String ISVISIBLE = "IsVisible"; |
| private static final String QUERYNAME = "QueryName"; |
| private static final String SIZE = "Size"; |
| // private XMultiServiceFactory xMSF; |
| // private XMultiServiceFactory xMSFDoc; |
| private Object ReportPageStyle; |
| private Object FirstPageStyle; |
| private int PageWidth; |
| private Rectangle PosSize; |
| // private String ReportFolderName; |
| public Vector DBColumnsVector; |
| private RecordTable CurRecordTable; |
| 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; |
| private RecordParser CurDBMetaData; |
| |
| /** Creates new ReportDocument */ |
| public ReportTextDocument(XMultiServiceFactory xMSF, XTextDocument _textDocument, Resource oResource, RecordParser _aRP) |
| { |
| super(xMSF, _textDocument, false); |
| lateInit(oResource, _aRP); |
| } |
| |
| public ReportTextDocument(XMultiServiceFactory xMSF, String _sPreviewURL, Resource oResource, RecordParser _aRP) |
| { |
| super(xMSF, _sPreviewURL, true, null); |
| lateInit(oResource, _aRP); |
| } |
| |
| private void lateInit(Resource oResource, RecordParser _aRecordParser) |
| { |
| 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); |
| CurDBMetaData = _aRecordParser; |
| 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); |
| } |
| return AnyConverter.toBoolean(Helper.getUnoPropertyValue(oTextSection, ISVISIBLE)); |
| } |
| catch (Exception e) |
| { |
| Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e); |
| // 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 e) |
| { |
| Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e); |
| } |
| } |
| |
| public void createReportForm(String SOREPORTFORMNAME) |
| { |
| com.sun.star.container.XNameContainer xNamedForm = oFormHandler.insertFormbyName(SOREPORTFORMNAME); |
| XNameAccess xNameAccess = UnoRuntime.queryInterface(XNameAccess.class, xNamedForm); |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, PropertyNames.COMMAND_TYPE, Integer.toString(CurDBMetaData.getCommandType())); |
| if (CurDBMetaData.getCommandType() == CommandType.QUERY) |
| { |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, QUERYNAME, CurDBMetaData.getCommandName()); |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, PropertyNames.COMMAND, ""); |
| //DBMetaData.CommandObject oCommand = CurDBMetaData.getQueryByName(CurDBMetaData.getCommandName()); |
| //oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, COMMAND, CurDBMetaData.Command); |
| } |
| else |
| { |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, QUERYNAME, ""); |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, PropertyNames.COMMAND, CurDBMetaData.Command); |
| } |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "GroupFieldNames", JavaTools.ArraytoString(CurDBMetaData.GroupFieldNames)); |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "FieldNames", JavaTools.ArraytoString(CurDBMetaData.getFieldNames())); |
| String[][] sortFieldNames = CurDBMetaData.getSortFieldNames(); |
| if (sortFieldNames != null && sortFieldNames.length > 0) |
| { |
| final String space = ","; |
| final String colon = ";"; |
| StringBuilder orderBy = new StringBuilder(); |
| for (String[] sortPair : sortFieldNames) |
| { |
| orderBy.append(sortPair[0]).append(space).append(sortPair[1]).append(colon); |
| } |
| if (orderBy.length() != 0) |
| { |
| orderBy.delete(orderBy.lastIndexOf(colon), orderBy.length()); |
| } |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "Sorting", orderBy.toString()); |
| } |
| else |
| { |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "Sorting", ""); |
| } |
| oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "RecordFieldNames", JavaTools.ArraytoString(CurDBMetaData.getRecordFieldNames())); |
| } |
| |
| public void updateReportTitle(String _sTitleName) |
| { |
| m_xDocProps.setTitle(_sTitleName); |
| } |
| |
| public void getReportPageStyles() |
| { |
| try |
| { |
| Object oPageStyleFamily = oTextStyleHandler.xStyleFamiliesSupplier.getStyleFamilies().getByName("PageStyles"); |
| ReportPageStyle = Helper.getUnoObjectbyName(oPageStyleFamily, "Standard"); |
| FirstPageStyle = Helper.getUnoObjectbyName(oPageStyleFamily, "First Page"); |
| } |
| catch (Exception e) |
| { |
| Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e); |
| } |
| } |
| |
| 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, bNewLandscape); |
| Helper.setUnoPropertyValue(ReportPageStyle, SIZE, oNewSize); |
| Helper.setUnoPropertyValue(FirstPageStyle, ISLANDSCAPE, 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 e) |
| { |
| Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e); |
| } |
| } |
| |
| 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)); |
| CurDBColumn.formatValueCell(); |
| DBColumnsVector.set(i, CurDBColumn); |
| replaceFieldValueInGroupTable(CurDBColumn, i); |
| } |
| return true; |
| } |
| catch (Exception e) |
| { |
| Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e); |
| return false; |
| } |
| } |
| |
| public void setupRecordSection(String TemplateName) |
| { |
| this.ContentTemplatePath = TemplateName; |
| if (CurDBMetaData.getRecordFieldNames().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) |
| { |
| int nSize = DBColumnsVector.size(); |
| for (int i = 0; i < nSize; i++) |
| { |
| DBColumn CurDBColumn = (DBColumn) DBColumnsVector.elementAt(i); |
| String sFieldName = CurDBColumn.CurDBField.getFieldName(); |
| if (!sFieldName.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.getRecordFieldNames().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.getRecordFieldNames().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, ArrayList ReportPath, int iSelCount) |
| { |
| DBColumn CurDBColumn = null; |
| int GroupCount = GroupFieldVector.size(); |
| if (GroupCount < 4) |
| { |
| removeGroupNamesofRecordTable(iSelCount); |
| FieldColumn CurFieldColumn = CurDBMetaData.getFieldColumnByTitle(CurGroupTitle); |
| GroupFieldVector.addElement(CurFieldColumn.getFieldName()); |
| GroupCount += 1; |
| try |
| { |
| String sPath = FileAccess.getPathFromList(xMSF, ReportPath, "cnt-default.ott"); |
| oTextSectionHandler.insertTextSection(GROUPSECTION + GroupCount, sPath, GroupCount == 1); |
| CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, CurFieldColumn.getFieldName(), GroupCount - 1, TBLGROUPSECTION + (GroupCount)); |
| CurDBColumn.formatValueCell(); |
| DBColumnsVector.addElement(CurDBColumn); |
| replaceFieldValueInGroupTable(CurDBColumn, GroupCount - 1); |
| } |
| catch (Exception exception) |
| { |
| showCommonReportErrorBox(exception); |
| } |
| |
| } |
| |
| return (CurDBColumn != null); |
| } |
| |
| public void removeGroupName(String[] NewSelGroupNames, String CurGroupTitle, java.util.Vector GroupFieldVector) |
| { |
| removeGroupNamesofRecordTable(NewSelGroupNames.length + 1); |
| FieldColumn CurFieldColumn = CurDBMetaData.getFieldColumnByTitle(CurGroupTitle); |
| GroupFieldVector.removeElement(CurFieldColumn.getFieldName()); |
| try |
| { |
| 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 = 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.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.getRecordFieldName(i - CurDBMetaData.GroupFieldNames.length); |
| String[] aNewList = JavaTools.removefromList(CurDBMetaData.getRecordFieldNames(), new String[] |
| { |
| DelFieldName |
| }); |
| CurDBMetaData.setRecordFieldNames(aNewList); |
| CurDBMetaData.RecordFieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.RecordFieldColumns); |
| CurDBMetaData.FieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.FieldColumns); |
| |
| } |
| i--; |
| } |
| } |
| 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.getFieldName()); |
| DBColumn oDBColumn2 = getDBColumnByName(oFieldColumn2.getFieldName()); |
| 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.getFieldName().equals(_FieldName)) |
| { |
| return oDBColumn; |
| } |
| } |
| return null; |
| } |
| |
| public static FieldColumn[] removeFieldColumnByFieldName(String _FieldName, FieldColumn[] _FieldColumns) |
| { |
| try |
| { |
| ArrayList<FieldColumn> aFieldColumns = new ArrayList<FieldColumn>(); |
| for (int i = 0; i < _FieldColumns.length; i++) |
| { |
| FieldColumn CurFieldColumn = _FieldColumns[i]; |
| if (!CurFieldColumn.getFieldName().equals(_FieldName)) |
| { |
| aFieldColumns.add(CurFieldColumn); |
| } |
| } |
| FieldColumn[] aRetList = new FieldColumn[aFieldColumns.size()]; |
| aFieldColumns.toArray(aRetList); |
| return aRetList; |
| } |
| catch (RuntimeException e) |
| { |
| Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e); |
| 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 = 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 = 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 = UnoRuntime.queryInterface(XNameAccess.class, oTextTableHandler.xTextTablesSupplier.getTextTables()); |
| 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 = 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, _IsVisible); |
| } |
| if (xTextSections.hasByName(RECORDSECTION)) |
| { |
| oTextSection = xTextSections.getByName(RECORDSECTION); |
| Helper.setUnoPropertyValue(oTextSection, ISVISIBLE, _IsVisible); |
| } |
| } |
| catch (Exception e) |
| { |
| Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e); |
| } |
| } |
| |
| 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]); |
| } |
| } |
| } |