diff --git a/src/ROOT.ML b/src/ROOT.ML index 1cccfed..47bf266 100644 --- a/src/ROOT.ML +++ b/src/ROOT.ML @@ -68,6 +68,7 @@ use "rep_ocl.sml"; use "rep_state_machines.sml"; use "rep_activity_graphs.sml"; use "rep_core.sml"; +use "ocl_library.sml"; (* use "rep_secureuml.sig"; *) (* use "rep_secureuml.sml"; *) use "rep.sml"; diff --git a/src/ocl_library.sml b/src/ocl_library.sml new file mode 100644 index 0000000..ab7436e --- /dev/null +++ b/src/ocl_library.sml @@ -0,0 +1,939 @@ +(***************************************************************************** + * su4sml - a SecureUML repository for SML + * + * ocl_library.sml - + * Copyright (C) 2006 Achim D. Brucker + * Jürgen Doser + * + * 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 OCL_LIBRARY= +sig + val oclLib : Rep_Core.Classifier list +end + +structure OclLibrary : OCL_LIBRARY= +struct +open Rep_Core +open Rep_OclType + +val OclLibPackage="UML_OCL" + +val oclLib = + [Template + { + parameter = TemplateParameter "T", + classifier = Class + { + interfaces=[],attributes=[], + associationends=[], + activity_graphs=[], + invariant=[], + name=["Sequence(T)"], + operations=[ + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true, + name="count", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Sequence(T)"])], + isQuery=true, + name="=", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Sequence(T)"])], + isQuery=true, + name="==", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Sequence(T)"])], + isQuery=true, + name="~=", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Sequence(T)"])], + isQuery=true, + name="~==", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Sequence(T)"])], + isQuery=true, + name="~=~", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Sequence(T)"])], + isQuery=true, + name="~==~", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Sequence(T)"])], + isQuery=true, + name="union", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[], + isQuery=true, + name="flatten", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object", Classifier [OclLibPackage,"T"])], + isQuery=true, + name="append", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true, + name="prepend", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("index",Classifier [OclLibPackage,"Integer"]), + ("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="insertAt", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("lower",Classifier [OclLibPackage,"Integer"]), + ("upper",Classifier [OclLibPackage,"Integer"])], + isQuery=true, + name="subSequence",postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true, + name="at", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"T"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("obj",Classifier [OclLibPackage,"T"])], + isQuery=true, + name="indexOf", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[], + isQuery=true, + name="first", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"T"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[], + isQuery=true, + name="last", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"T"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true, + name="including", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true, + name="excluding", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[], + isQuery=true, + name="asSet", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[], + isQuery=true, + name="asSequence", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[], + isQuery=true, + name="asBag", + postcondition=[], + precondition=[], + result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope, + visibility=XMI.public + }], + parent=NONE, + stereotypes=[],thyname=NONE + }: Rep_Core.Classifier + }, + Template + { + parameter = TemplateParameter "T", + classifier = Class + { + attributes=[], + associationends=[], + activity_graphs=[], + interfaces=[], + invariant=[], + name=["Bag(T)"], + operations=[ + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="==",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="~=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="~==",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="~=~",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="~==~",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="union",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="intersection",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("set",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="intersection",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="including",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="excluding",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="count",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="flatten",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="asSet",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="asSequence", + postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="asBag",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public}],parent=NONE, + stereotypes=[],thyname=NONE + }: Rep_Core.Classifier + }, + Template + { + parameter = TemplateParameter "T", + classifier = Class + { + attributes=[], + associationends=[], + activity_graphs=[], + interfaces=[],invariant=[],name=["Set(T)"], + operations=[ + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="union",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="union",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="==",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="~=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="~==",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="~=~",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="~==~",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="intersection",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("bag",Classifier [OclLibPackage,"Bag(T)"])], + isQuery=true,name="intersection",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="-",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="including",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="excluding",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="symmetricDifference",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="count",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="flatten",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="asSet",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="asSequence", + postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Sequence(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + + { + arguments=[],isQuery=true,name="asBag",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + + { + arguments=[("set",Classifier [OclLibPackage,"Set(T)"])], + isQuery=true,name="union",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Bag(T)"], + scope=XMI.InstanceScope,visibility=XMI.public}],parent=NONE, + stereotypes=[],thyname=NONE + }: Rep_Core.Classifier + }, + Template + { + parameter = TemplateParameter "T", + classifier = Class + { + attributes=[], + associationends=[], + activity_graphs=[], + interfaces=[],invariant=[],name=["Collection(T)"], + operations=[ + { + arguments=[],isQuery=true,name="size",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="modifiedOnly", + postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="includes",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="excludes",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"T"])], + isQuery=true,name="count",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("c",Classifier [OclLibPackage,"Collection(T)"])], + isQuery=true,name="includesAll",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("c",Classifier [OclLibPackage,"Collection(T)"])], + isQuery=true,name="excludesAll",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="isEmpty",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="notEmpty",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="sum",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"T"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("c2", + Classifier [OclLibPackage,"Collection(T)"])], + isQuery=true,name="product",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(T)"], + scope=XMI.InstanceScope,visibility=XMI.public}],parent=NONE, + stereotypes=[],thyname=NONE + }: Rep_Core.Classifier + }, + Class + { + attributes=[], + associationends=[], + activity_graphs=[], + interfaces=[],invariant=[],name=["OclVoid"],operations=[], + parent=NONE,stereotypes=[],thyname=NONE + }, + + Primitive + { + associationends=[],interfaces=[],invariant=[],name=[OclLibPackage,"OclAny"], + operations=[ + { + arguments=[("object",Classifier [OclLibPackage,"OclAny"])], + isQuery=true,name="=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"OclAny"])], + isQuery=true,name="==",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"OclAny"])], + isQuery=true,name="~=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"OclAny"])], + isQuery=true,name="~==",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"OclAny"])], + isQuery=true,name="~=~",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"OclAny"])], + isQuery=true,name="~==~",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("object",Classifier [OclLibPackage,"OclAny"])], + isQuery=true,name="<>",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="oclIsNew",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="oclIsUndefined", + postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="asSet",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Set(OclAny)"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="atPre",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"OclAny"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("statename",Classifier ["OclState"])], + isQuery=true,name="oclIsInState",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="allInstances", + postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Set(OclAny)"], + scope=XMI.ClassifierScope,visibility=XMI.public}],parent=NONE, + stereotypes=[],thyname=NONE + }, + Primitive + { + associationends=[],interfaces=[],invariant=[],name=[OclLibPackage,"String"], + operations=[ + { + arguments=[],isQuery=true,name="size",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("s",Classifier [OclLibPackage,"String"])], + isQuery=true,name="concat",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"String"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("lower",Classifier [OclLibPackage,"Integer"]), + ("upper",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="substring",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"String"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="toInteger", + postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="toReal",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Real"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="toUpper",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"String"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="toLower",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"String"], + scope=XMI.InstanceScope,visibility=XMI.public}],parent=NONE, + stereotypes=[],thyname=NONE + }, + Primitive + { + associationends=[],interfaces=[],invariant=[],name=[OclLibPackage,"Boolean"], + operations=[ + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="or",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="xor",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="and",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="implies",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="not",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="sor",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="sxor",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="sand",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="simplies",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="implies1",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("b",Classifier [OclLibPackage,"Boolean"])], + isQuery=true,name="implies2",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Boolean"], + scope=XMI.InstanceScope,visibility=XMI.public}],parent=NONE, + stereotypes=[],thyname=NONE + }, + Primitive + { + associationends=[],interfaces=[],invariant=[],name=[OclLibPackage,"Integer"], + operations=[ + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="+",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="-",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="*",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="-",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="/",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Real"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="div",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="abs",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="mod",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="max",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("i",Classifier [OclLibPackage,"Integer"])], + isQuery=true,name="min",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Integer"],scope=XMI.InstanceScope, + visibility=XMI.public}],parent=NONE,stereotypes=[], + thyname=NONE + }, + Primitive + { + associationends=[],interfaces=[],invariant=[],name=[OclLibPackage,"Real"], + operations=[ + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="+",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Real"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="-",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Real"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="*",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Real"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="-",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Real"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="/",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Real"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="abs",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Real"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="floor",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[],isQuery=true,name="round",postcondition=[], + precondition=[],result=Classifier [OclLibPackage,"Integer"], + scope=XMI.InstanceScope,visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="max",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Real"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="min",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Real"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="<",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name=">",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name="<=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public + }, + { + arguments=[("r",Classifier [OclLibPackage,"Real"])], + isQuery=true,name=">=",postcondition=[],precondition=[], + result=Classifier [OclLibPackage,"Boolean"],scope=XMI.InstanceScope, + visibility=XMI.public}],parent=NONE,stereotypes=[], + thyname=NONE + } + ] : Rep_Core.Classifier list + +end diff --git a/src/rep.sml b/src/rep.sml index 0c32069..76e5d0a 100644 --- a/src/rep.sml +++ b/src/rep.sml @@ -27,6 +27,7 @@ sig include REP_CORE include REP_ACTIVITY_GRAPH +include OCL_LIBRARY type Model = Classifier list @@ -36,6 +37,7 @@ structure Rep : REP = struct open Rep_Core Rep_StateMachine Rep_ActivityGraph +open OclLibrary type Model = Classifier list end diff --git a/src/rep_core.sml b/src/rep_core.sml index d260faa..c12fbf9 100644 --- a/src/rep_core.sml +++ b/src/rep_core.sml @@ -94,6 +94,10 @@ datatype Classifier = interfaces : Rep_OclType.Path list, thyname : string option } + | Template of + { parameter : Rep_OclType.OclType, + classifier : Classifier + } val OclAnyC : Classifier @@ -207,8 +211,12 @@ datatype Classifier = stereotypes : string list, interfaces : Rep_OclType.Path list, thyname : string option - } - + } + | Template of + { parameter : Rep_OclType.OclType, + classifier : Classifier + } + (* convert an association end into the corresponding collection type *) fun assoc_to_attr_type {name,aend_type,multiplicity,ordered,visibility,init} = case multiplicity of diff --git a/src/rep_ocl.sml b/src/rep_ocl.sml index e674c87..54c41dc 100644 --- a/src/rep_ocl.sml +++ b/src/rep_ocl.sml @@ -31,7 +31,7 @@ sig | Set of OclType | Sequence of OclType | OrderedSet of OclType | Bag of OclType | Collection of OclType - | Classifier of Path | OclVoid | DummyT + | Classifier of Path | OclVoid | DummyT | TemplateParameter of string val string_of_OclType : OclType -> string val string_of_path : Path -> string val is_Classifier : OclType -> bool @@ -95,6 +95,7 @@ datatype OclType = Integer | Real | String | Boolean | OclAny | OrderedSet of OclType | Bag of OclType | Collection of OclType | OclVoid | DummyT | Classifier of Path + | TemplateParameter of string fun string_of_path (path:Path) = case path of [] => "" diff --git a/src/su4sml.cm b/src/su4sml.cm index dc036b5..96bf96b 100644 --- a/src/su4sml.cm +++ b/src/su4sml.cm @@ -16,6 +16,7 @@ Group is secure_uml.sml component_uml.sml rep_secure.sml + ocl_library.sml rep.sml xmi_ocl.sml xmi_core.sml diff --git a/src/xmi_core.sml b/src/xmi_core.sml index 623efe2..b3a2030 100644 --- a/src/xmi_core.sml +++ b/src/xmi_core.sml @@ -338,6 +338,18 @@ fun classifier_name_of (Primitive{name,...}) = name | classifier_name_of (OrderedSet{name,...}) = name | classifier_name_of (Void{name,...}) = name +fun classifier_operations_of (Primitive{operations,...}) = operations + | classifier_operations_of (Class{operations,...}) = operations + | classifier_operations_of (AssociationClass{operations,...}) = operations + | classifier_operations_of (Interface{operations,...}) = operations + | classifier_operations_of (Enumeration{operations,...}) = operations + | classifier_operations_of (Collection{operations,...}) = operations + | classifier_operations_of (Sequence{operations,...}) = operations + | classifier_operations_of (Set{operations,...}) = operations + | classifier_operations_of (Bag{operations,...}) = operations + | classifier_operations_of (OrderedSet{operations,...}) = operations + | classifier_operations_of (Void{...}) = [] + fun classifier_xmiid_of (Primitive{xmiid,...}) = xmiid | classifier_xmiid_of (Class{xmiid,...}) = xmiid | classifier_xmiid_of (AssociationClass{xmiid,...}) = xmiid