/* * 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; import org.griphyn.vdl.annotation.QueryTree; import org.griphyn.vdl.annotation.Tuple; /** * This common schema interface defines the schemas in which the * abstraction layers access the metadata associated with VDC elements. * 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 Annotation extends Catalog { /** * Annotations for transformations. */ public static final int CLASS_TRANSFORMATION = 0; /** * Annotations for derivations. */ public static final int CLASS_DERIVATION = 1; /** * Annotations for call statements. */ public static final int CLASS_CALL = 2; /** * Annotations for formal arguments. */ public static final int CLASS_DECLARE = 3; /** * Annotations for logical filenames. */ public static final int CLASS_FILENAME = 4; /** * Annotates any of the annotatable classes with the specified tuple. * This is an interface method to the various class-specific methods. * * @param primary is the primary object specifier for the class. * According to the type, this is either the FQDI, or the filename. * @param secondary is a helper argument for annotations to calls * and formal arguments, and should be null for all other classes. * For calls, the argument must be packed into {@link java.lang.Integer}. * @param kind defines the kind/class of object to annotate. * @param annotation is the value to place into the class. * @param overwrite is a predicate on replace or maintain. * @return the insertion id, or -1, if the database was untouched * @see #saveAnnotationTransformation( String, Tuple, boolean ) * @see #saveAnnotationDerivation( String, Tuple, boolean ) * @see #saveAnnotationCall( String, int, Tuple, boolean ) * @see #saveAnnotationDeclare( String, String, Tuple, boolean ) * @see #saveAnnotationFilename( String, Tuple, boolean ) */ public long saveAnnotation( String primary, Object secondary, int kind, Tuple annotation, boolean overwrite ) throws SQLException, IllegalArgumentException; /** * Annotates a transformation with a tuple. * * @param fqdi is the FQDI to annotate * @param annotation is the value to place * @param overwrite is a predicate on replace or maintain. * @return the insertion id, or -1, if the database was untouched * @see org.griphyn.vdl.classes.Transformation */ public long saveAnnotationTransformation( String fqdi, Tuple annotation, boolean overwrite ) throws SQLException, IllegalArgumentException; /** * Annotates a derivation with a tuple. * * @param fqdi is the FQDI to annotate * @param annotation is the value to place * @param overwrite is a predicate on replace or maintain. * @return the insertion id, or -1, if the database was untouched * @see org.griphyn.vdl.classes.Derivation */ public long saveAnnotationDerivation( String fqdi, Tuple annotation, boolean overwrite ) throws SQLException, IllegalArgumentException; /** * Annotates a transformation argument with a tuple. * * @param fqdi is the FQDI to annotate * @param formalname is the name of the formal argument to annotoate. * @param annotation is the value to place * @param overwrite is a predicate on replace or maintain. * @return the insertion id, or -1, if the database was untouched * @see org.griphyn.vdl.classes.Declare */ public long saveAnnotationDeclare( String fqdi, String formalname, Tuple annotation, boolean overwrite ) throws SQLException, IllegalArgumentException; /** * Annotates a transformation call with a tuple. * * @param fqdi is the FQDI to annotate * @param index is the number of the call to annotate. * @param annotation is the value to place * @param overwrite is a predicate on replace or maintain. * @return the insertion id, or -1, if the database was untouched * @see org.griphyn.vdl.classes.Call */ public long saveAnnotationCall( String fqdi, int index, Tuple annotation, boolean overwrite ) throws SQLException, IllegalArgumentException; /** * Annotates a logical filename with a tuple. * * @param filename is the FQDI to annotate * @param annotation is the value to place * @param overwrite is a predicate on replace or maintain. * @return the insertion id, or -1, if the database was untouched * @see org.griphyn.vdl.classes.LFN */ public long saveAnnotationFilename( String filename, Tuple annotation, boolean overwrite ) throws SQLException, IllegalArgumentException; /** * Retrieves a specific annotation from an annotatable classes with * the specified tuple. This is an interface method to the various * class-specific methods. * * @param primary is the primary object specifier for the class. * According to the type, this is either the FQDI, or the filename. * @param secondary is a helper argument for annotations to calls * and formal arguments, and should be null for all other classes. * For calls, the argument must be packed into {@link java.lang.Integer}. * @param kind defines the kind/class of object to annotate. * @param key is the key to look for. * @return null if not found, otherwise the annotation tuple. * @see #loadAnnotationTransformation( String, String ) * @see #loadAnnotationDerivation( String, String ) * @see #loadAnnotationCall( String, int, String ) * @see #loadAnnotationDeclare( String, String, String ) * @see #loadAnnotationFilename( String, String ) */ public Tuple loadAnnotation( String primary, Object secondary, int kind, String key ) throws SQLException, IllegalArgumentException; /** * Obtains the value to a specific key in an annotated transformation. * * @param fqdi is the FQDI of the transformation * @param key is the key to search for * @return the annotated value, or null if not found. * @see org.griphyn.vdl.classes.Transformation */ public Tuple loadAnnotationTransformation( String fqdi, String key ) throws SQLException, IllegalArgumentException; /** * Obtains the value to a specific key in an annotated derivation. * * @param fqdi is the FQDI of the derivation * @param key is the key to search for * @return the annotated value, or null if not found. * @see org.griphyn.vdl.classes.Derivation */ public Tuple loadAnnotationDerivation( String fqdi, String key ) throws SQLException, IllegalArgumentException; /** * Obtains the value to a specific key in an annotated formal argument. * * @param fqdi is the FQDI of the transformation * @param farg is the name of the formal argument * @param key is the key to search for * @return the annotated value, or null if not found * @see org.griphyn.vdl.classes.Declare */ public Tuple loadAnnotationDeclare( String fqdi, String farg, String key ) throws SQLException, IllegalArgumentException; /** * Obtains the value to a specific key for a call statement. * * @param fqdi is the FQDI of the transformation * @param index is the number of the call to annotate. * @param key is the key to search for * @return the annotated value, or null if not found * @see org.griphyn.vdl.classes.Call */ public Tuple loadAnnotationCall( String fqdi, int index, String key ) throws SQLException, IllegalArgumentException; /** * Obtains the value to a specific key in an annotated filename. * * @param filename is the name of the file that was annotated. * @param key is the key to search for * @return the annotated value, or null if not found. * @see org.griphyn.vdl.classes.LFN */ public Tuple loadAnnotationFilename( String filename, String key ) throws SQLException, IllegalArgumentException; /** * Retrieves all annotations from an annotatable classes with * the specified tuple. This is an interface method to the various * class-specific methods. * * @param primary is the primary object specifier for the class. * According to the type, this is either the FQDI, or the filename. * @param secondary is a helper argument for annotations to calls * and formal arguments, and should be null for all other classes. * For calls, the argument must be packed into {@link java.lang.Integer}. * @param kind defines the kind/class of object to annotate. * * @return null if not found, otherwise the annotation tuple. * @see #loadAnnotationTransformation( String ) * @see #loadAnnotationDerivation( String ) * @see #loadAnnotationCall( String, int ) * @see #loadAnnotationDeclare( String, String ) * @see #loadAnnotationFilename( String ) */ public java.util.List loadAnnotation( String primary, Object secondary, int kind ) throws SQLException, IllegalArgumentException; /** * Lists all annotations for a transformation. * * @param fqdi is the FQDI of the transformation * @return a list of tuples, which may be empty. * @see org.griphyn.vdl.classes.Transformation */ public java.util.List loadAnnotationTransformation( String fqdi ) throws SQLException, IllegalArgumentException; /** * Lists all annotations for a derivation. * * @param fqdi is the FQDI of the derivation * @return a list of tuples, which may be empty. * @see org.griphyn.vdl.classes.Derivation */ public java.util.List loadAnnotationDerivation( String fqdi ) throws SQLException, IllegalArgumentException; /** * Lists all annotations for a formal argument. * * @param fqdi is the FQDI of the transformation * @param farg is the name of the formal argument * @return a list of tuples, which may be empty. * @see org.griphyn.vdl.classes.Declare */ public java.util.List loadAnnotationDeclare( String fqdi, String farg ) throws SQLException, IllegalArgumentException; /** * Lists all annotations for a call statement. * * @param fqdi is the FQDI of the transformation * @param index is the number of the call to annotate. * @return a list of tuples, which may be empty. * @see org.griphyn.vdl.classes.Call */ public java.util.List loadAnnotationCall( String fqdi, int index ) throws SQLException, IllegalArgumentException; /** * Lists all annotations for a logical filename. * * @param filename is the logical filename. * @return a list of tuples, which may be empty. * @see org.griphyn.vdl.classes.LFN */ public java.util.List loadAnnotationFilename( String filename ) throws SQLException, IllegalArgumentException; /** * Search for LFNs or Definitions that has certain annotations * * @param kind defines the kind/class of object annotated. * @param arg is used only for TR ARG and TR CALL. For the former * it is the name of the argument (String), for the latter the position of * the call (Integer). * @param tree stores the query tree to query the annotation * @return a list of LFNs if search for filenames, otherwise a list of * definitions. * @exception SQLException if something goes wrong with the database. * @see org.griphyn.vdl.annotation.QueryTree */ public abstract java.util.List searchAnnotation( int kind, Object arg, QueryTree tree) throws java.sql.SQLException; /** * Deletes an annotation with the specified key. * * @param primary is the primary object specifier for the class. * According to the type, this is either the FQDI, or the filename. * @param secondary is a helper argument for annotations to calls * and formal arguments, and should be null for all other classes. * For calls, the argument must be packed into {@link java.lang.Integer}. * @param kind defines the kind/class of object to annotate. * @param key is the annotation key. * @return true, if the database was modified, false otherwise. * @exception SQLException, if something went wrong during database * access. */ public boolean deleteAnnotation( String primary, Object secondary, int kind, String key ) throws SQLException, IllegalArgumentException; /** * Deletes a specific key in an annotated transformation. * * @param fqdi is the FQDI of the transformation * @param key is the key to search for * @return true, if the database was modified, false otherwise. * @see org.griphyn.vdl.classes.Transformation */ public boolean deleteAnnotationTransformation( String fqdi, String key ) throws SQLException, IllegalArgumentException; /** * Deletes a specific key in an annotated derivation. * * @param fqdi is the FQDI of the derivation * @param key is the key to search for * @return true, if the database was modified, false otherwise. * @see org.griphyn.vdl.classes.Derivation */ public boolean deleteAnnotationDerivation( String fqdi, String key ) throws SQLException, IllegalArgumentException; /** * Deletes a specific key in an annotated formal argument. * * @param fqdi is the FQDI of the transformation * @param farg is the name of the formal argument * @param key is the key to search for * @return true, if the database was modified, false otherwise. * @see org.griphyn.vdl.classes.Declare */ public boolean deleteAnnotationDeclare( String fqdi, String farg, String key ) throws SQLException, IllegalArgumentException; /** * Deletes a specific key for a call statement. * * @param fqdi is the FQDI of the transformation * @param index is the number of the call to annotate. * @param key is the key to search for * @return true, if the database was modified, false otherwise. * @see org.griphyn.vdl.classes.Call */ public boolean deleteAnnotationCall( String fqdi, int index, String key ) throws SQLException, IllegalArgumentException; /** * Deletes a specific key in an annotated filename. * * @param filename is the name of the file that was annotated. * @param key is the key to search for * @return true, if the database was modified, false otherwise. * @see org.griphyn.vdl.classes.LFN */ public boolean deleteAnnotationFilename( String filename, String key ) throws SQLException, IllegalArgumentException; }