@//////////////////////////////////////////////////////////////////////////////
@// su4sml --- a SML repository for managing (Secure)UML/OCL models
@//             http://projects.brucker.ch/su4sml/
@//                                                                            
@// securemova.tpl --- 
@// This file is part of su4sml.
@//
@// Copyright (c) 2005-2007, ETH Zurich, Switzerland
@//
@// All rights reserved.
@//
@// Redistribution and use in source and binary forms, with or without
@// modification, are permitted provided that the following conditions are
@// met:
@//
@//     * Redistributions of source code must retain the above copyright
@//       notice, this list of conditions and the following disclaimer.
@//
@//     * Redistributions in binary form must reproduce the above
@//       copyright notice, this list of conditions and the following
@//       disclaimer in the documentation and/or other materials provided
@//       with the distribution.
@//
@//     * Neither the name of the copyright holders nor the names of its
@//       contributors may be used to endorse or promote products derived
@//       from this software without specific prior written permission.
@//
@// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
@// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
@// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
@// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
@// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
@// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
@// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
@// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
@// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@///////////////////////////////////////////////////////////////////////////////
@// $Id$

@// base template
@// assumption: all classifiers are classes
@openfile generated/securemova/$classifier_package$.mova
@// generated by su4sml GCG - Generic Code Generator  
load /home/doserj/projects/securemova/ocl-tool-v30/ocl-tool.maude @nl
load /home/doserj/projects/securemova/ocl-tool-v30/securemova.maude @nl 

(create-security-diagram $classifier_package$ .) @nl

@foreach role_list 
(insert-role $classifier_package$ : $role_name$ .) @nl 
    @foreach superrole_list 
    (insert-role-hierarchy $classifier_package$ | $role_name$ <-> $superrole_name$ .) @nl
    @end 
@end 

@foreach subject_list
(insert-user $classifier_package$ : $subject_name$ .) @nl
    @foreach role_list 
    (insert-user-assignment $classifier_package$ | $subject_name$ <-> $role_name$ .) @nl
    @end 
@end

@foreach permission_list 
(insert-permission $classifier_package$ : $permission_name$ .) @nl
    @foreach role_list
    (insert-permission-assignment $classifier_package$ : $permission_name$ : $role_name$ .) @nl
    @end
@end



@foreach entity_list
(insert-entity $classifier_package$ : $entity_name$ .) @nl
    @foreach attribute_list
    (insert-attribute $classifier_package$ : $entity_name$ : $attribute_name$ .) @nl
    @end                  
    @foreach assocend_list
    (insert-association-end $classifier_package$ : $entity_name$ : $assocend_name$ .) @nl
    @end
    @foreach operation_list
        @if operation_isQuery 
        (insert-query-method $classifier_package$ : $entity_name$ : $operation_name$ .) @nl
        @else 
        (insert-non-query-method $classifier_package$ : $entity_name$ : $operation_name$ .)  @nl
        @end                  
    @end              
@end

@foreach constraint_list
(insert-authorization-constraint $classifier_package$ : auth$counter_next$ : $constraint_body$.) @nl
(insert-authorization-constraint-assignment $classifier_package$ : $constraint_perm$ : auth$counter$ .) @nl
@end 

@//TODO: also support composite actions (not supported in cartridge yet...)
@foreach entity_list
    @foreach createPermission_list
    (insert-atomic-create $classifier_package$ : $permission_name$ : $entity_name$ .) @nl
    @end
    @foreach deletePermission_list
    (insert-atomic-delete $classifier_package$ : $permission_name$ : $entity_name$ .) @nl
    @end
    @foreach attribute_list
        @foreach readPermission_list
        (insert-atomic-read $classifier_package$ : $permission_name$  : $entity_name$ : $attribute_name$ .) @nl
        @end
        @foreach updatePermission_list
        (insert-atomic-update $classifier_package$ : $permission_name$  : $entity_name$ : $attribute_name$ .) @nl
        @end
    @end
    @foreach operation_list
        @foreach executePermission_list
        (insert-atomic-execute $classifier_package$ : $permission_name$ : $entity_name$ : $operation_name$ .) @nl
        @end
    @end
@end

@// FIXME: insert-entity-update et al.
@// FIXME: (insert-entity-update $classifier_package$: $permission_name$ : $entity_name$ .)

