After having played with another project that I'm working on, I figure that maybe
model. Could you please have a look at it?
package uk.man.xman.xcore
enum ChannelPolicy{
CACHELESS = 0
CACHEFULL = 1
}
enum LoopType{
DoWhile = 0
WhileDo = 1
}
interface Composable{
}
interface Connector extends Composable{
String fullName
String showedName
}
abstract class CompositionConnector extends Connector{
contains Connection[2..*] connections
}
class Sequencer extends CompositionConnector{
}
class Selector extends CompositionConnector{
contains Input[1..1] input
}
abstract class AdapterConnector extends Connector{
String conditionalStatement
contains Input [1..1] input
contains Connection[1..1] connection
}
class Loop extends AdapterConnector{
LoopType loopType
}
class Guard extends AdapterConnector{
}
interface Connection{
}
class CoordinationConnection extends Connection{
String order
String condition
contains Connector source
contains Composable target
}
abstract class Component{
String name
String author
String comment
Boolean verified
Boolean valid
contains Service[1..*] services
contains DataElement[0..*] dataElements opposite component
}
class AtomicComponent extends Component{
contains ComputationUnit[1..1] computationUnit opposite atomicComponent
}
//@Ecore(constraints="MustContainAtLeastOneMethod")
class ComputationUnit{
String sourceCode
container AtomicComponent[1] atomicComponent opposite computationUnit
}
//@Ecore(constraints = "ValueCannotBeNull NameConnotBeNull DefaultValueConnotBeNull")
class DataElement{
String datatype
String defaultValue = ""
String value= ""
String name = ""
container Component component opposite dataElements
}
class CompositeComponent extends Component{
contains Composable[1..*] composables
contains CoordinationConnection[1..*] connections
contains DataChannel[0..*] dataChannels
}
//@Ecore(constraints = "OrderMustBeSpecified")
abstract class Parameter{
int order = "-1"
String dataType
String name
container Service service opposite parameters
}
class Input extends Parameter{
}
class Output extends Parameter{
}
class DataChannel{
String content
ChannelPolicy policy
contains Parameter source
contains Parameter target
}
class Service{
String name
String comment
contains DataChannel[0..*] dataChannels
contains Parameter[1..*] parameters opposite service
contains Contract[0..*] contracts
}
class Contract{
String name
String preCondition
String postCondition
}
class ComponentInstance extends Composable{
String name
contains Service [1..*] selectedServices
contains Component[1..1] componentReference
}
class DeploymentSetting{
contains KeyedValue[0..*] settings
}
class KeyedValue{
String key
String value
}
class System{
String name
contains Composable[1..*] composables
refers Service[1..*] services
contains DeploymentSetting[0..*] deploymentSettings
}