org.eclipse.packagedrone.repo.aspect.aggregate.AggregationContext.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.packagedrone.repo.aspect.aggregate.AggregationContext.java

Source

/*******************************************************************************
 * 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();

    /**
     * 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));
    }

}