aboutsummaryrefslogtreecommitdiff
path: root/moaSig/moa-asic/src/main/java/at/gv/egiz/asic/impl/ASiCBaseFormatFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'moaSig/moa-asic/src/main/java/at/gv/egiz/asic/impl/ASiCBaseFormatFactory.java')
-rw-r--r--moaSig/moa-asic/src/main/java/at/gv/egiz/asic/impl/ASiCBaseFormatFactory.java195
1 files changed, 106 insertions, 89 deletions
diff --git a/moaSig/moa-asic/src/main/java/at/gv/egiz/asic/impl/ASiCBaseFormatFactory.java b/moaSig/moa-asic/src/main/java/at/gv/egiz/asic/impl/ASiCBaseFormatFactory.java
index bce179d..65c6ccc 100644
--- a/moaSig/moa-asic/src/main/java/at/gv/egiz/asic/impl/ASiCBaseFormatFactory.java
+++ b/moaSig/moa-asic/src/main/java/at/gv/egiz/asic/impl/ASiCBaseFormatFactory.java
@@ -1,134 +1,151 @@
package at.gv.egiz.asic.impl;
-import at.gv.egiz.asic.api.ASiC;
-import at.gv.egiz.asic.api.ASiCEntry;
-import at.gv.egiz.asic.api.ASiCFormat;
-import at.gv.egiz.asic.impl.handler.*;
-import at.gv.egovernment.moa.spss.MOAApplicationException;
-import at.gv.egovernment.moa.spss.MOAException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.egiz.asic.api.ASiC;
+import at.gv.egiz.asic.api.ASiCEntry;
+import at.gv.egiz.asic.api.ASiCFormat;
+import at.gv.egiz.asic.impl.handler.AllDataHandler;
+import at.gv.egiz.asic.impl.handler.MetaInfHandler;
+import at.gv.egiz.asic.impl.handler.MimefileHandler;
+import at.gv.egovernment.moa.spss.MOAApplicationException;
+import at.gv.egovernment.moa.spss.MOAException;
+
/**
* Created by Andreas Fitzek on 6/15/16.
*/
public abstract class ASiCBaseFormatFactory implements ASiCContainer {
- private static final Logger logger = LoggerFactory.getLogger(ASiCBaseFormatFactory.class);
+ private static final Logger logger = LoggerFactory.getLogger(ASiCBaseFormatFactory.class);
- protected boolean cadesSigned = false;
- protected boolean xadesSigned = false;
- protected boolean timestamped = false;
+ protected boolean cadesSigned = false;
+ protected boolean xadesSigned = false;
+ protected boolean timestamped = false;
- protected String mimeType = null;
+ protected String mimeType = null;
- protected List<ASiCEntry> signatureEntries = new ArrayList<ASiCEntry>();
- protected List<ASiCEntry> dataEntries = new ArrayList<ASiCEntry>();
- protected List<ASiCEntry> informationEntries = new ArrayList<ASiCEntry>();
+ protected List<ASiCEntry> signatureEntries = new ArrayList<>();
+ protected Map<String, ASiCEntry> dataEntries = new HashMap<>();
+ protected List<ASiCEntry> informationEntries = new ArrayList<>();
- protected List<EntryHandler> handlers = new ArrayList<EntryHandler>();
+ protected List<EntryHandler> handlers = new ArrayList<>();
- @Override
- public void addDataEntry(ASiCEntry entry) {
- this.dataEntries.add(entry);
- }
+ @Override
+ public void addDataEntry(ASiCEntry entry) throws MOAApplicationException {
+ // check if entry with a specific name already exists
+ if (!dataEntries.containsKey(entry.getEntryName())) {
+ this.dataEntries.put(entry.getEntryName(), entry);
- @Override
- public void addSignatureEntry(ASiCEntry entry) {
- this.signatureEntries.add(entry);
+ } else {
+ logger.warn("ASiC container already contains a DataEntry with name: " + entry.getEntryName()
+ + " ASiC container is INVALID");
+ throw new MOAApplicationException("asic.0017", new Object[] { entry.getEntryName() });
}
+ }
- @Override
- public void addInformationEntry(ASiCEntry entry) {
- this.informationEntries.add(entry);
- }
+ @Override
+ public void addSignatureEntry(ASiCEntry entry) {
+ this.signatureEntries.add(entry);
+ }
- public ASiCBaseFormatFactory() {
- handlers.add(new MimefileHandler());
- handlers.add(new MetaInfHandler());
- handlers.add(new AllDataHandler());
- }
-
- public abstract ASiCFormat factoryFormat();
+ @Override
+ public void addInformationEntry(ASiCEntry entry) {
+ this.informationEntries.add(entry);
+ }
- protected abstract void validate() throws MOAException;
+ public ASiCBaseFormatFactory() {
+ handlers.add(new MimefileHandler());
+ handlers.add(new MetaInfHandler());
+ handlers.add(new AllDataHandler());
+ }
- public ASiC createASiC(InputStream is) throws MOAException {
+ public abstract ASiCFormat factoryFormat();
- ZipCommentReaderStream commentReaderStream = new ZipCommentReaderStream(is);
+ protected abstract void validate() throws MOAException;
- ZipInputStream zipInputStream = new ZipInputStream(commentReaderStream);
+ public ASiC createASiC(InputStream is) throws MOAException {
- try {
- for (ZipEntry entry = zipInputStream.getNextEntry(); entry != null; entry = zipInputStream.getNextEntry()) {
- String entryName = entry.getName();
+ final ZipCommentReaderStream commentReaderStream = new ZipCommentReaderStream(is);
- Iterator<EntryHandler> handlerIterator = this.handlers.iterator();
- while (handlerIterator.hasNext()) {
- EntryHandler entryHandler = handlerIterator.next();
+ final ZipInputStream zipInputStream = new ZipInputStream(commentReaderStream);
- if (entryHandler.handle(entryName, zipInputStream, this)) {
- break;
- }
- }
- }
- } catch(IOException e) {
- logger.info("Failed to read from ASiC Container", e);
- throw new MOAApplicationException("asic.0007", null);
- }
+ try {
+ for (ZipEntry entry = zipInputStream.getNextEntry(); entry != null; entry = zipInputStream
+ .getNextEntry()) {
+ final String entryName = entry.getName();
+ final Iterator<EntryHandler> handlerIterator = this.handlers.iterator();
+ while (handlerIterator.hasNext()) {
+ final EntryHandler entryHandler = handlerIterator.next();
- if(this.mimeType == null) {
- String mimeTypeComment = commentReaderStream.getFileComment();
- if(mimeTypeComment != null) {
- this.mimeType = mimeTypeComment;
- }
+ if (entryHandler.handle(entryName, zipInputStream, this)) {
+ break;
+ }
}
-
- this.validate();
-
- // unpack and retrieve all available information on ASiC signature
- return new ASiCImpl(this.factoryFormat(), this.xadesSigned, this.cadesSigned, this.signatureEntries, dataEntries, this.informationEntries);
+ }
+ } catch (final IOException e) {
+ logger.info("Failed to read from ASiC Container", e);
+ throw new MOAApplicationException("asic.0007", null);
}
- @Override
- public void setMimeType(String mimeType) {
- this.mimeType = mimeType;
+ if (this.mimeType == null) {
+ final String mimeTypeComment = commentReaderStream.getFileComment();
+ if (mimeTypeComment != null) {
+ this.mimeType = mimeTypeComment;
+ }
}
- public void setIsXAdES() throws MOAException {
- if(this.cadesSigned) {
- throw new MOAApplicationException("asic.0010", null);
- }
- this.xadesSigned = true;
- }
+ this.validate();
- public void setIsCAdES() throws MOAException {
- if(this.xadesSigned) {
- throw new MOAApplicationException("asic.0010", null);
- }
- this.cadesSigned = true;
- }
+ // unpack and retrieve all available information on ASiC signature
+ return new ASiCImpl(this.factoryFormat(), this.xadesSigned, this.cadesSigned, this.signatureEntries,
+ dataEntries.values(), this.informationEntries);
+ }
- public void setIsTimestamped() throws MOAException {
- throw new MOAApplicationException("asic.0013", null);
- }
+ @Override
+ public void setMimeType(String mimeType) {
+ this.mimeType = mimeType;
+ }
- @Override
- public void setIsEvidenceERS() throws MOAException {
- throw new MOAApplicationException("asic.0011", null);
+ @Override
+ public void setIsXAdES() throws MOAException {
+ if (this.cadesSigned) {
+ throw new MOAApplicationException("asic.0010", null);
}
+ this.xadesSigned = true;
+ }
- @Override
- public void setIsEvidenceXML() throws MOAException {
- throw new MOAApplicationException("asic.0012", null);
+ @Override
+ public void setIsCAdES() throws MOAException {
+ if (this.xadesSigned) {
+ throw new MOAApplicationException("asic.0010", null);
}
+ this.cadesSigned = true;
+ }
+
+ @Override
+ public void setIsTimestamped() throws MOAException {
+ throw new MOAApplicationException("asic.0013", null);
+ }
+
+ @Override
+ public void setIsEvidenceERS() throws MOAException {
+ throw new MOAApplicationException("asic.0011", null);
+ }
+
+ @Override
+ public void setIsEvidenceXML() throws MOAException {
+ throw new MOAApplicationException("asic.0012", null);
+ }
}