/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: ReportDocument.java,v $
*
* $Revision: 1.53.40.2 $
*
* last change: $Author: kz $ $Date: 2008/01/18 12:40:38 $
*
* 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;
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());
DBMetaData.CommandObject oCommand = CurDBMetaData.getQueryByName(CurDBMetaData.getCommandName());
oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "Command", CurDBMetaData.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]);
}
}
}