Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright 2013 EMC Corporation. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* or in the "license" file accompanying this file. This file 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 com.emc.atmos.api;
import com.emc.atmos.api.bean.*;
import com.emc.atmos.api.request.*;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Date;
import java.util.Map;
import java.util.Set;
/**
* This interface defines the basic operations available through the Atmos REST web service.
*/
public interface AtmosApi {
ServiceInformation getServiceInformation();
/**
* Calculates rough clock skew. Implementations will likely use the date response header from an inert HTTP
* request.
*
* @return The clock skew between the target Atmos node and the local machine.
*/
long calculateServerClockSkew();
/**
* Creates a new object in the cloud.
*
* @param content The initial content of the object. May be appended to later. May be null to create an
* object with no content. The content object can be any object type that is supported by the
* implementation.
* @param contentType the MIME type of the content. Optional, may be null. If null, defaults to
* application/octet-stream.
*
* @return ObjectId of the newly created object.
*/
ObjectId createObject( Object content, String contentType );
/**
* Creates a new object in the cloud with the specified identifier.
*
* @param identifier The identifier to use for the new object. This may be an ObjectPath or an ObjectKey.
* @param content The initial content of the object. May be appended to later. May be null to create an
* object with no content. The content object can be any object type that is supported by the
* implementation.
* @param contentType the MIME type of the content. Optional, may be null. If null, defaults to
* application/octet-stream.
*
* @return ObjectId of the newly created object.
*/
ObjectId createObject( ObjectIdentifier identifier, Object content, String contentType );
/**
* Creates a new object in the cloud using all of the options provided in the request object.
*
* @param request The request object (click on the class name to get more information).
*
* @return The response received from Atmos. This object contains the ObjectId of the newly created object plus
* additional details about the response, such as headers (click on the class name to get more
* information).
*/
CreateObjectResponse createObject( CreateObjectRequest request );
/**
* Reads an object's entire content from the cloud.
*
* @param identifier The identifier of the object to read. May be any ObjectIdentifier.
* @param objectType The type of object to return. This can be any object type supported by the implementation.
*
* @return An object (of type objectType) representing the content of the object in the cloud.
*
* @throws IOException if an exception occurs while reading the object. Note that IOExceptions are generally
* retried automatically (configured in {@link AtmosConfig}).
*/
T readObject( ObjectIdentifier identifier, Class objectType ) throws IOException;
/**
* Reads an object's content from the cloud.
*
* @param identifier The identifier of the object to read. May be any ObjectIdentifier.
* @param range (optional) The range of bytes to read from the object. A null value will read the entire
* object.
* @param objectType The type of object to return. This can be any object type supported by the implementation.
*
* @return An object (of type objectType) representing the content of the object in the cloud.
*
* @throws IOException if an exception occurs while reading the object. Note that IOExceptions are generally
* retried automatically (configured in {@link AtmosConfig}).
*/
T readObject( ObjectIdentifier identifier, Range range, Class objectType ) throws IOException;
/**
* Reads an object's content from the cloud using all of the options provided in the request object.
*
* @param request The request object (click on the class name to get more information)
* @param objectType The type of object to return. This can be any object type supported by the implementation.
*
* @return The response received from Atmos. This object contains an object (of type objectType) representing the
* content of the object in the cloud, plus additional details about the response, such as headers (click
* on the class name to get more information).
*
* @throws IOException if an exception occurs while reading the object. Note that IOExceptions are generally
* retried automatically (configured in {@link AtmosConfig}).
*/
ReadObjectResponse readObject( ReadObjectRequest request, Class objectType )
throws IOException;
/**
* Provides an InputStream to read an object's content from the cloud.
*
* @param identifier The identifier of the object to read. May be any ObjectIdentifier.
* @param range (optional) The range of bytes to read from the object. A null value will read the entire
* object.
*
* @return The response received from Atmos. This object contains the InputStream to read the object from the
* cloud, plus additional details about the response, such as headers (click on the class name to get more
* information).
*/
ReadObjectResponse readObjectStream( ObjectIdentifier identifier, Range range );
/**
* Updates an object's content in the cloud.
*
* @param identifier The identifier of the object to update. May be any ObjectIdentifier.
* @param content The new content of the object. The content object can be any object type that is supported by
* the implementation.
*/
void updateObject( ObjectIdentifier identifier, Object content );
/**
* Updates an object's content in the cloud.
*
* @param identifier The identifier of the object to update. May be any ObjectIdentifier.
* @param content The new content of the object. The content object can be any object type that is supported by
* the implementation.
* @param range (optional) The portion of the object to update (expressed as a range of bytes). A null value
* will overwrite the entire object.
*/
void updateObject( ObjectIdentifier identifier, Object content, Range range );
/**
* Updates an object's content in the cloud using all of the options provided in the request object.
*
* @param request The request object (click on the class name to get more information)
*
* @return The response received from Atmos. This object contains details about the response, such as headers
* (click on the class name to get more information).
*/
BasicResponse updateObject( UpdateObjectRequest request );
/**
* Deletes an object from the cloud
*
* @param identifier The identifier of the object to delete. May be any ObjectIdentifier.
*/
void delete( ObjectIdentifier identifier );
/**
* Creates a directory in the subtenant namespace using the specified path.
*
* @param path The path of the directory to create.
*
* @return The ObjectId of the newly created directory.
*/
ObjectId createDirectory( ObjectPath path );
/**
* Creates a directory in the subtenant namespace using the specified path, acl and metadata.
*
* @param path The path of the directory to create.
* @param acl The ACL to assign to the new directory.
* @param metadata The metadata to associate with the new directory.
*
* @return The ObjectId of the newly created directory.
*/
ObjectId createDirectory( ObjectPath path, Acl acl, Metadata... metadata );
/**
* Lists the contents of a directory in the namespace.
*
* @param request The request object (click on the class name to get more information)
*
* @return The response received from Atmos. This object contains the list of directory entries, plus details about
* the response, such as headers (click on the class name to get more information). Note that if a paging
* token is present in the response, it will be set on the request object.
*/
ListDirectoryResponse listDirectory( ListDirectoryRequest request );
/**
* Moves an object in the namespace to a new location.
*
* @param oldPath The existing path of the object.
* @param newPath The new path that the object should have.
* @param overwrite If true and an object already exists at newPath, this call will overwrite that object.
*/
void move( ObjectPath oldPath, ObjectPath newPath, boolean overwrite );
/**
* Lists the names of all metadata associated with the specified object.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
*
* @return A list of the names of all user metadata associated with the object.
*/
Map getUserMetadataNames( ObjectIdentifier identifier );
/**
* Gets the user metadata associated with the specified object.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
* @param metadataNames (optional) Constrains the result to include only the metadata named in this list.
*
* @return A map of metadata names to Metadata objects.
*/
Map getUserMetadata( ObjectIdentifier identifier, String... metadataNames );
/**
* Gets the system metadata associated with the specified object.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
* @param metadataNames (optional) Constrains the result to include only the metadata named in this list.
*
* @return A map of metadata names to Metadata objects.
*/
Map getSystemMetadata( ObjectIdentifier identifier, String... metadataNames );
/**
* Gets an object's metadata, ACL and content-type all in one call.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
*
* @return Object metadata (click on the class for more information).
*/
ObjectMetadata getObjectMetadata( ObjectIdentifier identifier );
/**
* Adds or replaces user metadata associated with the specified object. Note that this method will not delete
* metadata. That must be done via {@link #deleteUserMetadata(ObjectIdentifier, String...)}.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
* @param metadata The metadata to add to or replace on the object.
*/
void setUserMetadata( ObjectIdentifier identifier, Metadata... metadata );
/**
* Deletes metadata associated with the specified object.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
* @param names The names of the metadata to delete/remove from the object.
*/
void deleteUserMetadata( ObjectIdentifier identifier, String... names );
/**
* Lists the children of the specified metadata path in the hierarchy of listable metadata for the subtenant. For
* example, if a hierarchy of listable metadata exists as such: /ford/mustang/gt, then listing
* "ford" would probably yield "mustang", "f150", "crown victoria", etc.
*
* @param metadataName The metadata name (sometime called a "tag") whose children should be returned. If null, all
* root-level names will be returned (i.e. "ford", "chevy", "chrysler").
*
* @return The names of all children of the specified listable metadata path.
*/
Set listMetadata( String metadataName );
/**
* Lists all objects that are assigned the specified listable metadata using all of the options provided in the
* request object.
*
* @param request The request object (click on the class name to get more information)
*
* @return The response received from Atmos. This object contains the list of object entries, plus details about
* the response, such as headers (click on the class name to get more information). Note that if a paging
* token is present in the response, it will be set on the request object.
*/
ListObjectsResponse listObjects( ListObjectsRequest request );
/**
* Gets the ACL for the specified object.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
*
* @return The ACL for the specified object.
*/
Acl getAcl( ObjectIdentifier identifier );
/**
* Sets the ACL for the specified object.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
* @param acl The new ACL for the specified object.
*/
void setAcl( ObjectIdentifier identifier, Acl acl );
/**
* Gets storage information for the specified object.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
*
* @return Storage information for the specified object.
*/
ObjectInfo getObjectInfo( ObjectIdentifier identifier );
/**
* Creates a new immutable version (snapshot) of the specified object from its current state.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
*
* @return The ObjectId of the new version. Use this identifier to retrieve the snapshot created by this call.
*/
ObjectId createVersion( ObjectIdentifier identifier );
/**
* Lists all versions (snapshots) of the specified object using all of the options provided in the request object.
*
* @param request The request object (click on the class name to get more information)
*
* @return The response received from Atmos. This object contains the list of object versions, plus details about
* the response, such as headers (click on the class name to get more information). Note that if a paging
* token is present in the response, it will be set on the request object.
*/
ListVersionsResponse listVersions( ListVersionsRequest request );
/**
* Restores the specified version (snapshot) of the specified object so that the object's current state reflects
* that of the version. Note this will overwrite the current state of the object.
*
* @param objectId The ObjectId of the object.
* @param versionId The ObjectId of the version (must be a version of the specified object).
*/
void restoreVersion( ObjectId objectId, ObjectId versionId );
/**
* Deletes the specified object version.
*
* @param versionId The ObjectId of the version to delete (must point to a version and not an object).
*/
void deleteVersion( ObjectId versionId );
/**
* Constructs a pre-signed URL to an object, which anyone can then use to retrieve the object. The URL expires at
* the specified time and is tamper proof. However, it does reveal the full tokenId of the user. If this is
* undesirable and the Atmos cloud is at version 2.1 and above, look at
* {@link #createAccessToken(com.emc.atmos.api.request.CreateAccessTokenRequest)}.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
* @param expirationDate The date at which the generated URL will no longer be valid.
*
* @return A public URL that will retrieve the contents of the specified object until expirationDate.
*
* @throws MalformedURLException if the configured Atmos endpoint is syntactically invalid.
*/
URL getShareableUrl( ObjectIdentifier identifier, Date expirationDate ) throws MalformedURLException;
/**
* Constructs a shareable URL with a specific content-disposition. The disposition value will be set in the
* Content-Disposition header of the response when the URL is accessed. Requires the browser-compat feature, check
* ServiceInformation for supported features.
*
* @param identifier The identifier of the object. Can be any ObjectIdentifier.
* @param expirationDate The date at which the generated URL will no longer be valid.
* @param disposition the value of the Content-Disposition header, e.g.
* "attachment; filename=\"filename.txt\""
*
* @return A public URL that will retrieve the contents of the specified object and set the specified
* content-disposition until expirationDate.
*
* @throws MalformedURLException if the configured Atmos endpoint is syntactically invalid.
*/
URL getShareableUrl( ObjectIdentifier identifier, Date expirationDate, String disposition )
throws MalformedURLException;
/**
* Creates an anonymous access token using all of the options provided in the request object.
*
* @param request The request object (click on the class name to get more information)
*
* @return The response received from Atmos. This object contains the access token URL, plus details about
* the response, such as headers (click on the class name to get more information).
*
* @throws MalformedURLException if the configured Atmos endpoint is syntactically invalid.
*/
CreateAccessTokenResponse createAccessToken( CreateAccessTokenRequest request )
throws MalformedURLException;
/**
* Retrieves details about the specified access token. Implementation simply extracts the token ID from the URL and
* calls {@link #getAccessToken(String)}.
*
* @param url The URL of the access token.
*
* @return The response received from Atmos. This object contains the AccessToken, plus details about
* the response, such as headers (click on the class name to get more information).
*/
GetAccessTokenResponse getAccessToken( URL url );
/**
* Retrieves details about the specified access token.
*
* @param accessTokenId The ID of the access token.
*
* @return The response received from Atmos. This object contains the AccessToken, plus details about
* the response, such as headers (click on the class name to get more information).
*/
GetAccessTokenResponse getAccessToken( String accessTokenId );
/**
* Deletes the specified access token. Implementation simply extracts the token ID from the URL and calls {@link
* #deleteAccessToken(String)}.
*
* @param url The URL of the access token.
*/
void deleteAccessToken( URL url );
/**
* Deletes the specified access token.
*
* @param accessTokenId The ID of the access token.
*/
void deleteAccessToken( String accessTokenId );
/**
* Lists all access tokens owned by the user using all of the options provided in the request object.
*
* @param request The request object (click on the class name to get more information)
*
* @return The response received from Atmos. This object contains the list of access tokens, plus details about
* the response, such as headers (click on the class name to get more information). Note that if a paging
* token is present in the response, it will be set on the request object.
*/
ListAccessTokensResponse listAccessTokens( ListAccessTokensRequest request );
/**
* Pre-signs a request with a specified expiration time. The pre-signed request can be executed at a later time via
* the {@link #execute(com.emc.atmos.api.request.PreSignedRequest, Class, Object)} method. This feature is useful
* if you intend to serialize the pre-signed request to some other system which does not have access to Atmos
* credentials.
*
* @param request the request to pre-sign (can be executed at a later time)
* @param expiration the date at which the pre-signed request becomes invalid and will no longer be accepted
*
* @return a pre-signed request that can be executed at a later time and expires at expiration
*
* @throws java.net.MalformedURLException if the configured Atmos endpoint is syntactically invalid.
*/
PreSignedRequest preSignRequest( Request request, Date expiration ) throws MalformedURLException;
/**
* Executes a pre-signed request, sending the specified content as a body (if provided) and returning the specified
* resultType (if provided). The content object and result type can be any object type that is supported by the
* implementation.
*
* @param request A pre-signed request generated by calling
* {@link #preSignRequest(com.emc.atmos.api.request.Request, java.util.Date)}.
* @param resultType (optional) The type of object to return. This can be any object type supported by the
* implementation.
* @param content (optional) The body content to send in the request (i.e. the object content for a
* create-object request). Can be any object type supported by the implementation.
*
* @return The response received from Atmos. This object contains an object (of type resultType) representing the
* content of the response (i.e. the object content of a read-object request), plus additional details
* about the response, such as headers (click on the class name to get more information).
*
* @throws URISyntaxException if the URL in the pre-signed request is syntactically invalid.
*/
GenericResponse execute( PreSignedRequest request, Class resultType, Object content )
throws URISyntaxException;
/**
* Creates a new Atmos Subtenant in EMC ViPR. This operation is not supported on
* pure Atmos systems.
* @param request The {@link CreateSubtenantRequest} containing the parameters for
* the new subtenant.
* @return The ID of the new subtenant, e.g. "75077194912140aaa95911c237103695"
*/
String createSubtenant(CreateSubtenantRequest request);
}