diff options
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.java | 19 |
1 files changed, 15 insertions, 4 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..578371c 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 @@ -6,14 +6,18 @@ 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 iaik.util.logging.Log; + 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; @@ -31,14 +35,21 @@ public abstract class ASiCBaseFormatFactory implements ASiCContainer { protected String mimeType = null; protected List<ASiCEntry> signatureEntries = new ArrayList<ASiCEntry>(); - protected List<ASiCEntry> dataEntries = new ArrayList<ASiCEntry>(); + protected Map<String, ASiCEntry> dataEntries = new HashMap<String, ASiCEntry>(); protected List<ASiCEntry> informationEntries = new ArrayList<ASiCEntry>(); protected List<EntryHandler> handlers = new ArrayList<EntryHandler>(); @Override - public void addDataEntry(ASiCEntry entry) { - this.dataEntries.add(entry); + 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); + + } 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 @@ -96,7 +107,7 @@ public abstract class ASiCBaseFormatFactory implements ASiCContainer { 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); + return new ASiCImpl(this.factoryFormat(), this.xadesSigned, this.cadesSigned, this.signatureEntries, dataEntries.values(), this.informationEntries); } @Override |