package ${package};

##
## Copyright 2001-2005 The Apache Software Foundation.
##
## Licensed 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.
##

/**
 * Generated storage mechanism for the $model.name model.
 *
 * @author Mr Modello
 */
public interface ${model.name}Store
{
#foreach ( $class in $model.allClasses )
    // ----------------------------------------------------------------------
    // $class.name storage methods
    // ----------------------------------------------------------------------

#if ( $class.getMetadata( $metadataId ).isStorable() )
    public void add${class.name}( $class.name entity )
        throws ${model.name}StoreException;

    public void delete${class.name}( String id )
        throws ${model.name}StoreException;

    public void update${class.name}( String id, $class.name entity )
        throws ${model.name}StoreException;
#end

#end
}
