1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 package com.sun.star.wizards.report;
24 
25 import com.sun.star.lang.IllegalArgumentException;
26 import com.sun.star.text.XRelativeTextContentRemove;
27 import com.sun.star.text.XTextContent;
28 import java.util.ArrayList;
29 import java.util.Comparator;
30 import java.util.Vector;
31 
32 import com.sun.star.awt.Rectangle;
33 import com.sun.star.awt.VclWindowPeerAttribute;
34 import com.sun.star.container.XNameAccess;
35 import com.sun.star.lang.XMultiServiceFactory;
36 import com.sun.star.uno.AnyConverter;
37 import com.sun.star.uno.Exception;
38 import com.sun.star.uno.UnoRuntime;
39 import com.sun.star.wizards.db.*;
40 import com.sun.star.wizards.common.*;
41 import com.sun.star.wizards.ui.*;
42 import com.sun.star.sdb.CommandType;
43 // import com.sun.star.table.XCell;
44 import com.sun.star.text.XTextDocument;
45 import com.sun.star.wizards.common.JavaTools;
46 import com.sun.star.wizards.text.TextTableHandler;
47 import com.sun.star.wizards.text.TextSectionHandler;
48 import com.sun.star.wizards.text.TextStyleHandler;
49 import com.sun.star.wizards.text.TextFieldHandler;
50 import com.sun.star.wizards.text.ViewHandler;
51 import com.sun.star.wizards.document.FormHandler;
52 import java.util.logging.Level;
53 import java.util.logging.Logger;
54 
55 class ReportTextDocument extends com.sun.star.wizards.text.TextDocument implements Comparator
56 {
57 
58     private static final String ISLANDSCAPE = "IsLandscape";
59     private static final String ISVISIBLE = "IsVisible";
60     private static final String QUERYNAME = "QueryName";
61     private static final String SIZE = "Size";
62     // private XMultiServiceFactory xMSF;
63     // private XMultiServiceFactory xMSFDoc;
64     private Object ReportPageStyle;
65     private Object FirstPageStyle;
66     private int PageWidth;
67     private Rectangle PosSize;
68     // private String ReportFolderName;
69     public Vector DBColumnsVector;
70     private RecordTable CurRecordTable;
71     private String sMsgTableNotExisting;
72     private String sMsgCommonReportError;
73     private String ContentTemplatePath;
74     private String LayoutTemplatePath;
75     // private String sMsgInvalidTextField;
76     private String sMsgEndAutopilot;
77     public boolean bIsCurLandscape;
78     public TextTableHandler oTextTableHandler;
79     public TextSectionHandler oTextSectionHandler;
80     public FormHandler oFormHandler;
81     public TextStyleHandler oTextStyleHandler;
82     public TextFieldHandler oTextFieldHandler;
83     public ViewHandler oViewHandler;
84     public NumberFormatter oNumberFormatter;
85     public static final String TBLRECORDSECTION = "Tbl_RecordSection";
86     public static final String TBLGROUPSECTION = "Tbl_GroupField";
87     public static final String RECORDSECTION = "RecordSection";
88     public static final String GROUPSECTION = "GroupField";
89     public static final String COPYOFTBLRECORDSECTION = "CopyOf" + TBLRECORDSECTION;
90     public static final String COPYOFTBLGROUPSECTION = "CopyOf" + TBLGROUPSECTION;
91     public static final String COPYOFRECORDSECTION = "CopyOf" + RECORDSECTION;
92     public static final String COPYOFGROUPSECTION = "CopyOf" + GROUPSECTION;
93     private RecordParser CurDBMetaData;
94 
95     /** Creates new ReportDocument */
ReportTextDocument(XMultiServiceFactory xMSF, XTextDocument _textDocument, Resource oResource, RecordParser _aRP)96     public ReportTextDocument(XMultiServiceFactory xMSF, XTextDocument _textDocument, Resource oResource, RecordParser _aRP)
97     {
98         super(xMSF, _textDocument, false);
99         lateInit(oResource, _aRP);
100     }
101 
ReportTextDocument(XMultiServiceFactory xMSF, String _sPreviewURL, Resource oResource, RecordParser _aRP)102     public ReportTextDocument(XMultiServiceFactory xMSF, String _sPreviewURL, Resource oResource, RecordParser _aRP)
103     {
104         super(xMSF, _sPreviewURL, true, null);
105         lateInit(oResource, _aRP);
106     }
107 
lateInit(Resource oResource, RecordParser _aRecordParser)108     private void lateInit(Resource oResource, RecordParser _aRecordParser)
109     {
110         oTextTableHandler = new TextTableHandler(xMSFDoc, xTextDocument);
111         oTextSectionHandler = new TextSectionHandler(xMSFDoc, xTextDocument);
112         oFormHandler = new FormHandler(xMSFDoc, xTextDocument);
113         oTextStyleHandler = new TextStyleHandler(xMSFDoc, xTextDocument);
114         oViewHandler = new ViewHandler(xMSFDoc, xTextDocument);
115         oTextFieldHandler = new TextFieldHandler(xMSFDoc, xTextDocument);
116         DBColumnsVector = new java.util.Vector();
117         oNumberFormatter = oTextTableHandler.getNumberFormatter();
118         // CurDBMetaData = new RecordParser(xMSF); //, CharLocale, oNumberFormatter);
119         CurDBMetaData = _aRecordParser;
120         long lDateCorrection = oNumberFormatter.getNullDateCorrection();
121         oNumberFormatter.setBooleanReportDisplayNumberFormat();
122         oNumberFormatter.setNullDateCorrection(lDateCorrection);
123         // sMsgInvalidTextField = oResource.getResText(UIConsts.RID_REPORT + 73);
124         sMsgTableNotExisting = oResource.getResText(UIConsts.RID_REPORT + 61);
125         sMsgCommonReportError = oResource.getResText(UIConsts.RID_REPORT + 72);
126         sMsgCommonReportError = JavaTools.replaceSubString(sMsgCommonReportError, String.valueOf((char) 13), "<BR>");
127         sMsgEndAutopilot = oResource.getResText(UIConsts.RID_DB_COMMON + 33);
128         sMsgTableNotExisting = sMsgTableNotExisting + (char) 13 + sMsgEndAutopilot;
129         bIsCurLandscape = true;
130         getReportPageStyles();
131     }
132 
getNumberFormatter()133     public NumberFormatter getNumberFormatter()
134     {
135         return oNumberFormatter;
136     }
137 
checkReportLayoutMode(String[] GroupFieldNames)138     public boolean checkReportLayoutMode(String[] GroupFieldNames)
139     {
140         try
141         {
142             XNameAccess xTextSections = oTextSectionHandler.xTextSectionsSupplier.getTextSections();
143             Object oTextSection;
144             if (GroupFieldNames.length > 0)
145             {
146                 oTextSection = xTextSections.getByName(GROUPSECTION + String.valueOf(1));
147             }
148             else
149             {
150                 oTextSection = xTextSections.getByName(RECORDSECTION);
151             }
152             return AnyConverter.toBoolean(Helper.getUnoPropertyValue(oTextSection, ISVISIBLE));
153         }
154         catch (Exception e)
155         {
156             Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e);
157             // In doubt we rather suggest this is LayoutMode...
158             return true;
159         }
160     }
161 
swapContentTemplate(String ContentTemplatePath)162     public void swapContentTemplate(String ContentTemplatePath)
163     {
164 //  unlockallControllers();
165         //xProgressBar.start("", 10);
166         this.ContentTemplatePath = ContentTemplatePath;
167         loadSectionsfromTemplate(ContentTemplatePath);
168         // xProgressBar.setValue(40);
169         oTextStyleHandler.loadStyleTemplates(ContentTemplatePath, "LoadTextStyles");
170         // xProgressBar.setValue(70);
171         if (CurRecordTable != null)
172         {
173             CurRecordTable.adjustOptimalTableWidths(xMSF, oViewHandler);
174         }
175         // xProgressBar.setValue(100);
176         oViewHandler.selectFirstPage(oTextTableHandler);
177         // xProgressBar.end();
178     }
179 
swapLayoutTemplate(String LayoutTemplatePath )180     public void swapLayoutTemplate(String LayoutTemplatePath/*, String BitmapPath*/)
181     {
182         try
183         {
184             // xProgressBar.start("", 10);
185             this.LayoutTemplatePath = LayoutTemplatePath;
186             boolean bOldIsCurLandscape = AnyConverter.toBoolean(Helper.getUnoPropertyValue(ReportPageStyle, ISLANDSCAPE));
187             oTextStyleHandler.loadStyleTemplates(LayoutTemplatePath, "LoadPageStyles");
188             // xProgressBar.setValue(60);
189             changePageOrientation(bOldIsCurLandscape);
190             // xProgressBar.setValue(100);
191             oViewHandler.selectFirstPage(oTextTableHandler);
192             // xProgressBar.end();
193         }
194         catch (Exception e)
195         {
196             Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e);
197         }
198     }
199 
createReportForm(String SOREPORTFORMNAME)200     public void createReportForm(String SOREPORTFORMNAME)
201     {
202         com.sun.star.container.XNameContainer xNamedForm = oFormHandler.insertFormbyName(SOREPORTFORMNAME);
203         XNameAccess xNameAccess = UnoRuntime.queryInterface(XNameAccess.class, xNamedForm);
204         oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, PropertyNames.COMMAND_TYPE, Integer.toString(CurDBMetaData.getCommandType()));
205         if (CurDBMetaData.getCommandType() == CommandType.QUERY)
206         {
207             oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, QUERYNAME, CurDBMetaData.getCommandName());
208             oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, PropertyNames.COMMAND, "");
209             //DBMetaData.CommandObject oCommand = CurDBMetaData.getQueryByName(CurDBMetaData.getCommandName());
210             //oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, COMMAND, CurDBMetaData.Command);
211         }
212         else
213         {
214             oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, QUERYNAME, "");
215             oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, PropertyNames.COMMAND, CurDBMetaData.Command);
216         }
217         oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "GroupFieldNames", JavaTools.ArraytoString(CurDBMetaData.GroupFieldNames));
218         oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "FieldNames", JavaTools.ArraytoString(CurDBMetaData.getFieldNames()));
219         String[][] sortFieldNames = CurDBMetaData.getSortFieldNames();
220         if (sortFieldNames != null && sortFieldNames.length > 0)
221         {
222             final String space = ",";
223             final String colon = ";";
224             StringBuilder orderBy = new StringBuilder();
225             for (String[] sortPair : sortFieldNames)
226             {
227                 orderBy.append(sortPair[0]).append(space).append(sortPair[1]).append(colon);
228             }
229             if (orderBy.length() != 0)
230             {
231                 orderBy.delete(orderBy.lastIndexOf(colon), orderBy.length());
232             }
233             oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "Sorting", orderBy.toString());
234         }
235         else
236         {
237             oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "Sorting", "");
238         }
239         oFormHandler.insertHiddenControl(xNameAccess, xNamedForm, "RecordFieldNames", JavaTools.ArraytoString(CurDBMetaData.getRecordFieldNames()));
240     }
241 
updateReportTitle(String _sTitleName)242     public void updateReportTitle(String _sTitleName)
243     {
244         m_xDocProps.setTitle(_sTitleName);
245     }
246 
getReportPageStyles()247     public void getReportPageStyles()
248     {
249         try
250         {
251             Object oPageStyleFamily = oTextStyleHandler.xStyleFamiliesSupplier.getStyleFamilies().getByName("PageStyles");
252             ReportPageStyle = Helper.getUnoObjectbyName(oPageStyleFamily, "Standard");
253             FirstPageStyle = Helper.getUnoObjectbyName(oPageStyleFamily, "First Page");
254         }
255         catch (Exception e)
256         {
257             Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e);
258         }
259     }
260 
changePageOrientation(boolean bNewLandscape)261     public void changePageOrientation(boolean bNewLandscape)
262     {
263         try
264         {
265             com.sun.star.awt.Size oNewSize;
266             getReportPageStyles();
267             com.sun.star.awt.Size oLocSize = (com.sun.star.awt.Size) Helper.getUnoStructValue(ReportPageStyle, SIZE);
268             bIsCurLandscape = AnyConverter.toBoolean(Helper.getUnoPropertyValue(ReportPageStyle, ISLANDSCAPE));
269             if (bIsCurLandscape != bNewLandscape)
270             {
271                 oNewSize = new com.sun.star.awt.Size(oLocSize.Height, oLocSize.Width);
272                 Helper.setUnoPropertyValue(ReportPageStyle, ISLANDSCAPE, bNewLandscape);
273                 Helper.setUnoPropertyValue(ReportPageStyle, SIZE, oNewSize);
274                 Helper.setUnoPropertyValue(FirstPageStyle, ISLANDSCAPE, bNewLandscape);
275                 Helper.setUnoPropertyValue(FirstPageStyle, SIZE, oNewSize);
276                 int iLeftMargin = AnyConverter.toInt(Helper.getUnoPropertyValue(ReportPageStyle, "LeftMargin"));
277                 int iRightMargin = AnyConverter.toInt(Helper.getUnoPropertyValue(ReportPageStyle, "RightMargin"));
278                 PageWidth = oNewSize.Width - iLeftMargin - iRightMargin;
279                 if (CurRecordTable != null)
280                 {
281                     CurRecordTable.adjustOptimalTableWidths(xMSF, oViewHandler);
282                 }
283             }
284         }
285         catch (Exception e)
286         {
287             Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e);
288         }
289     }
290 
loadSectionsfromTemplate(String sTemplateUrl)291     public boolean loadSectionsfromTemplate(String sTemplateUrl)
292     {
293         try
294         {
295             int i;
296             DBColumn CurDBColumn;
297             int GroupCount = CurDBMetaData.GroupFieldNames.length;
298             CurRecordTable = null;
299             for (i = 0; i < GroupCount; i++)
300             {
301                 String SectionName = GROUPSECTION + Integer.toString(i + 1);
302                 oTextTableHandler.renameTextTable("Tbl_" + SectionName, "MyTextTable");
303                 oTextSectionHandler.linkSectiontoTemplate(sTemplateUrl, SectionName);
304                 oTextTableHandler.renameTextTable("MyTextTable", "Tbl_" + SectionName);
305             }
306             if (oTextSectionHandler.xTextSectionsSupplier.getTextSections().getElementNames().length > CurDBMetaData.GroupFieldNames.length)
307             {
308                 oTextSectionHandler.linkSectiontoTemplate(sTemplateUrl, RECORDSECTION);
309                 CurRecordTable = new RecordTable(oTextTableHandler);
310                 insertColumnstoRecordTable();
311             }
312             for (i = 0; i < GroupCount; i++)
313             {
314                 CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, CurDBMetaData.GroupFieldNames[i], i, TBLGROUPSECTION + (i + 1));
315                 CurDBColumn.formatValueCell();
316                 DBColumnsVector.set(i, CurDBColumn);
317                 replaceFieldValueInGroupTable(CurDBColumn, i);
318             }
319             return true;
320         }
321         catch (Exception e)
322         {
323             Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e);
324             return false;
325         }
326     }
327 
setupRecordSection(String TemplateName)328     public void setupRecordSection(String TemplateName)
329     {
330         this.ContentTemplatePath = TemplateName;
331         if (CurDBMetaData.getRecordFieldNames().length > 0)
332         {
333             boolean bAddParagraph = true;
334             if (CurDBMetaData.GroupFieldNames != null)
335             {
336                 bAddParagraph = (CurDBMetaData.GroupFieldNames.length == 0);
337             }
338             oTextSectionHandler.insertTextSection(RECORDSECTION, TemplateName, bAddParagraph);
339             CurRecordTable = new RecordTable(oTextTableHandler);
340             insertColumnstoRecordTable();
341             if (CurRecordTable != null)
342             {
343                 CurRecordTable.adjustOptimalTableWidths(xMSF, oViewHandler);
344             }
345         }
346         else
347         {
348             CurRecordTable = null;
349         }
350     }
351 
refreshGroupFields(String[] _sNewNames)352     public void refreshGroupFields(String[] _sNewNames)
353     {
354         int nSize = DBColumnsVector.size();
355         for (int i = 0; i < nSize; i++)
356         {
357             DBColumn CurDBColumn = (DBColumn) DBColumnsVector.elementAt(i);
358             String sFieldName = CurDBColumn.CurDBField.getFieldName();
359             if (!sFieldName.equals(_sNewNames[i]))
360             {
361                 CurDBColumn.CurDBField = CurDBMetaData.getFieldColumnByDisplayName(_sNewNames[i]);
362                 CurDBColumn.insertColumnData(oTextFieldHandler, bIsCurLandscape);
363             }
364         }
365     }
366     //public boolean isGroupField(String _FieldName)
367     //    {
368     //        return (JavaTools.FieldInList(CurDBMetaData.GroupFieldNames, _FieldName) != -1);
369     //    }
370 
replaceFieldValueInRecordSection(int RecordCount)371     public void replaceFieldValueInRecordSection(int RecordCount)
372     {
373         int GroupCount = CurDBMetaData.GroupFieldNames.length;
374         int FieldCount = CurDBMetaData.getFieldNames().length;
375         for (int i = GroupCount; i < FieldCount; i++)
376         {
377             ((DBColumn) DBColumnsVector.elementAt(i)).insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
378         }
379     }
380 
updateTextSections(String[] SelGroupNames)381     public void updateTextSections(String[] SelGroupNames) throws Exception
382     {
383         String TableName;
384         DBColumn OldDBColumn;
385         DBColumn CurDBColumn;
386         // XNameAccess xTableNames = oTextTableHandler.xTextTablesSupplier.getTextTables();
387         int GroupFieldCount = SelGroupNames.length;
388         for (int i = 0; i < GroupFieldCount; i++)
389         {
390             TableName = TBLGROUPSECTION + Integer.toString(i + 1);
391             OldDBColumn = (DBColumn) DBColumnsVector.get(i);
392             CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, SelGroupNames[i], i, TableName, OldDBColumn);
393             CurDBColumn.formatValueCell();
394             DBColumnsVector.setElementAt(CurDBColumn, i);
395             CurDBColumn.insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
396         }
397     }
398 
replaceFieldValueInGroupTable(DBColumn CurDBColumn, int TableIndex)399     public void replaceFieldValueInGroupTable(DBColumn CurDBColumn, int TableIndex)
400     {
401         String TableName = TBLGROUPSECTION + (TableIndex + 1);
402         // Note: for some reason the table might lose its name and has to be renamed therefor
403         String OldTableName = CurDBColumn.xTableName.getName();
404         if (OldTableName.compareTo(TableName) != 0)
405         {
406             CurDBColumn.xTableName.setName(TableName);
407         }
408         CurDBColumn.insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
409         CurDBColumn.setCellFont();
410     }
411 
replaceFieldValueInRecordTable()412     public void replaceFieldValueInRecordTable()
413     {
414         String TableName = TBLRECORDSECTION;
415         String OldTableName = CurRecordTable.xTableName.getName();
416         if (OldTableName.compareTo(TableName) != 0)
417         {
418             CurRecordTable.xTableName.setName(TableName);
419         }
420         int GroupCount = CurDBMetaData.GroupFieldNames.length;
421         int RecordCount = CurDBMetaData.getRecordFieldNames().length;
422         for (int i = GroupCount; i < RecordCount; i++)
423         {
424             ((DBColumn) DBColumnsVector.elementAt(i)).insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
425         }
426     }
427 
insertColumnstoRecordTable()428     public void insertColumnstoRecordTable()
429     {
430         try
431         {
432             int GroupCount = CurDBMetaData.GroupFieldNames.length;
433             DBColumn CurDBColumn;
434             // Note for some reason the table might lose its name and has to be renamed therefor
435             String OldTableName = CurRecordTable.xTableName.getName();
436             if (OldTableName.compareTo(TBLRECORDSECTION) != 0)
437             {
438                 CurRecordTable = new RecordTable(oTextTableHandler);
439             }
440             com.sun.star.table.XTableColumns xColumns = CurRecordTable.xTextTable.getColumns();
441             int ColCount = xColumns.getCount();
442             int RecordCount = CurDBMetaData.getRecordFieldNames().length;
443             if (ColCount > RecordCount)
444             {
445                 int RemoveCount = ColCount - RecordCount;
446                 xColumns.removeByIndex(0, RemoveCount);
447             }
448             else if (ColCount < RecordCount)
449             {
450                 int AddCount = RecordCount - ColCount;
451                 CurRecordTable.xTextTable.getColumns().insertByIndex(ColCount, AddCount);
452             }
453             for (int i = 0; i < RecordCount; i++)
454             {
455                 CurDBColumn = new DBColumn(CurRecordTable, oTextTableHandler, CurDBMetaData, i, true);
456                 CurDBColumn.initializeNumberFormat();
457                 CurDBColumn.insertColumnData(oTextFieldHandler, this.bIsCurLandscape);
458                 if (DBColumnsVector.size() <= (i + GroupCount))
459                 {
460                     DBColumnsVector.add(CurDBColumn);
461                 }
462                 else
463                 {
464                     DBColumnsVector.set(i + GroupCount, CurDBColumn);
465                 }
466             }
467         }
468         catch (Exception exception)
469         {
470             showCommonReportErrorBox(exception);
471         }
472     }
473 
addGroupNametoDocument(String[] GroupNames, String CurGroupTitle, Vector GroupFieldVector, ArrayList ReportPath, int iSelCount)474     public boolean addGroupNametoDocument(String[] GroupNames, String CurGroupTitle, Vector GroupFieldVector, ArrayList ReportPath, int iSelCount)
475     {
476         DBColumn CurDBColumn = null;
477         int GroupCount = GroupFieldVector.size();
478         if (GroupCount < 4)
479         {
480             removeGroupNamesofRecordTable(iSelCount);
481             FieldColumn CurFieldColumn = CurDBMetaData.getFieldColumnByTitle(CurGroupTitle);
482             GroupFieldVector.addElement(CurFieldColumn.getFieldName());
483             GroupCount += 1;
484             try
485             {
486                 String sPath = FileAccess.getPathFromList(xMSF, ReportPath, "cnt-default.ott");
487                 oTextSectionHandler.insertTextSection(GROUPSECTION + GroupCount, sPath, GroupCount == 1);
488                 CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, CurFieldColumn.getFieldName(), GroupCount - 1, TBLGROUPSECTION + (GroupCount));
489                 CurDBColumn.formatValueCell();
490                 DBColumnsVector.addElement(CurDBColumn);
491                 replaceFieldValueInGroupTable(CurDBColumn, GroupCount - 1);
492             }
493             catch (Exception exception)
494             {
495                 showCommonReportErrorBox(exception);
496             }
497 
498         }
499 
500         return (CurDBColumn != null);
501     }
502 
removeGroupName(String[] NewSelGroupNames, String CurGroupTitle, java.util.Vector GroupFieldVector)503     public void removeGroupName(String[] NewSelGroupNames, String CurGroupTitle, java.util.Vector GroupFieldVector)
504     {
505         removeGroupNamesofRecordTable(NewSelGroupNames.length + 1);
506         FieldColumn CurFieldColumn = CurDBMetaData.getFieldColumnByTitle(CurGroupTitle);
507         GroupFieldVector.removeElement(CurFieldColumn.getFieldName());
508         try
509         {
510             oTextSectionHandler.removeLastTextSection();
511             oTextTableHandler.removeLastTextTable();
512             // if the previously selected item is somewhere in the middle of the listbox (and not at the end) the
513             // Textsections have to be updated
514             if (JavaTools.FieldInList(NewSelGroupNames, CurGroupTitle) == -1)
515             {
516                 updateTextSections(NewSelGroupNames);
517             }
518             int iSelItemCount = NewSelGroupNames.length;
519             DBColumnsVector.remove(iSelItemCount);
520         }
521         catch (Exception exception)
522         {
523             showCommonReportErrorBox(exception);
524         }
525     }
526 
removeGroupNamesofRecordTable(int GroupFieldCount)527     public void removeGroupNamesofRecordTable(int GroupFieldCount)
528     {
529         int CurFieldCount = DBColumnsVector.size();
530         if (CurFieldCount > GroupFieldCount)
531         {
532             for (int i = CurFieldCount - 1; i >= GroupFieldCount; i--)
533             {
534                 DBColumnsVector.removeElementAt(i);
535             }
536         }
537     }
538 
showCommonReportErrorBox(Exception exception)539     public void showCommonReportErrorBox(Exception exception)
540     {
541         String SystemContentPath = JavaTools.convertfromURLNotation(ContentTemplatePath);
542         String sMsgCurCommonReportError = JavaTools.replaceSubString(sMsgCommonReportError, SystemContentPath, "%PATH");
543         CurDBMetaData.showMessageBox("ErrorBox", VclWindowPeerAttribute.OK, sMsgCurCommonReportError);
544         exception.printStackTrace(System.out);
545     }
546 
getallDBColumns()547     public void getallDBColumns()
548     {
549         try
550         {
551             DBColumn CurDBColumn;
552             for (int i = 0; i < CurDBMetaData.FieldColumns.length; i++)
553             {
554                 if (i < CurDBMetaData.GroupFieldNames.length)
555                 {
556                     CurDBColumn = new DBColumn(oTextTableHandler, CurDBMetaData, CurDBMetaData.GroupFieldNames[i], i, COPYOFTBLGROUPSECTION + (i + 1));
557                 }
558                 else
559                 {
560                     if (CurRecordTable == null)
561                     {
562                         CurRecordTable = new RecordTable(oTextTableHandler);
563                     }
564                     CurDBColumn = new DBColumn(CurRecordTable, oTextTableHandler, CurDBMetaData, i - CurDBMetaData.GroupFieldNames.length);
565                 }
566                 if (CurDBColumn.xNameCell != null)
567                 {
568                     DBColumnsVector.addElement(CurDBColumn);
569                 }
570                 else
571                 {
572                     String DelFieldName;
573                     if (i < CurDBMetaData.GroupFieldNames.length)
574                     {
575                         DelFieldName = CurDBMetaData.GroupFieldNames[i];
576                         CurDBMetaData.GroupFieldNames = JavaTools.removefromList(CurDBMetaData.GroupFieldNames, new String[]
577                                 {
578                                     DelFieldName
579                                 });
580                         CurDBMetaData.GroupFieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.GroupFieldColumns);
581                     }
582                     else
583                     {
584                         DelFieldName = CurDBMetaData.getRecordFieldName(i - CurDBMetaData.GroupFieldNames.length);
585                         String[] aNewList = JavaTools.removefromList(CurDBMetaData.getRecordFieldNames(), new String[]
586                                 {
587                                     DelFieldName
588                                 });
589                         CurDBMetaData.setRecordFieldNames(aNewList);
590                         CurDBMetaData.RecordFieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.RecordFieldColumns);
591                         CurDBMetaData.FieldColumns = removeFieldColumnByFieldName(DelFieldName, CurDBMetaData.FieldColumns);
592 
593                     }
594                     i--;
595                 }
596             }
597             java.util.Arrays.sort(CurDBMetaData.RecordFieldColumns, this);
598         }
599         catch (Exception exception)
600         {
601             showCommonReportErrorBox(exception);
602         }
603     }
604 
compare(Object _oObject1, Object _oObject2)605     public int compare(Object _oObject1, Object _oObject2)
606     {
607         FieldColumn oFieldColumn1 = (FieldColumn) _oObject1;
608         FieldColumn oFieldColumn2 = (FieldColumn) _oObject2;
609         DBColumn oDBColumn1 = getDBColumnByName(oFieldColumn1.getFieldName());
610         DBColumn oDBColumn2 = getDBColumnByName(oFieldColumn2.getFieldName());
611         if (oDBColumn1.ValColumn < oDBColumn2.ValColumn)
612         {
613             return -1;
614         }
615         else if (oDBColumn1.ValColumn == oDBColumn2.ValColumn)
616         {
617             return 0;
618         }
619         else
620         {
621             return 1;
622         }
623     }
624 
getDBColumnByName(String _FieldName)625     private DBColumn getDBColumnByName(String _FieldName)
626     {
627         for (int i = 0; i < DBColumnsVector.size(); i++)
628         {
629             DBColumn oDBColumn = (DBColumn) DBColumnsVector.get(i);
630             if (oDBColumn.CurDBField.getFieldName().equals(_FieldName))
631             {
632                 return oDBColumn;
633             }
634         }
635         return null;
636     }
637 
removeFieldColumnByFieldName(String _FieldName, FieldColumn[] _FieldColumns)638     public static FieldColumn[] removeFieldColumnByFieldName(String _FieldName, FieldColumn[] _FieldColumns)
639     {
640         try
641         {
642             ArrayList<FieldColumn> aFieldColumns = new ArrayList<FieldColumn>();
643             for (int i = 0; i < _FieldColumns.length; i++)
644             {
645                 FieldColumn CurFieldColumn = _FieldColumns[i];
646                 if (!CurFieldColumn.getFieldName().equals(_FieldName))
647                 {
648                     aFieldColumns.add(CurFieldColumn);
649                 }
650             }
651             FieldColumn[] aRetList = new FieldColumn[aFieldColumns.size()];
652             aFieldColumns.toArray(aRetList);
653             return aRetList;
654         }
655         catch (RuntimeException e)
656         {
657             Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e);
658             return null;
659         }
660     }
661 
removeAllVisibleTextSections()662     public void removeAllVisibleTextSections()
663     {
664         int GroupCount = CurDBMetaData.GroupFieldNames.length;
665         String[] sInvisibleSectionNames = new String[GroupCount + 1];
666         sInvisibleSectionNames[0] = RECORDSECTION;
667         for (int i = 1; i <= GroupCount; i++)
668         {
669             sInvisibleSectionNames[i] = GROUPSECTION + i;
670         }
671         XNameAccess xNameAccessTextSections = UnoRuntime.queryInterface(XNameAccess.class, oTextSectionHandler.xTextSectionsSupplier.getTextSections());
672         String[] sSectionNames = xNameAccessTextSections.getElementNames();
673         for (int i = 0; i < sSectionNames.length; i++)
674         {
675             String sSectionName = sSectionNames[i];
676             if (JavaTools.FieldInList(sInvisibleSectionNames, sSectionName) < 0)
677             {
678                 oTextSectionHandler.removeTextSectionbyName(sSectionName);
679             }
680         }
681     }
682 
getLayoutTextTableNames()683     private String[] getLayoutTextTableNames()
684     {
685         int GroupCount = CurDBMetaData.GroupFieldNames.length;
686         String[] sLayoutTableNames = new String[GroupCount + 1];
687         for (int i = 0; i < GroupCount; i++)
688         {
689             sLayoutTableNames[i] = TBLGROUPSECTION + (i + 1);
690         }
691         sLayoutTableNames[GroupCount] = TBLRECORDSECTION;
692         return sLayoutTableNames;
693     }
694 
removeNonLayoutTextTables()695     public void removeNonLayoutTextTables()
696     {
697         String[] sLayoutTableNames = getLayoutTextTableNames();
698         XNameAccess xNameAccessTextTables = UnoRuntime.queryInterface(XNameAccess.class, oTextTableHandler.xTextTablesSupplier.getTextTables());
699         String[] sTableNames = xNameAccessTextTables.getElementNames();
700         for (int i = 0; i < sTableNames.length; i++)
701         {
702             String sTableName = sTableNames[i];
703             if (JavaTools.FieldInList(sLayoutTableNames, sTableName) < 0)
704             {
705                 oTextTableHandler.removeTextTablebyName(sTableName);
706             }
707         }
708     }
709 
removeLayoutTextTables()710     public void removeLayoutTextTables()
711     {
712         String[] sLayoutTableNames = getLayoutTextTableNames();
713         XNameAccess xNameAccessTextTables = UnoRuntime.queryInterface(XNameAccess.class, oTextTableHandler.xTextTablesSupplier.getTextTables());
714         XRelativeTextContentRemove xRelativeTextContentRemove = UnoRuntime.queryInterface(XRelativeTextContentRemove.class, xText);
715         String[] sTableNames = xNameAccessTextTables.getElementNames();
716         for (int i = 0; i < sTableNames.length; i++)
717         {
718             String sTableName = sTableNames[i];
719             if (JavaTools.FieldInList(sLayoutTableNames, sTableName) > -1)
720             {
721                 if (!sTableName.equals(sLayoutTableNames[0]))
722                 {
723                     XTextContent xTextContent = UnoRuntime.queryInterface(XTextContent.class, oTextTableHandler.getByName(sTableName));
724                     boolean bleaveloop = false;
725                     while (!bleaveloop)
726                     {
727                         try
728                         {
729 //                                xRelativeTextContentRemove.removeTextContentBefore(xTextContent);
730                             xRelativeTextContentRemove.removeTextContentAfter(xTextContent);
731                             // IllegalArgumentException may be thrown when no paragraphbreak is there
732                         }
733                         catch (IllegalArgumentException iexception)
734                         {
735                             bleaveloop = true;
736                         }
737                     }
738                 }
739                 oTextTableHandler.removeTextTablebyName(sTableName);
740             }
741         }
742     }
743 
setLayoutSectionsVisible(boolean _IsVisible)744     public void setLayoutSectionsVisible(boolean _IsVisible)
745     {
746         try
747         {
748             XNameAccess xTextSections = oTextSectionHandler.xTextSectionsSupplier.getTextSections();
749             Object oTextSection;
750             int GroupFieldCount = CurDBMetaData.GroupFieldNames.length;
751             for (int i = 0; i < GroupFieldCount; i++)
752             {
753                 oTextSection = xTextSections.getByName(GROUPSECTION + String.valueOf(i + 1));
754                 Helper.setUnoPropertyValue(oTextSection, ISVISIBLE, _IsVisible);
755             }
756             if (xTextSections.hasByName(RECORDSECTION))
757             {
758                 oTextSection = xTextSections.getByName(RECORDSECTION);
759                 Helper.setUnoPropertyValue(oTextSection, ISVISIBLE, _IsVisible);
760             }
761         }
762         catch (Exception e)
763         {
764             Logger.getLogger(ReportTextDocument.class.getName()).log(Level.SEVERE, null, e);
765         }
766     }
767 
removeCopiedTextSections()768     public void removeCopiedTextSections()
769     {
770         int GroupCount = CurDBMetaData.GroupFieldNames.length;
771         String[] sCopyTextSections = new String[GroupCount + 1];
772         String[] sCopyTextTables = new String[GroupCount + 1];
773         sCopyTextSections[0] = COPYOFRECORDSECTION;
774         sCopyTextTables[0] = COPYOFTBLRECORDSECTION;
775         for (int i = 1; i <= GroupCount; i++)
776         {
777             sCopyTextSections[i] = COPYOFGROUPSECTION + (i);
778             sCopyTextTables[i] = COPYOFTBLGROUPSECTION + (i);
779         }
780         for (int i = 0; i <= GroupCount; i++)
781         {
782             oTextTableHandler.removeTextTablebyName(sCopyTextTables[i]);
783             oTextSectionHandler.removeTextSectionbyName(sCopyTextSections[i]);
784         }
785     }
786 }
787