Skip to content

Commit 14360c3

Browse files
add memory enhancements (#2)
* add memory enhancements * add license
1 parent 1d22ca0 commit 14360c3

24 files changed

+409
-367
lines changed

src/main/java/io/github/project/openubl/xmlbuilderlib/utils/SystemClock.java renamed to src/main/java/io/github/project/openubl/xmlbuilderlib/clock/SystemClock.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
package io.github.project.openubl.xmlbuilderlib.utils;
17+
package io.github.project.openubl.xmlbuilderlib.clock;
1818

1919
import java.util.Calendar;
2020
import java.util.TimeZone;
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Copyright 2019 Project OpenUBL, Inc. and/or its affiliates
3+
* and other contributors as indicated by the @author tags.
4+
*
5+
* Licensed under the Eclipse Public License - v 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* https://www.eclipse.org/legal/epl-2.0/
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package io.github.project.openubl.xmlbuilderlib.clock;
18+
19+
import java.util.Calendar;
20+
import java.util.TimeZone;
21+
22+
public class SystemClockSingleton {
23+
24+
private static SystemClockSingleton instance;
25+
26+
private final SystemClock clock;
27+
28+
private SystemClockSingleton() {
29+
clock = new SystemClock() {
30+
@Override
31+
public TimeZone getTimeZone() {
32+
return TimeZone.getTimeZone("America/Lima");
33+
}
34+
35+
@Override
36+
public Calendar getCalendarInstance() {
37+
return Calendar.getInstance();
38+
}
39+
};
40+
}
41+
42+
public static SystemClockSingleton getInstance() {
43+
if (instance == null) {
44+
synchronized (SystemClockSingleton.class) {
45+
if (instance == null) {
46+
instance = new SystemClockSingleton();
47+
}
48+
}
49+
}
50+
return instance;
51+
}
52+
53+
public SystemClock getClock() {
54+
return clock;
55+
}
56+
57+
}

src/main/java/io/github/project/openubl/xmlbuilderlib/config/XMLBuilderConfig.java renamed to src/main/java/io/github/project/openubl/xmlbuilderlib/config/Config.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import java.math.BigDecimal;
2424

25-
public interface XMLBuilderConfig {
25+
public interface Config {
2626

2727
BigDecimal getIgv();
2828

src/main/java/io/github/project/openubl/xmlbuilderlib/config/DefaultXMLBuilderConfig.java renamed to src/main/java/io/github/project/openubl/xmlbuilderlib/config/DefaultConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import java.math.BigDecimal;
2424

25-
public class DefaultXMLBuilderConfig implements XMLBuilderConfig {
25+
public class DefaultConfig implements Config {
2626

2727
private BigDecimal igv;
2828
private BigDecimal ivap;
@@ -33,7 +33,7 @@ public class DefaultXMLBuilderConfig implements XMLBuilderConfig {
3333
private BigDecimal defaultIcb;
3434
private Catalog7 defaultTipoIgv;
3535

36-
public DefaultXMLBuilderConfig() {
36+
public DefaultConfig() {
3737
this.defaultMoneda = "PEN";
3838
this.defaultUnidadMedida = "NIU";
3939
this.igv = new BigDecimal("0.18");

src/main/java/io/github/project/openubl/xmlbuilderlib/facade/DocumentFacade.java renamed to src/main/java/io/github/project/openubl/xmlbuilderlib/facade/DocumentManager.java

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
*/
1717
package io.github.project.openubl.xmlbuilderlib.facade;
1818

19-
import io.github.project.openubl.xmlbuilderlib.config.XMLBuilderConfig;
19+
import io.github.project.openubl.xmlbuilderlib.clock.SystemClockSingleton;
20+
import io.github.project.openubl.xmlbuilderlib.config.Config;
2021
import io.github.project.openubl.xmlbuilderlib.freemarker.FreemarkerExecutor;
22+
import io.github.project.openubl.xmlbuilderlib.hibernate.validator.ValidatorSingleton;
2123
import io.github.project.openubl.xmlbuilderlib.models.input.constraints.CompleteValidation;
2224
import io.github.project.openubl.xmlbuilderlib.models.input.standard.invoice.InvoiceInputModel;
2325
import io.github.project.openubl.xmlbuilderlib.models.input.standard.note.creditNote.CreditNoteInputModel;
@@ -34,133 +36,120 @@
3436
import io.github.project.openubl.xmlbuilderlib.models.output.sunat.SummaryDocumentOutputModel;
3537
import io.github.project.openubl.xmlbuilderlib.models.output.sunat.VoidedDocumentOutputModel;
3638
import io.github.project.openubl.xmlbuilderlib.utils.InputToOutput;
37-
import io.github.project.openubl.xmlbuilderlib.utils.SystemClock;
39+
import io.github.project.openubl.xmlbuilderlib.clock.SystemClock;
3840

3941
import javax.validation.*;
40-
import java.util.Calendar;
4142
import java.util.Set;
42-
import java.util.TimeZone;
4343

44-
public class DocumentFacade {
44+
public class DocumentManager {
4545

46-
private DocumentFacade() {
46+
private DocumentManager() {
4747
// Only static methods
4848
}
4949

5050
private static SystemClock getDefaultSystemClock() {
51-
return new SystemClock() {
52-
@Override
53-
public TimeZone getTimeZone() {
54-
return TimeZone.getTimeZone("America/Lima");
55-
}
56-
57-
@Override
58-
public Calendar getCalendarInstance() {
59-
return Calendar.getInstance();
60-
}
61-
};
51+
return SystemClockSingleton.getInstance().getClock();
6252
}
6353

6454
private static void validateInput(Object input) {
65-
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
66-
Validator validator = factory.getValidator();
55+
Validator validator = ValidatorSingleton.getInstance().getValidator();
6756
Set<ConstraintViolation<Object>> violations = validator.validate(input, CompleteValidation.class);
6857
if (!violations.isEmpty()) {
6958
throw new ConstraintViolationException(violations);
7059
}
7160
}
7261

73-
public static DocumentWrapper<InvoiceOutputModel> createXML(InvoiceInputModel input, XMLBuilderConfig config) {
62+
public static DocumentWrapper<InvoiceOutputModel> createXML(InvoiceInputModel input, Config config) {
7463
validateInput(input);
7564
InvoiceOutputModel output = InputToOutput.toOutput(input, config, getDefaultSystemClock());
7665
String xml = FreemarkerExecutor.createXML(output);
7766
return new DocumentWrapper<>(xml, output);
7867
}
7968

80-
public static DocumentWrapper<InvoiceOutputModel> createXML(InvoiceInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
69+
public static DocumentWrapper<InvoiceOutputModel> createXML(InvoiceInputModel input, Config config, SystemClock systemClock) {
8170
validateInput(input);
8271
InvoiceOutputModel output = InputToOutput.toOutput(input, config, systemClock);
8372
String xml = FreemarkerExecutor.createXML(output);
8473
return new DocumentWrapper<>(xml, output);
8574
}
8675

87-
public static DocumentWrapper<CreditNoteOutputModel> createXML(CreditNoteInputModel input, XMLBuilderConfig config) {
76+
public static DocumentWrapper<CreditNoteOutputModel> createXML(CreditNoteInputModel input, Config config) {
8877
validateInput(input);
8978
CreditNoteOutputModel output = InputToOutput.toOutput(input, config, getDefaultSystemClock());
9079
String xml = FreemarkerExecutor.createXML(output);
9180
return new DocumentWrapper<>(xml, output);
9281
}
9382

94-
public static DocumentWrapper<CreditNoteOutputModel> createXML(CreditNoteInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
83+
public static DocumentWrapper<CreditNoteOutputModel> createXML(CreditNoteInputModel input, Config config, SystemClock systemClock) {
9584
validateInput(input);
9685
CreditNoteOutputModel output = InputToOutput.toOutput(input, config, systemClock);
9786
String xml = FreemarkerExecutor.createXML(output);
9887
return new DocumentWrapper<>(xml, output);
9988
}
10089

101-
public static DocumentWrapper<DebitNoteOutputModel> createXML(DebitNoteInputModel input, XMLBuilderConfig config) {
90+
public static DocumentWrapper<DebitNoteOutputModel> createXML(DebitNoteInputModel input, Config config) {
10291
validateInput(input);
10392
DebitNoteOutputModel output = InputToOutput.toOutput(input, config, getDefaultSystemClock());
10493
String xml = FreemarkerExecutor.createXML(output);
10594
return new DocumentWrapper<>(xml, output);
10695
}
10796

108-
public static DocumentWrapper<DebitNoteOutputModel> createXML(DebitNoteInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
97+
public static DocumentWrapper<DebitNoteOutputModel> createXML(DebitNoteInputModel input, Config config, SystemClock systemClock) {
10998
DebitNoteOutputModel output = InputToOutput.toOutput(input, config, systemClock);
11099
String xml = FreemarkerExecutor.createXML(output);
111100
return new DocumentWrapper<>(xml, output);
112101
}
113102

114-
public static DocumentWrapper<VoidedDocumentOutputModel> createXML(VoidedDocumentInputModel input, XMLBuilderConfig config) {
103+
public static DocumentWrapper<VoidedDocumentOutputModel> createXML(VoidedDocumentInputModel input, Config config) {
115104
validateInput(input);
116105
VoidedDocumentOutputModel output = InputToOutput.toOutput(input, config, getDefaultSystemClock());
117106
String xml = FreemarkerExecutor.createXML(output);
118107
return new DocumentWrapper<>(xml, output);
119108
}
120109

121-
public static DocumentWrapper<VoidedDocumentOutputModel> createXML(VoidedDocumentInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
110+
public static DocumentWrapper<VoidedDocumentOutputModel> createXML(VoidedDocumentInputModel input, Config config, SystemClock systemClock) {
122111
validateInput(input);
123112
VoidedDocumentOutputModel output = InputToOutput.toOutput(input, config, systemClock);
124113
String xml = FreemarkerExecutor.createXML(output);
125114
return new DocumentWrapper<>(xml, output);
126115
}
127116

128-
public static DocumentWrapper<SummaryDocumentOutputModel> createXML(SummaryDocumentInputModel input, XMLBuilderConfig config) {
117+
public static DocumentWrapper<SummaryDocumentOutputModel> createXML(SummaryDocumentInputModel input, Config config) {
129118
validateInput(input);
130119
SummaryDocumentOutputModel output = InputToOutput.toOutput(input, config, getDefaultSystemClock());
131120
String xml = FreemarkerExecutor.createXML(output);
132121
return new DocumentWrapper<>(xml, output);
133122
}
134123

135-
public static DocumentWrapper<SummaryDocumentOutputModel> createXML(SummaryDocumentInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
124+
public static DocumentWrapper<SummaryDocumentOutputModel> createXML(SummaryDocumentInputModel input, Config config, SystemClock systemClock) {
136125
validateInput(input);
137126
SummaryDocumentOutputModel output = InputToOutput.toOutput(input, config, systemClock);
138127
String xml = FreemarkerExecutor.createXML(output);
139128
return new DocumentWrapper<>(xml, output);
140129
}
141130

142-
public static DocumentWrapper<PerceptionOutputModel> createXML(PerceptionInputModel input, XMLBuilderConfig config) {
131+
public static DocumentWrapper<PerceptionOutputModel> createXML(PerceptionInputModel input, Config config) {
143132
validateInput(input);
144133
PerceptionOutputModel output = InputToOutput.toOutput(input, config, getDefaultSystemClock());
145134
String xml = FreemarkerExecutor.createXML(output);
146135
return new DocumentWrapper<>(xml, output);
147136
}
148137

149-
public static DocumentWrapper<PerceptionOutputModel> createXML(PerceptionInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
138+
public static DocumentWrapper<PerceptionOutputModel> createXML(PerceptionInputModel input, Config config, SystemClock systemClock) {
150139
validateInput(input);
151140
PerceptionOutputModel output = InputToOutput.toOutput(input, config, systemClock);
152141
String xml = FreemarkerExecutor.createXML(output);
153142
return new DocumentWrapper<>(xml, output);
154143
}
155144

156-
public static DocumentWrapper<RetentionOutputModel> createXML(RetentionInputModel input, XMLBuilderConfig config) {
145+
public static DocumentWrapper<RetentionOutputModel> createXML(RetentionInputModel input, Config config) {
157146
validateInput(input);
158147
RetentionOutputModel output = InputToOutput.toOutput(input, config, getDefaultSystemClock());
159148
String xml = FreemarkerExecutor.createXML(output);
160149
return new DocumentWrapper<>(xml, output);
161150
}
162151

163-
public static DocumentWrapper<RetentionOutputModel> createXML(RetentionInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
152+
public static DocumentWrapper<RetentionOutputModel> createXML(RetentionInputModel input, Config config, SystemClock systemClock) {
164153
validateInput(input);
165154
RetentionOutputModel output = InputToOutput.toOutput(input, config, systemClock);
166155
String xml = FreemarkerExecutor.createXML(output);

src/main/java/io/github/project/openubl/xmlbuilderlib/factory/DocumentLineOutputModelFactory.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
*/
1717
package io.github.project.openubl.xmlbuilderlib.factory;
1818

19-
import io.github.project.openubl.xmlbuilderlib.config.XMLBuilderConfig;
19+
import io.github.project.openubl.xmlbuilderlib.config.Config;
2020
import io.github.project.openubl.xmlbuilderlib.models.catalogs.*;
2121
import io.github.project.openubl.xmlbuilderlib.models.input.standard.DocumentLineInputModel;
2222
import io.github.project.openubl.xmlbuilderlib.models.output.standard.*;
23-
import io.github.project.openubl.xmlbuilderlib.utils.SystemClock;
23+
import io.github.project.openubl.xmlbuilderlib.clock.SystemClock;
2424

2525
import java.math.BigDecimal;
2626
import java.math.RoundingMode;
@@ -31,7 +31,7 @@ private DocumentLineOutputModelFactory() {
3131
// Only static methods
3232
}
3333

34-
public static DocumentLineOutputModel getDocumentLineOutput(DocumentLineInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
34+
public static DocumentLineOutputModel getDocumentLineOutput(DocumentLineInputModel input, Config config, SystemClock systemClock) {
3535
DocumentLineOutputModel.Builder builder = DocumentLineOutputModel.Builder.aDocumentLineOutputModel()
3636
.withDescripcion(input.getDescripcion())
3737
.withUnidadMedida(input.getUnidadMedida() != null ? input.getUnidadMedida() : config.getDefaultUnidadMedida())
@@ -97,7 +97,7 @@ public static DocumentLineOutputModel getDocumentLineOutput(DocumentLineInputMod
9797
return builder.build();
9898
}
9999

100-
private static DocumentLineImpuestosOutputModel getDocumentLineImpuestosOutput_LeftRight(DocumentLineInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
100+
private static DocumentLineImpuestosOutputModel getDocumentLineImpuestosOutput_LeftRight(DocumentLineInputModel input, Config config, SystemClock systemClock) {
101101
DocumentLineImpuestosOutputModel.Builder builder = DocumentLineImpuestosOutputModel.Builder.aDocumentLineImpuestosOutputModel();
102102

103103

@@ -145,7 +145,7 @@ private static DocumentLineImpuestosOutputModel getDocumentLineImpuestosOutput_L
145145
).build();
146146
}
147147

148-
private static DocumentLineImpuestosOutputModel getDocumentLineImpuestosOutput_RightLeft(DocumentLineInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
148+
private static DocumentLineImpuestosOutputModel getDocumentLineImpuestosOutput_RightLeft(DocumentLineInputModel input, Config config, SystemClock systemClock) {
149149
DocumentLineImpuestosOutputModel.Builder builder = DocumentLineImpuestosOutputModel.Builder.aDocumentLineImpuestosOutputModel();
150150

151151

src/main/java/io/github/project/openubl/xmlbuilderlib/factory/InvoiceAndNoteOutputModelFactory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package io.github.project.openubl.xmlbuilderlib.factory;
1818

19-
import io.github.project.openubl.xmlbuilderlib.config.XMLBuilderConfig;
19+
import io.github.project.openubl.xmlbuilderlib.config.Config;
2020
import io.github.project.openubl.xmlbuilderlib.factory.common.ClienteOutputModelFactory;
2121
import io.github.project.openubl.xmlbuilderlib.factory.common.FirmanteOutputModelFactory;
2222
import io.github.project.openubl.xmlbuilderlib.factory.common.ProveedorOutputModelFactory;
@@ -31,7 +31,7 @@
3131
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.NoteOutputModel;
3232
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.creditNote.CreditNoteOutputModel;
3333
import io.github.project.openubl.xmlbuilderlib.models.output.standard.note.debitNote.DebitNoteOutputModel;
34-
import io.github.project.openubl.xmlbuilderlib.utils.SystemClock;
34+
import io.github.project.openubl.xmlbuilderlib.clock.SystemClock;
3535

3636
import java.math.BigDecimal;
3737
import java.util.List;
@@ -48,7 +48,7 @@ private InvoiceAndNoteOutputModelFactory() {
4848
// Only static methods
4949
}
5050

51-
public static InvoiceOutputModel getInvoiceOutput(InvoiceInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
51+
public static InvoiceOutputModel getInvoiceOutput(InvoiceInputModel input, Config config, SystemClock systemClock) {
5252
InvoiceOutputModel.Builder builder = InvoiceOutputModel.Builder.anInvoiceOutputModel();
5353

5454
if (input.getSerie().matches("^[F|b].*$")) {
@@ -63,7 +63,7 @@ public static InvoiceOutputModel getInvoiceOutput(InvoiceInputModel input, XMLBu
6363
return builder.build();
6464
}
6565

66-
public static CreditNoteOutputModel getCreditNoteOutput(CreditNoteInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
66+
public static CreditNoteOutputModel getCreditNoteOutput(CreditNoteInputModel input, Config config, SystemClock systemClock) {
6767
CreditNoteOutputModel.Builder builder = CreditNoteOutputModel.Builder.aCreditNoteOutputModel()
6868
.withTipoNota(
6969
input.getTipoNota() != null
@@ -76,7 +76,7 @@ public static CreditNoteOutputModel getCreditNoteOutput(CreditNoteInputModel inp
7676
return builder.build();
7777
}
7878

79-
public static DebitNoteOutputModel getDebitNoteOutput(DebitNoteInputModel input, XMLBuilderConfig config, SystemClock systemClock) {
79+
public static DebitNoteOutputModel getDebitNoteOutput(DebitNoteInputModel input, Config config, SystemClock systemClock) {
8080
DebitNoteOutputModel.Builder builder = DebitNoteOutputModel.Builder.aDebitNoteOutputModel()
8181
.withTipoNota(
8282
input.getTipoNota() != null
@@ -91,7 +91,7 @@ public static DebitNoteOutputModel getDebitNoteOutput(DebitNoteInputModel input,
9191

9292
// Enrich
9393

94-
private static void enrichDocument(DocumentInputModel input, DocumentOutputModel.Builder builder, XMLBuilderConfig config, SystemClock systemClock) {
94+
private static void enrichDocument(DocumentInputModel input, DocumentOutputModel.Builder builder, Config config, SystemClock systemClock) {
9595
builder.withMoneda(config.getDefaultMoneda())
9696
.withSerieNumero(input.getSerie().toUpperCase() + "-" + input.getNumero());
9797

0 commit comments

Comments
 (0)