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