All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.ext.datastore.gs.GsFileDataSource Maven / Gradle / Ivy

package org.opentripplanner.ext.datastore.gs;

import com.google.cloud.storage.Blob;
import org.opentripplanner.datastore.DataSource;
import org.opentripplanner.datastore.FileType;
import org.opentripplanner.datastore.file.DirectoryDataSource;
import org.opentripplanner.datastore.file.ZipFileDataSource;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;

import static java.nio.channels.Channels.newInputStream;
import static java.nio.channels.Channels.newOutputStream;

/**
 * This class is a wrapper around and EXISTING Google Cloud Store bucket blob. It can
 * be read and overwritten.
 * 

* Reading compressed blobs is supported. The only format supported is gzip (extension .gz). */ class GsFileDataSource extends AbstractGsDataSource implements DataSource { private final Blob blob; /** * Create a data source wrapper around a file. This wrapper handles GZIP(.gz) compressed files * as well as normal files. It does not handle directories({@link DirectoryDataSource}) or * zip-files {@link ZipFileDataSource} witch contain multiple files. */ GsFileDataSource(Blob blob, FileType type) { super(blob.getBlobId(), type); this.blob = blob; } @Override public long size() { return blob.getSize(); } @Override public long lastModified() { return blob.getUpdateTime(); } @Override public boolean exists() { return blob.exists(); } @Override public boolean isWritable() { return true; } @Override public InputStream asInputStream() { // We support both gzip and unzipped files when reading. InputStream in = newInputStream(blob.reader()); if (blob.getName().endsWith(".gz")) { try { return new GZIPInputStream(in); } catch (IOException e) { throw new IllegalStateException(e.getLocalizedMessage(), e); } } else { return in; } } @Override public OutputStream asOutputStream() { return newOutputStream(blob.writer()); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy