Coverage Summary for Class: MetadataGroupXmlElementAccess (org.kitodo.dataformat.access)

Class Class, % Method, % Line, %
MetadataGroupXmlElementAccess 100% (1/1) 100% (6/6) 88,5% (23/26)


 /*
  * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
  *
  * This file is part of the Kitodo project.
  *
  * It is licensed under GNU General Public License version 3 or later.
  *
  * For the full copyright and license information, please read the
  * GPL3-License.txt file that was distributed with this source code.
  */
 
 package org.kitodo.dataformat.access;
 
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.kitodo.api.MdSec;
 import org.kitodo.api.MetadataEntry;
 import org.kitodo.api.MetadataGroup;
 import org.kitodo.dataformat.metskitodo.MetadataGroupType;
 
 /**
  * A group of metadata entries. A group of metadata entries is like a table
  * with different metadata entries, which can be groups again. This allows any
  * nesting depths to be achieved.
  */
 public class MetadataGroupXmlElementAccess extends MetadataXmlElementsAccess {
 
     private final MetadataGroup metadataGroup;
 
     /**
      * Constructor for a new, empty metadata entries group. This constructor
      * can be used with the module loader to create a new metadata entries
      * group.
      */
     public MetadataGroupXmlElementAccess() {
         metadataGroup = new MetadataGroup();
     }
 
     /**
      * Constructor for a metadata entry group gained from METS.
      *
      * @param domain
      *            domain of the METS document where the metadata was read
      * @param xmlMetadataGroup
      *            {@code <kitodo:metadataGroup>} XML element
      */
     MetadataGroupXmlElementAccess(MdSec domain, MetadataGroupType xmlMetadataGroup) {
         this();
         metadataGroup.setDomain(domain);
         metadataGroup.setKey(xmlMetadataGroup.getName());
         metadataGroup.getMetadata()
                 .addAll(Stream.concat(
                     xmlMetadataGroup.getMetadata().parallelStream()
                             .map(kitodoMetadata -> new MetadataXmlElementAccess(null, kitodoMetadata)
                                     .getMetadataEntry()),
                     xmlMetadataGroup.getMetadataGroup().parallelStream()
                             .map(kitodoMetadataGroup -> new MetadataGroupXmlElementAccess(null,
                                     kitodoMetadataGroup).metadataGroup))
                         .collect(Collectors.toSet()));
     }
 
     MetadataGroupXmlElementAccess(MetadataGroup metadataEntriesGroup) {
         this.metadataGroup = metadataEntriesGroup;
     }
 
     MetadataGroup getMetadataGroup() {
         return metadataGroup;
     }
 
     /**
      * Generates a {@code <kitodo:metadataGroup>} XML element from this group.
      *
      * @return a {@code <kitodo:metadataGroup>} XML element
      */
     MetadataGroupType toXMLMetadataGroup() {
         MetadataGroupType xmlMetadataGroup = new MetadataGroupType();
         xmlMetadataGroup.setName(metadataGroup.getKey());
         for (org.kitodo.api.Metadata entry : metadataGroup.getMetadata()) {
             if (entry instanceof MetadataEntry) {
                 xmlMetadataGroup.getMetadata().add(new MetadataXmlElementAccess((MetadataEntry) entry).toMetadata());
             } else if (entry instanceof MetadataGroup) {
                 xmlMetadataGroup.getMetadataGroup()
                         .add(new MetadataGroupXmlElementAccess((MetadataGroup) entry).toXMLMetadataGroup());
             }
         }
         return xmlMetadataGroup;
     }
 }