/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package org.apache.pig.backend.datastorage; | |
import java.io.OutputStream; | |
import java.io.InputStream; | |
import java.io.IOException; | |
import java.util.Properties; | |
import java.util.Map; | |
/** | |
* DataStorageElementDescriptor provides methods necessary to manage an | |
* element in a DataStorage. | |
* | |
*/ | |
public interface ElementDescriptor extends | |
Comparable<ElementDescriptor> { | |
/** Available from getConfiguration as a String and getStatistics as a Long. */ | |
public static final String BLOCK_SIZE_KEY = "pig.path.block.size"; | |
/** Available from getConfiguration as a String and getStatistics as a Short. */ | |
public static final String BLOCK_REPLICATION_KEY = "pig.path.block.replication"; | |
/** Available from getStatistics as a Long. */ | |
public static final String LENGTH_KEY = "pig.path.length"; | |
/** Available from getStatistics as a Long. */ | |
public static final String MODIFICATION_TIME_KEY = "pig.path.modification.time"; | |
// | |
// TODO: more keys | |
// | |
public DataStorage getDataStorage(); | |
/** | |
* Opens a stream onto which an entity can be written to. | |
* | |
* @param configuration information at the object level | |
* @return stream where to write | |
* @throws DataStorageException | |
*/ | |
public OutputStream create(Properties configuration) | |
throws IOException; | |
public OutputStream create() | |
throws IOException; | |
/** | |
* Copy entity from an existing one, possibly residing in a | |
* different Data Storage. | |
* | |
* @param dstName name of entity to create | |
* @param dstConfiguration configuration for the new entity | |
* @param removeSrc if src entity needs to be removed after copying it | |
* @throws DataStorageException for instance, configuration | |
* information for new entity is not compatible with | |
* configuration information at the Data | |
* Storage level, user does not have privileges to read from | |
* source entity or write to destination storage... | |
*/ | |
public void copy(ElementDescriptor dstName, | |
Properties dstConfiguration, | |
boolean removeSrc) | |
throws IOException; | |
public void copy(ElementDescriptor dstName, | |
boolean removeSrc) | |
throws IOException; | |
/** | |
* Open for read a given entity | |
* | |
* @param configuration | |
* @return entity to read from | |
* @throws DataStorageExecption e.g. entity does not exist... | |
*/ | |
public InputStream open(Properties configuration) throws IOException; | |
public InputStream open() throws IOException; | |
/** | |
* Open an element in the Data Storage with support for random access | |
* (seek operations). | |
* | |
* @param configuration | |
* @return a seekable input stream | |
* @throws DataStorageException | |
*/ | |
public SeekableInputStream sopen(Properties configuration) | |
throws IOException; | |
public SeekableInputStream sopen() throws IOException; | |
/** | |
* Checks whether the entity exists or not | |
* | |
* @return true if entity exists, false otherwise. | |
*/ | |
public boolean exists() throws IOException; | |
/** | |
* Changes the name of an entity in the Data Storage | |
* | |
* @param newName new name of entity | |
* @throws DataStorageException | |
*/ | |
public void rename(ElementDescriptor newName) | |
throws IOException; | |
/** | |
* Remove entity from the Data Storage. | |
* | |
* @throws DataStorageException | |
*/ | |
public void delete() throws IOException; | |
/** | |
* Retrieve configuration information for entity | |
* @return configuration | |
*/ | |
public Properties getConfiguration() throws IOException; | |
/** | |
* Update configuration information for this entity | |
* | |
* @param newConfig configuration | |
* @throws DataStorageException | |
*/ | |
public void updateConfiguration(Properties newConfig) | |
throws IOException; | |
/** | |
* Defines whether the element is visible to users or | |
* contains system's metadata | |
* @return true if this is system file; false otherwise | |
*/ | |
public boolean systemElement(); | |
/** | |
* List entity statistics | |
* @return DataStorageProperties | |
*/ | |
public Map<String, Object> getStatistics() throws IOException; | |
} |