report_info.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import 'package:fis_lib_report/report/element_tag.dart';
  2. import 'package:fis_lib_report/report/element_type.dart';
  3. import 'package:fis_lib_report/report/inputImageList.dart';
  4. import 'package:fis_lib_report/report/inputText.dart';
  5. import 'package:fis_lib_report/report/interfaces/block_element.dart';
  6. import 'package:fis_lib_report/report/interfaces/element.dart';
  7. import 'package:fis_lib_report/report/paragraph.dart';
  8. import 'package:fis_lib_report/report/report_template_document.dart';
  9. import 'package:fis_lib_report/report/rt_table.dart';
  10. import 'package:fis_lib_report/report_info/block_element_info_interface.dart';
  11. import 'package:fis_lib_report/report_info/element_info.dart';
  12. import 'package:fis_lib_report/report_info/input_image_list_info.dart';
  13. import 'package:fis_lib_report/report_info/paragraph_info.dart';
  14. import 'package:fis_lib_report/report_info/rt_table_info.dart';
  15. class ReportInfo {
  16. static ReportInfo? _reportInfo;
  17. List<IBlockElementInfo> blocks = [];
  18. List<IBlockElementInfo> headers = [];
  19. List<IBlockElementInfo> footers = [];
  20. /// Gets the author of the report template.
  21. String? author;
  22. /// Gets or sets the value to indicate whether the report template is created by user.
  23. bool? isCustom;
  24. /// Gets the report template name.
  25. String? name;
  26. /// Gets the custom input element tags of the report template.
  27. Map<String, ElementTag>? tags;
  28. /// Gets or sets the update time.
  29. DateTime? updateTime;
  30. ///version
  31. String? version;
  32. /// Gets the id.
  33. String? id;
  34. ReportInfo._internal();
  35. static ReportInfo get instance {
  36. _reportInfo ??= ReportInfo._internal();
  37. return _reportInfo!;
  38. }
  39. void init(ReportTemplateDocument reportTemplate) {
  40. try {
  41. isCustom = reportTemplate.isCustom;
  42. name = reportTemplate.name;
  43. updateTime = reportTemplate.updateTime;
  44. version = reportTemplate.version;
  45. id = reportTemplate.id;
  46. for (var element in reportTemplate.header!) {
  47. headers.add(_initBlockElement(element));
  48. }
  49. for (var element in reportTemplate.blocks!) {
  50. blocks.add(_initBlockElement(element));
  51. }
  52. for (var element in reportTemplate.footer!) {
  53. footers.add(_initBlockElement(element));
  54. }
  55. } catch (e) {
  56. print(e);
  57. }
  58. }
  59. IBlockElementInfo? getBlockElement(IBlockElement block) {
  60. final id = block.id;
  61. for (var element in headers) {
  62. if (element.id == id) {
  63. return element;
  64. }
  65. }
  66. for (var element in blocks) {
  67. if (element.id == id) {
  68. return element;
  69. }
  70. }
  71. for (var element in footers) {
  72. if (element.id == id) {
  73. return element;
  74. }
  75. }
  76. }
  77. IBlockElementInfo _initBlockElement(IBlockElement element) {
  78. final _type = element.elementType!;
  79. if (_type.name == ElementType.rtTable!.name) {
  80. final table = element as RTTable;
  81. return RTTableInfo.fromElement(table);
  82. } else if (_type.name == ElementType.paragraph!.name) {
  83. final paragraph = element as Paragraph;
  84. return ParagraphInfo.fromElement(paragraph);
  85. } else {
  86. final inputImageList = element as InputImageList;
  87. return InputImageListInfo.fromElement(inputImageList);
  88. }
  89. }
  90. void getSelectedInputImage(String imageUrl) {
  91. for (var element in headers) {
  92. if (_checkImageisSelected(element)) {
  93. final inputImage = element as InputImageListInfo;
  94. inputImage.addImage(imageUrl);
  95. }
  96. }
  97. for (var element in blocks) {
  98. if (_checkImageisSelected(element)) {
  99. final inputImage = element as InputImageListInfo;
  100. inputImage.addImage(imageUrl);
  101. }
  102. }
  103. for (var element in footers) {
  104. if (_checkImageisSelected(element)) {
  105. final inputImage = element as InputImageListInfo;
  106. inputImage.addImage(imageUrl);
  107. }
  108. }
  109. }
  110. ElementInfo? getElementInfo(IElement element) {
  111. try {
  112. for (var e in headers) {
  113. final elementInfo = _getBaseElementInfo(e, element);
  114. if (elementInfo != null) {
  115. return elementInfo;
  116. }
  117. }
  118. for (var e in blocks) {
  119. final elementInfo = _getBaseElementInfo(e, element);
  120. if (elementInfo != null) {
  121. return elementInfo;
  122. }
  123. }
  124. for (var e in footers) {
  125. final elementInfo = _getBaseElementInfo(e, element);
  126. if (elementInfo != null) {
  127. return elementInfo;
  128. }
  129. }
  130. } catch (e) {
  131. print(e);
  132. }
  133. return null;
  134. }
  135. bool _checkImageisSelected(IBlockElementInfo block) {
  136. if (block is InputImageListInfo) {
  137. final inputImage = block;
  138. if (inputImage.isSelected!) {
  139. return true;
  140. }
  141. }
  142. return false;
  143. }
  144. ElementInfo? _getBaseElementInfo(IBlockElementInfo block, IElement element) {
  145. ElementInfo? result;
  146. final type = block.elementType;
  147. if (type!.name == ElementType.paragraph!.name) {
  148. final paragraph = block as ParagraphInfo;
  149. for (var el in paragraph.elementInfos!) {
  150. if (el.id == element.id) {
  151. result = el;
  152. break;
  153. }
  154. }
  155. }
  156. if (result == null) {
  157. if (type.name == ElementType.rtTable!.name) {
  158. final table = block as RTTableInfo;
  159. final cells = table.cells!;
  160. for (var cell in cells.values) {
  161. for (var b in cell.blocks!) {
  162. final info = _getBaseElementInfo(b, element);
  163. if (info != null) {
  164. result = info;
  165. break;
  166. }
  167. }
  168. }
  169. }
  170. }
  171. return result;
  172. }
  173. }