/******************************************************************************* * Copyright (c) 2015 IBH SYSTEMS GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBH SYSTEMS GmbH - initial API and implementation *******************************************************************************/ package org.eclipse.packagedrone.repo.aspect.aggregate; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collection; import java.util.Map; import org.eclipse.packagedrone.repo.MetaKey; import org.eclipse.packagedrone.repo.channel.ArtifactInformation; import org.eclipse.packagedrone.repo.channel.ChannelService.ArtifactReceiver; import org.eclipse.packagedrone.utils.io.IOConsumer; import com.google.common.io.ByteStreams; public interface AggregationContext extends AggregationValidationContext { public Collection<ArtifactInformation> getArtifacts (); /** * Get the external channel id * * @return the external channel id */ public String getChannelId (); public String getChannelDescription (); /** * Get the provided channel meta data * * @return the provided channel meta data */ public Map<MetaKey, String> getChannelMetaData (); /** * Create a persisted cache entry * * @param id * the id of the cache entry, must be unique for this aspect and * channel * @param stream * the stream providing the data for the cache entry * @throws IOException */ public default void createCacheEntry ( final String id, final String name, final String mimeType, final InputStream stream ) throws IOException { createCacheEntry ( id, name, mimeType, ( output ) -> ByteStreams.copy ( stream, output ) ); } /** * Create a persisted cache entry * <p> * This variant allows one to provide a function which will get called with * an output stream, to which the content can be written. * </p> * * @param id * the id of the cache entry, must be unique for this aspect and * channel * @param creator * the content creator * @throws IOException */ public void createCacheEntry ( String id, String name, String mimeType, IOConsumer<OutputStream> creator ) throws IOException; public boolean streamArtifact ( String artifactId, ArtifactReceiver receiver ) throws IOException; public default boolean streamArtifact ( final String artifactId, final IOConsumer<InputStream> consumer ) throws IOException { return streamArtifact ( artifactId, ( artifact, stream ) -> consumer.accept ( stream ) ); } }