Skip to content

Commit f32b904

Browse files
authored
Basic list implementation (#268)
* Basic list implementation * Fixed test for new implementation * Fix sonar issues * Code coverage * basic list implementation info suppress-wrong-type-error, some type error will be ignored if set to true and '1'
1 parent 14986b4 commit f32b904

File tree

9 files changed

+125
-50
lines changed

9 files changed

+125
-50
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- [fj-mod-doc-openpdf-ext] basic list implementation
13+
- info suppress-wrong-type-error, some type error will be ignored if set to true and '1'
14+
1015
### Changed
1116

1217
- quarkus-version set to 3.17.2 across al the modules

docs/html/doc_meta_info.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,24 @@ <h2 style="font-weight: bold;">Properties for generic metadata</h2>
285285
<td id="cell_12_4" style=" width: 5%; border-top: 1px solid black; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; padding: 2px;">
286286
<p>1.4.5</p>
287287
</td>
288+
</tr>
289+
<tr>
290+
<td id="cell_13_0" style=" width: 20%; border-top: 1px solid black; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; padding: 2px;">
291+
<span id="suppress-wrong-type-error"></span>
292+
<p style="font-style: italic;">suppress-wrong-type-error</p>
293+
</td>
294+
<td id="cell_13_1" style=" width: 40%; border-top: 1px solid black; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; padding: 2px;">
295+
<p>If set to 'a' or 'true' it will set suppress some type error.</p>
296+
</td>
297+
<td id="cell_13_2" style=" width: 25%; border-top: 1px solid black; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; padding: 2px;">
298+
<p>fj-doc-mod-openpdf-ext(pdf), fj-doc-mod-openrtf-ext(rtf), </p>
299+
</td>
300+
<td id="cell_13_3" style=" width: 10%; border-top: 1px solid black; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; padding: 2px;">
301+
<p>false</p>
302+
</td>
303+
<td id="cell_13_4" style=" width: 5%; border-top: 1px solid black; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; padding: 2px;">
304+
<p>8.11.5</p>
305+
</td>
288306
</tr>
289307
</tbody>
290308
</table>

fj-doc-base/src/main/java/org/fugerit/java/doc/base/typehelper/generic/GenericConsts.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,11 @@ private GenericConsts() {}
194194
* <a href="https://venusdocs.fugerit.org/docs/html/doc_meta_info.html#default-font-style">See 'default-font-style' documentation.</a>
195195
*/
196196
public static final String DOC_DEFAULT_FONT_STYLE = "default-font-style";
197+
198+
/**
199+
* <a href="https://venusdocs.fugerit.org/docs/html/doc_meta_info.html#suppress-wrong-type-error">See 'suppress-wrong-type-error' documentation.</a>
200+
*/
201+
public static final String DOC_SUPPRESS_WRONG_TYPE_ERROR = "suppress-wrong-type-error";
197202

198203

199204
}

fj-doc-lib-autodoc/src/test/resources/docs/meta_xml/adm_standard_meta_info.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,16 @@
189189
<admeta:supportedHandler>fj-doc-mod-openpdf-ext(pdf)</admeta:supportedHandler>
190190
<admeta:supportedHandler>fj-doc-mod-openrtf-ext(rtf)</admeta:supportedHandler>
191191
</admeta:admMetaInfo>
192+
<admeta:admMetaInfo>
193+
<admeta:name>suppress-wrong-type-error</admeta:name>
194+
<admeta:description>If set to 'a' or 'true' it will set suppress some type error.</admeta:description>
195+
<admeta:defaultValue>false</admeta:defaultValue>
196+
<admeta:since>8.11.5</admeta:since>
197+
<admeta:supportedType>pdf</admeta:supportedType>
198+
<admeta:supportedType>rtf</admeta:supportedType>
199+
<admeta:supportedHandler>fj-doc-mod-openpdf-ext(pdf)</admeta:supportedHandler>
200+
<admeta:supportedHandler>fj-doc-mod-openrtf-ext(rtf)</admeta:supportedHandler>
201+
</admeta:admMetaInfo>
192202
</admeta:admSection>
193203

194204
<admeta:admSection>

fj-doc-mod-openpdf-ext/src/main/java/org/fugerit/java/doc/mod/openpdf/ext/helpers/OpenPdfHelper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package org.fugerit.java.doc.mod.openpdf.ext.helpers;
22

3+
import java.io.IOException;
34
import java.util.Properties;
45

56
import com.lowagie.text.pdf.PdfWriter;
7+
import lombok.extern.slf4j.Slf4j;
8+
import org.fugerit.java.core.lang.helpers.BooleanUtils;
9+
import org.fugerit.java.doc.base.typehelper.generic.GenericConsts;
610

11+
@Slf4j
712
public class OpenPdfHelper {
813

914
public OpenPdfHelper() {
@@ -59,5 +64,13 @@ public PdfWriter getPdfWriter() {
5964
public void setPdfWriter(PdfWriter pdfWriter) {
6065
this.pdfWriter = pdfWriter;
6166
}
67+
68+
public void handelError( String message ) throws IOException {
69+
if (BooleanUtils.isTrue( this.getParams().getProperty(GenericConsts.DOC_SUPPRESS_WRONG_TYPE_ERROR ) ) ) {
70+
log.warn( "Suppressed type error : {}", message );
71+
} else {
72+
throw new IOException(message);
73+
}
74+
}
6275

6376
}

fj-doc-mod-openpdf-ext/src/main/java/org/fugerit/java/doc/mod/openpdf/ext/helpers/OpenPpfDocHandler.java

Lines changed: 36 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,41 +8,16 @@
88
import java.util.List;
99
import java.util.Properties;
1010

11-
import org.fugerit.java.core.cfg.ConfigRuntimeException;
11+
import com.lowagie.text.*;
1212
import org.fugerit.java.core.function.SafeFunction;
1313
import org.fugerit.java.core.lang.helpers.StringUtils;
1414
import org.fugerit.java.core.util.regex.ParamFinder;
1515
import org.fugerit.java.doc.base.config.DocConfig;
1616
import org.fugerit.java.doc.base.helper.SourceResolverHelper;
17-
import org.fugerit.java.doc.base.model.DocBarcode;
18-
import org.fugerit.java.doc.base.model.DocBase;
19-
import org.fugerit.java.doc.base.model.DocElement;
20-
import org.fugerit.java.doc.base.model.DocFooter;
21-
import org.fugerit.java.doc.base.model.DocHeader;
22-
import org.fugerit.java.doc.base.model.DocHeaderFooter;
23-
import org.fugerit.java.doc.base.model.DocImage;
24-
import org.fugerit.java.doc.base.model.DocInfo;
25-
import org.fugerit.java.doc.base.model.DocPageBreak;
26-
import org.fugerit.java.doc.base.model.DocPara;
27-
import org.fugerit.java.doc.base.model.DocPhrase;
28-
import org.fugerit.java.doc.base.model.DocStyle;
29-
import org.fugerit.java.doc.base.model.DocTable;
17+
import org.fugerit.java.doc.base.model.*;
3018
import org.fugerit.java.doc.base.typehelper.generic.GenericConsts;
3119
import org.fugerit.java.doc.base.xml.DocModelUtils;
3220

33-
import com.lowagie.text.Anchor;
34-
import com.lowagie.text.BadElementException;
35-
import com.lowagie.text.Chunk;
36-
import com.lowagie.text.Document;
37-
import com.lowagie.text.DocumentException;
38-
import com.lowagie.text.Element;
39-
import com.lowagie.text.Font;
40-
import com.lowagie.text.Header;
41-
import com.lowagie.text.HeaderFooter;
42-
import com.lowagie.text.Image;
43-
import com.lowagie.text.Paragraph;
44-
import com.lowagie.text.Phrase;
45-
import com.lowagie.text.Rectangle;
4621
import com.lowagie.text.html.HtmlTags;
4722
import com.lowagie.text.pdf.Barcode;
4823
import com.lowagie.text.pdf.Barcode128;
@@ -277,12 +252,12 @@ private void handleTypeSpecific( Properties info ) {
277252
}
278253

279254
protected void handleHeaderExt( DocHeader docHeader, PdfHelper pdfHelper, OpenPdfHelper docHelper ) throws DocumentException {
280-
log.trace( "docHelper : {}", docHelper );
255+
log.trace( "handleHeaderExt docHelper : {}", docHelper );
281256
pdfHelper.setDocHeader( docHeader );
282257
}
283258

284259
protected void handleFooterExt( DocFooter docFooter, PdfHelper pdfHelper, OpenPdfHelper docHelper ) throws DocumentException {
285-
log.trace( "docHelper : {}", docHelper );
260+
log.trace( "handleFooterExt docHelper : {}", docHelper );
286261
pdfHelper.setDocFooter( docFooter );
287262
}
288263

@@ -352,11 +327,7 @@ public void handleDoc(DocBase docBase) throws DocumentException, IOException {
352327
}
353328

354329
public static void handleElementsSafe( Document document, Iterator<DocElement> itDoc, OpenPdfHelper docHelper ) {
355-
try {
356-
handleElements(document, itDoc, docHelper);
357-
} catch (Exception e) {
358-
throw new ConfigRuntimeException( e );
359-
}
330+
SafeFunction.apply( () -> handleElements(document, itDoc, docHelper) );
360331
}
361332

362333
public static void handleElements( Document document, Iterator<DocElement> itDoc, OpenPdfHelper docHelper ) throws DocumentException, IOException {
@@ -365,35 +336,53 @@ public static void handleElements( Document document, Iterator<DocElement> itDoc
365336
getElement(document, docElement, true, docHelper );
366337
}
367338
}
368-
339+
340+
public static void checkAddElement( DocumentParent documentParent, boolean addElement, Element result ) {
341+
if ( addElement ) {
342+
documentParent.add( result );
343+
}
344+
}
345+
369346
public static Element getElement( Document document, DocElement docElement, boolean addElement, OpenPdfHelper docHelper ) throws DocumentException, IOException {
370347
Element result = null;
371348
DocumentParent documentParent = new DocumentParent( document );
372349
if ( docElement instanceof DocPhrase ) {
373350
result = createPhrase( (DocPhrase)docElement, docHelper );
374-
if ( addElement ) {
375-
documentParent.add( result );
376-
}
351+
checkAddElement( documentParent, addElement, result );
377352
} else if ( docElement instanceof DocPara ) {
378353
result = createPara( (DocPara)docElement, docHelper );
379-
if ( addElement ) {
380-
documentParent.add( result );
381-
}
354+
checkAddElement( documentParent, addElement, result );
382355
} else if ( docElement instanceof DocTable ) {
383356
result = OpenPdfDocTableHelper.createTable( (DocTable)docElement, docHelper );
384-
if ( addElement ) {
385-
document.add( result );
386-
}
357+
checkAddElement( documentParent, addElement, result );
387358
} else if ( docElement instanceof DocImage ) {
388359
result = createImage( (DocImage)docElement );
389-
if ( addElement ) {
390-
documentParent.add( result );
391-
}
360+
checkAddElement( documentParent, addElement, result );
361+
} else if ( docElement instanceof DocList) {
362+
result = createList( (DocList)docElement, docHelper );
363+
checkAddElement( documentParent, addElement, result );
392364
} else if ( docElement instanceof DocPageBreak ) {
393365
document.newPage();
394366
}
395367
return result;
396368
}
369+
370+
private static com.lowagie.text.List createList( DocList docList, OpenPdfHelper docHelper ) throws IOException {
371+
com.lowagie.text.List list = new com.lowagie.text.List( docList.isOrdered() );
372+
for ( DocElement element : docList.getElementList() ) {
373+
if ( element instanceof DocLi ) {
374+
DocLi li = (DocLi) element;
375+
if ( li.getContent() instanceof DocPara ) {
376+
list.add( new ListItem( createPara( (DocPara)li.getContent(), docHelper ) ) );
377+
} else {
378+
docHelper.handelError( String.format( "unsupported type %s", li.getContent().getClass().getSimpleName() ) );
379+
}
380+
} else {
381+
docHelper.handelError( String.format( "wrong children%s", element.getClass().getSimpleName() ) );
382+
}
383+
}
384+
return list;
385+
}
397386

398387
private void handleHeaderFooterElement( DocElement docElement, float inputLeading, OpenPdfHelper docHelper , Phrase phrase ) throws DocumentException, IOException {
399388
float leading = inputLeading;
Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
package test.org.fugerit.java.doc.mod.openpdf.ext;
22

3+
import com.lowagie.text.Document;
4+
import lombok.experimental.Helper;
5+
import org.fugerit.java.core.function.SafeFunction;
6+
import org.fugerit.java.core.lang.helpers.BooleanUtils;
7+
import org.fugerit.java.doc.base.model.DocLi;
8+
import org.fugerit.java.doc.base.model.DocList;
9+
import org.fugerit.java.doc.base.model.DocTable;
10+
import org.fugerit.java.doc.base.typehelper.generic.GenericConsts;
11+
import org.fugerit.java.doc.mod.openpdf.ext.helpers.OpenPdfHelper;
12+
import org.fugerit.java.doc.mod.openpdf.ext.helpers.OpenPpfDocHandler;
313
import org.fugerit.java.doc.mod.openpdf.ext.helpers.PhraseParent;
414
import org.junit.Assert;
515
import org.junit.Test;
616

717
import com.lowagie.text.Paragraph;
818
import com.lowagie.text.Phrase;
919

20+
import java.io.IOException;
21+
1022
public class TestOpenPdfHelper {
1123

1224
@Test
@@ -15,5 +27,23 @@ public void test001() throws Exception {
1527
parent.add( new Paragraph() );
1628
Assert.assertNotNull( parent );
1729
}
18-
30+
31+
@Test
32+
public void testList() {
33+
OpenPdfHelper helper = new OpenPdfHelper();
34+
try ( Document document = new Document() ) {
35+
DocList list1 = new DocList();
36+
list1.addElement( new DocTable() );
37+
list1.setListType(DocList.LIST_TYPE_OL);
38+
Assert.assertThrows( IOException.class, () -> OpenPpfDocHandler.getElement( document, list1, false, helper ) );
39+
DocList list2 = new DocList();
40+
list2.setListType(DocList.LIST_TYPE_UL);
41+
DocLi li2 = new DocLi();
42+
li2.addElement( new DocTable() );
43+
list2.addElement( li2 );
44+
helper.getParams().setProperty(GenericConsts.DOC_SUPPRESS_WRONG_TYPE_ERROR, BooleanUtils.BOOLEAN_1 );
45+
SafeFunction.apply( () -> OpenPpfDocHandler.getElement( document, list2, false, helper ) );
46+
}
47+
}
48+
1949
}

fj-doc-mod-openpdf-ext/src/test/java/test/org/fugerit/java/doc/mod/openpdf/ext/TestPdfHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void testSetGet() {
2525

2626
@Test
2727
public void testTandleElementSafe() {
28-
Assert.assertThrows( ConfigRuntimeException.class , () -> OpenPpfDocHandler.handleElementsSafe(null, null, null) );
28+
Assert.assertThrows( NullPointerException.class , () -> OpenPpfDocHandler.handleElementsSafe(null, null, null) );
2929
}
3030

3131
@Test

fj-doc-mod-openpdf-ext/src/test/resources/xml/default_doc.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@
3131
<para font-name="courier" align="justifyall" style="bolditalic">Courier</para>
3232
<para space-before="10" font-name="symbol" align="right" style="italic">Symbol</para>
3333
<para leading="10" font-name="helvetica" align="center" style="underline">Symbol</para>
34-
<para size="-1" align="left" fore-color="#dddddd">Test default font</para>
34+
<para size="-1" align="left" fore-color="#dddddd">Test default font 1</para>
35+
<list>
36+
<li><para>list a</para></li>
37+
<li><para>list b</para></li>
38+
<li><para>list c</para></li>
39+
</list>
3540
<table columns="3" colwidths="30;30;40" width="100" id="excel-table" padding="2" space-before="10" space-after="10">
3641
<row>
3742
<cell align="center" border-color="#000000" border-width="1"><para style="bold">Name</para></cell>

0 commit comments

Comments
 (0)