code: @Override
      public final Archive<T> shallowCopy(Filter<ArchivePath> filter) {
          Validate.notNull(filter, "Filter must be specified");
          // Use existing configuration
          final Configuration configuration = this.getConfiguration();
  
          // Create a new archive to which we'll shallow copy all assets
          final Archive<T> from = this;
  
          //TODO SHRINKWRAP-362
          /*
           * The design of this particular hack is particularly offensive:
           *
           * First off, we're binding this abstract parent to use a specific
           * implementation in creating new instances.
           *
           * Second, there's the unchecked casting.
           *
           * Mostly, however, is that this "shallowCopy" issue
           * denoted by SHRINKWRAP-353 calls into question
           * the whole design of having ArchiveBase implement
           * the full contract set defined by Archive.  Archive is
           * targeted to be an end-user view; and ArchiveBase is really
           * a set of operations for the underlying storage mechanism.  What
           * would be much more appropriate is a contract set for Archive, and
           * a separate contract for the underlying storage (ie. file system).
           * To be addressed in SHRINKWRAP-362.
           *
           */
          @SuppressWarnings("unchecked")
          final Archive<T> to = Archive.class.cast(new MemoryMapArchiveImpl(configuration));
  
          // Now loop through and add all content
          for (final ArchivePath path : from.getContent().keySet()) {
              Asset asset = from.get(path).getAsset();
              if (asset != null) {
                  if(!filter.include(path)) {
                      continue;
                  }
                  to.add(asset, path);
              }
          }
  
          // Return
          return to;
      }
docs: {@inheritDoc}
  
  @see org.jboss.shrinkwrap.api.Archive#shallowCopy(Filter)