some cleanup
git-svn-id: https://projects.brucker.ch/su4sml/svn/infsec-import/trunk/src/su4sml@4448 3260e6d1-4efc-4170-b0a7-36055960796d
This commit is contained in:
parent
76f9ee17e7
commit
e9a24cfac6
|
@ -21,6 +21,30 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
(**
|
||||||
|
* This cartridge knows about the basic elements of UML class diagrams.
|
||||||
|
* The elements are classifiers, attributes, and operations with their
|
||||||
|
* parameters in terms of the Rep interface
|
||||||
|
*)
|
||||||
|
signature BASE_CARTRIDGE =
|
||||||
|
sig
|
||||||
|
include CARTRIDGE
|
||||||
|
|
||||||
|
(** returns the current classifier. *)
|
||||||
|
val curClassifier: environment -> Rep.Classifier option
|
||||||
|
|
||||||
|
(** returns the current attribute *)
|
||||||
|
val curAttribute: environment -> Rep.attribute option
|
||||||
|
|
||||||
|
(** returns the current operation *)
|
||||||
|
val curOperation: environment -> Rep.operation option
|
||||||
|
|
||||||
|
(** returns the current operation parameter *)
|
||||||
|
val curArgument : environment -> (string * Rep_OclType.OclType) option
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
structure Base_Cartridge : BASE_CARTRIDGE =
|
structure Base_Cartridge : BASE_CARTRIDGE =
|
||||||
struct
|
struct
|
||||||
(* translation functions *)
|
(* translation functions *)
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
|
functor ComponentUML_Cartridge(SuperCart : SECUREUML_CARTRIDGE) : DESIGN_LANGUAGE_CARTRIDGE =
|
||||||
|
|
||||||
|
|
||||||
functor ComponentUML_Cartridge(SuperCart : SECURITY_LANGUAGE_CARTRIDGE) : DESIGN_LANGUAGE_CARTRIDGE =
|
|
||||||
struct
|
struct
|
||||||
|
|
||||||
structure Design = ComponentUML
|
structure Design = ComponentUML
|
||||||
|
|
||||||
|
|
||||||
(* TODO: fill out *)
|
(* TODO: fill out *)
|
||||||
type environment = { extension: SuperCart.environment}
|
type environment = { extension: SuperCart.environment}
|
||||||
type Model = SuperCart.Model
|
type Model = SuperCart.Model
|
||||||
|
|
|
@ -24,6 +24,25 @@
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
|
||||||
|
signature SECUREUML_CARTRIDGE =
|
||||||
|
sig
|
||||||
|
|
||||||
|
(** the particular secureuml dialect used *)
|
||||||
|
structure Security:SECURITY_LANGUAGE
|
||||||
|
|
||||||
|
include BASE_CARTRIDGE where
|
||||||
|
type Model = Rep.Classifier list * Security.Configuration
|
||||||
|
|
||||||
|
val curPermissionSet: environment -> Security.Permission list option
|
||||||
|
val curPermission : environment -> Security.Permission option
|
||||||
|
val curRole : environment -> string option
|
||||||
|
val curConstraint : environment -> Rep_OclTerm.OclTerm option
|
||||||
|
|
||||||
|
val isInPermission : Security.Design.Action -> Security.Permission -> bool
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
functor SecureUML_Cartridge(structure SuperCart : BASE_CARTRIDGE;
|
functor SecureUML_Cartridge(structure SuperCart : BASE_CARTRIDGE;
|
||||||
structure D: DESIGN_LANGUAGE)
|
structure D: DESIGN_LANGUAGE)
|
||||||
: SECUREUML_CARTRIDGE =
|
: SECUREUML_CARTRIDGE =
|
||||||
|
@ -40,7 +59,6 @@ type environment = { model : Model,
|
||||||
curConstraint : Rep_OclTerm.OclTerm option,
|
curConstraint : Rep_OclTerm.OclTerm option,
|
||||||
extension : SuperCart.environment }
|
extension : SuperCart.environment }
|
||||||
|
|
||||||
fun getPermissions conf = Security.getPermissions conf
|
|
||||||
|
|
||||||
(* service functions for other cartridges to have access to the current
|
(* service functions for other cartridges to have access to the current
|
||||||
* list items
|
* list items
|
||||||
|
@ -56,13 +74,16 @@ fun curPermission' (env : environment) = Option.valOf (#curPermission env)
|
||||||
fun curRole' (env : environment) = Option.valOf (#curRole env)
|
fun curRole' (env : environment) = Option.valOf (#curRole env)
|
||||||
fun curConstraint' (env : environment) = Option.valOf (#curConstraint env)
|
fun curConstraint' (env : environment) = Option.valOf (#curConstraint env)
|
||||||
|
|
||||||
fun initEnv model = { model = Security.parse model,
|
fun initEnv model = let val m = Security.parse model
|
||||||
curPermissionSet = NONE,
|
in
|
||||||
curPermission = NONE,
|
{ model = m,
|
||||||
curRole = NONE,
|
curPermissionSet = NONE,
|
||||||
curConstraint = NONE,
|
curPermission = NONE,
|
||||||
extension = SuperCart.initEnv model } : environment
|
curRole = NONE,
|
||||||
|
curConstraint = NONE,
|
||||||
|
extension = SuperCart.initEnv (#1 m) } : environment
|
||||||
|
end
|
||||||
|
|
||||||
(* unpack : environment -> SuperCart.environment *)
|
(* unpack : environment -> SuperCart.environment *)
|
||||||
fun unpack (env : environment) = #extension env
|
fun unpack (env : environment) = #extension env
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,24 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
signature TPL_PARSER =
|
||||||
|
sig
|
||||||
|
|
||||||
|
datatype TemplateTree
|
||||||
|
= ElseNode of TemplateTree list
|
||||||
|
| EvalLeaf of TemplateTree list
|
||||||
|
| ForEachNode of string * TemplateTree list
|
||||||
|
| IfNode of string * TemplateTree list
|
||||||
|
| OpenFileLeaf of string
|
||||||
|
| RootNode of TemplateTree list
|
||||||
|
| TextLeaf of string
|
||||||
|
|
||||||
|
val printTTree : TemplateTree -> unit
|
||||||
|
val parse : string -> TemplateTree
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
structure Tpl_Parser : TPL_PARSER =
|
structure Tpl_Parser : TPL_PARSER =
|
||||||
struct
|
struct
|
||||||
open Gcg_Helper
|
open Gcg_Helper
|
||||||
|
|
|
@ -24,8 +24,30 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
signature COMPONENTUML =
|
||||||
|
sig
|
||||||
|
|
||||||
|
datatype Resource = Entity of Rep.Classifier
|
||||||
|
| EntityMethod of Rep.operation
|
||||||
|
| EntityAttribute of Rep.attribute
|
||||||
|
|
||||||
|
val contained_resources : Resource -> Resource list
|
||||||
|
|
||||||
|
|
||||||
|
datatype Action = SimpleAction of string * Resource
|
||||||
|
| CompositeAction of string * Resource
|
||||||
|
|
||||||
|
(* val action_names: string list *)
|
||||||
|
|
||||||
|
val subordinated_actions: Action -> Action list
|
||||||
|
|
||||||
|
val actions_of : Resource -> Action list
|
||||||
|
val resource_of: Action -> Resource
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
(** ComponentUML is a simple language for component-based modeling. *)
|
(** ComponentUML is a simple language for component-based modeling. *)
|
||||||
structure ComponentUML (* : DESIGN_LANGUAGE*) =
|
structure ComponentUML : COMPONENTUML =
|
||||||
struct
|
struct
|
||||||
|
|
||||||
(** The type of resource, plus a path name specifiying the resource.
|
(** The type of resource, plus a path name specifiying the resource.
|
||||||
|
|
27
src/mds.sig
27
src/mds.sig
|
@ -24,8 +24,10 @@
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
|
||||||
(* a design language specifies what the protected resources and the *)
|
(**
|
||||||
(* possible actions on these resources are *)
|
* a design language specifies what the protected resources and the
|
||||||
|
* possible actions on these resources are.
|
||||||
|
*)
|
||||||
signature DESIGN_LANGUAGE =
|
signature DESIGN_LANGUAGE =
|
||||||
sig
|
sig
|
||||||
|
|
||||||
|
@ -48,9 +50,11 @@ sig
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
(* A security language speaks about users, and their permissions: *)
|
(**
|
||||||
(* at this level, this is completeley independent of the access *)
|
* A security language speaks about users, and their permissions.
|
||||||
(* control model used in the application *)
|
* at this level, this is completeley independent of the access
|
||||||
|
* control model used in the application
|
||||||
|
*)
|
||||||
signature SECURITY_LANGUAGE =
|
signature SECURITY_LANGUAGE =
|
||||||
sig
|
sig
|
||||||
structure Design : DESIGN_LANGUAGE
|
structure Design : DESIGN_LANGUAGE
|
||||||
|
@ -58,15 +62,15 @@ sig
|
||||||
|
|
||||||
type Configuration
|
type Configuration
|
||||||
type Config_Type = string
|
type Config_Type = string
|
||||||
val type_of : Configuration -> Config_Type
|
eqtype Permission
|
||||||
val is_empty: Configuration -> bool
|
|
||||||
|
val getPermissions : Configuration -> Permission list
|
||||||
|
val type_of : Configuration -> Config_Type
|
||||||
|
val is_empty : Configuration -> bool
|
||||||
|
|
||||||
type User
|
type User
|
||||||
val name_of : User -> string
|
val name_of : User -> string
|
||||||
|
|
||||||
eqtype Permission
|
|
||||||
|
|
||||||
val getPermissions : Configuration -> Permission list
|
|
||||||
(* a bit unclear, which of the following we really need *)
|
(* a bit unclear, which of the following we really need *)
|
||||||
val users_of : Permission -> User list
|
val users_of : Permission -> User list
|
||||||
(* val permissions_of : User -> Permission list *)
|
(* val permissions_of : User -> Permission list *)
|
||||||
|
@ -75,7 +79,8 @@ sig
|
||||||
val actions_of : Permission -> Design.Action list
|
val actions_of : Permission -> Design.Action list
|
||||||
val permissions_of : Design.Action -> Permission list
|
val permissions_of : Design.Action -> Permission list
|
||||||
|
|
||||||
val parse: Rep_Core.Classifier list -> (Rep_Core.Classifier list * Configuration)
|
val parse: Rep_Core.Classifier list ->
|
||||||
|
(Rep_Core.Classifier list * Configuration)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
(*****************************************************************************
|
|
||||||
* su4sml - a SecureUML repository for SML
|
|
||||||
*
|
|
||||||
* mds_parser.sig - signature for mds-parser for the import interface
|
|
||||||
* Copyright (C) 2005 Achim D. Brucker <brucker@inf.ethz.ch>
|
|
||||||
* Jürgen Doser <doserj@inf.ethz.ch>
|
|
||||||
*
|
|
||||||
* This file is part of su4sml.
|
|
||||||
*
|
|
||||||
* su4sml is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License as published by the Free
|
|
||||||
* Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* su4sml is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
******************************************************************************)
|
|
||||||
|
|
||||||
|
|
||||||
signature MDS_PARSER =
|
|
||||||
sig
|
|
||||||
val list_classes : string -> mdr_encoder.Classifier list
|
|
||||||
end
|
|
32
src/rep.sig
32
src/rep.sig
|
@ -1,32 +0,0 @@
|
||||||
(*****************************************************************************
|
|
||||||
* su4sml - a SecureUML repository for SML
|
|
||||||
*
|
|
||||||
* sc_import.sig - generic state diagram import signature for su4sml
|
|
||||||
* Copyright (C) 2005 Achim D. Brucker <brucker@inf.ethz.ch>
|
|
||||||
* Jürgen Doser <doserj@inf.ethz.ch>
|
|
||||||
*
|
|
||||||
* This file is part of su4sml.
|
|
||||||
*
|
|
||||||
* su4sml is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License as published by the Free
|
|
||||||
* Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* su4sml is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
******************************************************************************)
|
|
||||||
|
|
||||||
signature REP =
|
|
||||||
sig
|
|
||||||
|
|
||||||
include REP_CORE
|
|
||||||
include REP_ACTIVITY_GRAPH
|
|
||||||
|
|
||||||
type Model = Rep_Core.Classifier list
|
|
||||||
end
|
|
|
@ -22,6 +22,15 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
signature REP =
|
||||||
|
sig
|
||||||
|
|
||||||
|
include REP_CORE
|
||||||
|
include REP_ACTIVITY_GRAPH
|
||||||
|
|
||||||
|
type Model = Classifier list
|
||||||
|
end
|
||||||
|
|
||||||
structure Rep : REP =
|
structure Rep : REP =
|
||||||
struct
|
struct
|
||||||
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
(*****************************************************************************
|
|
||||||
* su4sml - a SecureUML repository for SML
|
|
||||||
*
|
|
||||||
* state_machine.sig - generic state machines
|
|
||||||
* Copyright (C) 2005 Achim D. Brucker <brucker@inf.ethz.ch>
|
|
||||||
* Jürgen Doser <doserj@inf.ethz.ch>
|
|
||||||
* Burkhart Wolff <bwolff@inf.ethz.ch>
|
|
||||||
*
|
|
||||||
* This file is part of su4sml.
|
|
||||||
*
|
|
||||||
* su4sml is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License as published by the Free
|
|
||||||
* Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* su4sml is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
******************************************************************************)
|
|
||||||
|
|
||||||
signature REP_ACTIVITY_GRAPH =
|
|
||||||
sig
|
|
||||||
include REP_STATE_MACHINE
|
|
||||||
|
|
||||||
type ActivityGraph = StateMachine
|
|
||||||
|
|
||||||
end
|
|
|
@ -23,6 +23,14 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
signature REP_ACTIVITY_GRAPH =
|
||||||
|
sig
|
||||||
|
include REP_STATE_MACHINE
|
||||||
|
|
||||||
|
type ActivityGraph = StateMachine
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
structure Rep_ActivityGraph : REP_ACTIVITY_GRAPH =
|
structure Rep_ActivityGraph : REP_ACTIVITY_GRAPH =
|
||||||
struct
|
struct
|
||||||
open Rep_StateMachine
|
open Rep_StateMachine
|
||||||
|
|
124
src/rep_core.sig
124
src/rep_core.sig
|
@ -1,124 +0,0 @@
|
||||||
(*****************************************************************************
|
|
||||||
* su4sml - a SecureUML repository for SML
|
|
||||||
*
|
|
||||||
* mdr_core.sig - generic meta data repository import signature for su4sml
|
|
||||||
* Copyright (C) 2001-2005 Achim D. Brucker <brucker@inf.ethz.ch>
|
|
||||||
* Burkhart Wolff <bwolff@inf.ethz.ch>
|
|
||||||
*
|
|
||||||
* This file is part of su4sml.
|
|
||||||
*
|
|
||||||
* su4sml is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License as published by the Free
|
|
||||||
* Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* su4sml is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
******************************************************************************)
|
|
||||||
|
|
||||||
signature REP_CORE =
|
|
||||||
sig
|
|
||||||
type Scope
|
|
||||||
type Visibility
|
|
||||||
type operation = { name : string,
|
|
||||||
precondition : (string option * Rep_OclTerm.OclTerm) list,
|
|
||||||
postcondition : (string option * Rep_OclTerm.OclTerm) list,
|
|
||||||
arguments : (string * Rep_OclType.OclType) list,
|
|
||||||
result : Rep_OclType.OclType,
|
|
||||||
isQuery : bool,
|
|
||||||
scope : Scope,
|
|
||||||
visibility : Visibility
|
|
||||||
}
|
|
||||||
|
|
||||||
type associationend = {name : string,
|
|
||||||
aend_type : Rep_OclType.OclType,
|
|
||||||
multiplicity: (int * int) list,
|
|
||||||
ordered: bool,
|
|
||||||
visibility: Visibility,
|
|
||||||
init: Rep_OclTerm.OclTerm option
|
|
||||||
}
|
|
||||||
|
|
||||||
type attribute = {
|
|
||||||
name : string,
|
|
||||||
attr_type : Rep_OclType.OclType,
|
|
||||||
visibility : Visibility,
|
|
||||||
scope: Scope,
|
|
||||||
init : Rep_OclTerm.OclTerm option
|
|
||||||
}
|
|
||||||
|
|
||||||
datatype Classifier =
|
|
||||||
Class of
|
|
||||||
{ name : Rep_OclType.Path,
|
|
||||||
parent : Rep_OclType.Path option,
|
|
||||||
attributes : attribute list,
|
|
||||||
operations : operation list,
|
|
||||||
associationends : associationend list,
|
|
||||||
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
|
||||||
stereotypes : string list,
|
|
||||||
interfaces : Rep_OclType.Path list,
|
|
||||||
thyname : string option,
|
|
||||||
activity_graphs : Rep_ActivityGraph.ActivityGraph list
|
|
||||||
}
|
|
||||||
| Interface of (* not supported yet *)
|
|
||||||
{ name : Rep_OclType.Path,
|
|
||||||
parents : Rep_OclType.Path list,
|
|
||||||
operations : operation list,
|
|
||||||
stereotypes : string list,
|
|
||||||
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
|
||||||
thyname : string option
|
|
||||||
}
|
|
||||||
| Enumeration of (* not really supported yet? *)
|
|
||||||
{ name : Rep_OclType.Path,
|
|
||||||
parent : Rep_OclType.Path option,
|
|
||||||
operations : operation list,
|
|
||||||
literals : string list,
|
|
||||||
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
|
||||||
stereotypes : string list,
|
|
||||||
interfaces : Rep_OclType.Path list,
|
|
||||||
thyname : string option
|
|
||||||
}
|
|
||||||
| Primitive of (* not really supported yet *)
|
|
||||||
{ name : Rep_OclType.Path,
|
|
||||||
parent : Rep_OclType.Path option,
|
|
||||||
operations : operation list,
|
|
||||||
associationends : associationend list,
|
|
||||||
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
|
||||||
stereotypes : string list,
|
|
||||||
interfaces : Rep_OclType.Path list,
|
|
||||||
thyname : string option
|
|
||||||
}
|
|
||||||
|
|
||||||
val OclAnyC : Classifier
|
|
||||||
|
|
||||||
val normalize : Classifier -> Classifier
|
|
||||||
val normalize_init : Classifier -> Classifier
|
|
||||||
|
|
||||||
val name_of : Classifier -> Rep_OclType.Path
|
|
||||||
val package_of : Classifier -> Rep_OclType.Path
|
|
||||||
val short_name_of : Classifier -> string
|
|
||||||
|
|
||||||
val parent_name_of : Classifier -> Rep_OclType.Path
|
|
||||||
val parent_package_of : Classifier -> Rep_OclType.Path
|
|
||||||
val short_parent_name_of : Classifier -> string
|
|
||||||
|
|
||||||
val thy_name_of : Classifier -> string
|
|
||||||
val update_thyname : string -> Classifier -> Classifier
|
|
||||||
val attributes_of : Classifier -> attribute list
|
|
||||||
val operations_of : Classifier -> operation list
|
|
||||||
val invariant_of : Classifier -> (string option * Rep_OclTerm.OclTerm) list
|
|
||||||
val string_of_path : string list -> string
|
|
||||||
|
|
||||||
val arguments_of_op : operation -> (string * Rep_OclType.OclType) list
|
|
||||||
val precondition_of_op : operation -> (string option * Rep_OclTerm.OclTerm) list
|
|
||||||
val result_of_op : operation -> Rep_OclType.OclType
|
|
||||||
val postcondition_of_op : operation -> (string option * Rep_OclTerm.OclTerm) list
|
|
||||||
val name_of_op : operation -> string
|
|
||||||
val mangled_name_of_op : operation -> string
|
|
||||||
|
|
||||||
end
|
|
101
src/rep_core.sml
101
src/rep_core.sml
|
@ -22,6 +22,107 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
signature REP_CORE =
|
||||||
|
sig
|
||||||
|
type Scope
|
||||||
|
type Visibility
|
||||||
|
type operation = { name : string,
|
||||||
|
precondition : (string option * Rep_OclTerm.OclTerm) list,
|
||||||
|
postcondition : (string option * Rep_OclTerm.OclTerm) list,
|
||||||
|
arguments : (string * Rep_OclType.OclType) list,
|
||||||
|
result : Rep_OclType.OclType,
|
||||||
|
isQuery : bool,
|
||||||
|
scope : Scope,
|
||||||
|
visibility : Visibility
|
||||||
|
}
|
||||||
|
|
||||||
|
type associationend = {name : string,
|
||||||
|
aend_type : Rep_OclType.OclType,
|
||||||
|
multiplicity: (int * int) list,
|
||||||
|
ordered: bool,
|
||||||
|
visibility: Visibility,
|
||||||
|
init: Rep_OclTerm.OclTerm option
|
||||||
|
}
|
||||||
|
|
||||||
|
type attribute = {
|
||||||
|
name : string,
|
||||||
|
attr_type : Rep_OclType.OclType,
|
||||||
|
visibility : Visibility,
|
||||||
|
scope: Scope,
|
||||||
|
init : Rep_OclTerm.OclTerm option
|
||||||
|
}
|
||||||
|
|
||||||
|
datatype Classifier =
|
||||||
|
Class of
|
||||||
|
{ name : Rep_OclType.Path,
|
||||||
|
parent : Rep_OclType.Path option,
|
||||||
|
attributes : attribute list,
|
||||||
|
operations : operation list,
|
||||||
|
associationends : associationend list,
|
||||||
|
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
||||||
|
stereotypes : string list,
|
||||||
|
interfaces : Rep_OclType.Path list,
|
||||||
|
thyname : string option,
|
||||||
|
activity_graphs : Rep_ActivityGraph.ActivityGraph list
|
||||||
|
}
|
||||||
|
| Interface of (* not supported yet *)
|
||||||
|
{ name : Rep_OclType.Path,
|
||||||
|
parents : Rep_OclType.Path list,
|
||||||
|
operations : operation list,
|
||||||
|
stereotypes : string list,
|
||||||
|
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
||||||
|
thyname : string option
|
||||||
|
}
|
||||||
|
| Enumeration of (* not really supported yet? *)
|
||||||
|
{ name : Rep_OclType.Path,
|
||||||
|
parent : Rep_OclType.Path option,
|
||||||
|
operations : operation list,
|
||||||
|
literals : string list,
|
||||||
|
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
||||||
|
stereotypes : string list,
|
||||||
|
interfaces : Rep_OclType.Path list,
|
||||||
|
thyname : string option
|
||||||
|
}
|
||||||
|
| Primitive of (* not really supported yet *)
|
||||||
|
{ name : Rep_OclType.Path,
|
||||||
|
parent : Rep_OclType.Path option,
|
||||||
|
operations : operation list,
|
||||||
|
associationends : associationend list,
|
||||||
|
invariant : (string option * Rep_OclTerm.OclTerm) list,
|
||||||
|
stereotypes : string list,
|
||||||
|
interfaces : Rep_OclType.Path list,
|
||||||
|
thyname : string option
|
||||||
|
}
|
||||||
|
|
||||||
|
val OclAnyC : Classifier
|
||||||
|
|
||||||
|
val normalize : Classifier -> Classifier
|
||||||
|
val normalize_init : Classifier -> Classifier
|
||||||
|
|
||||||
|
val name_of : Classifier -> Rep_OclType.Path
|
||||||
|
val package_of : Classifier -> Rep_OclType.Path
|
||||||
|
val short_name_of : Classifier -> string
|
||||||
|
|
||||||
|
val parent_name_of : Classifier -> Rep_OclType.Path
|
||||||
|
val parent_package_of : Classifier -> Rep_OclType.Path
|
||||||
|
val short_parent_name_of : Classifier -> string
|
||||||
|
|
||||||
|
val thy_name_of : Classifier -> string
|
||||||
|
val update_thyname : string -> Classifier -> Classifier
|
||||||
|
val attributes_of : Classifier -> attribute list
|
||||||
|
val operations_of : Classifier -> operation list
|
||||||
|
val invariant_of : Classifier -> (string option * Rep_OclTerm.OclTerm) list
|
||||||
|
val string_of_path : string list -> string
|
||||||
|
|
||||||
|
val arguments_of_op : operation -> (string * Rep_OclType.OclType) list
|
||||||
|
val precondition_of_op : operation -> (string option * Rep_OclTerm.OclTerm) list
|
||||||
|
val result_of_op : operation -> Rep_OclType.OclType
|
||||||
|
val postcondition_of_op : operation -> (string option * Rep_OclTerm.OclTerm) list
|
||||||
|
val name_of_op : operation -> string
|
||||||
|
val mangled_name_of_op : operation -> string
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
structure Rep_Core : REP_CORE =
|
structure Rep_Core : REP_CORE =
|
||||||
struct
|
struct
|
||||||
open library
|
open library
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
(*****************************************************************************
|
|
||||||
* su4sml - a SecureUML repository for SML
|
|
||||||
*
|
|
||||||
* ocl.sig -
|
|
||||||
* Copyright (C) 2001-2005 Achim D. Brucker <brucker@inf.ethz.ch>
|
|
||||||
* Burkhart Wolff <bwolff@inf.ethz.ch>
|
|
||||||
*
|
|
||||||
* This file is part of su4sml.
|
|
||||||
*
|
|
||||||
* su4sml is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License as published by the Free
|
|
||||||
* Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* su4sml is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
******************************************************************************)
|
|
||||||
|
|
||||||
signature REP_OCL_TYPE =
|
|
||||||
sig
|
|
||||||
|
|
||||||
type Path = string list
|
|
||||||
|
|
||||||
datatype OclType = Integer | Real | String | Boolean | OclAny
|
|
||||||
| Set of OclType | Sequence of OclType
|
|
||||||
| OrderedSet of OclType | Bag of OclType
|
|
||||||
| Collection of OclType
|
|
||||||
| Classifier of Path | OclVoid | DummyT
|
|
||||||
val string_of_OclType : OclType -> string
|
|
||||||
val string_of_path : Path -> string
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
signature REP_OCL_TERM =
|
|
||||||
sig
|
|
||||||
include REP_OCL_TYPE
|
|
||||||
|
|
||||||
datatype OclTerm =
|
|
||||||
Literal of string * OclType (* Literal with type *)
|
|
||||||
| CollectionLiteral of CollectionPart list * OclType (* content with type *)
|
|
||||||
| If of OclTerm * OclType (* condition *)
|
|
||||||
* OclTerm * OclType (* then *)
|
|
||||||
* OclTerm * OclType (* else *)
|
|
||||||
* OclType (* result type *)
|
|
||||||
| AssociationEndCall of OclTerm * OclType (* source *)
|
|
||||||
* Path (* assoc.-enc *)
|
|
||||||
* OclType (* result type *)
|
|
||||||
| AttributeCall of OclTerm * OclType (* source *)
|
|
||||||
* Path (* attribute *)
|
|
||||||
* OclType (* result type *)
|
|
||||||
| OperationCall of OclTerm * OclType (* source *)
|
|
||||||
* Path (* operation *)
|
|
||||||
* (OclTerm * OclType) list (* parameters *)
|
|
||||||
* OclType (* result tupe *)
|
|
||||||
| OperationWithType of OclTerm * OclType (* source *)
|
|
||||||
* string * OclType (* type parameter *)
|
|
||||||
* OclType (* result type *)
|
|
||||||
| Variable of string * OclType (* name with type *)
|
|
||||||
| Let of string * OclType (* variable *)
|
|
||||||
* OclTerm * OclType (* rhs *)
|
|
||||||
* OclTerm * OclType (* in *)
|
|
||||||
| Iterate of (string * OclType) list (* iterator variables *)
|
|
||||||
* string * OclType * OclTerm (* result variable *)
|
|
||||||
* OclTerm * OclType (* source *)
|
|
||||||
* OclTerm * OclType (* iterator body *)
|
|
||||||
* OclType (* result type *)
|
|
||||||
| Iterator of string (* name of iterator *)
|
|
||||||
* (string * OclType) list (* iterator variables *)
|
|
||||||
* OclTerm * OclType (* source *)
|
|
||||||
* OclTerm * OclType (* iterator-body *)
|
|
||||||
* OclType (* result type *)
|
|
||||||
and CollectionPart = CollectionItem of OclTerm * OclType
|
|
||||||
| CollectionRange of OclTerm (* first *)
|
|
||||||
* OclTerm (* last *)
|
|
||||||
* OclType
|
|
||||||
end
|
|
|
@ -22,6 +22,67 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
signature REP_OCL_TYPE =
|
||||||
|
sig
|
||||||
|
|
||||||
|
type Path = string list
|
||||||
|
|
||||||
|
datatype OclType = Integer | Real | String | Boolean | OclAny
|
||||||
|
| Set of OclType | Sequence of OclType
|
||||||
|
| OrderedSet of OclType | Bag of OclType
|
||||||
|
| Collection of OclType
|
||||||
|
| Classifier of Path | OclVoid | DummyT
|
||||||
|
val string_of_OclType : OclType -> string
|
||||||
|
val string_of_path : Path -> string
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
signature REP_OCL_TERM =
|
||||||
|
sig
|
||||||
|
include REP_OCL_TYPE
|
||||||
|
|
||||||
|
datatype OclTerm =
|
||||||
|
Literal of string * OclType (* Literal with type *)
|
||||||
|
| CollectionLiteral of CollectionPart list * OclType (* content with type *)
|
||||||
|
| If of OclTerm * OclType (* condition *)
|
||||||
|
* OclTerm * OclType (* then *)
|
||||||
|
* OclTerm * OclType (* else *)
|
||||||
|
* OclType (* result type *)
|
||||||
|
| AssociationEndCall of OclTerm * OclType (* source *)
|
||||||
|
* Path (* assoc.-enc *)
|
||||||
|
* OclType (* result type *)
|
||||||
|
| AttributeCall of OclTerm * OclType (* source *)
|
||||||
|
* Path (* attribute *)
|
||||||
|
* OclType (* result type *)
|
||||||
|
| OperationCall of OclTerm * OclType (* source *)
|
||||||
|
* Path (* operation *)
|
||||||
|
* (OclTerm * OclType) list (* parameters *)
|
||||||
|
* OclType (* result tupe *)
|
||||||
|
| OperationWithType of OclTerm * OclType (* source *)
|
||||||
|
* string * OclType (* type parameter *)
|
||||||
|
* OclType (* result type *)
|
||||||
|
| Variable of string * OclType (* name with type *)
|
||||||
|
| Let of string * OclType (* variable *)
|
||||||
|
* OclTerm * OclType (* rhs *)
|
||||||
|
* OclTerm * OclType (* in *)
|
||||||
|
| Iterate of (string * OclType) list (* iterator variables *)
|
||||||
|
* string * OclType * OclTerm (* result variable *)
|
||||||
|
* OclTerm * OclType (* source *)
|
||||||
|
* OclTerm * OclType (* iterator body *)
|
||||||
|
* OclType (* result type *)
|
||||||
|
| Iterator of string (* name of iterator *)
|
||||||
|
* (string * OclType) list (* iterator variables *)
|
||||||
|
* OclTerm * OclType (* source *)
|
||||||
|
* OclTerm * OclType (* iterator-body *)
|
||||||
|
* OclType (* result type *)
|
||||||
|
and CollectionPart = CollectionItem of OclTerm * OclType
|
||||||
|
| CollectionRange of OclTerm (* first *)
|
||||||
|
* OclTerm (* last *)
|
||||||
|
* OclType
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
structure Rep_OclType : REP_OCL_TYPE =
|
structure Rep_OclType : REP_OCL_TYPE =
|
||||||
struct
|
struct
|
||||||
open library
|
open library
|
||||||
|
|
|
@ -24,12 +24,20 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
(** a repository for uml models equipped with a security language *)
|
||||||
signature REP_SECURE =
|
signature REP_SECURE =
|
||||||
sig
|
sig
|
||||||
|
|
||||||
|
(** the security language used. *)
|
||||||
structure Security : SECURITY_LANGUAGE
|
structure Security : SECURITY_LANGUAGE
|
||||||
|
|
||||||
|
(**
|
||||||
|
* a "secure repository" model consist of a repository model
|
||||||
|
* plus a security configuration.
|
||||||
|
*)
|
||||||
type Model = Rep_Core.Classifier list * Security.Configuration
|
type Model = Rep_Core.Classifier list * Security.Configuration
|
||||||
|
|
||||||
|
(** *)
|
||||||
val readXMI: string -> Model
|
val readXMI: string -> Model
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,6 +25,25 @@
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
|
||||||
|
(** a repository for uml models equipped with a security language *)
|
||||||
|
signature REP_SECURE =
|
||||||
|
sig
|
||||||
|
|
||||||
|
(** the security language used. *)
|
||||||
|
structure Security : SECURITY_LANGUAGE
|
||||||
|
|
||||||
|
(**
|
||||||
|
* a "secure repository" model consist of a repository model
|
||||||
|
* plus a security configuration.
|
||||||
|
*)
|
||||||
|
type Model = Rep_Core.Classifier list * Security.Configuration
|
||||||
|
|
||||||
|
(** *)
|
||||||
|
val readXMI: string -> Model
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
functor Rep_Secure(structure Security : SECURITY_LANGUAGE) : REP_SECURE =
|
functor Rep_Secure(structure Security : SECURITY_LANGUAGE) : REP_SECURE =
|
||||||
struct
|
struct
|
||||||
structure Security = Security
|
structure Security = Security
|
||||||
|
|
|
@ -1,112 +0,0 @@
|
||||||
(*****************************************************************************
|
|
||||||
* su4sml - a SecureUML repository for SML
|
|
||||||
*
|
|
||||||
* state_machine.sig - generic state machines
|
|
||||||
* Copyright (C) 2005 Achim D. Brucker <brucker@inf.ethz.ch>
|
|
||||||
* Jürgen Doser <doserj@inf.ethz.ch>
|
|
||||||
* Burkhart Wolff <bwolff@inf.ethz.ch>
|
|
||||||
*
|
|
||||||
* This file is part of su4sml.
|
|
||||||
*
|
|
||||||
* su4sml is free software; you can redistribute it and/or modify it under
|
|
||||||
* the terms of the GNU General Public License as published by the Free
|
|
||||||
* Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* su4sml is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
******************************************************************************)
|
|
||||||
|
|
||||||
signature REP_STATE_MACHINE =
|
|
||||||
sig
|
|
||||||
|
|
||||||
type StateVertex_Id
|
|
||||||
type Transition_Id
|
|
||||||
|
|
||||||
datatype Procedure = Proc_mk of {proc_id : string,
|
|
||||||
language : string,
|
|
||||||
body : string,
|
|
||||||
expression : string }
|
|
||||||
|
|
||||||
(* perhaps this type has to be changes according to what we can expect *)
|
|
||||||
(* from CASE tools *)
|
|
||||||
type Guard = Rep_OclTerm.OclTerm
|
|
||||||
|
|
||||||
type Parameter = string * Rep_OclType.OclType
|
|
||||||
|
|
||||||
datatype Event = SignalEvent of Parameter list
|
|
||||||
| CallEvent of Rep_OclType.Path * Parameter list
|
|
||||||
(* | TimeEvent of Parameter list *)
|
|
||||||
(* | ChangeEvent of Parameter list *)
|
|
||||||
|
|
||||||
|
|
||||||
datatype Transition = T_mk of {trans_id: Transition_Id,
|
|
||||||
source : StateVertex_Id,
|
|
||||||
target : StateVertex_Id,
|
|
||||||
guard : Guard option,
|
|
||||||
trigger : Event option,
|
|
||||||
effect : Procedure option
|
|
||||||
(* mmm : StateVertexId option *)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
type PseudoStateVars = XMI_StateMachines.PseudoStateVars
|
|
||||||
|
|
||||||
datatype StateVertex =
|
|
||||||
State_CompositeState
|
|
||||||
of {name : string,
|
|
||||||
state_id : StateVertex_Id,
|
|
||||||
outgoing : Transition_Id list,
|
|
||||||
incoming : Transition_Id list,
|
|
||||||
subvertex : StateVertex list,
|
|
||||||
isConcurrent : bool
|
|
||||||
(* submachine : StateMachine *
|
|
||||||
{isDynamic : bool
|
|
||||||
(* + dynamicArguments
|
|
||||||
+ dynamicMultiplicity *)} option *)}
|
|
||||||
(* variant for Subactivity State *)
|
|
||||||
| State_SimpleState
|
|
||||||
of {name : string,
|
|
||||||
state_id : StateVertex_Id,
|
|
||||||
outgoing : Transition_Id list,
|
|
||||||
incoming : Transition_Id list}
|
|
||||||
| SimpleState_ActionState (* from ActivityGraphs *)
|
|
||||||
of {name : string,
|
|
||||||
state_id : StateVertex_Id,
|
|
||||||
outgoing : Transition_Id list,
|
|
||||||
incoming : Transition_Id list,
|
|
||||||
isDynamic : bool
|
|
||||||
(* + dynamicArguments + dynamicMultiplicity *)}
|
|
||||||
| SimpleState_ObjectflowState (* from ActivityGraphs *)
|
|
||||||
of {state_id : StateVertex_Id,
|
|
||||||
outgoing : Transition_Id list,
|
|
||||||
incoming : Transition_Id list,
|
|
||||||
isSynch : bool,
|
|
||||||
parameter : Parameter list,
|
|
||||||
types : Rep_OclType.Path list (* Classifier_Id *)}
|
|
||||||
| State_FinalState
|
|
||||||
of {state_id : StateVertex_Id,
|
|
||||||
incoming : Transition_Id list}
|
|
||||||
| PseudoState
|
|
||||||
of {state_id : StateVertex_Id,
|
|
||||||
kind : PseudoStateVars,
|
|
||||||
outgoing : Transition_Id list,
|
|
||||||
incoming : Transition_Id list}
|
|
||||||
| SyncState
|
|
||||||
of {state_id : StateVertex_Id,
|
|
||||||
outgoing : Transition_Id list,
|
|
||||||
incoming : Transition_Id list}
|
|
||||||
(* | StubState *)
|
|
||||||
and StateMachine = SM_mk of {top : StateVertex,
|
|
||||||
transition : Transition list}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
|
@ -23,6 +23,94 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
|
signature REP_STATE_MACHINE =
|
||||||
|
sig
|
||||||
|
|
||||||
|
type StateVertex_Id
|
||||||
|
type Transition_Id
|
||||||
|
|
||||||
|
datatype Procedure = Proc_mk of {proc_id : string,
|
||||||
|
language : string,
|
||||||
|
body : string,
|
||||||
|
expression : string }
|
||||||
|
|
||||||
|
(* perhaps this type has to be changes according to what we can expect *)
|
||||||
|
(* from CASE tools *)
|
||||||
|
type Guard = Rep_OclTerm.OclTerm
|
||||||
|
|
||||||
|
type Parameter = string * Rep_OclType.OclType
|
||||||
|
|
||||||
|
datatype Event = SignalEvent of Parameter list
|
||||||
|
| CallEvent of Rep_OclType.Path * Parameter list
|
||||||
|
(* | TimeEvent of Parameter list *)
|
||||||
|
(* | ChangeEvent of Parameter list *)
|
||||||
|
|
||||||
|
|
||||||
|
datatype Transition = T_mk of {trans_id: Transition_Id,
|
||||||
|
source : StateVertex_Id,
|
||||||
|
target : StateVertex_Id,
|
||||||
|
guard : Guard option,
|
||||||
|
trigger : Event option,
|
||||||
|
effect : Procedure option
|
||||||
|
(* mmm : StateVertexId option *)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type PseudoStateVars = XMI_StateMachines.PseudoStateVars
|
||||||
|
|
||||||
|
datatype StateVertex =
|
||||||
|
State_CompositeState
|
||||||
|
of {name : string,
|
||||||
|
state_id : StateVertex_Id,
|
||||||
|
outgoing : Transition_Id list,
|
||||||
|
incoming : Transition_Id list,
|
||||||
|
subvertex : StateVertex list,
|
||||||
|
isConcurrent : bool
|
||||||
|
(* submachine : StateMachine *
|
||||||
|
{isDynamic : bool
|
||||||
|
(* + dynamicArguments
|
||||||
|
+ dynamicMultiplicity *)} option *)}
|
||||||
|
(* variant for Subactivity State *)
|
||||||
|
| State_SimpleState
|
||||||
|
of {name : string,
|
||||||
|
state_id : StateVertex_Id,
|
||||||
|
outgoing : Transition_Id list,
|
||||||
|
incoming : Transition_Id list}
|
||||||
|
| SimpleState_ActionState (* from ActivityGraphs *)
|
||||||
|
of {name : string,
|
||||||
|
state_id : StateVertex_Id,
|
||||||
|
outgoing : Transition_Id list,
|
||||||
|
incoming : Transition_Id list,
|
||||||
|
isDynamic : bool
|
||||||
|
(* + dynamicArguments + dynamicMultiplicity *)}
|
||||||
|
| SimpleState_ObjectflowState (* from ActivityGraphs *)
|
||||||
|
of {state_id : StateVertex_Id,
|
||||||
|
outgoing : Transition_Id list,
|
||||||
|
incoming : Transition_Id list,
|
||||||
|
isSynch : bool,
|
||||||
|
parameter : Parameter list,
|
||||||
|
types : Rep_OclType.Path list (* Classifier_Id *)}
|
||||||
|
| State_FinalState
|
||||||
|
of {state_id : StateVertex_Id,
|
||||||
|
incoming : Transition_Id list}
|
||||||
|
| PseudoState
|
||||||
|
of {state_id : StateVertex_Id,
|
||||||
|
kind : PseudoStateVars,
|
||||||
|
outgoing : Transition_Id list,
|
||||||
|
incoming : Transition_Id list}
|
||||||
|
| SyncState
|
||||||
|
of {state_id : StateVertex_Id,
|
||||||
|
outgoing : Transition_Id list,
|
||||||
|
incoming : Transition_Id list}
|
||||||
|
(* | StubState *)
|
||||||
|
and StateMachine = SM_mk of {top : StateVertex,
|
||||||
|
transition : Transition list}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
structure Rep_StateMachine : REP_STATE_MACHINE =
|
structure Rep_StateMachine : REP_STATE_MACHINE =
|
||||||
struct
|
struct
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,11 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
******************************************************************************)
|
******************************************************************************)
|
||||||
|
|
||||||
(** SecureUML is a simple security language, based on RBAC, where permissions *)
|
(**
|
||||||
(* can be further constrained using OCL: *)
|
* SecureUML is a simple security language based on RBAC.
|
||||||
|
* Permissions relate roles with actions and can be further constrained
|
||||||
|
* using OCL:
|
||||||
|
*)
|
||||||
functor SecureUML(structure Design: DESIGN_LANGUAGE):SECURITY_LANGUAGE =
|
functor SecureUML(structure Design: DESIGN_LANGUAGE):SECURITY_LANGUAGE =
|
||||||
struct
|
struct
|
||||||
|
|
||||||
|
@ -82,6 +85,7 @@ fun stereotypes_of (Rep.Class {stereotypes,...}) = stereotypes
|
||||||
| stereotypes_of (Rep.Primitive {stereotypes,...}) = stereotypes
|
| stereotypes_of (Rep.Primitive {stereotypes,...}) = stereotypes
|
||||||
| stereotypes_of (Rep.Interface {stereotypes,...}) = stereotypes
|
| stereotypes_of (Rep.Interface {stereotypes,...}) = stereotypes
|
||||||
|
|
||||||
|
|
||||||
fun has_no_stereotype strings c =
|
fun has_no_stereotype strings c =
|
||||||
not (List.exists (fn stereotype => List.exists (fn x => x = stereotype)
|
not (List.exists (fn stereotype => List.exists (fn x => x = stereotype)
|
||||||
strings) (stereotypes_of c))
|
strings) (stereotypes_of c))
|
||||||
|
@ -89,6 +93,7 @@ fun has_no_stereotype strings c =
|
||||||
fun has_stereotype string c =
|
fun has_stereotype string c =
|
||||||
List.exists (fn x => x=string) (stereotypes_of c)
|
List.exists (fn x => x=string) (stereotypes_of c)
|
||||||
|
|
||||||
|
|
||||||
fun filter_permission cs = List.filter (has_stereotype "Permission") cs
|
fun filter_permission cs = List.filter (has_stereotype "Permission") cs
|
||||||
(* FIXME: handle groups also *)
|
(* FIXME: handle groups also *)
|
||||||
fun filter_subject cs = List.filter (has_stereotype "User") cs
|
fun filter_subject cs = List.filter (has_stereotype "User") cs
|
||||||
|
|
|
@ -7,20 +7,14 @@ Group is
|
||||||
#endif
|
#endif
|
||||||
../lib/fxp/src/fxlib.cm
|
../lib/fxp/src/fxlib.cm
|
||||||
library.sml
|
library.sml
|
||||||
rep_ocl.sig
|
|
||||||
rep_ocl.sml
|
rep_ocl.sml
|
||||||
rep_state_machines.sig
|
|
||||||
rep_state_machines.sml
|
rep_state_machines.sml
|
||||||
rep_activity_graphs.sig
|
|
||||||
rep_activity_graphs.sml
|
rep_activity_graphs.sml
|
||||||
rep_core.sig
|
|
||||||
rep_core.sml
|
rep_core.sml
|
||||||
mds.sig
|
mds.sig
|
||||||
secure_uml.sml
|
secure_uml.sml
|
||||||
component_uml.sml
|
component_uml.sml
|
||||||
rep_secure.sig
|
|
||||||
rep_secure.sml
|
rep_secure.sml
|
||||||
rep.sig
|
|
||||||
rep.sml
|
rep.sml
|
||||||
xmi_ocl.sml
|
xmi_ocl.sml
|
||||||
xmi_core.sml
|
xmi_core.sml
|
||||||
|
@ -38,18 +32,13 @@ Group is
|
||||||
codegen/compiler/smlnj.sml
|
codegen/compiler/smlnj.sml
|
||||||
codegen/gcg_library.sml
|
codegen/gcg_library.sml
|
||||||
codegen/gcg_helper.sml
|
codegen/gcg_helper.sml
|
||||||
codegen/tpl_parser.sig
|
|
||||||
codegen/tpl_parser.sml
|
codegen/tpl_parser.sml
|
||||||
codegen/cartridge.sig
|
codegen/cartridge.sig
|
||||||
codegen/security_cartridge.sig
|
|
||||||
codegen/base_cartridge.sig
|
|
||||||
codegen/base_cartridge.sml
|
codegen/base_cartridge.sml
|
||||||
codegen/c#_cartridge.sml
|
codegen/c#_cartridge.sml
|
||||||
codegen/c#_net1_cartridge.sml
|
codegen/c#_net1_cartridge.sml
|
||||||
codegen/secureuml_cartridge.sig
|
|
||||||
codegen/secureuml_cartridge.sml
|
codegen/secureuml_cartridge.sml
|
||||||
codegen/gcg_core.sig
|
codegen/design_cartridge.sig
|
||||||
codegen/gcg_core.sml
|
|
||||||
codegen/codegen.sml
|
|
||||||
codegen/componentuml_cartridge.sml
|
codegen/componentuml_cartridge.sml
|
||||||
codegen/design_cartridge.sig
|
codegen/gcg_core.sml
|
||||||
|
codegen/codegen.sml
|
||||||
|
|
Loading…
Reference in New Issue