roboconf dsl advanced software engineering

40

Upload: mohammad-shaker

Post on 14-Jul-2015

837 views

Category:

Software


2 download

TRANSCRIPT

Domainmodel:

(elements+= (Component | Facet | InstanceOf | ServiceECA ))*

;

Domainmodel:

(elements+= (Component | Facet | InstanceOf | ServiceECA ))*

;

Component:

COMMENT*

name = ID '{' EOL+

(COMMENT* (installer += InstallerComp | alias += AliasComp | icon +=

IconComp|exports += ExportComp|imports += ImportComp|children +=

ChildrenComp | facets += FacetChild))*

'}' EOL+

;

Domainmodel:

(elements+= (Component | Facet | InstanceOf | ServiceECA ))*

;

Component:

COMMENT*

name = ID '{' EOL+

(COMMENT* (installer += InstallerComp | alias += AliasComp | icon +=

IconComp|exports += ExportComp|imports += ImportComp|children +=

ChildrenComp | facets += FacetChild))*

'}' EOL+

;

Domainmodel:

(elements+= (Component | Facet | InstanceOf | ServiceECA ))*

;

Facet:

COMMENT*

'facet' ':' name = ID '{' EOL+

(COMMENT* (installer += InstallerComp | icon += IconComp|exports+= ExportComp| children += ChildrenComp | extends += ExtendComp))*

'}' EOL+

;

Domainmodel:

(elements+= (Component | Facet | InstanceOf | ServiceECA ))*

;

InstanceOf:

COMMENT*

'instanceof' ':' name = [Component] '{' EOL+

( instanceOfs += InstanceOf | (COMMENT* (nameChild += NameChildComp | count += CountComp|channel += ChannelComp| instanceData += InstanceDataComp | instanceState+= InstanceStateComp)))*

'}' EOL+

;

• checkMandatoryFields

• checkRedifinitionFields

• checkComponentNotChildOfSelf

• checkUniqueNaming

• checkImportVariableCompatibleWithComponentType

and more..

• checkComponentNotChildOfSelf

for (childComponent : childComp.childs) {

if (childComponent.name == parentComponentName) {

error("A component can't be child of self");

return;

}

}

Apache0{//…}

Apache0{//…children:Apache0;}

• checkUniqueNaming

exportComp.exports.forEach [ str |

if (exportComp.exports.filter[item|item.equals(str)].size > 1)

error("Redifinition of variables in exports.");

];

Apache0{//…exports: ip1;}

Apache0{//…exports: ip1, ip2, ip1;}

• checkImportVariableCompatibleWithComponentType

for (var i = 0; i < comps.size; i++) {

for (export : comps.get(i).exports.get(0).exports) {

if (export == import) {

componentFound = true;

}

}

}

Tomcat{//…imports:Apache0.foo;}

Apache0{//…exports:ip,port;}

• checkImportVariableCompatibleWithComponentType

for (var i = 0; i < comps.size; i++) {

for (export : comps.get(i).exports.get(0).exports) {

if (export == import) {

componentFound = true;

}

}

}

Tomcat{//…imports:Apache0.foo;}

Tomcat{//…imports:Apache0.port;}

Apache0{//…exports:ip,port;}

facet:f2{//…exports: foo=50;}

Apache0{//…exports:ip,port;facets: f2;}

Tomcat{//…imports:Apache0.foo;}

facet:f2{//…exports: foo=50;}

Apache0{//…exports:ip,port;facets: f2;}

Tomcat{//…imports:Apache0.foo;}

ServiceECA:

COMMENT*

'serviceECA' '{' EOL+

(COMMENT* (

serviceECANameComp += ServiceECANameComp

|numInstancesComp += NumInstancesComp

| minAllowedInstancesComp += MinAllowedInstancesComp

| maxAllowedInstancesComp += MaxAllowedInstancesComp

| scaleCooldownInSec += ScaleCooldownInSec

| samplingPeriodInSec+= SamplingPeriodInSec

))*

scalingRule = ScalingRule

'}' EOL+

;

ScalingRule:

COMMENT*

'scalingRule' '{' EOL+

'serviceStats' '{' EOL+

(COMMENT* (serviceECANameComp += ServiceECANameComp | metric += MetricComp | movingTimeRangeInSec += MovingTimeRangeInSecComp))*

'}' EOL+

'highThreshold' '{' EOL+

(COMMENT* (hTValueComp += HTValueComp | hTInstancesIncrease += HTInstancesIncrease))*

'}' EOL+

'lowThreshold' '{' EOL+

(COMMENT* (lTValueComp += LTValueComp | hTInstancesDecrease += HTInstancesDecrease))*

'}' EOL+

'}' EOL+

;