/* * XAdES4j - A Java library for generation and verification of XAdES signatures. * Copyright (C) 2010 Luis Goncalves. * * XAdES4j is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 3 of the License, or any later version. * * XAdES4j is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License along * with XAdES4j. If not, see <http://www.gnu.org/licenses/>. */ package xades4j.production; import xades4j.properties.UnsignedProperties; import xades4j.properties.SignedProperties; import xades4j.properties.QualifyingProperties; import xades4j.properties.DataObjectDesc; import xades4j.properties.UnsignedDataObjectProperty; import xades4j.properties.UnsignedSignatureProperty; import xades4j.properties.SignedSignatureProperty; import xades4j.properties.SignedDataObjectProperty; import xades4j.providers.DataObjectPropertiesProvider; import xades4j.providers.SignaturePropertiesProvider; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * Helper class that gathers the qualifying properties from the different providers * and data object desriptions. * @author Luís */ class QualifyingPropertiesProcessor { private final SignaturePropertiesProvider sigPropsProvider; private final DataObjectPropertiesProvider dataObjPropsProvider; public QualifyingPropertiesProcessor( SignaturePropertiesProvider sigPropsProvider, DataObjectPropertiesProvider dataObjPropsProvider) { this.sigPropsProvider = sigPropsProvider; this.dataObjPropsProvider = dataObjPropsProvider; } QualifyingProperties getQualifyingProperties( SignedDataObjects dataObjs, Collection<SignedSignatureProperty> formatSpecificSignedSigProps, Collection<UnsignedSignatureProperty> formatSpecificUnsignedSigProps) { /* **** Signature properties **** */ // Collect the signature properties from the provider. SignaturePropertiesCollectorImpl signaturePropsCollector = new SignaturePropertiesCollectorImpl(); sigPropsProvider.provideProperties(signaturePropsCollector); Collection<SignedSignatureProperty> collectedSignedSigProps = signaturePropsCollector.getSignedSigProps(); Collection<SignedSignatureProperty> signedSigProps = new ArrayList<SignedSignatureProperty>( collectedSignedSigProps.size() + formatSpecificSignedSigProps.size()); signedSigProps.addAll(collectedSignedSigProps); signedSigProps.addAll(formatSpecificSignedSigProps); Collection<UnsignedSignatureProperty> collectedUnsignedSigProps = signaturePropsCollector.getUnsignedSigProps(); Collection<UnsignedSignatureProperty> unsignedSigProps = new ArrayList<UnsignedSignatureProperty>( collectedUnsignedSigProps.size() + formatSpecificUnsignedSigProps.size()); unsignedSigProps.addAll(collectedUnsignedSigProps); unsignedSigProps.addAll(formatSpecificUnsignedSigProps); /* **** Data objects properties **** */ Collection<DataObjectDesc> dataObjsInfo = dataObjs.getDataObjectsDescs(); // The containers for all the specified signed data object properties. Since // some properties can be applied to multiple data objects, we need to rule // out repeated references (a Set is used). Set<SignedDataObjectProperty> signedDataObjProps = new HashSet<SignedDataObjectProperty>(dataObjsInfo.size()); Set<UnsignedDataObjectProperty> unsignedDataObjProps = new HashSet<UnsignedDataObjectProperty>(0); // Add the global data object properties. signedDataObjProps.addAll(dataObjs.getSignedDataObjsProperties()); unsignedDataObjProps.addAll(dataObjs.getUnsignedDataObjsProperties()); // Add the properties specified for each data object. for (DataObjectDesc dataObjInfo : dataObjsInfo) { // If no properties were specified allow the provider to add them. if (!dataObjInfo.hasProperties()) this.dataObjPropsProvider.provideProperties(dataObjInfo); signedDataObjProps.addAll(dataObjInfo.getSignedDataObjProps()); unsignedDataObjProps.addAll(dataObjInfo.getUnsignedDataObjProps()); } /* **** */ return new QualifyingProperties( new SignedProperties(signedSigProps, signedDataObjProps), new UnsignedProperties(unsignedSigProps, unsignedDataObjProps)); } }