@//////////////////////////////////////////////////////////////////////////////
@// su4sml --- a SML repository for managing (Secure)UML/OCL models
@//             http://projects.brucker.ch/su4sml/
@//                                                                            
@// use.tpl --- Template for USE (UML Specification Environment)
@// This file is part of su4sml.
@//
@// Copyright (c) 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: use.tpl 40127 2007-07-04 06:41:30Z brucker $




@openfile $classifier_package$.use

@nl
@nl model $classifier_package$

@foreach nonprimitive_classifier_list
	@nl
	@nl
	@if isClass
		class $classifier_name$
	@end
	@if isInterface
		interface $classifier_name$
	@end
	@if isEnumeration
		enum $classifier_name$ {
	@end
	@if notInterface
		@if hasParent
			< $classifier_parent$ 
		@end
	@end
	@nl
	@if notInterface
	    @if hasAttributes	
		@spc@spc@spc@spc attributes
		@foreach attribute_list
			 @nl@tab$attribute_name$ : $attribute_type$ 
		@end
		@nl
            @end
	@end
	@nl 
	@if hasOperations
	   @spc@spc@spc@spc operations
		@foreach operation_list
	              @nl @tab@tab  $operation_name$(
                          @foreach argument_list
                                @if last_argument
                                        $argument_name$ : $argument_type$
                                @else
                                       $argument_name$ : $argument_type$,
                                @end
                      @end
                      ) : $operation_result_type$ 
	        @end
	    @end
	@nl 
	@if isClass
	    end
	@end
	@if isEnumeration
		}
	@end


@end 
@nl
@nl

constraints@nl
@foreach nonprimitive_classifier_list
  @if hasInvariants
    context $classifier_name$ @nl
	@foreach invariant_list 
          @spc@spc inv $inv_name$: $inv_cs$ @nl
        @end
  @nl
  @end

  @if hasOperations
    @foreach operation_list
      @if hasOpSpec
	 @nl context $classifier_name$::$operation_name$(
         @foreach argument_list
           @if last_argument
             $argument_name$ : $argument_type$
           @else
             $argument_name$ : $argument_type$,
           @end
         @end
         ) : $operation_result_type$ 
      	 @nl 
	 @foreach precondition_list 
           @spc@spc pre $pre_name$: $pre_cs$ @nl
         @end
      	 @foreach postcondition_list 
           @spc@spc post $post_name$: $post_cs$ @nl
         @end
      @end
      @nl
    @end
  @end
 
@end

@end

