/*
* This file or a portion of this file is licensed under the terms of
* the Globus Toolkit Public License, found in file ../GTPL, or at
* http://www.globus.org/toolkit/download/license.html. This notice must
* appear in redistributions of this file, with or without modification.
*
* Redistributions of this Software, with or without modification, must
* reproduce the GTPL in: (1) the Software, or (2) the Documentation or
* some other similar material which is provided with the Software (if
* any).
*
* Copyright 1999-2004 University of Chicago and The University of
* Southern California. All rights reserved.
*/
package org.griphyn.vdl.dbschema;
import java.sql.*;
import org.griphyn.vdl.classes.Definition;
/**
* This common schema interface defines the schemas in which the
* abstraction layers access the VDC. This layer is independent of the
* implementing database, and does so by going via the database driver
* class API.
*
* @author Jens-S. Vöckler
* @author Yong Zhao
* @version $Revision$
* @see org.griphyn.vdl.dbschema.DatabaseSchema
* @see org.griphyn.vdl.dbdriver
*/
public interface VDC extends Catalog
{
/**
* Names the property key prefix employed for schemas dealing with the VDC.
*/
public static final String PROPERTY_PREFIX = "vds.db.vdc.schema";
//
// taken from (old) DBManager
//
/**
* Loads a single Definition from the backend database into an Java object.
* This method does not allow wildcarding!
*
* @param namespace namespace, null will be converted into empty string
* @param name name, null will be converted into empty string
* @param version version, null will be converted into empty string
* @param type type of the definition (TR or DV), must not be -1.
* @return the Definition as specified, or null if not found.
*
* @see org.griphyn.vdl.classes.Definition#TRANSFORMATION
* @see org.griphyn.vdl.classes.Definition#DERIVATION
* @see #saveDefinition( Definition, boolean )
* @see #containsDefinition( Definition )
* @see #searchDefinition( String, String, String, int )
*/
public abstract Definition
loadDefinition( String namespace,
String name,
String version,
int type )
throws SQLException;
/**
* Saves a Definition, that is either a Transformation or Derivation,
* into the backend database.
*
* @param definition is the new Definition to store.
* @param overwrite true, if existing defitions will be overwritten by
* new ones with the same primary (or secondary) key (-set), or false,
* if a new definition will be rejected on key matches.
*
* @return true, if the backend database was changed, or
* false, if the definition was not accepted into the backend.
*
* @see org.griphyn.vdl.classes.Definition
* @see org.griphyn.vdl.classes.Transformation
* @see org.griphyn.vdl.classes.Derivation
* @see #loadDefinition( String, String, String, int )
* @see #deleteDefinition( String, String, String, int )
*/
public abstract boolean
saveDefinition( Definition definition,
boolean overwrite )
throws SQLException;
//
// higher level methods, allowing for wildcarding as stated.
//
/**
* Check with the backend database, if the given definition exists.
*
* @param definition is a Definition object to search for
* @return true, if the Definition exists, false if not found
*/
public abstract boolean
containsDefinition( Definition definition )
throws SQLException;
/**
* Delete a specific Definition objects from the database. No wildcard
* matching will be done. "Fake" definitions are permissable, meaning
* it just has the secondary key triple.
*
* @param definition is the definition specification to delete
* @return true is something was deleted, false if non existent.
*
* @see org.griphyn.vdl.classes.Definition#TRANSFORMATION
* @see org.griphyn.vdl.classes.Definition#DERIVATION
*/
public abstract boolean
deleteDefinition( Definition definition )
throws SQLException;
/**
* Delete one or more definitions from the backend database. The key
* triple parameters may be wildcards. Wildcards are expressed as
* <code>null</code> value.
*
* @param namespace namespace
* @param name name
* @param version version
* @param type definition type (TR or DV)
* @return a list of definitions that were deleted.
*
* @see org.griphyn.vdl.classes.Definition#TRANSFORMATION
* @see org.griphyn.vdl.classes.Definition#DERIVATION
*/
public abstract java.util.List
deleteDefinition( String namespace,
String name,
String version,
int type )
throws SQLException;
/**
* Search the database for definitions by ns::name:version triple
* and by type (either Transformation or Derivation). This version
* of the search allows for jokers expressed as null value
*
* @param namespace namespace, null to match any namespace
* @param name name, null to match any name
* @param version version, null to match any version
* @param type type of definition, see below, or -1 as wildcard
* @return a list of Definition items, which may be empty
*
* @see org.griphyn.vdl.classes.Definition#TRANSFORMATION
* @see org.griphyn.vdl.classes.Definition#DERIVATION
* @see #loadDefinition( String, String, String, int )
*/
public abstract java.util.List
searchDefinition( String namespace,
String name,
String version,
int type )
throws SQLException;
/**
* Searches the database for all derivations that contain a certain LFN.
* The linkage is an additional constraint. This method does not allow
* jokers.
*
* @param lfn the LFN name
* @param link the linkage type of the LFN
* @return a list of Definition items that match the criterion.
*
* @see org.griphyn.vdl.classes.LFN#NONE
* @see org.griphyn.vdl.classes.LFN#INPUT
* @see org.griphyn.vdl.classes.LFN#OUTPUT
* @see org.griphyn.vdl.classes.LFN#INOUT
*/
public abstract java.util.List
searchFilename( String lfn,
int link )
throws SQLException;
}