/* DigiDoc4J library * * This software is released under either the GNU Library General Public * License (see LICENSE.LGPL). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2.1, February 1999 */ package org.digidoc4j.impl.bdoc; import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.digidoc4j.Configuration; import org.digidoc4j.DataFile; import org.digidoc4j.Signature; import org.digidoc4j.SignatureProfile; import org.digidoc4j.ValidationResult; import org.digidoc4j.exceptions.DataFileNotFoundException; import org.digidoc4j.impl.bdoc.asic.AsicContainerCreator; import org.digidoc4j.impl.bdoc.asic.BDocContainerValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class NewBDocContainer extends BDocContainer { private static final Logger logger = LoggerFactory.getLogger(NewBDocContainer.class); private List<Signature> signatures = new ArrayList<>(); private List<DataFile> dataFiles = new ArrayList<>(); public NewBDocContainer() { } public NewBDocContainer(Configuration configuration) { super(configuration); } @Override protected ValidationResult validateContainer() { return new BDocContainerValidator(getConfiguration()).validate(getSignatures()); } @Override public void extendSignatureProfile(SignatureProfile profile) { signatures = extendAllSignaturesProfile(profile, signatures, dataFiles); } @Override public DataFile addDataFile(String path, String mimeType) { DataFile dataFile = new DataFile(path, mimeType); addDataFile(dataFile); return dataFile; } @Override public DataFile addDataFile(InputStream inputStream, String fileName, String mimeType) { DataFile dataFile = new DataFile(inputStream, fileName, mimeType); addDataFile(dataFile); return dataFile; } @Override public DataFile addDataFile(File file, String mimeType) { DataFile dataFile = new DataFile(file.getPath(), mimeType); addDataFile(dataFile); return dataFile; } @Override public void addDataFile(DataFile dataFile) { verifyIfAllowedToAddDataFile(dataFile.getName()); getDataFiles().add(dataFile); } @Override public List<DataFile> getDataFiles() { return dataFiles; } @Override public void addSignature(Signature signature) { validateIncomingSignature(signature); signatures.add(signature); } @Override public List<Signature> getSignatures() { return signatures; } @Override public void removeSignature(Signature signature) { signatures.remove(signature); } @Override @Deprecated public void removeSignature(int signatureId) { signatures.remove(signatureId); } @Override public void removeDataFile(DataFile file) { logger.info("Removing data file: " + file.getName()); validateDataFilesRemoval(); boolean wasRemovalSuccessful = dataFiles.remove(file); if (!wasRemovalSuccessful) { throw new DataFileNotFoundException(file.getName()); } } @Override @Deprecated public void removeDataFile(String fileName) { logger.info("Removing data file: " + fileName); validateDataFilesRemoval(); for (DataFile dataFile : dataFiles) { String name = dataFile.getName(); if (StringUtils.equals(fileName, name)) { dataFiles.remove(dataFile); logger.debug("Data file has been removed"); return; } } throw new DataFileNotFoundException(fileName); } protected void writeAsicContainer(AsicContainerCreator zipCreator) { int startingSignatureFileIndex = 0; String userAgent = createUserAgent(); zipCreator.setZipComment(userAgent); zipCreator.writeAsiceMimeType(); zipCreator.writeManifest(dataFiles); zipCreator.writeDataFiles(dataFiles); zipCreator.writeSignatures(signatures, startingSignatureFileIndex); zipCreator.writeContainerComment(userAgent); zipCreator.finalizeZipFile(); } }