From f331c68bf16b18c9758d13cfdce580672e1fe17c Mon Sep 17 00:00:00 2001 From: erbel <johannes.erbel@cs.uni-goettingen.de> Date: Mon, 10 Dec 2018 10:51:41 +0100 Subject: [PATCH] Added MonitoringProperty Mixin --- .settings/org.eclipse.buildship.core.prefs | 2 +- build.gradle | 6 +- .../org.eclipse.buildship.core.prefs | 2 +- .../bin/.gitignore | 1 - .../org.eclipse.buildship.core.prefs | 2 +- .../META-INF/MANIFEST.MF | 3 +- de.ugoe.cs.rwm.mocci.connector/build.gradle | 1 + .../rwm/mocci/connector/ComponentManager.java | 241 ++++++++++ .../rwm/mocci/connector/ConnectorFactory.java | 2 +- .../connector/DatagathererConnector.java | 48 +- .../MonitoringpropertyConnector.java | 2 +- .../mocci/connector/ProcessorConnector.java | 47 +- .../mocci/connector/PublisherConnector.java | 48 +- .../rwm/mocci/connector/SensorConnector.java | 95 ++-- de.ugoe.cs.rwm.mocci.model.edit/.classpath | 1 + .../org.eclipse.buildship.core.prefs | 2 +- .../plugin.properties | 5 + .../MonitoringpropertyItemProvider.java | 54 ++- .../provider/SensorItemProvider.java | 24 + de.ugoe.cs.rwm.mocci.model/.classpath | 1 + .../org.eclipse.buildship.core.prefs | 2 +- .../model/monitoring.ecore | 17 +- .../model/monitoring.genmodel | 10 +- .../model/monitoring.occie | 6 +- .../src-gen/monitoring/MonitoringPackage.java | 92 +++- .../src-gen/monitoring/MonitoringTables.java | 26 +- .../monitoring/Monitoringproperty.java | 73 ++- .../src-gen/monitoring/Sensor.java | 27 ++ .../impl/MonitoringPackageImpl.java | 34 +- .../impl/MonitoringpropertyImpl.java | 146 ++++-- .../src-gen/monitoring/impl/SensorImpl.java | 54 +++ src/main/resources/occi/runtime.occic | 5 - .../rwm/mocci/DeployHadoopMonitoringTest.java | 6 +- .../live/DeployHadoopMonitoringTestLive.java | 81 ++++ .../mocci/live/DeployWorkflowLiveTest.java | 55 --- .../ugoe/cs/rwm/mocci/live/package-info.java | 8 - .../de.ugoe.cs.rwm.mocci.connector.jar | Bin 8659 -> 11389 bytes .../de.ugoe.cs.rwm.mocci.model.jar | Bin 52829 -> 53684 bytes src/test/resources/occi/MLSDiffVM.occic | 300 ------------ src/test/resources/occi/expectedRuntime.occic | 454 ++++++++++++++++++ .../resources/occi/hadoopClusterNewExt.occic | 37 +- 41 files changed, 1383 insertions(+), 637 deletions(-) delete mode 100644 de.ugoe.cs.rwm.mocci.connector.dummy/bin/.gitignore create mode 100644 de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ComponentManager.java delete mode 100755 src/main/resources/occi/runtime.occic create mode 100644 src/test/java/de/ugoe/cs/rwm/mocci/live/DeployHadoopMonitoringTestLive.java delete mode 100644 src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java delete mode 100644 src/test/java/de/ugoe/cs/rwm/mocci/live/package-info.java delete mode 100644 src/test/resources/occi/MLSDiffVM.occic create mode 100644 src/test/resources/occi/expectedRuntime.occic diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index e889521..e8c143f 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,2 @@ -connection.project.dir= +connection.project.dir=de.ugoe.cs.rwm.mocci.connector eclipse.preferences.version=1 diff --git a/build.gradle b/build.gradle index 7d8af14..6cfb36e 100644 --- a/build.gradle +++ b/build.gradle @@ -70,8 +70,8 @@ dependencies { //own compile group: 'de.ugoe.cs.rwm', name: 'cocci', version: '1.0.0' compile group: 'de.ugoe.cs.rwm', name: 'docci', version: '1.0.0' - compile group: 'de.ugoe.cs.rwm.mocci', name: 'model', version: '1.0.0' - //compile project(':de.ugoe.cs.rwm.mocci.model') + //compile group: 'de.ugoe.cs.rwm.mocci', name: 'model', version: '1.0.0' + compile project(':de.ugoe.cs.rwm.mocci.model') //modmacao compile group: 'org.modmacao', name: 'core', version: '1.0.0' compile group: 'org.modmacao', name: 'placement', version: '1.0.0' @@ -127,7 +127,7 @@ javadoc { failOnError = true } test { - exclude 'de/ugoe/cs/rwm/mocci/live/**' + //exclude 'de/ugoe/cs/rwm/mocci/live/**' testLogging.showStandardStreams = true testLogging { exceptionFormat = 'full' diff --git a/de.ugoe.cs.rwm.mocci.connector.dummy/.settings/org.eclipse.buildship.core.prefs b/de.ugoe.cs.rwm.mocci.connector.dummy/.settings/org.eclipse.buildship.core.prefs index b1886ad..1752c93 100644 --- a/de.ugoe.cs.rwm.mocci.connector.dummy/.settings/org.eclipse.buildship.core.prefs +++ b/de.ugoe.cs.rwm.mocci.connector.dummy/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,2 @@ -connection.project.dir=.. +connection.project.dir=../de.ugoe.cs.rwm.mocci.connector eclipse.preferences.version=1 diff --git a/de.ugoe.cs.rwm.mocci.connector.dummy/bin/.gitignore b/de.ugoe.cs.rwm.mocci.connector.dummy/bin/.gitignore deleted file mode 100644 index fd04598..0000000 --- a/de.ugoe.cs.rwm.mocci.connector.dummy/bin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/de/ diff --git a/de.ugoe.cs.rwm.mocci.connector/.settings/org.eclipse.buildship.core.prefs b/de.ugoe.cs.rwm.mocci.connector/.settings/org.eclipse.buildship.core.prefs index b1886ad..e889521 100644 --- a/de.ugoe.cs.rwm.mocci.connector/.settings/org.eclipse.buildship.core.prefs +++ b/de.ugoe.cs.rwm.mocci.connector/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,2 @@ -connection.project.dir=.. +connection.project.dir= eclipse.preferences.version=1 diff --git a/de.ugoe.cs.rwm.mocci.connector/META-INF/MANIFEST.MF b/de.ugoe.cs.rwm.mocci.connector/META-INF/MANIFEST.MF index 898e623..40cc25e 100644 --- a/de.ugoe.cs.rwm.mocci.connector/META-INF/MANIFEST.MF +++ b/de.ugoe.cs.rwm.mocci.connector/META-INF/MANIFEST.MF @@ -9,6 +9,5 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Require-Bundle: org.slf4j.api, org.eclipse.cmf.occi.core, - de.ugoe.cs.rwm.mocci.model, - org.modmacao.occi.platform + de.ugoe.cs.rwm.mocci.model Export-Package: de.ugoe.cs.rwm.mocci.connector diff --git a/de.ugoe.cs.rwm.mocci.connector/build.gradle b/de.ugoe.cs.rwm.mocci.connector/build.gradle index d234050..8ada62e 100644 --- a/de.ugoe.cs.rwm.mocci.connector/build.gradle +++ b/de.ugoe.cs.rwm.mocci.connector/build.gradle @@ -33,6 +33,7 @@ dependencies { compile group: 'org.eclipse.cmf.occi', name: 'core', version: '1.0.0' compile group: 'org.modmacao.occi', name: 'platform', version: '1.0.0' compile group: 'org.modmacao', name: 'cm', version: '1.0.0' + compile group: 'org.modmacao', name: 'core', version: '1.0.0' compile group: 'org.modmacao.core', name: 'connector', version : '1.0.0' compile group: 'commons-io', name: 'commons-io', version: '2.6' diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ComponentManager.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ComponentManager.java new file mode 100644 index 0000000..7ec0b68 --- /dev/null +++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ComponentManager.java @@ -0,0 +1,241 @@ +package de.ugoe.cs.rwm.mocci.connector; + +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.cmf.occi.core.Link; +import org.eclipse.cmf.occi.core.MixinBase; +import org.modmacao.cm.ConfigurationManagementTool; +import org.modmacao.cm.ansible.AnsibleCMTool; +import org.modmacao.occi.platform.Component; +import org.modmacao.occi.platform.Status; + +import modmacao.Executiondependency; +import modmacao.Installationdependency; + +public class ComponentManager { + + + private ConfigurationManagementTool cmtool = new AnsibleCMTool(); + private Component comp; + + public ComponentManager(Component comp) { + this.comp = comp; + } + + + public void undeploy() { + + switch(comp.getOcciComponentState().getValue()) { + + case Status.ACTIVE_VALUE: + + comp.stop(); + cmtool.undeploy(comp); + comp.setOcciComponentState(Status.UNDEPLOYED); + break; + + + case Status.INACTIVE_VALUE: + cmtool.undeploy(comp); + comp.setOcciComponentState(Status.UNDEPLOYED); + break; + + + case Status.DEPLOYED_VALUE: + cmtool.undeploy(comp); + comp.setOcciComponentState(Status.UNDEPLOYED); + break; + + + case Status.ERROR_VALUE: + cmtool.undeploy(comp); + comp.setOcciComponentState(Status.UNDEPLOYED); + break; + + default: + break; + } + } + // End of user code + // Start of user code Publisher_Kind_deploy_action + /** + * Implement OCCI action: + * - scheme: http://schemas.modmacao.org/occi/platform/component/action# + * - term: deploy + * - title: + */ + public void deploy() + { + int status = -1; + + // Component State Machine. + switch(comp.getOcciComponentState().getValue()) { + + case Status.UNDEPLOYED_VALUE: + for (Component component: getInstallDependendComps()) { + component.deploy(); + } + status = cmtool.deploy(comp); + + if (status == 0 && assertCompsStatusEquals(getInstallDependendComps(), Status.DEPLOYED)) + comp.setOcciComponentState(Status.DEPLOYED); + else + comp.setOcciComponentState(Status.ERROR); + break; + + default: + break; +} + } + // End of user code + // Start of user code Publisher_Kind_configure_action + /** + * Implement OCCI action: + * - scheme: http://schemas.modmacao.org/occi/platform/component/action# + * - term: configure + * - title: + */ + public void configure() + { + int status = -1; + + // Component State Machine. + switch(comp.getOcciComponentState().getValue()) { + + case Status.DEPLOYED_VALUE: + for (Component component: getInstallDependendComps()) { + component.configure(); + } + status = cmtool.configure(comp); + + if (status == 0 && assertCompsStatusEquals(getInstallDependendComps(), Status.INACTIVE)) + comp.setOcciComponentState(Status.INACTIVE); + else + comp.setOcciComponentState(Status.ERROR); + break; + + default: + break; +} + } + // End of user code + // Start of user code Publisher_Kind_Start_action + /** + * Implement OCCI action: + * - scheme: http://schemas.modmacao.org/occi/platform/component/action# + * - term: start + * - title: Start the application. + */ + public void start() + { + int status = -1; + + // Component State Machine. + switch(comp.getOcciComponentState().getValue()) { + + case Status.INACTIVE_VALUE: + for (Component component: getExecutionDependendComps()) { + component.start(); + } + + status = cmtool.start(comp); + + if (status == 0 && assertCompsStatusEquals(getExecutionDependendComps(), Status.ACTIVE)) + comp.setOcciComponentState(Status.ACTIVE); + else + comp.setOcciComponentState(Status.ERROR); + + break; + + + case Status.UNDEPLOYED_VALUE: + for (Component component: getInstallDependendComps()) { + component.deploy(); + } + comp.deploy(); + + for (Component component: getInstallDependendComps()) { + component.configure(); + } + comp.configure(); + + for (Component component: getExecutionDependendComps()) { + component.start(); + } + + status = cmtool.start(comp); + + if (status == 0 && assertCompsStatusEquals(getExecutionDependendComps(), Status.ACTIVE)) + comp.setOcciComponentState(Status.ACTIVE); + else + comp.setOcciComponentState(Status.ERROR); + + default: + break; +} + } + // End of user code + // Start of user code Publisher_Kind_Stop_action + /** + * Implement OCCI action: + * - scheme: http://schemas.modmacao.org/occi/platform/component/action# + * - term: stop + * - title: Stop the application. + */ + public void stop() + { + int status = -1; + // Component State Machine. + switch(comp.getOcciComponentState().getValue()) { + + case Status.ACTIVE_VALUE: + + status = cmtool.stop(comp); + + comp.setOcciComponentState(Status.INACTIVE); + + break; + + default: + break; +} + } + // End of user code + + private List<Component> getInstallDependendComps(){ + LinkedList<Component> dependendComponents = new LinkedList<Component>(); + for (Link link: comp.getLinks()) { + for (MixinBase mixin: link.getParts()) { + if (mixin instanceof Installationdependency) { + dependendComponents.add((Component) link.getTarget()); + break; + } + } + } + return dependendComponents; + } + + private List<Component> getExecutionDependendComps(){ + LinkedList<Component> dependendComponents = new LinkedList<Component>(); + for (Link link: comp.getLinks()) { + for (MixinBase mixin: link.getParts()) { + if (mixin instanceof Executiondependency) { + dependendComponents.add((Component) link.getTarget()); + break; + } + } + } + return dependendComponents; + } + + private boolean assertCompsStatusEquals(List<Component> components, Status status) { + for (Component component: components) { + if (component.getOcciComponentState().getValue() != status.getValue()) { + return false; + } + } + return true; +} + +} \ No newline at end of file diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ConnectorFactory.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ConnectorFactory.java index e5a46b8..0ec40b0 100644 --- a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ConnectorFactory.java +++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ConnectorFactory.java @@ -10,7 +10,7 @@ * - Philippe Merle <philippe.merle@inria.fr> * - Faiez Zalila <faiez.zalila@inria.fr> * - * Generated at Wed Dec 05 12:12:23 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector + * Generated at Mon Dec 10 09:47:50 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector */ package de.ugoe.cs.rwm.mocci.connector; diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/DatagathererConnector.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/DatagathererConnector.java index 50bcc36..300bd30 100644 --- a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/DatagathererConnector.java +++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/DatagathererConnector.java @@ -10,7 +10,7 @@ * - Philippe Merle <philippe.merle@inria.fr> * - Faiez Zalila <faiez.zalila@inria.fr> * - * Generated at Wed Dec 05 12:12:23 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector + * Generated at Mon Dec 10 09:47:50 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector */ package de.ugoe.cs.rwm.mocci.connector; @@ -31,6 +31,7 @@ public class DatagathererConnector extends monitoring.impl.DatagathererImpl * Initialize the logger. */ private static Logger LOGGER = LoggerFactory.getLogger(DatagathererConnector.class); + private ComponentManager compMan; // Start of user code Datagathererconnector_constructor /** @@ -39,6 +40,7 @@ public class DatagathererConnector extends monitoring.impl.DatagathererImpl DatagathererConnector() { LOGGER.debug("Constructor called on " + this); + this.compMan = new ComponentManager(this); // TODO: Implement this constructor. } // End of user code @@ -109,38 +111,38 @@ public class DatagathererConnector extends monitoring.impl.DatagathererImpl public void undeploy() { LOGGER.debug("Action undeploy() called on " + this); - + compMan.undeploy(); // TODO: Implement how to undeploy this datagatherer. } // End of user code - // Start of user code Datagatherer_Kind_deploy_action + // Start of user code Datagatherer_Kind_configure_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: deploy + * - term: configure * - title: */ @Override - public void deploy() + public void configure() { - LOGGER.debug("Action deploy() called on " + this); - - // TODO: Implement how to deploy this datagatherer. + LOGGER.debug("Action configure() called on " + this); + compMan.configure(); + // TODO: Implement how to configure this datagatherer. } // End of user code - // Start of user code Datagatherer_Kind_configure_action + // Start of user code Datagatherer_Kind_Stop_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: configure - * - title: + * - term: stop + * - title: Stop the application. */ @Override - public void configure() + public void stop() { - LOGGER.debug("Action configure() called on " + this); - - // TODO: Implement how to configure this datagatherer. + LOGGER.debug("Action stop() called on " + this); + compMan.stop(); + // TODO: Implement how to stop this datagatherer. } // End of user code // Start of user code Datagatherer_Kind_Start_action @@ -154,23 +156,23 @@ public class DatagathererConnector extends monitoring.impl.DatagathererImpl public void start() { LOGGER.debug("Action start() called on " + this); - + compMan.start(); // TODO: Implement how to start this datagatherer. } // End of user code - // Start of user code Datagatherer_Kind_Stop_action + // Start of user code Datagatherer_Kind_deploy_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: stop - * - title: Stop the application. + * - term: deploy + * - title: */ @Override - public void stop() + public void deploy() { - LOGGER.debug("Action stop() called on " + this); - - // TODO: Implement how to stop this datagatherer. + LOGGER.debug("Action deploy() called on " + this); + compMan.deploy(); + // TODO: Implement how to deploy this datagatherer. } // End of user code diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/MonitoringpropertyConnector.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/MonitoringpropertyConnector.java index c25839d..c3ef0f7 100644 --- a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/MonitoringpropertyConnector.java +++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/MonitoringpropertyConnector.java @@ -10,7 +10,7 @@ * - Philippe Merle <philippe.merle@inria.fr> * - Faiez Zalila <faiez.zalila@inria.fr> * - * Generated at Wed Dec 05 12:12:23 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector + * Generated at Mon Dec 10 09:47:50 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector */ package de.ugoe.cs.rwm.mocci.connector; diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ProcessorConnector.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ProcessorConnector.java index 68922e7..ed4ecb5 100644 --- a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ProcessorConnector.java +++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/ProcessorConnector.java @@ -10,7 +10,7 @@ * - Philippe Merle <philippe.merle@inria.fr> * - Faiez Zalila <faiez.zalila@inria.fr> * - * Generated at Wed Dec 05 12:12:23 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector + * Generated at Mon Dec 10 09:47:50 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector */ package de.ugoe.cs.rwm.mocci.connector; @@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory; */ public class ProcessorConnector extends monitoring.impl.ProcessorImpl { + private ComponentManager compMan; /** * Initialize the logger. */ @@ -39,6 +40,7 @@ public class ProcessorConnector extends monitoring.impl.ProcessorImpl ProcessorConnector() { LOGGER.debug("Constructor called on " + this); + this.compMan = new ComponentManager(this); // TODO: Implement this constructor. } // End of user code @@ -109,38 +111,39 @@ public class ProcessorConnector extends monitoring.impl.ProcessorImpl public void undeploy() { LOGGER.debug("Action undeploy() called on " + this); - + compMan.undeploy(); // TODO: Implement how to undeploy this processor. } // End of user code - // Start of user code Processor_Kind_deploy_action + // Start of user code Processor_Kind_configure_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: deploy + * - term: configure * - title: */ @Override - public void deploy() + public void configure() { - LOGGER.debug("Action deploy() called on " + this); - - // TODO: Implement how to deploy this processor. + LOGGER.debug("Action configure() called on " + this); + compMan.configure(); + // TODO: Implement how to configure this processor. } // End of user code - // Start of user code Processor_Kind_configure_action + // Start of user code Processor_Kind_Stop_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: configure - * - title: + * - term: stop + * - title: Stop the application. */ @Override - public void configure() + public void stop() { - LOGGER.debug("Action configure() called on " + this); + LOGGER.debug("Action stop() called on " + this); + compMan.stop(); - // TODO: Implement how to configure this processor. + // TODO: Implement how to stop this processor. } // End of user code // Start of user code Processor_Kind_Start_action @@ -154,23 +157,23 @@ public class ProcessorConnector extends monitoring.impl.ProcessorImpl public void start() { LOGGER.debug("Action start() called on " + this); - + compMan.start(); // TODO: Implement how to start this processor. } // End of user code - // Start of user code Processor_Kind_Stop_action + // Start of user code Processor_Kind_deploy_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: stop - * - title: Stop the application. + * - term: deploy + * - title: */ @Override - public void stop() + public void deploy() { - LOGGER.debug("Action stop() called on " + this); - - // TODO: Implement how to stop this processor. + LOGGER.debug("Action deploy() called on " + this); + compMan.deploy(); + // TODO: Implement how to deploy this processor. } // End of user code diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/PublisherConnector.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/PublisherConnector.java index 1452837..89cf5e4 100644 --- a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/PublisherConnector.java +++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/PublisherConnector.java @@ -10,7 +10,7 @@ * - Philippe Merle <philippe.merle@inria.fr> * - Faiez Zalila <faiez.zalila@inria.fr> * - * Generated at Wed Dec 05 12:12:23 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector + * Generated at Mon Dec 10 09:47:50 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector */ package de.ugoe.cs.rwm.mocci.connector; @@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory; */ public class PublisherConnector extends monitoring.impl.PublisherImpl { + private ComponentManager compMan; /** * Initialize the logger. */ @@ -39,6 +40,7 @@ public class PublisherConnector extends monitoring.impl.PublisherImpl PublisherConnector() { LOGGER.debug("Constructor called on " + this); + this.compMan = new ComponentManager(this); // TODO: Implement this constructor. } // End of user code @@ -109,38 +111,38 @@ public class PublisherConnector extends monitoring.impl.PublisherImpl public void undeploy() { LOGGER.debug("Action undeploy() called on " + this); - + compMan.undeploy(); // TODO: Implement how to undeploy this publisher. } // End of user code - // Start of user code Publisher_Kind_deploy_action + // Start of user code Publisher_Kind_configure_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: deploy + * - term: configure * - title: */ @Override - public void deploy() + public void configure() { - LOGGER.debug("Action deploy() called on " + this); - - // TODO: Implement how to deploy this publisher. + LOGGER.debug("Action configure() called on " + this); + compMan.configure(); + // TODO: Implement how to configure this publisher. } // End of user code - // Start of user code Publisher_Kind_configure_action + // Start of user code Publisher_Kind_Stop_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: configure - * - title: + * - term: stop + * - title: Stop the application. */ @Override - public void configure() + public void stop() { - LOGGER.debug("Action configure() called on " + this); - - // TODO: Implement how to configure this publisher. + LOGGER.debug("Action stop() called on " + this); + compMan.stop(); + // TODO: Implement how to stop this publisher. } // End of user code // Start of user code Publisher_Kind_Start_action @@ -154,23 +156,23 @@ public class PublisherConnector extends monitoring.impl.PublisherImpl public void start() { LOGGER.debug("Action start() called on " + this); - + compMan.start(); // TODO: Implement how to start this publisher. } // End of user code - // Start of user code Publisher_Kind_Stop_action + // Start of user code Publisher_Kind_deploy_action /** * Implement OCCI action: * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: stop - * - title: Stop the application. + * - term: deploy + * - title: */ @Override - public void stop() + public void deploy() { - LOGGER.debug("Action stop() called on " + this); - - // TODO: Implement how to stop this publisher. + LOGGER.debug("Action deploy() called on " + this); + compMan.deploy(); + // TODO: Implement how to deploy this publisher. } // End of user code diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java index e8c2e4b..889a962 100644 --- a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java +++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java @@ -10,7 +10,7 @@ * - Philippe Merle <philippe.merle@inria.fr> * - Faiez Zalila <faiez.zalila@inria.fr> * - * Generated at Wed Dec 05 12:12:23 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector + * Generated at Mon Dec 10 09:47:50 CET 2018 from platform:/resource/monitoring/model/monitoring.occie by org.eclipse.cmf.occi.core.gen.connector */ package de.ugoe.cs.rwm.mocci.connector; @@ -20,7 +20,6 @@ import java.util.List; import org.eclipse.cmf.occi.core.Link; import org.modmacao.cm.ConfigurationManagementTool; import org.modmacao.cm.ansible.AnsibleCMTool; -import org.modmacao.core.connector.ApplicationConnector; import org.modmacao.occi.platform.Component; import org.modmacao.occi.platform.Componentlink; import org.modmacao.occi.platform.Status; @@ -39,7 +38,6 @@ public class SensorConnector extends monitoring.impl.SensorImpl { private ConfigurationManagementTool cmtool = new AnsibleCMTool(); - /** * Initialize the logger. */ @@ -111,6 +109,41 @@ public class SensorConnector extends monitoring.impl.SensorImpl // Sensor actions. // + // Start of user code Sensor_Kind_Stop_action + /** + * Implement OCCI action: + * - scheme: http://schemas.modmacao.org/occi/platform/component/action# + * - term: stop + * - title: Stop the application. + */ + @Override + public void stop() + { + int status = -1; + LOGGER.debug("Action stop() called on " + this); + + // Application State Machine. + switch(getOcciAppState().getValue()) { + + case Status.ACTIVE_VALUE: + LOGGER.debug("Fire transition(state=active, action=\"stop\")..."); + for (Component component: this.getConnectedComponents()) { + component.stop(); + } + status = cmtool.stop(this); + if (status == 0 && assertCompsStatusEquals(getConnectedComponents(), Status.INACTIVE)) + setOcciAppState(Status.INACTIVE); + else + setOcciAppState(Status.ERROR); + break; + + default: + break; +} + + // TODO: Implement how to stop this sensor. + } + // End of user code // Start of user code Sensor_Kind_deploy_action /** * Implement OCCI action: @@ -216,41 +249,6 @@ public class SensorConnector extends monitoring.impl.SensorImpl } } // End of user code - // Start of user code Sensor_Kind_Stop_action - /** - * Implement OCCI action: - * - scheme: http://schemas.modmacao.org/occi/platform/component/action# - * - term: stop - * - title: Stop the application. - */ - @Override - public void stop() - { - int status = -1; - LOGGER.debug("Action stop() called on " + this); - - // Application State Machine. - switch(getOcciAppState().getValue()) { - - case Status.ACTIVE_VALUE: - LOGGER.debug("Fire transition(state=active, action=\"stop\")..."); - for (Component component: this.getConnectedComponents()) { - component.stop(); - } - status = cmtool.stop(this); - if (status == 0 && assertCompsStatusEquals(getConnectedComponents(), Status.INACTIVE)) - setOcciAppState(Status.INACTIVE); - else - setOcciAppState(Status.ERROR); - break; - - default: - break; -} - - // TODO: Implement how to stop this sensor. - } - // End of user code // Start of user code Sensor_Kind_configure_action /** * Implement OCCI action: @@ -345,16 +343,7 @@ public class SensorConnector extends monitoring.impl.SensorImpl } } // End of user code - private List<Component> getConnectedComponents() { - LinkedList<Component> connectedComponents = new LinkedList<Component>(); - for (Link link: this.getLinks()) { - if (link instanceof Componentlink) { - connectedComponents.add((Component) link.getTarget()); - } - } - return connectedComponents; - } private boolean assertCompsStatusEquals(List<Component> components, Status status) { for (Component component: components) { @@ -367,6 +356,16 @@ public class SensorConnector extends monitoring.impl.SensorImpl } return true; } - + + private List<Component> getConnectedComponents() { + LinkedList<Component> connectedComponents = new LinkedList<Component>(); + for (Link link: this.getLinks()) { + if (link instanceof Componentlink) { + connectedComponents.add((Component) link.getTarget()); + } + } + return connectedComponents; + +} } diff --git a/de.ugoe.cs.rwm.mocci.model.edit/.classpath b/de.ugoe.cs.rwm.mocci.model.edit/.classpath index ba95638..9f26f94 100644 --- a/de.ugoe.cs.rwm.mocci.model.edit/.classpath +++ b/de.ugoe.cs.rwm.mocci.model.edit/.classpath @@ -3,5 +3,6 @@ <classpathentry kind="src" path="src-gen"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/> <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/de.ugoe.cs.rwm.mocci.model.edit/.settings/org.eclipse.buildship.core.prefs b/de.ugoe.cs.rwm.mocci.model.edit/.settings/org.eclipse.buildship.core.prefs index b1886ad..1752c93 100644 --- a/de.ugoe.cs.rwm.mocci.model.edit/.settings/org.eclipse.buildship.core.prefs +++ b/de.ugoe.cs.rwm.mocci.model.edit/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,2 @@ -connection.project.dir=.. +connection.project.dir=../de.ugoe.cs.rwm.mocci.connector eclipse.preferences.version=1 diff --git a/de.ugoe.cs.rwm.mocci.model.edit/plugin.properties b/de.ugoe.cs.rwm.mocci.model.edit/plugin.properties index 7976263..adf132d 100644 --- a/de.ugoe.cs.rwm.mocci.model.edit/plugin.properties +++ b/de.ugoe.cs.rwm.mocci.model.edit/plugin.properties @@ -52,3 +52,8 @@ _UI_Monitoringattribute_monitoringAttributeValue_feature = Monitoring Attribute _UI_Monitoringproperty_type = Monitoringproperty _UI_Monitoringproperty_monitoringAttributeName_feature = Monitoring Attribute Name _UI_Monitoringproperty_monitoringAttributeValue_feature = Monitoring Attribute Value +_UI_Monitoringproperty_monitoringPropertyName_feature = Monitoring Property Name +_UI_Monitoringproperty_monitoringPropertyValue_feature = Monitoring Property Value +_UI_Monitoringproperty_monitoringPropertyId_feature = Monitoring Property Id +_UI_Sensor_monitoringPropertyId_feature = Monitoring Property Id +_UI_Sensor_monitoringPropertyMixin_feature = Monitoring Property Mixin diff --git a/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/MonitoringpropertyItemProvider.java b/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/MonitoringpropertyItemProvider.java index 4ea0ab1..c7cbbe4 100644 --- a/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/MonitoringpropertyItemProvider.java +++ b/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/MonitoringpropertyItemProvider.java @@ -59,26 +59,27 @@ public class MonitoringpropertyItemProvider extends MixinBaseItemProvider { if (itemPropertyDescriptors == null) { super.getPropertyDescriptors(object); - addMonitoringAttributeNamePropertyDescriptor(object); - addMonitoringAttributeValuePropertyDescriptor(object); + addMonitoringPropertyNamePropertyDescriptor(object); + addMonitoringPropertyValuePropertyDescriptor(object); + addMonitoringPropertyIdPropertyDescriptor(object); } return itemPropertyDescriptors; } /** - * This adds a property descriptor for the Monitoring Attribute Name feature. + * This adds a property descriptor for the Monitoring Property Name feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ - protected void addMonitoringAttributeNamePropertyDescriptor(Object object) { + protected void addMonitoringPropertyNamePropertyDescriptor(Object object) { itemPropertyDescriptors.add (createItemPropertyDescriptor (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(), - getString("_UI_Monitoringproperty_monitoringAttributeName_feature"), - getString("_UI_PropertyDescriptor_description", "_UI_Monitoringproperty_monitoringAttributeName_feature", "_UI_Monitoringproperty_type"), - MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME, + getString("_UI_Monitoringproperty_monitoringPropertyName_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Monitoringproperty_monitoringPropertyName_feature", "_UI_Monitoringproperty_type"), + MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME, true, false, false, @@ -88,19 +89,41 @@ public class MonitoringpropertyItemProvider extends MixinBaseItemProvider { } /** - * This adds a property descriptor for the Monitoring Attribute Value feature. + * This adds a property descriptor for the Monitoring Property Value feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ - protected void addMonitoringAttributeValuePropertyDescriptor(Object object) { + protected void addMonitoringPropertyValuePropertyDescriptor(Object object) { itemPropertyDescriptors.add (createItemPropertyDescriptor (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), getResourceLocator(), - getString("_UI_Monitoringproperty_monitoringAttributeValue_feature"), - getString("_UI_PropertyDescriptor_description", "_UI_Monitoringproperty_monitoringAttributeValue_feature", "_UI_Monitoringproperty_type"), - MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE, + getString("_UI_Monitoringproperty_monitoringPropertyValue_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Monitoringproperty_monitoringPropertyValue_feature", "_UI_Monitoringproperty_type"), + MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE, + true, + false, + false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, + null, + null)); + } + + /** + * This adds a property descriptor for the Monitoring Property Id feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + protected void addMonitoringPropertyIdPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Monitoringproperty_monitoringPropertyId_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Monitoringproperty_monitoringPropertyId_feature", "_UI_Monitoringproperty_type"), + MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_PROPERTY_ID, true, false, false, @@ -128,7 +151,7 @@ public class MonitoringpropertyItemProvider extends MixinBaseItemProvider { */ @Override public String getText(Object object) { - String label = ((Monitoringproperty)object).getMonitoringAttributeName(); + String label = ((Monitoringproperty)object).getMonitoringPropertyName(); return label == null || label.length() == 0 ? getString("_UI_Monitoringproperty_type") : getString("_UI_Monitoringproperty_type") + " " + label; @@ -147,8 +170,9 @@ public class MonitoringpropertyItemProvider extends MixinBaseItemProvider { updateChildren(notification); switch (notification.getFeatureID(Monitoringproperty.class)) { - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME: - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE: + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME: + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE: + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_ID: fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; } diff --git a/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/SensorItemProvider.java b/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/SensorItemProvider.java index dd1ac91..db4e140 100644 --- a/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/SensorItemProvider.java +++ b/de.ugoe.cs.rwm.mocci.model.edit/src-gen/monitoring/provider/SensorItemProvider.java @@ -69,6 +69,7 @@ public class SensorItemProvider extends ApplicationItemProvider { addOcciSensorPeriodPropertyDescriptor(object); addOcciSensorGranularityPropertyDescriptor(object); addOcciSensorAccuracyPropertyDescriptor(object); + addMonitoringPropertyMixinPropertyDescriptor(object); } return itemPropertyDescriptors; } @@ -205,6 +206,28 @@ public class SensorItemProvider extends ApplicationItemProvider { null)); } + /** + * This adds a property descriptor for the Monitoring Property Mixin feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + protected void addMonitoringPropertyMixinPropertyDescriptor(Object object) { + itemPropertyDescriptors.add + (createItemPropertyDescriptor + (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(), + getResourceLocator(), + getString("_UI_Sensor_monitoringPropertyMixin_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_Sensor_monitoringPropertyMixin_feature", "_UI_Sensor_type"), + MonitoringPackage.Literals.SENSOR__MONITORING_PROPERTY_MIXIN, + true, + false, + false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, + null, + null)); + } + /** * This returns Sensor.gif. * <!-- begin-user-doc --> @@ -249,6 +272,7 @@ public class SensorItemProvider extends ApplicationItemProvider { case MonitoringPackage.SENSOR__OCCI_SENSOR_PERIOD: case MonitoringPackage.SENSOR__OCCI_SENSOR_GRANULARITY: case MonitoringPackage.SENSOR__OCCI_SENSOR_ACCURACY: + case MonitoringPackage.SENSOR__MONITORING_PROPERTY_MIXIN: fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); return; } diff --git a/de.ugoe.cs.rwm.mocci.model/.classpath b/de.ugoe.cs.rwm.mocci.model/.classpath index ba95638..9f26f94 100644 --- a/de.ugoe.cs.rwm.mocci.model/.classpath +++ b/de.ugoe.cs.rwm.mocci.model/.classpath @@ -3,5 +3,6 @@ <classpathentry kind="src" path="src-gen"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/> <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/de.ugoe.cs.rwm.mocci.model/.settings/org.eclipse.buildship.core.prefs b/de.ugoe.cs.rwm.mocci.model/.settings/org.eclipse.buildship.core.prefs index b1886ad..1752c93 100644 --- a/de.ugoe.cs.rwm.mocci.model/.settings/org.eclipse.buildship.core.prefs +++ b/de.ugoe.cs.rwm.mocci.model/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,2 @@ -connection.project.dir=.. +connection.project.dir=../de.ugoe.cs.rwm.mocci.connector eclipse.preferences.version=1 diff --git a/de.ugoe.cs.rwm.mocci.model/model/monitoring.ecore b/de.ugoe.cs.rwm.mocci.model/model/monitoring.ecore index 479a958..40d146f 100644 --- a/de.ugoe.cs.rwm.mocci.model/model/monitoring.ecore +++ b/de.ugoe.cs.rwm.mocci.model/model/monitoring.ecore @@ -54,6 +54,12 @@ <details key="documentation" value="Accuracy of time measument (seconds)"/> </eAnnotations> </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="monitoringPropertyMixin" + eType="#//String"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + </eStructuralFeatures> </eClassifiers> <eClassifiers xsi:type="ecore:EClass" name="Datagatherer" eSuperTypes="platform:/plugin/org.modmacao.occi.platform/model/platform.ecore#//Component"> <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> @@ -95,14 +101,19 @@ <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot"> <details key="appliesConstraint" value="self.entity.oclIsKindOf(occi::Entity)"/> </eAnnotations> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="monitoringAttributeName" + <eStructuralFeatures xsi:type="ecore:EAttribute" name="monitoringPropertyName" lowerBound="1" eType="#//String"> <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> <details key="documentation" value=""/> </eAnnotations> </eStructuralFeatures> - <eStructuralFeatures xsi:type="ecore:EAttribute" name="monitoringAttributeValue" - lowerBound="1" eType="#//String"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="monitoringPropertyValue" + eType="#//String"> + <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> + <details key="documentation" value=""/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="monitoringPropertyId" eType="#//String"> <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel"> <details key="documentation" value=""/> </eAnnotations> diff --git a/de.ugoe.cs.rwm.mocci.model/model/monitoring.genmodel b/de.ugoe.cs.rwm.mocci.model/model/monitoring.genmodel index 43cd2f4..c928a8d 100644 --- a/de.ugoe.cs.rwm.mocci.model/model/monitoring.genmodel +++ b/de.ugoe.cs.rwm.mocci.model/model/monitoring.genmodel @@ -35,6 +35,9 @@ <genFeatures createChild="false"> <ecoreFeature xsi:type="ecore:EAttribute" href="monitoring.ecore#//Sensor/occiSensorAccuracy"/> </genFeatures> + <genFeatures createChild="false"> + <ecoreFeature xsi:type="ecore:EAttribute" href="monitoring.ecore#//Sensor/monitoringPropertyMixin"/> + </genFeatures> </genClasses> <genClasses> <ecoreClass href="monitoring.ecore#//Datagatherer"/> @@ -57,10 +60,13 @@ <genClasses> <ecoreClass href="monitoring.ecore#//Monitoringproperty"/> <genFeatures createChild="false"> - <ecoreFeature xsi:type="ecore:EAttribute" href="monitoring.ecore#//Monitoringproperty/monitoringAttributeName"/> + <ecoreFeature xsi:type="ecore:EAttribute" href="monitoring.ecore#//Monitoringproperty/monitoringPropertyName"/> + </genFeatures> + <genFeatures createChild="false"> + <ecoreFeature xsi:type="ecore:EAttribute" href="monitoring.ecore#//Monitoringproperty/monitoringPropertyValue"/> </genFeatures> <genFeatures createChild="false"> - <ecoreFeature xsi:type="ecore:EAttribute" href="monitoring.ecore#//Monitoringproperty/monitoringAttributeValue"/> + <ecoreFeature xsi:type="ecore:EAttribute" href="monitoring.ecore#//Monitoringproperty/monitoringPropertyId"/> </genFeatures> </genClasses> </genPackages> diff --git a/de.ugoe.cs.rwm.mocci.model/model/monitoring.occie b/de.ugoe.cs.rwm.mocci.model/model/monitoring.occie index 72dcb46..4f48bb6 100644 --- a/de.ugoe.cs.rwm.mocci.model/model/monitoring.occie +++ b/de.ugoe.cs.rwm.mocci.model/model/monitoring.occie @@ -9,6 +9,7 @@ <attributes name="occi.sensor.period" required="true" description="Time between two following measurements (seconds)" type="//@types.1"/> <attributes name="occi.sensor.granularity" description="Granularity of time measument (seconds)" type="//@types.1"/> <attributes name="occi.sensor.accuracy" description="Accuracy of time measument (seconds)" type="//@types.1"/> + <attributes name="monitoring.property.mixin" default="" type="//@types.2"/> <parent href="http://schemas.modmacao.org/occi/platform#//@kinds[term='application']"/> </kinds> <kinds name="DataGatherer" scheme="http://schemas.ugoe.cs.rwm/monitoring#" title="DataGatherer Resource"> @@ -24,8 +25,9 @@ <parent href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> </kinds> <mixins name="MonitoringProperty" scheme="http://schemas.ugoe.cs.rwm/monitoring#" title="MonitoringProperty Mixin"> - <attributes name="monitoring.attribute.name" mutable="false" required="true" type="//@types.2"/> - <attributes name="monitoring.attribute.value" required="true" type="//@types.2"/> + <attributes name="monitoring.property.name" mutable="false" required="true" type="//@types.2"/> + <attributes name="monitoring.property.value" type="//@types.2"/> + <attributes name="monitoring.property.id" type="//@types.2"/> <applies href="http://schemas.ogf.org/occi/core#//@kinds[term='entity']"/> </mixins> <types xsi:type="occi:StringType" name="DateTime" pattern="^(\d{4}((-)?(0[1-9]|1[0-2])((-)?(0[1-9]|[1-2][0-9]|3[0-1])(T(24:00(:00(\.[0]+)?)?|(([0-1][0-9]|2[0-3])(:)[0-5][0-9])((:)[0-5][0-9](\.[\d]+)?)?)((\+|-)(14:00|(0[0-9]|1[0-3])(:)[0-5][0-9])|Z))?)?)?)$"/> diff --git a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringPackage.java b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringPackage.java index f8dcb04..4511f8c 100644 --- a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringPackage.java +++ b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringPackage.java @@ -270,6 +270,15 @@ public interface MonitoringPackage extends EPackage { */ int SENSOR__OCCI_SENSOR_ACCURACY = PlatformPackage.APPLICATION_FEATURE_COUNT + 5; + /** + * The feature id for the '<em><b>Monitoring Property Mixin</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int SENSOR__MONITORING_PROPERTY_MIXIN = PlatformPackage.APPLICATION_FEATURE_COUNT + 6; + /** * The number of structural features of the '<em>Sensor</em>' class. * <!-- begin-user-doc --> @@ -277,7 +286,7 @@ public interface MonitoringPackage extends EPackage { * @generated * @ordered */ - int SENSOR_FEATURE_COUNT = PlatformPackage.APPLICATION_FEATURE_COUNT + 6; + int SENSOR_FEATURE_COUNT = PlatformPackage.APPLICATION_FEATURE_COUNT + 7; /** * The operation id for the '<em>Occi Create</em>' operation. @@ -1085,22 +1094,31 @@ public interface MonitoringPackage extends EPackage { int MONITORINGPROPERTY__ATTRIBUTES = OCCIPackage.MIXIN_BASE__ATTRIBUTES; /** - * The feature id for the '<em><b>Monitoring Attribute Name</b></em>' attribute. + * The feature id for the '<em><b>Monitoring Property Name</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + * @ordered + */ + int MONITORINGPROPERTY__MONITORING_PROPERTY_NAME = OCCIPackage.MIXIN_BASE_FEATURE_COUNT + 0; + + /** + * The feature id for the '<em><b>Monitoring Property Value</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME = OCCIPackage.MIXIN_BASE_FEATURE_COUNT + 0; + int MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE = OCCIPackage.MIXIN_BASE_FEATURE_COUNT + 1; /** - * The feature id for the '<em><b>Monitoring Attribute Value</b></em>' attribute. + * The feature id for the '<em><b>Monitoring Property Id</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE = OCCIPackage.MIXIN_BASE_FEATURE_COUNT + 1; + int MONITORINGPROPERTY__MONITORING_PROPERTY_ID = OCCIPackage.MIXIN_BASE_FEATURE_COUNT + 2; /** * The number of structural features of the '<em>Monitoringproperty</em>' class. @@ -1109,7 +1127,7 @@ public interface MonitoringPackage extends EPackage { * @generated * @ordered */ - int MONITORINGPROPERTY_FEATURE_COUNT = OCCIPackage.MIXIN_BASE_FEATURE_COUNT + 2; + int MONITORINGPROPERTY_FEATURE_COUNT = OCCIPackage.MIXIN_BASE_FEATURE_COUNT + 3; /** * The operation id for the '<em>Applies Constraint</em>' operation. @@ -1236,6 +1254,17 @@ public interface MonitoringPackage extends EPackage { */ EAttribute getSensor_OcciSensorAccuracy(); + /** + * Returns the meta object for the attribute '{@link monitoring.Sensor#getMonitoringPropertyMixin <em>Monitoring Property Mixin</em>}'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the attribute '<em>Monitoring Property Mixin</em>'. + * @see monitoring.Sensor#getMonitoringPropertyMixin() + * @see #getSensor() + * @generated + */ + EAttribute getSensor_MonitoringPropertyMixin(); + /** * Returns the meta object for class '{@link monitoring.Datagatherer <em>Datagatherer</em>}'. * <!-- begin-user-doc --> @@ -1310,26 +1339,37 @@ public interface MonitoringPackage extends EPackage { EClass getMonitoringproperty(); /** - * Returns the meta object for the attribute '{@link monitoring.Monitoringproperty#getMonitoringAttributeName <em>Monitoring Attribute Name</em>}'. + * Returns the meta object for the attribute '{@link monitoring.Monitoringproperty#getMonitoringPropertyName <em>Monitoring Property Name</em>}'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the attribute '<em>Monitoring Property Name</em>'. + * @see monitoring.Monitoringproperty#getMonitoringPropertyName() + * @see #getMonitoringproperty() + * @generated + */ + EAttribute getMonitoringproperty_MonitoringPropertyName(); + + /** + * Returns the meta object for the attribute '{@link monitoring.Monitoringproperty#getMonitoringPropertyValue <em>Monitoring Property Value</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @return the meta object for the attribute '<em>Monitoring Attribute Name</em>'. - * @see monitoring.Monitoringproperty#getMonitoringAttributeName() + * @return the meta object for the attribute '<em>Monitoring Property Value</em>'. + * @see monitoring.Monitoringproperty#getMonitoringPropertyValue() * @see #getMonitoringproperty() * @generated */ - EAttribute getMonitoringproperty_MonitoringAttributeName(); + EAttribute getMonitoringproperty_MonitoringPropertyValue(); /** - * Returns the meta object for the attribute '{@link monitoring.Monitoringproperty#getMonitoringAttributeValue <em>Monitoring Attribute Value</em>}'. + * Returns the meta object for the attribute '{@link monitoring.Monitoringproperty#getMonitoringPropertyId <em>Monitoring Property Id</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @return the meta object for the attribute '<em>Monitoring Attribute Value</em>'. - * @see monitoring.Monitoringproperty#getMonitoringAttributeValue() + * @return the meta object for the attribute '<em>Monitoring Property Id</em>'. + * @see monitoring.Monitoringproperty#getMonitoringPropertyId() * @see #getMonitoringproperty() * @generated */ - EAttribute getMonitoringproperty_MonitoringAttributeValue(); + EAttribute getMonitoringproperty_MonitoringPropertyId(); /** * Returns the meta object for the '{@link monitoring.Monitoringproperty#appliesConstraint(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Applies Constraint</em>}' operation. @@ -1456,6 +1496,14 @@ public interface MonitoringPackage extends EPackage { */ EAttribute SENSOR__OCCI_SENSOR_ACCURACY = eINSTANCE.getSensor_OcciSensorAccuracy(); + /** + * The meta object literal for the '<em><b>Monitoring Property Mixin</b></em>' attribute feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EAttribute SENSOR__MONITORING_PROPERTY_MIXIN = eINSTANCE.getSensor_MonitoringPropertyMixin(); + /** * The meta object literal for the '{@link monitoring.impl.DatagathererImpl <em>Datagatherer</em>}' class. * <!-- begin-user-doc --> @@ -1521,20 +1569,28 @@ public interface MonitoringPackage extends EPackage { EClass MONITORINGPROPERTY = eINSTANCE.getMonitoringproperty(); /** - * The meta object literal for the '<em><b>Monitoring Attribute Name</b></em>' attribute feature. + * The meta object literal for the '<em><b>Monitoring Property Name</b></em>' attribute feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EAttribute MONITORINGPROPERTY__MONITORING_PROPERTY_NAME = eINSTANCE.getMonitoringproperty_MonitoringPropertyName(); + + /** + * The meta object literal for the '<em><b>Monitoring Property Value</b></em>' attribute feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ - EAttribute MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME = eINSTANCE.getMonitoringproperty_MonitoringAttributeName(); + EAttribute MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE = eINSTANCE.getMonitoringproperty_MonitoringPropertyValue(); /** - * The meta object literal for the '<em><b>Monitoring Attribute Value</b></em>' attribute feature. + * The meta object literal for the '<em><b>Monitoring Property Id</b></em>' attribute feature. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ - EAttribute MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE = eINSTANCE.getMonitoringproperty_MonitoringAttributeValue(); + EAttribute MONITORINGPROPERTY__MONITORING_PROPERTY_ID = eINSTANCE.getMonitoringproperty_MonitoringPropertyId(); /** * The meta object literal for the '<em><b>Applies Constraint</b></em>' operation. diff --git a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringTables.java b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringTables.java index a001adc..115abce 100644 --- a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringTables.java +++ b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/MonitoringTables.java @@ -348,15 +348,17 @@ public class MonitoringTables public static final /*@NonNull*/ ExecutorProperty _Datagatherer__occiCollectorGranularity = new EcoreExecutorProperty(MonitoringPackage.Literals.DATAGATHERER__OCCI_COLLECTOR_GRANULARITY, Types._Datagatherer, 1); public static final /*@NonNull*/ ExecutorProperty _Datagatherer__occiCollectorPeriod = new EcoreExecutorProperty(MonitoringPackage.Literals.DATAGATHERER__OCCI_COLLECTOR_PERIOD, Types._Datagatherer, 2); - public static final /*@NonNull*/ ExecutorProperty _Monitoringproperty__monitoringAttributeName = new EcoreExecutorProperty(MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME, Types._Monitoringproperty, 0); - public static final /*@NonNull*/ ExecutorProperty _Monitoringproperty__monitoringAttributeValue = new EcoreExecutorProperty(MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE, Types._Monitoringproperty, 1); - - public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorAccuracy = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_ACCURACY, Types._Sensor, 0); - public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorGranularity = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_GRANULARITY, Types._Sensor, 1); - public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorPeriod = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_PERIOD, Types._Sensor, 2); - public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorTimebase = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_TIMEBASE, Types._Sensor, 3); - public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorTimestart = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_TIMESTART, Types._Sensor, 4); - public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorTimestop = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_TIMESTOP, Types._Sensor, 5); + public static final /*@NonNull*/ ExecutorProperty _Monitoringproperty__monitoringPropertyId = new EcoreExecutorProperty(MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_PROPERTY_ID, Types._Monitoringproperty, 0); + public static final /*@NonNull*/ ExecutorProperty _Monitoringproperty__monitoringPropertyName = new EcoreExecutorProperty(MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME, Types._Monitoringproperty, 1); + public static final /*@NonNull*/ ExecutorProperty _Monitoringproperty__monitoringPropertyValue = new EcoreExecutorProperty(MonitoringPackage.Literals.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE, Types._Monitoringproperty, 2); + + public static final /*@NonNull*/ ExecutorProperty _Sensor__monitoringPropertyMixin = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__MONITORING_PROPERTY_MIXIN, Types._Sensor, 0); + public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorAccuracy = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_ACCURACY, Types._Sensor, 1); + public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorGranularity = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_GRANULARITY, Types._Sensor, 2); + public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorPeriod = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_PERIOD, Types._Sensor, 3); + public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorTimebase = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_TIMEBASE, Types._Sensor, 4); + public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorTimestart = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_TIMESTART, Types._Sensor, 5); + public static final /*@NonNull*/ ExecutorProperty _Sensor__occiSensorTimestop = new EcoreExecutorProperty(MonitoringPackage.Literals.SENSOR__OCCI_SENSOR_TIMESTOP, Types._Sensor, 6); static { Init.initEnd(); } @@ -878,8 +880,9 @@ public class MonitoringTables private static final /*@NonNull*/ ExecutorProperty /*@NonNull*/ [] _DateTime = {}; private static final /*@NonNull*/ ExecutorProperty /*@NonNull*/ [] _Monitoringproperty = { - MonitoringTables.Properties._Monitoringproperty__monitoringAttributeName, - MonitoringTables.Properties._Monitoringproperty__monitoringAttributeValue + MonitoringTables.Properties._Monitoringproperty__monitoringPropertyId, + MonitoringTables.Properties._Monitoringproperty__monitoringPropertyName, + MonitoringTables.Properties._Monitoringproperty__monitoringPropertyValue }; private static final /*@NonNull*/ ExecutorProperty /*@NonNull*/ [] _Processor = {}; @@ -889,6 +892,7 @@ public class MonitoringTables private static final /*@NonNull*/ ExecutorProperty /*@NonNull*/ [] _Second = {}; private static final /*@NonNull*/ ExecutorProperty /*@NonNull*/ [] _Sensor = { + MonitoringTables.Properties._Sensor__monitoringPropertyMixin, MonitoringTables.Properties._Sensor__occiSensorAccuracy, MonitoringTables.Properties._Sensor__occiSensorGranularity, MonitoringTables.Properties._Sensor__occiSensorPeriod, diff --git a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Monitoringproperty.java b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Monitoringproperty.java index 1d55881..fefe3a8 100644 --- a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Monitoringproperty.java +++ b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Monitoringproperty.java @@ -27,8 +27,9 @@ import org.eclipse.emf.common.util.DiagnosticChain; * The following features are supported: * </p> * <ul> - * <li>{@link monitoring.Monitoringproperty#getMonitoringAttributeName <em>Monitoring Attribute Name</em>}</li> - * <li>{@link monitoring.Monitoringproperty#getMonitoringAttributeValue <em>Monitoring Attribute Value</em>}</li> + * <li>{@link monitoring.Monitoringproperty#getMonitoringPropertyName <em>Monitoring Property Name</em>}</li> + * <li>{@link monitoring.Monitoringproperty#getMonitoringPropertyValue <em>Monitoring Property Value</em>}</li> + * <li>{@link monitoring.Monitoringproperty#getMonitoringPropertyId <em>Monitoring Property Id</em>}</li> * </ul> * * @see monitoring.MonitoringPackage#getMonitoringproperty() @@ -37,56 +38,82 @@ import org.eclipse.emf.common.util.DiagnosticChain; */ public interface Monitoringproperty extends MixinBase { /** - * Returns the value of the '<em><b>Monitoring Attribute Name</b></em>' attribute. + * Returns the value of the '<em><b>Monitoring Property Name</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * <!-- begin-model-doc --> * * <!-- end-model-doc --> - * @return the value of the '<em>Monitoring Attribute Name</em>' attribute. - * @see #setMonitoringAttributeName(String) - * @see monitoring.MonitoringPackage#getMonitoringproperty_MonitoringAttributeName() + * @return the value of the '<em>Monitoring Property Name</em>' attribute. + * @see #setMonitoringPropertyName(String) + * @see monitoring.MonitoringPackage#getMonitoringproperty_MonitoringPropertyName() * @model dataType="monitoring.String" required="true" - * annotation="http://www.eclipse.org/emf/2002/GenModel get='throw new UnsupportedOperationException(); // FIXME Unimplemented http://schemas.ugoe.cs.rwm/monitoring/ecore!Monitoringproperty!monitoringAttributeName'" + * annotation="http://www.eclipse.org/emf/2002/GenModel get='throw new UnsupportedOperationException(); // FIXME Unimplemented http://schemas.ugoe.cs.rwm/monitoring/ecore!Monitoringproperty!monitoringPropertyName'" * @generated */ - String getMonitoringAttributeName(); + String getMonitoringPropertyName(); /** - * Sets the value of the '{@link monitoring.Monitoringproperty#getMonitoringAttributeName <em>Monitoring Attribute Name</em>}' attribute. + * Sets the value of the '{@link monitoring.Monitoringproperty#getMonitoringPropertyName <em>Monitoring Property Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @param value the new value of the '<em>Monitoring Attribute Name</em>' attribute. - * @see #getMonitoringAttributeName() + * @param value the new value of the '<em>Monitoring Property Name</em>' attribute. + * @see #getMonitoringPropertyName() * @generated */ - void setMonitoringAttributeName(String value); + void setMonitoringPropertyName(String value); /** - * Returns the value of the '<em><b>Monitoring Attribute Value</b></em>' attribute. + * Returns the value of the '<em><b>Monitoring Property Value</b></em>' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> * <!-- begin-model-doc --> * * <!-- end-model-doc --> - * @return the value of the '<em>Monitoring Attribute Value</em>' attribute. - * @see #setMonitoringAttributeValue(String) - * @see monitoring.MonitoringPackage#getMonitoringproperty_MonitoringAttributeValue() - * @model dataType="monitoring.String" required="true" - * annotation="http://www.eclipse.org/emf/2002/GenModel get='throw new UnsupportedOperationException(); // FIXME Unimplemented http://schemas.ugoe.cs.rwm/monitoring/ecore!Monitoringproperty!monitoringAttributeValue'" + * @return the value of the '<em>Monitoring Property Value</em>' attribute. + * @see #setMonitoringPropertyValue(String) + * @see monitoring.MonitoringPackage#getMonitoringproperty_MonitoringPropertyValue() + * @model dataType="monitoring.String" + * annotation="http://www.eclipse.org/emf/2002/GenModel get='throw new UnsupportedOperationException(); // FIXME Unimplemented http://schemas.ugoe.cs.rwm/monitoring/ecore!Monitoringproperty!monitoringPropertyValue'" + * @generated + */ + String getMonitoringPropertyValue(); + + /** + * Sets the value of the '{@link monitoring.Monitoringproperty#getMonitoringPropertyValue <em>Monitoring Property Value</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param value the new value of the '<em>Monitoring Property Value</em>' attribute. + * @see #getMonitoringPropertyValue() + * @generated + */ + void setMonitoringPropertyValue(String value); + + /** + * Returns the value of the '<em><b>Monitoring Property Id</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * <!-- begin-model-doc --> + * + * <!-- end-model-doc --> + * @return the value of the '<em>Monitoring Property Id</em>' attribute. + * @see #setMonitoringPropertyId(String) + * @see monitoring.MonitoringPackage#getMonitoringproperty_MonitoringPropertyId() + * @model dataType="monitoring.String" + * annotation="http://www.eclipse.org/emf/2002/GenModel get='throw new UnsupportedOperationException(); // FIXME Unimplemented http://schemas.ugoe.cs.rwm/monitoring/ecore!Monitoringproperty!monitoringPropertyId'" * @generated */ - String getMonitoringAttributeValue(); + String getMonitoringPropertyId(); /** - * Sets the value of the '{@link monitoring.Monitoringproperty#getMonitoringAttributeValue <em>Monitoring Attribute Value</em>}' attribute. + * Sets the value of the '{@link monitoring.Monitoringproperty#getMonitoringPropertyId <em>Monitoring Property Id</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @param value the new value of the '<em>Monitoring Attribute Value</em>' attribute. - * @see #getMonitoringAttributeValue() + * @param value the new value of the '<em>Monitoring Property Id</em>' attribute. + * @see #getMonitoringPropertyId() * @generated */ - void setMonitoringAttributeValue(String value); + void setMonitoringPropertyId(String value); /** * <!-- begin-user-doc --> diff --git a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Sensor.java b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Sensor.java index df8d42b..4210893 100644 --- a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Sensor.java +++ b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/Sensor.java @@ -33,6 +33,7 @@ import org.modmacao.occi.platform.Application; * <li>{@link monitoring.Sensor#getOcciSensorPeriod <em>Occi Sensor Period</em>}</li> * <li>{@link monitoring.Sensor#getOcciSensorGranularity <em>Occi Sensor Granularity</em>}</li> * <li>{@link monitoring.Sensor#getOcciSensorAccuracy <em>Occi Sensor Accuracy</em>}</li> + * <li>{@link monitoring.Sensor#getMonitoringPropertyMixin <em>Monitoring Property Mixin</em>}</li> * </ul> * * @see monitoring.MonitoringPackage#getSensor() @@ -196,4 +197,30 @@ public interface Sensor extends Application { */ void setOcciSensorAccuracy(String value); + /** + * Returns the value of the '<em><b>Monitoring Property Mixin</b></em>' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * <!-- begin-model-doc --> + * + * <!-- end-model-doc --> + * @return the value of the '<em>Monitoring Property Mixin</em>' attribute. + * @see #setMonitoringPropertyMixin(String) + * @see monitoring.MonitoringPackage#getSensor_MonitoringPropertyMixin() + * @model dataType="monitoring.String" + * annotation="http://www.eclipse.org/emf/2002/GenModel get='throw new UnsupportedOperationException(); // FIXME Unimplemented http://schemas.ugoe.cs.rwm/monitoring/ecore!Sensor!monitoringPropertyMixin'" + * @generated + */ + String getMonitoringPropertyMixin(); + + /** + * Sets the value of the '{@link monitoring.Sensor#getMonitoringPropertyMixin <em>Monitoring Property Mixin</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param value the new value of the '<em>Monitoring Property Mixin</em>' attribute. + * @see #getMonitoringPropertyMixin() + * @generated + */ + void setMonitoringPropertyMixin(String value); + } // Sensor diff --git a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringPackageImpl.java b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringPackageImpl.java index 301584d..4a473d2 100644 --- a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringPackageImpl.java +++ b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringPackageImpl.java @@ -237,6 +237,15 @@ public class MonitoringPackageImpl extends EPackageImpl implements MonitoringPac return (EAttribute)sensorEClass.getEStructuralFeatures().get(5); } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public EAttribute getSensor_MonitoringPropertyMixin() { + return (EAttribute)sensorEClass.getEStructuralFeatures().get(6); + } + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -305,7 +314,7 @@ public class MonitoringPackageImpl extends EPackageImpl implements MonitoringPac * <!-- end-user-doc --> * @generated */ - public EAttribute getMonitoringproperty_MonitoringAttributeName() { + public EAttribute getMonitoringproperty_MonitoringPropertyName() { return (EAttribute)monitoringpropertyEClass.getEStructuralFeatures().get(0); } @@ -314,10 +323,19 @@ public class MonitoringPackageImpl extends EPackageImpl implements MonitoringPac * <!-- end-user-doc --> * @generated */ - public EAttribute getMonitoringproperty_MonitoringAttributeValue() { + public EAttribute getMonitoringproperty_MonitoringPropertyValue() { return (EAttribute)monitoringpropertyEClass.getEStructuralFeatures().get(1); } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public EAttribute getMonitoringproperty_MonitoringPropertyId() { + return (EAttribute)monitoringpropertyEClass.getEStructuralFeatures().get(2); + } + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -389,6 +407,7 @@ public class MonitoringPackageImpl extends EPackageImpl implements MonitoringPac createEAttribute(sensorEClass, SENSOR__OCCI_SENSOR_PERIOD); createEAttribute(sensorEClass, SENSOR__OCCI_SENSOR_GRANULARITY); createEAttribute(sensorEClass, SENSOR__OCCI_SENSOR_ACCURACY); + createEAttribute(sensorEClass, SENSOR__MONITORING_PROPERTY_MIXIN); datagathererEClass = createEClass(DATAGATHERER); createEAttribute(datagathererEClass, DATAGATHERER__OCCI_COLLECTOR_PERIOD); @@ -400,8 +419,9 @@ public class MonitoringPackageImpl extends EPackageImpl implements MonitoringPac publisherEClass = createEClass(PUBLISHER); monitoringpropertyEClass = createEClass(MONITORINGPROPERTY); - createEAttribute(monitoringpropertyEClass, MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME); - createEAttribute(monitoringpropertyEClass, MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE); + createEAttribute(monitoringpropertyEClass, MONITORINGPROPERTY__MONITORING_PROPERTY_NAME); + createEAttribute(monitoringpropertyEClass, MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE); + createEAttribute(monitoringpropertyEClass, MONITORINGPROPERTY__MONITORING_PROPERTY_ID); createEOperation(monitoringpropertyEClass, MONITORINGPROPERTY___APPLIES_CONSTRAINT__DIAGNOSTICCHAIN_MAP); // Create data types @@ -456,6 +476,7 @@ public class MonitoringPackageImpl extends EPackageImpl implements MonitoringPac initEAttribute(getSensor_OcciSensorPeriod(), this.getSecond(), "occiSensorPeriod", null, 1, 1, Sensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSensor_OcciSensorGranularity(), this.getSecond(), "occiSensorGranularity", null, 0, 1, Sensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getSensor_OcciSensorAccuracy(), this.getSecond(), "occiSensorAccuracy", null, 0, 1, Sensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getSensor_MonitoringPropertyMixin(), this.getString(), "monitoringPropertyMixin", null, 0, 1, Sensor.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEClass(datagathererEClass, Datagatherer.class, "Datagatherer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getDatagatherer_OcciCollectorPeriod(), this.getSecond(), "occiCollectorPeriod", null, 1, 1, Datagatherer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); @@ -467,8 +488,9 @@ public class MonitoringPackageImpl extends EPackageImpl implements MonitoringPac initEClass(publisherEClass, Publisher.class, "Publisher", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEClass(monitoringpropertyEClass, Monitoringproperty.class, "Monitoringproperty", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEAttribute(getMonitoringproperty_MonitoringAttributeName(), this.getString(), "monitoringAttributeName", null, 1, 1, Monitoringproperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getMonitoringproperty_MonitoringAttributeValue(), this.getString(), "monitoringAttributeValue", null, 1, 1, Monitoringproperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMonitoringproperty_MonitoringPropertyName(), this.getString(), "monitoringPropertyName", null, 1, 1, Monitoringproperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMonitoringproperty_MonitoringPropertyValue(), this.getString(), "monitoringPropertyValue", null, 0, 1, Monitoringproperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMonitoringproperty_MonitoringPropertyId(), this.getString(), "monitoringPropertyId", null, 0, 1, Monitoringproperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); EOperation op = initEOperation(getMonitoringproperty__AppliesConstraint__DiagnosticChain_Map(), ecorePackage.getEBoolean(), "appliesConstraint", 0, 1, IS_UNIQUE, IS_ORDERED); addEParameter(op, ecorePackage.getEDiagnosticChain(), "diagnostics", 0, 1, IS_UNIQUE, IS_ORDERED); diff --git a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringpropertyImpl.java b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringpropertyImpl.java index ba9b37a..accbe76 100644 --- a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringpropertyImpl.java +++ b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/MonitoringpropertyImpl.java @@ -58,52 +58,73 @@ import org.eclipse.ocl.pivot.values.IntegerValue; * The following features are implemented: * </p> * <ul> - * <li>{@link monitoring.impl.MonitoringpropertyImpl#getMonitoringAttributeName <em>Monitoring Attribute Name</em>}</li> - * <li>{@link monitoring.impl.MonitoringpropertyImpl#getMonitoringAttributeValue <em>Monitoring Attribute Value</em>}</li> + * <li>{@link monitoring.impl.MonitoringpropertyImpl#getMonitoringPropertyName <em>Monitoring Property Name</em>}</li> + * <li>{@link monitoring.impl.MonitoringpropertyImpl#getMonitoringPropertyValue <em>Monitoring Property Value</em>}</li> + * <li>{@link monitoring.impl.MonitoringpropertyImpl#getMonitoringPropertyId <em>Monitoring Property Id</em>}</li> * </ul> * * @generated */ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringproperty { /** - * The default value of the '{@link #getMonitoringAttributeName() <em>Monitoring Attribute Name</em>}' attribute. + * The default value of the '{@link #getMonitoringPropertyName() <em>Monitoring Property Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @see #getMonitoringAttributeName() + * @see #getMonitoringPropertyName() * @generated * @ordered */ - protected static final String MONITORING_ATTRIBUTE_NAME_EDEFAULT = null; + protected static final String MONITORING_PROPERTY_NAME_EDEFAULT = null; /** - * The cached value of the '{@link #getMonitoringAttributeName() <em>Monitoring Attribute Name</em>}' attribute. + * The cached value of the '{@link #getMonitoringPropertyName() <em>Monitoring Property Name</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @see #getMonitoringAttributeName() + * @see #getMonitoringPropertyName() * @generated * @ordered */ - protected String monitoringAttributeName = MONITORING_ATTRIBUTE_NAME_EDEFAULT; + protected String monitoringPropertyName = MONITORING_PROPERTY_NAME_EDEFAULT; /** - * The default value of the '{@link #getMonitoringAttributeValue() <em>Monitoring Attribute Value</em>}' attribute. + * The default value of the '{@link #getMonitoringPropertyValue() <em>Monitoring Property Value</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @see #getMonitoringAttributeValue() + * @see #getMonitoringPropertyValue() * @generated * @ordered */ - protected static final String MONITORING_ATTRIBUTE_VALUE_EDEFAULT = null; + protected static final String MONITORING_PROPERTY_VALUE_EDEFAULT = null; /** - * The cached value of the '{@link #getMonitoringAttributeValue() <em>Monitoring Attribute Value</em>}' attribute. + * The cached value of the '{@link #getMonitoringPropertyValue() <em>Monitoring Property Value</em>}' attribute. * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @see #getMonitoringAttributeValue() + * @see #getMonitoringPropertyValue() * @generated * @ordered */ - protected String monitoringAttributeValue = MONITORING_ATTRIBUTE_VALUE_EDEFAULT; + protected String monitoringPropertyValue = MONITORING_PROPERTY_VALUE_EDEFAULT; + + /** + * The default value of the '{@link #getMonitoringPropertyId() <em>Monitoring Property Id</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getMonitoringPropertyId() + * @generated + * @ordered + */ + protected static final String MONITORING_PROPERTY_ID_EDEFAULT = null; + + /** + * The cached value of the '{@link #getMonitoringPropertyId() <em>Monitoring Property Id</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getMonitoringPropertyId() + * @generated + * @ordered + */ + protected String monitoringPropertyId = MONITORING_PROPERTY_ID_EDEFAULT; /** * <!-- begin-user-doc --> @@ -129,8 +150,8 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp * <!-- end-user-doc --> * @generated */ - public String getMonitoringAttributeName() { - return monitoringAttributeName; + public String getMonitoringPropertyName() { + return monitoringPropertyName; } /** @@ -138,11 +159,11 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp * <!-- end-user-doc --> * @generated */ - public void setMonitoringAttributeName(String newMonitoringAttributeName) { - String oldMonitoringAttributeName = monitoringAttributeName; - monitoringAttributeName = newMonitoringAttributeName; + public void setMonitoringPropertyName(String newMonitoringPropertyName) { + String oldMonitoringPropertyName = monitoringPropertyName; + monitoringPropertyName = newMonitoringPropertyName; if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME, oldMonitoringAttributeName, monitoringAttributeName)); + eNotify(new ENotificationImpl(this, Notification.SET, MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME, oldMonitoringPropertyName, monitoringPropertyName)); } /** @@ -150,8 +171,8 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp * <!-- end-user-doc --> * @generated */ - public String getMonitoringAttributeValue() { - return monitoringAttributeValue; + public String getMonitoringPropertyValue() { + return monitoringPropertyValue; } /** @@ -159,11 +180,32 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp * <!-- end-user-doc --> * @generated */ - public void setMonitoringAttributeValue(String newMonitoringAttributeValue) { - String oldMonitoringAttributeValue = monitoringAttributeValue; - monitoringAttributeValue = newMonitoringAttributeValue; + public void setMonitoringPropertyValue(String newMonitoringPropertyValue) { + String oldMonitoringPropertyValue = monitoringPropertyValue; + monitoringPropertyValue = newMonitoringPropertyValue; if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE, oldMonitoringAttributeValue, monitoringAttributeValue)); + eNotify(new ENotificationImpl(this, Notification.SET, MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE, oldMonitoringPropertyValue, monitoringPropertyValue)); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public String getMonitoringPropertyId() { + return monitoringPropertyId; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public void setMonitoringPropertyId(String newMonitoringPropertyId) { + String oldMonitoringPropertyId = monitoringPropertyId; + monitoringPropertyId = newMonitoringPropertyId; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_ID, oldMonitoringPropertyId, monitoringPropertyId)); } /** @@ -213,10 +255,12 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME: - return getMonitoringAttributeName(); - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE: - return getMonitoringAttributeValue(); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME: + return getMonitoringPropertyName(); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE: + return getMonitoringPropertyValue(); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_ID: + return getMonitoringPropertyId(); } return super.eGet(featureID, resolve, coreType); } @@ -229,11 +273,14 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME: - setMonitoringAttributeName((String)newValue); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME: + setMonitoringPropertyName((String)newValue); + return; + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE: + setMonitoringPropertyValue((String)newValue); return; - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE: - setMonitoringAttributeValue((String)newValue); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_ID: + setMonitoringPropertyId((String)newValue); return; } super.eSet(featureID, newValue); @@ -247,11 +294,14 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp @Override public void eUnset(int featureID) { switch (featureID) { - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME: - setMonitoringAttributeName(MONITORING_ATTRIBUTE_NAME_EDEFAULT); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME: + setMonitoringPropertyName(MONITORING_PROPERTY_NAME_EDEFAULT); + return; + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE: + setMonitoringPropertyValue(MONITORING_PROPERTY_VALUE_EDEFAULT); return; - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE: - setMonitoringAttributeValue(MONITORING_ATTRIBUTE_VALUE_EDEFAULT); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_ID: + setMonitoringPropertyId(MONITORING_PROPERTY_ID_EDEFAULT); return; } super.eUnset(featureID); @@ -265,10 +315,12 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp @Override public boolean eIsSet(int featureID) { switch (featureID) { - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_NAME: - return MONITORING_ATTRIBUTE_NAME_EDEFAULT == null ? monitoringAttributeName != null : !MONITORING_ATTRIBUTE_NAME_EDEFAULT.equals(monitoringAttributeName); - case MonitoringPackage.MONITORINGPROPERTY__MONITORING_ATTRIBUTE_VALUE: - return MONITORING_ATTRIBUTE_VALUE_EDEFAULT == null ? monitoringAttributeValue != null : !MONITORING_ATTRIBUTE_VALUE_EDEFAULT.equals(monitoringAttributeValue); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_NAME: + return MONITORING_PROPERTY_NAME_EDEFAULT == null ? monitoringPropertyName != null : !MONITORING_PROPERTY_NAME_EDEFAULT.equals(monitoringPropertyName); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_VALUE: + return MONITORING_PROPERTY_VALUE_EDEFAULT == null ? monitoringPropertyValue != null : !MONITORING_PROPERTY_VALUE_EDEFAULT.equals(monitoringPropertyValue); + case MonitoringPackage.MONITORINGPROPERTY__MONITORING_PROPERTY_ID: + return MONITORING_PROPERTY_ID_EDEFAULT == null ? monitoringPropertyId != null : !MONITORING_PROPERTY_ID_EDEFAULT.equals(monitoringPropertyId); } return super.eIsSet(featureID); } @@ -298,10 +350,12 @@ public class MonitoringpropertyImpl extends MixinBaseImpl implements Monitoringp if (eIsProxy()) return super.toString(); StringBuffer result = new StringBuffer(super.toString()); - result.append(" (monitoringAttributeName: "); - result.append(monitoringAttributeName); - result.append(", monitoringAttributeValue: "); - result.append(monitoringAttributeValue); + result.append(" (monitoringPropertyName: "); + result.append(monitoringPropertyName); + result.append(", monitoringPropertyValue: "); + result.append(monitoringPropertyValue); + result.append(", monitoringPropertyId: "); + result.append(monitoringPropertyId); result.append(')'); return result.toString(); } diff --git a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/SensorImpl.java b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/SensorImpl.java index d824030..5f433b2 100644 --- a/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/SensorImpl.java +++ b/de.ugoe.cs.rwm.mocci.model/src-gen/monitoring/impl/SensorImpl.java @@ -37,6 +37,7 @@ import org.modmacao.occi.platform.impl.ApplicationImpl; * <li>{@link monitoring.impl.SensorImpl#getOcciSensorPeriod <em>Occi Sensor Period</em>}</li> * <li>{@link monitoring.impl.SensorImpl#getOcciSensorGranularity <em>Occi Sensor Granularity</em>}</li> * <li>{@link monitoring.impl.SensorImpl#getOcciSensorAccuracy <em>Occi Sensor Accuracy</em>}</li> + * <li>{@link monitoring.impl.SensorImpl#getMonitoringPropertyMixin <em>Monitoring Property Mixin</em>}</li> * </ul> * * @generated @@ -162,6 +163,26 @@ public class SensorImpl extends ApplicationImpl implements Sensor { */ protected String occiSensorAccuracy = OCCI_SENSOR_ACCURACY_EDEFAULT; + /** + * The default value of the '{@link #getMonitoringPropertyMixin() <em>Monitoring Property Mixin</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getMonitoringPropertyMixin() + * @generated + * @ordered + */ + protected static final String MONITORING_PROPERTY_MIXIN_EDEFAULT = null; + + /** + * The cached value of the '{@link #getMonitoringPropertyMixin() <em>Monitoring Property Mixin</em>}' attribute. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getMonitoringPropertyMixin() + * @generated + * @ordered + */ + protected String monitoringPropertyMixin = MONITORING_PROPERTY_MIXIN_EDEFAULT; + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -307,6 +328,27 @@ public class SensorImpl extends ApplicationImpl implements Sensor { eNotify(new ENotificationImpl(this, Notification.SET, MonitoringPackage.SENSOR__OCCI_SENSOR_ACCURACY, oldOcciSensorAccuracy, occiSensorAccuracy)); } + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public String getMonitoringPropertyMixin() { + return monitoringPropertyMixin; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public void setMonitoringPropertyMixin(String newMonitoringPropertyMixin) { + String oldMonitoringPropertyMixin = monitoringPropertyMixin; + monitoringPropertyMixin = newMonitoringPropertyMixin; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, MonitoringPackage.SENSOR__MONITORING_PROPERTY_MIXIN, oldMonitoringPropertyMixin, monitoringPropertyMixin)); + } + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -327,6 +369,8 @@ public class SensorImpl extends ApplicationImpl implements Sensor { return getOcciSensorGranularity(); case MonitoringPackage.SENSOR__OCCI_SENSOR_ACCURACY: return getOcciSensorAccuracy(); + case MonitoringPackage.SENSOR__MONITORING_PROPERTY_MIXIN: + return getMonitoringPropertyMixin(); } return super.eGet(featureID, resolve, coreType); } @@ -357,6 +401,9 @@ public class SensorImpl extends ApplicationImpl implements Sensor { case MonitoringPackage.SENSOR__OCCI_SENSOR_ACCURACY: setOcciSensorAccuracy((String)newValue); return; + case MonitoringPackage.SENSOR__MONITORING_PROPERTY_MIXIN: + setMonitoringPropertyMixin((String)newValue); + return; } super.eSet(featureID, newValue); } @@ -387,6 +434,9 @@ public class SensorImpl extends ApplicationImpl implements Sensor { case MonitoringPackage.SENSOR__OCCI_SENSOR_ACCURACY: setOcciSensorAccuracy(OCCI_SENSOR_ACCURACY_EDEFAULT); return; + case MonitoringPackage.SENSOR__MONITORING_PROPERTY_MIXIN: + setMonitoringPropertyMixin(MONITORING_PROPERTY_MIXIN_EDEFAULT); + return; } super.eUnset(featureID); } @@ -411,6 +461,8 @@ public class SensorImpl extends ApplicationImpl implements Sensor { return OCCI_SENSOR_GRANULARITY_EDEFAULT == null ? occiSensorGranularity != null : !OCCI_SENSOR_GRANULARITY_EDEFAULT.equals(occiSensorGranularity); case MonitoringPackage.SENSOR__OCCI_SENSOR_ACCURACY: return OCCI_SENSOR_ACCURACY_EDEFAULT == null ? occiSensorAccuracy != null : !OCCI_SENSOR_ACCURACY_EDEFAULT.equals(occiSensorAccuracy); + case MonitoringPackage.SENSOR__MONITORING_PROPERTY_MIXIN: + return MONITORING_PROPERTY_MIXIN_EDEFAULT == null ? monitoringPropertyMixin != null : !MONITORING_PROPERTY_MIXIN_EDEFAULT.equals(monitoringPropertyMixin); } return super.eIsSet(featureID); } @@ -437,6 +489,8 @@ public class SensorImpl extends ApplicationImpl implements Sensor { result.append(occiSensorGranularity); result.append(", occiSensorAccuracy: "); result.append(occiSensorAccuracy); + result.append(", monitoringPropertyMixin: "); + result.append(monitoringPropertyMixin); result.append(')'); return result.toString(); } diff --git a/src/main/resources/occi/runtime.occic b/src/main/resources/occi/runtime.occic deleted file mode 100755 index b83694b..0000000 --- a/src/main/resources/occi/runtime.occic +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="ASCII"?> -<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:occi="http://schemas.ogf.org/occi/core/ecore"> - <occi:Configuration> - </occi:Configuration> -</xmi:XMI> diff --git a/src/test/java/de/ugoe/cs/rwm/mocci/DeployHadoopMonitoringTest.java b/src/test/java/de/ugoe/cs/rwm/mocci/DeployHadoopMonitoringTest.java index 5dd849e..f9536cb 100644 --- a/src/test/java/de/ugoe/cs/rwm/mocci/DeployHadoopMonitoringTest.java +++ b/src/test/java/de/ugoe/cs/rwm/mocci/DeployHadoopMonitoringTest.java @@ -46,7 +46,7 @@ public class DeployHadoopMonitoringTest { TestUtility.extensionRegistrySetup(); } - //@Before + @Before public void deprovisionEverything() { CachedResourceSet.getCache().clear(); Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/Empty.occic")); @@ -55,7 +55,7 @@ public class DeployHadoopMonitoringTest { deployer.deploy(occiPath); } - @Ignore + @Test public void deployHadoopWithNewMonitoring() { CachedResourceSet.getCache().clear(); System.out.println(OcciRegistry.getInstance().getRegisteredExtensions()); @@ -80,8 +80,6 @@ public class DeployHadoopMonitoringTest { } - - @Ignore @Test public void resolveProxies() { MonitoringPackage.eINSTANCE.eClass(); diff --git a/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployHadoopMonitoringTestLive.java b/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployHadoopMonitoringTestLive.java new file mode 100644 index 0000000..bb8b7a6 --- /dev/null +++ b/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployHadoopMonitoringTestLive.java @@ -0,0 +1,81 @@ +package de.ugoe.cs.rwm.mocci.live; + +import static org.junit.Assert.assertTrue; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.eclipse.cmf.occi.core.Configuration; +import org.eclipse.cmf.occi.core.Link; +import org.eclipse.cmf.occi.core.Mixin; +import org.eclipse.cmf.occi.core.OCCIPackage; +import org.eclipse.cmf.occi.core.util.OcciRegistry; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.epsilon.emc.emf.CachedResourceSet; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; + +import de.ugoe.cs.rwm.docci.MartDeployer; +import de.ugoe.cs.rwm.docci.ModelUtility; +import de.ugoe.cs.rwm.mocci.TestUtility; +import de.ugoe.cs.rwm.docci.connector.Connector; +import de.ugoe.cs.rwm.docci.connector.LocalhostConnector; +import de.ugoe.cs.rwm.docci.connector.MartConnector; +import de.ugoe.cs.rwm.tocci.Transformator; +import de.ugoe.cs.rwm.tocci.TransformatorFactory; +import de.ugoe.cs.rwm.tocci.occi2openstack.OCCI2OPENSTACKTransformator; +import monitoring.MonitoringPackage; + +public class DeployHadoopMonitoringTestLive { + String manNWid = "urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590"; + String manNWRuntimeId = "75a4639e-9ce7-4058-b859-8a711b0e2e7b"; + String sshKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"; + String userData = "I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"; + + + @BeforeClass + public static void OCCIRegistrySetup() { + TestUtility.loggerSetup(); + TestUtility.extensionRegistrySetup(); + } + + @Before + public void deprovisionEverything() { + CachedResourceSet.getCache().clear(); + Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/Empty.occic")); + Connector conn = new MartConnector("192.168.35.45", 8080, "ubuntu", "~/key.pem"); + MartDeployer deployer = new MartDeployer(conn); + deployer.deploy(occiPath); + } + + @Test + public void deployHadoopWithNewMonitoring() { + CachedResourceSet.getCache().clear(); + Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/hadoopClusterNewExt.occic")); + + Transformator trans = TransformatorFactory.getTransformator("OCCI2OCCI"); + trans.transform(occiPath, occiPath); + + OCCI2OPENSTACKTransformator trans2 = OCCI2OPENSTACKTransformator.getInstance(); + trans2.setTransformationProperties(manNWRuntimeId, sshKey, userData, manNWid); + + trans2.transform(occiPath, occiPath); + + + Connector conn = new MartConnector("192.168.35.45", 8080, "ubuntu", "~/key.pem"); + MartDeployer deployer = new MartDeployer(conn); + + deployer.deploy(occiPath); + + assertTrue(TestUtility.equalsRuntime(occiPath, conn)); + + } +} diff --git a/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java b/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java deleted file mode 100644 index c7a0b16..0000000 --- a/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.ugoe.cs.rwm.mocci.live; - -import static org.junit.Assert.assertTrue; - -import java.nio.file.Path; -import java.nio.file.Paths; - -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.eclipse.cmf.occi.core.util.OcciRegistry; -import org.eclipse.epsilon.emc.emf.CachedResourceSet; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -import de.ugoe.cs.rwm.docci.MartDeployer; -import de.ugoe.cs.rwm.docci.ModelUtility; -import de.ugoe.cs.rwm.mocci.TestUtility; -import de.ugoe.cs.rwm.docci.connector.Connector; -import de.ugoe.cs.rwm.docci.connector.MartConnector; -import de.ugoe.cs.rwm.tocci.Transformator; -import de.ugoe.cs.rwm.tocci.TransformatorFactory; - -public class DeployWorkflowLiveTest { - @BeforeClass - public static void OCCIRegistrySetup() { - TestUtility.loggerSetup(); - TestUtility.extensionRegistrySetup(); - } - - @Before - public void deprovisionEverything() { - CachedResourceSet.getCache().clear(); - Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/Empty.occic")); - Connector conn = new MartConnector("localhost", 8080, "root", "~/key.pem"); - MartDeployer deployer = new MartDeployer(conn); - deployer.deploy(occiPath); - } - - @Test - public void deployWaaS() { - CachedResourceSet.getCache().clear(); - System.out.println(OcciRegistry.getInstance().getRegisteredExtensions()); - Logger.getRootLogger().setLevel(Level.FATAL); - Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/MLSDiffVM.occic")); - - Transformator trans = TransformatorFactory.getTransformator("OCCI2OCCI"); - trans.transform(occiPath, occiPath); - - Connector conn = new MartConnector("localhost", 8080, "root", "~/key.pem"); - MartDeployer deployer = new MartDeployer(conn); - - deployer.deploy(occiPath); - } -} diff --git a/src/test/java/de/ugoe/cs/rwm/mocci/live/package-info.java b/src/test/java/de/ugoe/cs/rwm/mocci/live/package-info.java deleted file mode 100644 index 9588e64..0000000 --- a/src/test/java/de/ugoe/cs/rwm/mocci/live/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - * - */ -/** - * @author erbel - * - */ -package de.ugoe.cs.rwm.mocci.live; \ No newline at end of file diff --git a/src/test/resources/martserver-plugins/de.ugoe.cs.rwm.mocci.connector.jar b/src/test/resources/martserver-plugins/de.ugoe.cs.rwm.mocci.connector.jar index 0b26d4f33c3bb1448a98de4b594d6e0a33fa20d1..5e27625ecfd34a53d28fc2f7bd3fc229ca275d09 100644 GIT binary patch delta 8436 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ⅇD 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 delta 5747 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ADy34`UKMn2m5~=oEUN5C|wM{Uyx2 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 Bc9;MF diff --git a/src/test/resources/martserver-plugins/de.ugoe.cs.rwm.mocci.model.jar b/src/test/resources/martserver-plugins/de.ugoe.cs.rwm.mocci.model.jar index 66c26f8f8b6d9d1b4fcf0a60cf1a1c3721a54283..cdcb1c94f97bcc7a982480c1f93673937c598f3e 100644 GIT binary patch delta 28132 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 MW5jR=J^v8>A7O<bqyPW_ delta 27548 zcmY(qRZtyD(>08{1lhQ|ySux)yE_DjuyJ>HcXx;2?oP0cy9Edu_|AFW|KdMaJ=3*n zE>>4{ub!T1ErHz0g+x}7hlD}^1A~JDE4L3zLZ*WJ$24&zf&Xh$rod_bXP>}(kpI~$ z(!@p;;evyK$)@x{5CJ`snv{lFzJ<@1aV%ij*s6O&tT1_-nqNR5swD+)7_LjyqZ?cB z%lzPkAqtETGl(psD@AI5+WES?d3?WoKg0mL0nr89Lb*b*!?;#|$jRl=94_>q8PtWT zBb7glE^GB7=EJA_9?^GP@@wuH{^Pyt$!vr>qj#N$y_T|IhY1Y*BQ|I5YU5^D!0|CZ zWw))eN?2{g-J775$%dizPAGe0T-CLxHnoJ%_1?4CzpLEXswQ|A8;rYh;h2UJ;u<gI zS9`GEHek|<>eRMNCyTpXsOS@)V;~bmU<<>{w!gP<;;)ODl|E$8Aqa!S=N^BiA7Kb% z$OBW@0lRqXhfedt;UauTa>sI~3wjv94w4QU2Q25xck{Eng8zrr7Cflmu>bPdf{N4# zj`lB+{Fc(*4F3?R009O@k)leA({hF^`9IEESWxqz{)btt8%kjO2P5|nhWuYl%H$Xd zuuP3#8A9}1z9b0B7(`BmPLFT19exul#i~^Z4Ij4CtUFKY)sxZ3TLPRNA_gU}p`1!a zeZ!BL?d=~|Xuc(Ga0Xk5=mXOOZ-v|dxM1Sq@x~kp{5ngXIOL%IUV~0<@^cG+ZY3qT zsX2*YnE;)Q`aR_Pf?@e16$D>R92MOhFl$wpQCDe;PSKoWb6_*JS4<v)sayP%+}1tT z)~ZyNsMJ&Tpmqk{+$WB%nTdQQM4BqpSRPQ4BsaX<7dVDPUPJSIW%60#+3s?`<8H+f zHl6n{)WYl8wSEF)&L#NK#q-3(nQx?YDgZt{`7FT{0@WHYjmV?BZT#@5WPe01*PBG{ zFXdOprjAWgIOH7nC0a*Uh`<RJ?*SLxX|xvC>@);Z!i{Sf#5mU;<8X@cpFk+ug|!ke z!+?QxB7=c3|Bq4;DA*Jq04Y#KLPbOsGch<hxsi@UPoz2wOKmU`Z<!_CBs*1hsu&`; z6O1mVGnmYYhGas6l#C2i-x)-|_7nmH+xrOKJ@wRMyQs=17qkv|7JBZ#^()BgVowQh zciRI88@{VS#bDWjh3t4yN#Hf2@Xw6VkD^!<DUIY<)QLryAy=3}N&=QSke#SAkzk?6 zL~il8^1H$wo0-8krFN$1NHJJX7>*!J^+fqa`bE7*rj5{r*HYb7_y>9?x*<2EyAd|! zdq-}F2q*{)B}zw)(-2eVlW?Ku@Z3|}Yp`-1+7h>eaR1~}=9A}B8<Di5Gov%#UpPLP zMPM@{@<~#UG&jBJcmm^1@yZL$v^0O!qT<|J6tkK`E!|rbva$;2AycU74l9f%2U!%) z#b(7ojERx&rYhzHMR{5$<JLH{sBKO|<&^+wFS9jiX-*1Nb8J|k`fc*hu=0|XC^e!a zs{0oexbdt!lRz_P!YJ>>oK}2J7Hqbf9TeFOD;nyCY)M(>8$k7nRBk-3gYy*!QPtMI z>A}>wm5@3^&dlTJx)9F}7X>k1TxuE|9WHTDz0AB;e~$*G+Sp2YINxw>+$!bj1g_?} zHv=!Z6;<W6sF$Y_SqYQJb+J^*H5u)7gF+cn3mNXT1rjB!HfL*rBWNY+5-%$t-oPVl z=dpw#UX{Cg6_~}G>%?|ARtlAI^|=lqelm74{*f7V*}HK*PVeCL?#f<|5&QMiYdgkD z*l3tY_zybofrlCKJq#;a%10+c%HIv;S1Q%XrW#()z~77qB(9O2;VqiEf(ox(_bB&F z_eA$XtYNO|xX<9n5hKzg<0EJX7{%GHoU!kzzuC?3#)0MEuf9()N0yAR9>^cilg)JM zjr~x3MZRaeCv;`Bwl-<T9``9`H2MIIC%i;iZwz7B7ENR6+3aUCGHeV9gcbNu2cV_? zJ?&wpIi5wLFsEzncB)6y#^3*lU!s39a_!*i*U6oi|M~m3+hAb)lAT^b7nD~8v+?6C z4gI{etC8MM$4!!qJeI~Q_g<@CcHufLib&Jg!w;j8{;X`qu~XP3v~mutt=mQ6d>RWy zVkn$5MdAD_a1nUtDkTI{`;=#Q=<eR|e7#VFM!_h|q7fN|!}1IN=T5oD!2llJp)VP| zeQuc-wWp6ejengA0+e&4OvpCdYjnh}D_y@Df_*0+9CJIasZj-xiC1*fKF(g09A!ms zQR)%js`sEUR&LAG9uH!)pM39kYPRI`jU6xT9SkimY1{MdF75Q!H+-|}Dz^9>F7@<{ z?Jsfluti>GRby!YDs`1>>^wHi79AIzE`4UCux0Qq8hd+qf%xAv9a)7{Jl&LAKhGs5 z<ptu&Mt%(;ln>9+talO^@M5N7^~0xh;t~U;WNr5Yj7tX$30-T3OX9^myjN9^>Yc*( z%(X8{={>Y?4FxLDvsEwJAiFOD*&o$*9@VU?K{vZUwVkCBJVUI{Yg;_Dl=D{Q@vrKT z^GoP*x0(ipuFK|@%jVY0-Y(Rz&(yFl)c$HzeG+EiEqK;rpUXjNN@X1yz_vAT>PQ0( zYS+6Z8aO2y01NhMH8Vwo4FHE82U0`Z%z6$3ZM>pp>2_*AcQ<w^T^z@vkzgPyQ=3ax z7!#J92QW752Fv&CQwQ->@2uqgkm0d|MdX>eL&eH8@g|{zWkpQoxuKC|X^3WZet+tZ zAQe-rwm~3-ZlqWjVV(tR_aypbY8jA6`9=b$8$Q@fAgUW=>xODI^`lc&%dEXNoEFuj zsCE!tHwMs*Qez>wHVNa9Cf%q`G+gtW=g%Yt4-Ni(zQYij5Bj(TyV3;K2h;oks*jSu z@7~l2#3jx4Dc#@2k4cVfTAngtSE+KFl$_1_PRUlRN1R=ne<lPr=@BWYV~&9yUGje> z={A{}C&2+eDv|`r+((TETfc*P>Bo=FUlrpg;9n(_rYe{U{7)`O3woFmnGM8`DlgSu zmpHZh)e>y;0(1^LW!pkl4t0aBJ5>eq!|l9+zM>r?${r0?`w>2Knh5twUX=e^DzYv& zz$5>uz8erJEBHb{rGIK}t!u`5H$re_pfhhJEKwA96m~H@ybyZavuWO0qUHJw(`Wo* ziP0m)JqY$ib&N=aV=R#;qW(t7Ls9XzAK2Ruz9G6OhS`GEoY}&X0G)SiMl;el@vTl) zIouCv>|~8MME98)O1zm?&~@dyHI(m=F@x{C{MO|;m%a*kX}XNmU@?%m`P@xd<W2LV zfmVFV;NlnZJVy1+Z<22sS~-LTPQTM0nWiI3S{pDizf?9Te_Y3r8hzg`lD}NJrIRL* z`SIgVheFk?b7vgR0V~6%&SIw>d01zhhoJ*Y>X&T@X_@9UQ$^6BmOjssjYqCbiSsXl zz)?bJDA6W0U=>U1SR5fuz$TiJckzdPkyuqm`e)56rS58S7;CbQc&JdH5KN{K;wY4+ zrI-}XW&pTfxdjB)Xr&WgM`r0Z(Koo1Q24&#eHWCFWnv3qn1V<)_Tsc~j+%%lqFACC z=Kwsa`&$#7=SVzM8Jq+Q(jD&PK@QV=0%;nhB&~E865O}-+2t7Yg8v4I_4{y!CL$PE zD@96RGFi(ap)=zDbe1^n5IEewI%|*3L@foG-Wn(p41j9_k=_eNve)NmsHEv`kKcD$ z-}I3K|Ngy!48+&zNE}b*n#NM7#l+2PaUo*Fu%}{z!|WT7_uZ$Efs!yL`B@aS1>yF0 zDn4)#QMz8l5(ItIH|c#Qg}Smpt%e^O|JzIB=v)9Y?x+cS`H7a)<T+#@&bL3>Jmc(_ z2>}otm7LjoWivb6)^>Z1vZL9v9Rtu5kiYBGT$XQjQU2ME8w<s7%;QAR(X(^I&{dx@ z6n<z8sk60D;kM16Utjn2W4}%CNnx|H#KK$@Up@ySn(7x9Q<23%v&bco5mBQ}Wn9~0 zoA{;+rD#r8GiT7^N{a4&$OJ?g>wjaluLE4UTf$FQN)(S_w)<Vj+i;VwO2jLOgqEWl zVYD!B_ye+Qo+RQmRYIj-I;-i2hzK;NuY3bJeZOqGP?|Q2QK5vrfIqT1m3nyT4E52m zb?Py8E)^B<z`Z=8Y9yOf4`fTnqPF?S!|MU`Kyu77G6g@;5&8&k`zNAt|t!7N|go zz+D5ah7y+H>OzyWrR?Qm!NE39Fpl}f($&$Tej?Y6R4;B7LR1!Dkulr4E}2{0z&d3P z&^!a$0kBm+ApaBg7D2`s$p7^v(=3eti}yQ=!~Y3vJD#@xQ_*C6QLz70(NGB;yO$_n zV4BomVDu^9)M-)zreJ`hy!IvpmTjjqPM%gR%M?4UkD`dJr5u|an-q>{Z%WIp3>1zI zzr+e$oB0)CJiXR-kbkJ?(Kug7iee%jNHSro7&!)+NHls&LW_zvR0akk7(E>v3i;D} z&vCc(q|9DX`2x4wzxUtrpYkW%`tR|czPHc+e1EL~H$gLE9?k$_zHkfAL@;X)sd=xV zw%q|>j4kgtVdh!A^9R>)dj~+0FncC<iZINt`<5?Sfdd`5A3aEWRTPi(0X9LmFmV3! zsE&7k!GdmC_cdV}UiUp-f{=u3Lv`=u0%4q4-W1dCq`(58gi!{RL5#S&CxgnCFQ`;s z3gHFc-w|QHCP6?#n4cOT?d{L(L1&zg45Y8Rfv<_Xp9ml6lppcPuY%Jbkk6kJYag=V z!t{68xSvxDw`|@CV8Ou?bt41A12rbl9YWBSP5|h?+gfxuAT3Ro<XBAvt%pjf!O3kH zK<%+-bg;UmfaIVpo07Imcq}_WAdR*KXGZIe!%12D4hiUVnyBvT1U5gy2Yt$V!ay{m z-Ix!HECA=)kmQF5u@O3p5RSV{W?mEQxNTSoB7?^M{_FsAYwi*seCpOCF<6Gcr0&uc zO#f{~hOMfC|3Htb#M&lvF$I@>hxQv>g-6zTP$N+sepM{d8b(i*bNN%Fq;d4OSX*63 zk!h3*TS4HwW}aM*s^DRwdLG_I0)E!uQ0_TAyRF4+YZ5`>CaqxJP6oLmRn{97d68E= z>3+_iGWSs4GNegGQvGW7Q28+egVihsdKVK+atzWwUnKAj(w8^|X}$Fk?_^1~*3PDa z@qSAf<Vnf=w{S+dT@>~)vYyz|{s5ZAh6--mzplU`sGgZhti9qgWTGt@XU~PgvYA^t z26hJuwR;z@fb9}V=0%uCIMYdQW_od+lK#O-HY={#T(LQ#5b6iNmX+%@wIK*x?WGHt zM~8+DW%)ZEKVEv_K4)<bI~~K_hyX@$gbO)&oB8B|_lRbP-77UUHeJR%#uCaDPIWl; zoe7|z?=Kcxc_lCMdU^ZFBAzbco`%rJKQ`_(b&^pAibtIB7%?tZXi|+HnfIMUvsjqx z8F`#j!9JE1SPH7PM#@Y|SEfud-^!O7{S-n;IJyqr5h_2lYS+<QZD%p^e@e!nq7A!w zh4=r_pmRFQLSdI>EyJC3Fy6xx$Ct^@szn1{<4`CN=k+yLSU^TCHHT-Fs-rjdQVivC z6>+4H_tzcHkUBj}x~Pl9via1F1?*~5rC#AuxY}tz{Uj7`ZLiIrQQMef`5k3~#3-}% z3uC>xXV#sJ*dH<U6`nnPp*S0t%XWI0)=#a|hU>hJ3>Tk|kId)uwIrRm>=+Sk2s$1Z zHA3f_IFlC{Qx>H4D_)I#{XF$gT;;W%Z6WeL<}`kuK#^b;M~fIb<7NhH#FA>#1=AYS z>X2*PhpkV6_vwa%-=rw3;98wE=WeSida9*GP?{pWUsz)sOvPkY{dr?nn+ijQd?;L8 z$fkpxEKhC}$^|^*vH*w4#q6TOcVA^7*%b)$QqvXCUgJVuueA?mP(LIJ6M<te2$F+| z*rx;3Te%>IT<-G$oJ?F84X6+C0P6>QfcfFb=+i@J%yW#X>ry~`Vt}{CC{t&gUqX#b ztcwdl{6uH|u~Q*A3#qL~9o-+$yXN*pZy%l0&@7viX$(^-xv)`y);-y_fiKYL^QE#g zZMx(gW#hi&z;nCkKxw<oj5q|9#8J;ONOCkFwi?I0&>WML<DNtm4%^W=z9B0t_5`rD z9H2lG{%wvf*#YH>2@bG)&EA5~UBffr#}yeKjs5)=y)({<2Ic1wLM`)p*6oc!Q$^lf zNRX>S<sCdv^^o;Gcr?>@g;k&?Yg9Qx$3rfxk5V0PdwI1BECJ#0+_6TOGF#agLv<<L z_T)=dxjvfazPjWAf~0-6`F_b|<pn{t3wF%6F|1WJfY5B|xm6TI_0W#bvO)C;W(0Wr z#ktp`v?8sB#?KPrttSKQY6lkvwJ<*)459-?7jILIF3o+RCNAve%6cH(Hfn(?YZ!4V zYn@rRrQ%vNVokIzf!e)VIgHsWUXH3O>W!u=u|VNLK(E3m<XvEFMvZr(xL&+l*sq*p z-3XiM7!1y1kU^j3JwmS<flf{OTP-dfk(8XDvYVAJUc8FHrfakHe7@DYKn%}5`_9_Z z64p)Y(2-qlI78eCwg~VwplBA)Ga;;~R<ub)gT)4!mN92_SvJ(#YxOqLu>I`!+go{f z+7siJe$L#EPoamOy!zH$xGGPuBR{<IPS{E-x{vygtzt?>#;1>Ko88^!mL^ln;VH<c zr(ma9#}X^jS;Hlfyiu%VDE^3<9&#&I3|r~Lpz`oHt#tpu)DGYg5+3>SKs(G}b90f? z3YWv#&&)ZtJaNJ1elPX+w|J!hqqy&)x(34S2kF&ky!GLXY)1NQ$j59dJ5oOe3Xw~e z>v_7Nx8!ywqM<iBy5{@?43Eqny_aMnBSKZ&JlXVx$WK^l_}aR?J0`pdH}%ALB=bZQ zWZAEE9L;Iv$CQ9pC2HapE4)lniYqfawuXDkMp>FSPm&qTo}|3?G}&bu*v9hO)kPdX zCr-Pz<4UZ8QQ`@u3@zx5hsW|HblZdu>?{EE^VmQ&y=l025lNc*HVWgfll1;_?D$$c zW7untS<|#b0Rel5bpLh>&EqVx4~qHwW5x>D{5ZPamrLLj4#?YJ0$0#pFsr<q(0B<8 zgqxM$+P}3SpF}2=!!6}-`-GB&#z1dQI^subr+>U?)<ibg#ojXO`{t1um6}zG9nN{h z^#^Zq^<dL*^7$l}+x)O|w8#W$$Y`qFacgWRk*;XDiSRjNMc?}^17LT>_1GH2Y0jE7 zktylW@&!~ldxq5n{hq8mf}CKD={$)So>ux^qsU%wKbf0CV1271OAW}k{7OtAOJcM4 z5_*-`z!IEBqgp&K5y&ZD&O6?k|4PX7f#liPP`dvvx)85D{vDH4?K4&XLY@xqZ!=)f zM@Toj=4Y9wZz^<3R!q<Jc~DX4)7|a6aObS8Iy~^F<GwM;s{}wTLsiXO$W@UBM4kLq zT^qMidAj>H{S{A_-`+LE`=@NJiv9y8aKX@xHP_QT&o%GwmD!i)v%A0EE28ANv{V1w zFhONlS>Pi#82T3zn8>wgkDx_|_QrLZryou|`t_=(Uz`p7t2P8{|E`nsw`+!r9XM&3 z@d%)eJEC_bY$F3^s#4%7{9X8+Yo!UuoP=Ek=LJ`T4UR=cJb&C2J*4_j>`fTW0Wu9l zbT>>^S)8^qWS5D8mWeFLg3T2A+K7l1h*I~s!h?TXj_bEib)dqC4;sEhv-|79zG=Dn zjO7h|9gUCy#CFuRZgB88F%-g|}!niA*@W0xSNXzEX_Aq3y1Ul2%3U6lT52>O9p ztvs-T#sj@Sgu&tnRjy9Wfy926;{&0DEC}CX^Ld5FGfNIvfoNNV#uG9=J^_<p9>+b1 z+3ZH?kI4r*T!8KvwDQGtF0;N;^0h-*%3*^q2;vZ&M;RJ^<*X0&JOFX-$`wH5(*j%8 zrtVma{c|aF=uu++!u|>wFFerMZ4(OeAKI@+*fN}8_RR6&owd?qWKS3%sD318$>{U2 zYN|{@QEl^4?Z`koW~98})mHUNMblK3Tj?;6{LvgsV@#{s&=uX?5=+ySTKTW9I+ms^ zwbHmd`ptU%`We9fHRthu>((|5)DC#x``&iAY$=iUD?r0Qa>r0gqw0EmvcC9pbd}$Y z^+7@VcKdLu7L&c;eCng2e&*Bc1iF6ax!ZTZ*wfghsRs6jp1k^~zt#odA$&}!t?B_? za{`FbJEgm5xeJW(qKnD$Gw6FLr2k%+=~F}hAYMOX$NK#z{loBG<m|Q;kexpDcAgLZ zA?B6Y^^V@>)4b~<3VU<)K~hcVoW?sLqSpXZJm0kPly2(0u-q31uhvMhpPP3N@x-s~ zbr*B-0fAIV>eWso=d30x^;R>=C@hmILQH5;Rg6^E{X<~#w#EAW*dW3IF-&ZVg~N>( zb@fGpSwv9xQG@AJt7;1xxNMV@5fTh*if$y^_P~-Gq%8{95H9JBTsvUDFVKs^b%5MR z=nO@e5Ew-q{KFfAU@Tz(tryy9G+`*un|?cnI7Ipm<BnGV!FXtEAG&vVe;eEJbeGOu zT}t%xC*1UO{+>AUHLT1}l7|{Mqk05rY$WlNz*%=6+;A4`E3J1o;KI^qN!Xvtx-Gex zm~VK}Cagnnxs0ls*sl{}{qsSoJBiWwOU#LgQlMOcWKQULWTty>8_0}BZ=Cey4zf;k z!Cg>S=m}6lpVH>~u@1$vb7>7uuY%sOuCPwL0r6TuG^X=+9<vR0=fVW;V7*Dl@XeFi z4b0l2CPRhv!tT5qaBP7KL9YQZ&L4jpb31ok)Ct)M-slYHJp>!NgU?|@YVQvSrG3BH zOpqViF@wG?!QzJr6o>EPlV7jVko0;)HiJcMVt3d!V=B56m?;iShWB-mDKfp4if12= zsg$It*R)EGm3K&nPVk{X8(StERUf8nIS6TiMH8o*<D*azcm$byVs9PZ??4Jg94>`0 z2ulk^T>MP{rp=qc3IxxSR}WI;L6X0xJsYf`ee8#Ozo+oWDG2hro4&&lLS)|81`&SH z(Y<ii4xhRJgcA7gpkohXyafXwZwH+ZWc_iChnx>{UI;&s`^l<a46BHKGS>}hm(9Lp zV-ByEA$^Jf`C^4royNFJd+rp^Nk5_<q5b9G`1%?9qJ>ieLT_c94;xAg4jUw88XAjN zQO>E(X?egC)EJo4h=RsJu8F0Z8hqjBY?n!9k8-aBVe#5i3qAV}D>XC};LKltoGUJ% zCQ`G(PoN{Z#fqfn)e~{T<wv7zYYPXplwFi>wVWG)KQk7>uqPGTp})Y0KFBo=3ML|M z)n@%sFDM!spD^Vs9cv<tXpI9aWXdwW#s{_fcC>!jxj1KRtmY2=sCD_W2@^Ggwnb;G zLnxPBWl_&QP;s|2T6EV>f-s(;&t`NZO`}8Y(~6JLQ}1jfgqX9aJ;Ci%sGSja=KYp- zZh198pj1F?H16c|1@oWATCqu~Al*B~g@>TUUN!aq8fggib8wV@uTq99XWA9u!NA0@ zQeHKvfMFTB?ilO1<6qd*c(O#;=8dcyfwJP?hD1fM{zzgCsj{})PvY>8S}-KUMb@I} z>B!-sBPjlARb1v!l+8}&a<qkzbqKzO(#viYRLmCoQ+4X@cXclR+)-Y!$IYJ1S)y9~ z{pQPQ&oIF2_2z8&Yqu8}Wb`o<@qSmCp?0c61T^=_Jr<Zg)n#fluy}=-#$Zrx_D?#N zHxdYAey4c?z#FICwT3plE(BV4o?SA`H~WVi^QJpD3(Ws!BzjK{#pZb+o9@sxGJ8dt zwoK31yy#)rdniI~aJhIlxQA5wt1<*2UfY)@>Yci`Co*^fWy3c3-G#$CyKQ13;ws5^ z0-5$1g8+T|E{`@0OBk2e!gvWpvF_n!NhL`?lKvJ2-E@kWKf4~6qASpzN0~4bD3()u zsuZQmP?+2CRahQQ%6e!_Rzc8T3yvNXeR}I^$JEui`B3I~Wr{HDZfOgF`_VI!FX-)7 zGA|Kd?`W@;n)b^UWGmX4LtGytcfW}X0wH&bK5hIfYc-esYwBy0nMzX~*nnePgDN}% z3&aShyvi)8GMLSB!FXL>RLheePC<BI-Qp1Sja*Xlt&RLyT7C#AC3al(vE>>@MvO(J zD2pn&+=zy+=99T1`p>0Oc{aUggGUxr01l}rwPY?)Eps2r0)<d@x%k?xzn9%@z$*zA z#nR-gTs#fxaoRe|RTGJhLM%lLyZ&|4({vT}2t%hS-W={%`a0ZZ+PZwV)^#;=rQ;`# zuaRNcwAgq>YvaN$v+xsI+xkrTred=NGs)3PE6HOz9P4WIbp|gSQD!fkz-es#H)f)N zQQmPi`MokV`T5Z$Ecu`5<iC<@fJT<MgL;;@V``R$C9md=h9%8z(=?XH>7*yqhIScp z`b{gughWijetjk5s}lKh`CbN^zr$+rcBn~;A=I>HZL3n;?M4~{Bj!Cm6vA(#@ecE| z|1M5By{P!wSVg32h_-b%FNrvLkmMZ_8GO=g^{m=3Y0W&S_{{PgXh?pi0hU%)mmPd~ zVU3NiGI*SB%C66MzV>HoO;D};mF-_bJZ-pvabhqhCSz+isfl%D*wXcEyt3FFZO*Yo zoi<AUCQmJoqffb=$QsdM*&C7rK{%&v{EU}G#8^O}Of{ivW1Al>@ZIKsC7uwd~+S zrL!COp^}Bqrz7`gaYvI%0|?Vac{u(O6&rGv#5%w>;ub1ts;ZmJqg21y@5bi4NPYNi znq?Ypnr50u9){ZDNHx(FUpUPby~3h5CWlR_B%*!ChumB3hsM@TgMVdv$Fw)9aLMrc z;>{h2qjQC48mC@3eR`@k&U121MjCd;PDylsH1<H|@H}+7_VXQtC~&t_*3m&tmPRkp z58g^mF2G<~32&@Ofy#1oP114)R}jATwR5MZg+EKXMJ{?5b>3eszI@qE3&^Q4)g9N7 zVD$3!K2Ui~U12P!Dr2?E`WLOVX63YDNhrHKX<3fWY<H@1*wC|oCz+MRC)LFAbanm_ z<*>Yf=BzXQxpsrs82G~t`iJf{hw!N!RY`eN>G1h=%?*m)-~H+~9YtcNXHihV#3QS8 zePF+s;T1BClX*npsaNJ}o>f3b)}G_ZbLMNGm5{{=|E#}GLWWAT07_hYfg3bKA?7!v z8BwTu^Fbs#8n@ZPbh2k8if94$JGG-6Q9{YzNEa1VlMwDnyFhT%bIl(wd?O2y@C?Jc zt%tU?qx2hr_TGUE7Unn-_q0FQU>6*fOd&@NPP^lk71G{3E-l$D9SyDY2X{vu@Hw{D zV4Moac3(Vo4}YndyRlgvK5#tYMc*Eb!9rf*{=h<HHnjy|;e|ughlddwa7K)_=nPG8 z`rgj2;NJ<I!vgR2wRJ*Kn_zyfN!xS#a!4PpRM@UUZ`Ml*mtifS2aN%~2Jzrst8raI ztJ;P?#?Vd@$rb8Q)a^rTO)~YYGxw4{^G!ZQSb!9n!kR(241)xop}20LNmneue-@sh zN$xn4FfEa$6xNwPQ$9mXK4n?H$TET2K|YO854h5qK=ODNBmNobc$R+`gk%4lYk|{1 z9_vz~C36RliUrTS24@V&ETPPdATY(0&g8?7wQ&!{^$4w6Hob6QiNP(O!!1uU`2}YM zJy=VTsi|p#PMOInjkAhYzKhbbhGw;mR&Eqg)iKCmn(1qu83)x8Wx|CqBM9}~8IT!; zJ_Gy*`-aDM`atx`gFPx(*KqDgj)@g)$Tg7xL5Rtv+F3A!g5YP{uBc8i%OJ0-r<2~q zP=L_dUY99;sbRa@-GJ2t!uE6NfHQ4@GmnWhsW=mpk!Ug|SiprCV~|4<^v0q60q|pq z;$U@=E76EkIt)AVIu~Xup69?gW!9LD0TyNRNIUT0(>jza$nJxMc^4iUw$7T3wr1(* zD%8?Z{fdcN9UUQD4qA)n^>+*K@_ZmM3#5T<QY9FpVvTh?5Ou(oUZ9owhK0HxsItI_ z9vQ=m6zNKUhJk}78yj_K*;ARWCBj%27|q~z!o=1g{iO={k(Isuv&_z@7%jzb0XRlj z+88!OgdnhQ6yW9I;Op&S=j-EP<Lm2T<?H8R;p>llz`Jb=JBQ{1F6x?GsJz^sKd9x3 z<u^jUK~E%^!4m;Ha(D(fJ@<QofEkq}z*7G9lEUZG!g`2)7YT1LlKMytSg`I0qBY`R z8I^-nXJ|A1qsAk-&-T&;^(mKn3oJ=8UNIJPGaPKrrne~;W6B!M#(osjp5@eo9<E<A zJ3T<J$=hm7VeoWfYWn4a#NRMFH%zI;Utp?j-SprZwW`E*b;0P#mXW%3&$Z(*>-nBv z<mj8;4&u$lnm@F3g(qH+`&8_u&>J~^ts{B1ae^*8=`dr|dd0WH`?IuH0Zh<j6E^&v zM7#*)?Zup^t>YKfc?v4%4)YMt%@i;6`*HZD>yA{<%@vFu=Y{>yCKVvg%8dJJ!g|a3 z8$afikNjs<X2UuL@}*UiPa;g0^)9YQaZvdyorNoa@c>UNYTed$w-DolDsP*XuWQ-e ztYJCoM~u=1G68^{hsvrb3dpP1-QlX#tM2K>oH@NJChq}Lz?o44BUY{{tpBzhcjkqo zBbCQg2r34ZgNi^UB+8e{Q1i~bf@FmaZl70=iMPp<4V)k{!drQc1M)ZZ2i_UAs}d~b z#faP3t#{%7$})Pe0N;#%#$3AuU|<YjU|^2UPAOb`*eOxQ*g#FfuY9U=#icFB>$Rr3 z9UA=z+h0uPjmW>c7TY%AN>R7mJ6|hpeYbWPXBoL|bpgaQl{Bak2u{((0_DNK05-TZ zsG?)y{`6!Aki>AoAbqI8z1t%y#jTvWG@yYn|Fb~A&%M{r{L@^4j|)OCa2`d5$6|18 zUzLP}?+@@!LcqycO(KIhWuGc9kwH=D0<Ak-=Ize#3Zcu<Qx``xp#)}c7s7gNmk@kz z-zvX}5at7UB8GvCzLlQIn4Eh6YJYUY{k9Dnig_&M_Q7CX=dAp!B2ldQP{@{RXw>c9 z(w!3OQ~#X%9_WM##-}6L&)bEWd+#Xgy|ZgCX7vT@8AwDkq$*GeB85g}pCuP~b-WRr z>bs?RsmHE3@N@Dn_$lmi81eBJjl1>599mfQE^}Ziy?srkw2pkGyRU~8{T$BmIvT1+ zA74LsXYd5nK34A{QOMCt%}0PdQWEtkVm-Bj@fR6_8VLtp(DJU5RWe0ToVJdWuMobr zIjyUN6}X*7?;eHx6>sAo35DsjWNX_JIIP_#KCo%=xODZ=n7^PG0prWTj(#0wA3Gf> zdB|T}K4)&fl=Z8Q8rpwf_7(hx2@8?UWIU{*xeB{FIcYYPqDCD%K=Hh(+?zu-H?9Ao z(ew{&tBwJ&f*rVHVZvK@6?AZNFi-lEeO0>u1(2C60N;;Mo+zYZhC3xp(>Q%$ZhpFT zCi3~jkbx@C%ul~KWQhS&3F7!qC1Xj(*5P#RFUZN-U*t_%^2H$`u7>hlxKS2Uu@_OP z16X@V_~WtQZn`EkW#f>uzOBNh6q~d?QAMPVgk2JJoEo?2F4WR6zOmlVdf=kNVM%${ zJ3uLha<B0-=1iIMDzu<ubx&5a`+-6shf)Y!X)HUe{VCc|*5Ki02-^;MymGF#BbD3* z?D4oy*+>Y<zD;mwm7QD-3>7meva)M=*GT2nl-89$woRnXH6n^chOMS-?4!(%-&!N1 z7Hgh8ZDh%XYSAtyeRQ67El5(!%<D^~2!TuKv)Rt#yUOHJ5IYT7OOqpd1Ct%zc2e<3 zR?TjIHD<YvL;dvUi5S!EGI?9NM6u|YToD4QL9Wok7<cX$f1_;dCMc?YT}Bn_nt^n_ z+ih{W&BOOE)Elm{N5N?nP?3gZ)8dIAsj)k%yOBhE!w)WVZ%!TUUr<2Hy>gmjr3YHd zU31Z{bfe3rgC4^&`&AGr`Pt3Is%(lz8k;gUlq(qHEi+AYl$Y{7b1+?PQx`|Ny^F2B z7QiUs!=9>jBXf!D+BI@Ma(GvQ-_3rJIHzjdg^CP2u&~!KI(SXVWGM3KSfwu2iU0V) z*1MA<<NaoH?};aFrLa~0-93G)02yenlNeoRqjoRlpw$$X!`@{(Vg)U%eJ}qZH`;KY zDpL11i!>qMq$X+U{ZZ#vJqI~xzQjJ5RvMxU2?D@ty-Bg+Nq4sx5C{G#HR^oN5B*d7 zp5s$wv-kj4pazscmp}YaT382`m2<SY%D&prP@vkX`2o*N<DDe=sXJ=i7y-2YtOhyL zea2T{eu$3>-!lW4_xDn3>5Rtc={`fW0liWJm<3{Y9U^Ebnml3hfG{yq+@U%IRQCLk z#%Lv{aM%8U;PU{D#b7M}niJDNk7h3_cJ&Z_v_>y6u}Wxlv>9sx!a6}T1mJ;IQ*^Y; zyCpitrHSt3kQR_Zs=#Yc3{-P?(`t4qW1hFH>{kOIO2GRxwzKX1pjK3ut77lLpKevj z@zpAOef;5TX3tSoHkq--CrqwZ=(~0rEwbu>lH5z?sD$!+t<+Jmj#=rI0K}Ib{}&EG z!kESgz^oaU3#)F-FTMa&WO^!luBwm~W&NHwwPDWd&2RT=ZG+_}1M)*_5!_B`mmil~ zM0oBdI@$I8j+QIy_;DhddSb0PE5Sk3N~bwd{%5NIM$T9Kw=&5st+hG>h4T+0W?d7D z#!K3%8xekH_eB=SR3$LmyV&93SB_~L4Z#X~SyuRYWXu9);;+~q*%CoRgIm^;6B!cP z2eyS)!Ms9u6E8ilEMWUgl$0u(-E}NSI~O!`_U|ixSfAek=~^iV-U-eq>5ccVxla1l zg!lrp5*Xw`?K-`aI5@G{24};1Y`B|*ics_T(PQ5o-2S*CvHIzTP6O=X?sl4<pKyog z1X9%Xk;&^NeR`5{Q&MjP&+|2ney0{sVkWxhLb%gLy1VN#YXW^$H*R#cF>kI`{92e} zHOJwMb@|2m2&gdstUWZd7g%P7Fh`HDyq`^^QlnDWL08%7DINRFI%L&t;bV}mgeRY# zMeVlt=T6w>dK?|0iPB`Bq=xNpdugL2gSL}5jgX3}1oG`GnVcQ%5n=K5AATlecJHjf z()5ONPM3^OV*tDA5{SWi97=R~PE$F)#4-Q=oZX;qOKC|g;5INwUJf9bbXh9$TXHQx zbQgGjfc$49EYscq<15;hGbSXLE!KT&2mjl-ZbzB*wE*+Dzr44G2mZ+>aDa+Obx;{D z&{zMcBbXT7ZJXxjL!~q`a<NmnDjf6*B-R@>$%i>jCo&M_jmJ6Ul0^}lM8=V}35=?Z zUnNwKL&*$(w$fJ1VO-ZO<l9{PNPQ7=1Mj#BPj;F*%_-BwzK33K@a++n^T2_}t8<t+ z-@_>HOg#g;;X309;(mBYe@#}`sPXVctT=Dr=qLaF?ztD%+V3f-=&_>aa1>g9R(MFJ zia!Y6_pHEF6X9x?vh7+n#)V(8evTG0e8DzldA`uz7_;4^MxtrKD0=6utD~HT86oZ6 z5)K}&vW5og9;!On8GTIas(ym!Zjk40<mYZQ2~38%hMpT2VhxztlspF{qMEiIKfgRN zJJtxn`vNZ}2Olow<i}L?Zt;ePy31CW@T50+u$+N34D<qlKIS|@uv4VDeW{fhk>olT zB7Hd;x>~om;yycS^J>pLbeU89;m024I;wgH*qm)<RW&ny{7R{0^gex+wKgGa;VG5I z<pzkOK5$CovuuevPafzX!_v7OnlVA0U_aHkcN&7*aa<lbD(^&thi|*l5wu9eMP554 zOAJ74v?mz0S*5FBG4>~K#Kq32KODWt&Jht(nrG#j%=f(aC>MYx+UD@>1RCE`>SywB zBepEW3^8$HSw^bYzZ;7F@+=T}=o6Bap61N5v=m5`YyI~Q9F4Ky)3`Mt|F{8q1at%> z=n#ZCbrZV6=rHX@#TkBe5=wFV$joy|`!L|VWh?3Fb@uNZ24i+)3#e526jgylY^`{; z7P}Q=qb7d{&5}(XIqSdX8X`m$5D!pFV<}5IpRFsk7xs+_E9lM7N@}Gde|9AWBQyq} zrNfqGp&nD)3k@aZk<9y`>*iqe(tiFSswEnqjHsK#M|q#Nrv~N3J_0N_K(=BpNL|2F z-K9HT^e2JqPYB+d(cDPm0?8hs7*E07kY_z9t5_!lzkqXn9Ofd*vDUdE9rF-ZfVKjB zlAIOZK2&uDq<<7xzd}H1?obWIDd!48kh(+=R3}fLJQj!#(F6vI*XV8@1*^6Mi(xsq zZ5>7nqlhnBjmaH#f<X6zCzLJwC=2NNf@*~xp;B>fpnjGskRm^Bx4JFB$tHnDC&8LM z>OUeW8&7AY1z?v>d!?z?0qKY|WjoovkyW3dRIPxcPart7rXozpWqx)n7+>-P|ALS^ z?bfSU)n|_f1B9#MqS;HgK${T7paFC!v`p$MXQBe*bT#nrMd=~94#ZzrOo90d0{LAd z(eTs=SZRmk&D3|Q^y5rrpO%|%0mze9c{#LUO1xm)dBvAfw<A^jUF<>2L!4!o<4yb9 z*{#P_>fNmDo|ALI7p}PhPP067nKQj<8op;7;dFLYMr->LO)x@eA|kb;=LeV$XqRqR zI}Wz(P;DB;OdVI(fhw{y0ItoHfHq6jgidJa$2}h%ysYO3IbKuU4TQ5tbHV3BY&S`e zom~OL;|KPCBz?<^J;VRKP^)T$2})sbbN~uU|9q+N{^*lkD&;`FX63aGxZU;Y@Y>7s zOA-G3`{V`2f3FTl=uHzkEAxKu@(oW)>`oN5m@tb3DRyer25j@&n2FqhJD4@Z1awja zWmdZd7KFD%F@{JJG}9O*E84&&RxUl-DWtc?fjPJUQx-PGy#$!DoIhP)g}67&yd3a= z7k5rlIRE(&T9^r*W0Y|jpmLCI$+MWN#egR%%!F7Qt$XM*ylAl8j$S^k8IRA55Q@sL z$K|YZQ)rHjG|pKzB+vN~B&HkpkpZ1vK8GDUMWovR7iy<zOles2J9~SbfYEt@_Iw>W znDfFJjzd1ipr5u;fvIK*;&V{uQ3rS=qd=0~m{)6e#@nL8p`kxt1^s=<Q**hvwCs2# zm-oPC&L?^!zG&=--E(eX+;9tb<&j-)ZA08I>SeHKVnH_OCHOimt`cA`tKGtuog$kG zWy8r(!ohy-8D4jM9h+p2eU?2hT3(5=*{+X5mtPcQXbEXvuP<|XUi@)kE(J8AFTcLB z$qt`r^4Ou62tn&LM{wu9TQU}4#cc3c=Kh&;U+Y-<WcG_Uhnm~DCDviQwOLbHjw4Ay zZL@|hs2wI=5N-Z&sab8tP4T%`#6C+%=&(?wn(&5E7*kfV(@W-iTxwRu^enQ!id@R7 znwz?oBAXWdaB}o>#Zn)H{wa`^rRaDpt{Css&>GoVN3FG)F$=F61DCz5qD_o+{4Kt@ z+)&y)>23|9q77bg)>cbPv0H7JzcF=zVVxasKp#T>Pc}!F@xb~f=ZrST6vVzQM!Dr< z!l^V8by?gIlI{Fj+jiqgW-=3d&NgexrcptqQIsC?A_m=(W6F8oa}cmkz;05P#x{Y! z+jS#VOUt-!iCkPeQ9^ETO9o!z^LgudoF8F#)NkqH9pR7ZPhw&kp1>X`J-b~bVIhq> zG$E~TgQB}l3}Zr?jM!$VmwnP>WHp9QxoMXTvTh$Q5`3>3gVrwwqL>lhliIq8W!oj# zemYZjifaPw2xe+!n>9cc;eM4n%6>H$9BFUmGP0*bduVA&a)Ayk%#mZILbVcv{=p7} zn=#gljA~_3F}33Lgj-Di1Y%4A>7T*Gmf7oEol-%7)nGgvUdOZE#W-ZlU-Gj?judJY z*NBfCOPTzrSd}W*Zw>)*m{yA4v_!}^f6?F}tob@SG+Fh!GaLa8Qn%de4pqwE_1Ibn z<{9hy`}qW^O3%Ah8QP!!H0RXSTo!%2xz^&{e_GHj5g)g1tNb+9fHl=WtzEM@lBRF) zl$82I*A}1+sy?&YKwk;6DQ>M!b=mqL<j?1=*KNIOTxbdBw}(Nvy3E~D!e$rax0CcB zs`w=WQ@r@1klqfYz@m_ep~pSCLZefu#IPisYg6mVEb6li;x%bv0sTG$Y#356d6SQ? z7VUH`oblY8HS<M5|6y3WtYzKRG<MqN{9f(=Ud^qcoOq-x*<$658jC=nBLTiz@RgR~ z=;zGLb-(Tb3w)-xNh^u1(c+yFINJW5xI8|rgUc%^AfN{v^Ty>R6i`S_Ivf}VM-l@O z)i(@(`;vp>O?VX$jhDk5Ik}<#ChSKx?9X(cNq6%k_5kHVtb`uI!&$N&y)>?lsVTW9 z3<vteZ4y3L4`5P0?A`<M^G21^+vE==%f3{6gM+O=%NCQ@foIMeX|`o37>d4=6J>QK z%s<+t+hYcH?ncno<{zElsd39(jLC)$*8wi5Wa}u~l+-RM+ls_?2zGhm6xBN|@f=rO z-Wy}*36Wg5weBF+SdQ^C@9Gqun5YECEU2@L;wIa(&JY!TOYRwW9=+#e`3_94hn!L5 ziy?lIx0xe~osoI6tLsN?MRuV3Mbb58bmn!2c;mCUQr~+X5RMp*?2Pb7{TLA(>4W=( z{ZG<XtRQG-<A(wRoBn4E#_|7sA3{yB_>K<TQYX;-76D9YxoXbYH>-zW)xIG`f+8ow zA^rA^GEi4yy>j}>C3Mi#DldzYRMnj0EpbGD6uZX%X_byzGrU=DTAT5221AdvwWT(E z7}fio$Md<+kNO{0!1sso0&sySWi_54Yc-q^6@>W%2Z(t})>yPL-Z2~Wan>=O`4b+X zdGPEhZb~dR4s)}4v}+LSY^Lc9o6$jHOsqS?cW>S>pWdNgHL*yCoMV(@m$BS9&c8>R z;m_cYFjp+b-HnZx{#u^PX%C*2(T*D~m6~SxDBH!G+WLH-z2{v1Q)YjeZk5HW?X}M7 zBZ&vS=i2s=#CFN&bN+T2f{>i6IhR!fR2$sAf*$9Zbp9p(N+TgkC%+&5C@_v3CpO2{ zXPGZbmXjWC&Wy#$k3=$i`iXELPDROIBhu<MLmwH(7sDa7lWIGCK4hoV{oQx2I9*UZ zzDWO}+rF8QbL_)%nS8IahPh5|E5XV^&Q62cQNOz+{l>@Pk3!w2puOXFa8t4d;Oic| z%_3`lR`3Psubu+}b=wLMp4;}(;PV%|{Bv}Fc@0n44HOa}`B<MWU#uf|KSD4RDqXV{ z<OskrPg{(|0@NYpC`K%fS@D;IEKW|e91@2AJ8CW&;F%;fw2?JY90e@MXloh__t5PQ zcSk?tuHzE3II##>_>Xi>#(V&EM4y3MhR{#Fy4hvw9|}&Ac&&@l9n-A1`I5CXYTbj{ zbzKz|))C_K3j^KGe4ei!w9XDYO!BWI>c>*wCEF}p;!QJ4;w=|_3A{#F5bB*&Tyy;} zIXBvObTI0juo<dR>PHW^B<JMT-79f=+G!3QJilX0`ByI(3}!6zY5xUQ<%Q2*Y6TtS z6zeg^8?A72AKhW?MpJS)ps8fPYE`}3PMs4W`=5au&957N4dw~%P14(JP8t?}S57}K zo8FkuaINh-1QvMEo`S>$u*(P#>|ST-e%2gbCxFxkoZW2)A$vhPNsC+BrkXEG1yzl2 z({=sP0Y8cwI7FE76}Nx{@bQb|zoCAV)GSUkklMz5kc2lgCSNCAMOs)>C`&cdr$Qk7 z+?I%Ah$|Iqu6__oy_MYzBQndymqh6+tr-Q&9m7qQ4LB*8L#Fv0ikH(JZ?Mh(TgFm` z-NbU0fPD2UF!C!@M+&M^&e{z8;9Nm7P~wfK8k+ZpR2T57UIYYk`>YgKl+)P76xa8s zRth2cGbprD=S9J8<jhe(T*+HkLta%t!A2XRIDziLR)q^qA>+W4i<U4&kkiD$?Zl3w zz}kx3cti{<3E*8wG~!`+aOlRlGW^lrZ6;&BiIFj-yGm@>0DO=lA;L#36(T(pV(dHV zoDRY}!}JfhZlVqNU!?q_oky)-l>Fo04-h}d`bQcLm;$hk7ik3u^GCt{(n1ni00_Sz z-fW&>WtoD%@)%9vKb-BrsU~@oGm<_K|C?xL`M%f_kifv0$o~I{hHCa3urJ%oA9EFJ zd_GS$Q&EQko|8l~buL`-Oi~P;<Qp7%G@3ghSBixzeh+^3+f^SnrX(6vPo+U3-G<+7 zH1g=~li=P%-|0i&dk=dLe~W~0pwP?VJOA^x+gxrI|95WU{8x{6CNerx;gcngM*}87 zW#*%$n8#!(=F<fPU&;t0VA*=$dJuOYcTmT|yC=$ZxmTc9&~xDP;=L%!brEV%LSWy( z_yF}l#ens|=>YaX#(?&~`T+Mp$AFj4t)GrCm@oto`V-~@>VxnFcI+?G2gVEboihj< zBs|bC0EET?M^XU;Oh7aTVFki;1`?29+rW1QX$_bbf2-w8ggt@;LW|%(wnP5{zYanX zkxrtehvEaz3mOh$645TiUm!dKe}sw$^97fNkOuDy5)v^kBwirK0Yid<0VgVi!$I;6 zGAo3_fk1)|2OkbX8;~)<bR$BJ1s@yo;$T6UT{7UxPdjdQ(*n1LU_r}-(tt<_q7?zK z05V}TAeV#8193%w$SfF{&@(V6VB-*N1Fi!GCPXd*E)XC{B`9|jArR~Z7-S_ZUZB){ zW=r6h(vnW1s<m-f{sR7^L<t(ZnUHjh>g#s3OzoigOGuE-_MOCss4_<*P4XSo5Ii~7 zT1dW$Nq|BE;}ecN5>TBC{Xs)V%3~$+JW7N@AX;@imc$a6q{4yDH3Tnp&DKpf6eVJI z-v4O_Y~*102z!5{50;XtUnMPZ4o6Gi82x}L;W}frf)NX6wq%{^@JYFR{-YQd3Q6`Q z(n*RJ6B#4J@Wgp&zS8!Z6hs+x=Pl?|*gA_W19S05zprZA_B4km<|WQsfUKU<((1*r zjG^&8#ls!QlhU+h&7)4b^^1S$7y~Wm1QzmMN`vzsNM2Uy-*$y1C4DNC3c(b2X}*-T ze!O8~`1MzYHos*1A&hiw6FMw;U%8S+lL6)e`S$^fcw1$+CN589x}J~J^&~wA?q%z$ zos@oq99ZaO^S6&eQg#Ke6^<~m@}AMNKyRrrHZ|b;W8N%H4TD;QjAl?HYaK1eUgRvt zI6y=4!`G#q2(i$Sw*@^esPio6+cJKlr=2uHMGqSRmzkxgAQ87jOC?>ZFOJ~(sTvdJ zZQCt`nX)x0yHx$+!H&sEran16D`_C;noS$GRm8Zo=UmiR#+;NpMx?~aH=4*y<1NCN z%?a3@uVu$@W2NYjl*0&<4kjOD3E>V2lY3xQG4y~9;sCin?nL&p?_4o>&%w-r&q2>Y z&cQN)F+njwFu^c^GeI*!GQrjlB-hxK<rqetXb!9nxPkCMdM40gI}~G!b|%O!?2TAD zu-g#Z2-`5*DBIxM@Y~Sa$hELH;5X1WkaS#N1RHP;5I53V>!dGF19Bi3kknB#u6R3` zevspU=ZsDmDK~gc5a+;biljd&R3m&Raf+Qk4caV`wX)5XEVo~@;I-9!BlUJli9a2% z5%%TV3)}{xKaxL$KY~AuKZ-xNKfFJ*KeB&F-UDNaC~UhW?y)JXZ*Vt`u^=#LAG@dH z{kBe(mfJg>wyT?XFU&|%QZn}KbGJ21zC?<xH}coi;@XB+tX$)ccv5%b%{sZ+&v(dt z8x`dhX*1G!_vuEgmeT@z=T>>3v%e7V{<8s<gJX2Wui{FXw-IwgyMeuUa6+y3(Q(dO zEFr4-i1$YljnOfew)#eHUDGYD&sEi{_|r+*J2~sHx}lcV<_u*=Q@?@`ad`SDlB?0= zV>-SlIjQiH=Pi=BzjCbPdu%?S4#VE&3Ra3dry;fRAc{|wDoG>l|CMzWU{NmN8U&=f zySuwVDd{drkz5d@8&;$nb^&RmrKA?5L%O@Wq*FTNuAF<$xt==@JhMB``^|jc)Xw++ zGw%TS!LM5`RDeHkd|x_cpd)A1O#!khN3AJor`e)sh|X+QPuA96><L&~Ht`sNM{$R4 z2zT3GkSiXXs38aK7w_|~>vR_qM_v&}coNOG?`G0FXf<DdnVutLmNM1JYd<1QKiitq z<Km>1oY?xJMFSEe#G4<+k;tMz(+%m`z`Hc}wSJXVItJ7}9s5RuXLXq*`yJVsj-rFQ zF-5`!)4lJYn2%6}z#+@ho?7(5%9P9!LjHy9uA;1(u|9NOXla^*rT6?TWsQdjSTuah ztf(5KR$c-gG497!?%f_<R+Wgv$hv4M@O6$VTZ*exm3GcZV$RBpE0iwTdXM)?xYe^~ zwKMUupB9+O&HGjoErR9dBFN8+)`&0*SDtTOHP06{?fgws6*Zd)rsdg{j7hQDqJTNF zgVF6Qld5xgf1ao~PaflawA^AQKsiC<iZs8SN<crvLyC$(ZI%@qla2SFdW*aoq>^Q| zq4INMoqQsJ>(k+^a%hcnK=r^P7QmW@M*;_##2YxfTZ*UV3`cP$mR8MDH5)c(_ojZ( zwx+h;n#g<9<oH|{QZC3!GGwIIFnBRe&xAwHNW2#H9nE2Szs74q79Xd|1ii0XVh_8@ zBo?s3L(4#sL3_2W#ChZtGo<QY9=h&hyj*zv5=a2Hizr{OlWYi?ZM-gf^BALi@YDJ} z92O`U1JV;i(@TGsFiUFUlRLXi^!9yJg<weT*tjj)rHDaSjBb1`|LmCaSDwi+7AHuE zkO3`Onb~F14EM->@8EuK*YCfuRX3x+nfR0$?DARc>{;S=CqI){(_Jw;T``_rF?LMu z7P<$$`Lj-XTc8Y}wO$zQo_`iM@x^==(B*aaslDW|(qy3SsGH1Wq{!NKQH98w-j_*I zc4Nz3m87q=uF?5|h7Hr>Zb{2;cgvENt#%KSmd$oEl9nxZmy*7IJEu@Ot~r-b64dW! zU$WU{P&)qRTAgpmwq(02p!ChKp<^78Z3(c;QN+T1Z~5ZHZ0rolQmXpSp1SrW5fDY3 zX7-tCZ72nP?E=}0*fFq_%ZW9-oilaH<EBhf=9ghwLh%f;q@Ti;W(jsnx|+41;-kFM z=!8QY%@Su@4Xv~;g_5G7ADhKR_U+7t1-csvhSl)~Kj>f8Z!vu%n^KIirGG`PtF;dr z#Qi!g#n&s>KVWA+H28@Zb#qX_*$QYVT%D0Vx12uLo<64$=173jw>GID&rvumW#BAg z6qcq%NL?o6hVM*N=s=@=B{qaIB^|QIEKN==eF4gjNyv`jk-i|%x=rTau~Tf7{$vN_ zU5C+nPSMa7h|wfZ!P}Sf;HCbY@;q=|+?Ah6;)En2nV;xw|L6mAS4AL4*9lNsF9I9U zBqH7lT`q;^c63XmJ4#64^>nUfn-kBQA~YeB=WMv<1DFlh_@PH18OS_O8B_U_6Fh?W zt2Kwy*{oILc}q42i=2P(xmeYtY`XIHnGZrY%qUDJD-832(=8c<7nGf2;-=GM@IgIA zy7Cf*8$o!EsjPYEg<ewg<h)c~MnHB)~`?V;)=~Zm{cS9xC%DpQ${fsy}sx@D#Fe zI+!{Swa}Z|SePGax4TF~-a{3ZT3m=7YaBeGu)Y^q<fBE;>9hB^y-Y--&2)3GoD^Ts zD?ee8XG;tSA;KH3eJ;EC`HLg_q9V5{yP%dYE4`4VQf|0bCLe**9tSYGEB#j99J#P% zT))34i!aG(k24x9jGoZVoc>&XLt8a4@03uL0+8MfsNhrG-c0N!PLIfUVkpD`q<0m` zlUTcu&_ufkp@X~Y(?gUt#8heXoFoe4$Ll^!r~{080SSB@>wIz~gf1lP(Mm#zN*kK0 z_~Ug^6Yv0|VL%SwSKun20*Rh832QXeKg)CCFRb88axq|vwi80gce3B3>uA!Zzs4?l z$650xOOy4I*lX?^o`vK@nj*%44vK!uc#@m;d}VdQ@_|%7W~0>ZfWL+u3q`&Waj`a& zOCpP9J&z%M{!4b<oIQE^f+QBF8k5%rUv-CvZHw4ONJ>iki-GF8);i2~Rkci{)$Yt` zRhKNHRgFxs)>-9E@y*gVRCm~09Rv%LWM!Y`6-u;yY<^Dqr)FQyeBXnyuM|-iH73t9 z{_G85oob&~oGK~PQi5FUVcA!UX#1#>7l`M_jGE}avTdBwm^X2QT-J!l-6@clJQT;c z0Bnm`)yR)ow1ERg;#1Cgz?$zmIjXMF8jSS}U%<vwdw4UIwuwr5g$)E>CXAeF=G`K^ zqxQ+%LiROly4}h|CTa{a4h>3%u|s>TH?hxNdrR%ekJ}&^zKD&K-uU?r7FCO*naP!U zt(BuwUuws}y=qeY0F8;1^OiC<{qg@&)1X7Q^;*zXR^TGRz{rw-Rhdb_UPI`>=+~jZ zg>HQRFZLQBOQj@sQAKghSQ*u~m9)m;V1f`TWPYRysxR}#Z1C-PWS}=Mxr!ECWAl8D z<MVvJ0p_85M_kKYAEh5ImasQYV7TLflH@JN%|2JljmK{&E+!u{J#k<h0v~l(G4ZcA z`0kN^i6Qu`a^hdxA^g$}C}cSSdLT2nNuEg+^2WW9+rMa1-xUfB2z89L?&a6{==D(S z603D6)a+h^9qeE37Ycuu@L4b{-2}4c8nR4xFa0sXn$JK*DJ=-7$Tjq0NmH*z2}jv0 zb*#cty4|Md!eR7h?uV|T>G7V1jpaj#c$C<fdUOatfeO%A0n?^WTQD^a)OB2gpG_?* z8I=A$h<lb}Rmyer8fTC`-GQa5EamxzhnX-k=R$41vCX_~;A?lK3dzbzh*C0_`4tlC zwB^8$%^>({<T;yZ+bXw|G5mJDnW)G`4^1Sy{DTB|RAf7rh-uLN1;M@mud0%xar>9# zkTR316u)x#P?XDpeBOm9AbcpQz`N!l+T)JPPlks4HDhrzbu<3RF+ZB#zOm!K__(+# zQH?{k(1!?TAU0Od9Y9k1+FAmUuC8UU@T);;-#2HIkGPf;c1iE}+~&sLEk6W`vN5nK zPJr-_T$uJ3i&+*_l)733&@&G{j!tR7bV*U_*zAPWY9~ZDWE0${T>$Zq)OPT7^oTPQ zpQki9m?W*f=;w<LQkv>>_ti1%AVWZ?@qCYvQKL^;ji>UCbmsO8hZs>ZsEJ`=AG#$r zJ{5OuM~r+>>t5T8#4CxM)rek=VH;&DRnP(vH7#B+T2<Ff#~*T{yg7IM4!`M!n<c3B z?X5*7g?;|(lC%)pSz2I?lH<<_QTkU>AGPv_8@{r*7i%LYb$cV*Caw<Z&&X7I@;Lho z_i56O9gOjq7c7p~hx;o<hez}g<QqsxT`P~tkmY>s!(iBx(Eps${gWO)K|<%7GJ;3c z!$>8k9|gcywXL$v8o@U2DDW9r!RO^0Sz}79YnjP)p30nU1eQc#^$uaAF4`xgo1nJD zlIw!P(_T7Xx}S7BIBYV~kqAl*pVv!e#ATIe$SVnp95BKy7)UA)bKZ7J&^xCLxG1wq z?a@mCOh#+E8~TGmVvJIKjw}gLia{Xm9CaQ6&V;CuAdpj$I*%e&M1>|zLR3HWt0=N% zQz%oyWHnU++jAg3N==wlcC9kgBnVly!a@pLUW4gb25v-Kp;Vs}ZFZjaOQxUv6Qd`= zrNnkjjF2k5tGDq{SNNvsmI4Rdz->xS-UumSJrdz9o|Wkx^P4l?%aynb2GzQ3i)V8i zKP|cE3T2G7NK2d17eM^lDt5Bq8MJCMyNIe7<q`&SK{a5KGH0e_?ZZ7U)njSwOTF2^ zA*<|~Ls|54K_n?<&)rgrpu^&A_xoRMCEiP{*JME^I$NLcn%KxxmJAE_Z*yNQ9DAn? zw}DsBhp{)2%6ZZ{!i<Gu4)GA)3z_j*CBDQvcUl=3bmKe^WEV@f?5-KzMHf}wc{Sr6 z#?g4h<!S`v8_DtN3Qw=awfD&m^%IsQl2AbwAs>mZ3jWmXy~QKMJI$|T`TSweY}FgC zMUo6dQ1sWEwEUV6T#cg_9iNYb*>3AKTM{*Pb%|671?_K$?|wEG!h0mC+4Md5_gp={ zFCY=|=aibeRc$0hqgm0ZjR#Dn|I$xPCh8Br{~XE!oD<yx^$1W1nr$nTCSKM^Xidux zJB%(wWZgUvuUOS5=#fuv+tGG?GKn?Ej1uyqAe6b~Kz3)(Sc-e|4d<PiM0LZ;&nPpG z2~>OQ>WxY}7cMm8_fyuZj%&rugANzh3d#6m=(P<o`|wjRf-UpMLSu<k2fF*G(qeGI zG`a_GfnAGPdPB>rm8J;4_~9Ny9tYdRT9cw1Pc{sN@7&uLn<64QJhm{Rht7xy&s;B~ zyIp@UwzDs2Otv-~kk>7k%n-9-E(Cl#z)0%wY1E;nFlB8GS~>KH*th9@dpBnlHCMkG z8I6p5*#<AK9&q;t`|>-Q#Id=lPMd#c^|MTAU*Lz?O7L|PQs^7%ElgSosS~$nCY`_; z)a$vhSd?p`^^Io|0oTuAB@s^*V6&ur4ce@+R+v`PusD&g+1Aq#d{Ng85qvRDt3H&3 zWwEYqQ~S4kF#T{X0NaXn8VP^@wv!Y4L<xI^V^tI@i|`~P>=@@{0ISugjb|M-uN7tY z7zManu6Wz1cv~rVTd8`R9q-@t@qB}3H&pekDBc(St)N1S8|audoPsSU^!Zqz%K0dr z_bk;#Ys4fld=i*4`Dm;8Xea+rPVenWUi5g8_luzD5k1d8bhA<6%uS)ikj^xA(<gXy zfnonW*w+tqtg{Xj?E5BtS)z1V^6HY6>JB)?cy}SE36$TXjJu`Pe2klP!7SP~(Hu#W z7oX|9eb2Dp8e9sbeEnFK_xPUn0Vw+Vn4E6K1LV6Rd*&yY@<=iMcm?{^8hifeKmLd) z|G1*I_Xtz;7?}49GyYamdG7|PXgfDAGdA8^LUsBP{`Di+;z2F`LQ>`Sk$C)Z1O)W= zi`l&M0v!{|x0ur1_=k7i@$5e8$=@R?+=qrec38Bwq%M?qG}2#__+~uTtdgFnNcgi- zw35fJg!deGZ(OaP-kmm4c3y{`Ugvt=JG}$aQ2=pbW4kZ2x;I8vw|#xlD7H5^*H6Pe z@9FPRsxyL2JHW{|?@w;vV-5<>ghUU#@!Tb!9mKM<cCFwpR>b5##1LNlBzHTJ%qiSg z@bGhA0RMbk2}y#5O@qD{F+%~XMe_m`T=8Uy5KqbjGP&~bEwtkN;y=e#l*1mnrsg>b z6pCUm&S$D}1Cm{1m&9!rHH;jk&+`N^DVoAF6Rw)BGZDpa#9S^9#v(_KO?P|XQ;7Sh zSIUc93<`=1K&Fp3r;IcrFS53G`NWq;T2Z{blOxoTS)}oIkiVeJ#lfk(0FMH}qr^LG z=XmFQ=V<3_=VY5wBhnPwfxb2<IHST}FjS;rT`3x1_&*af1<`y#ZieYnAAbd)Z2qD? zETH6GUpyKjg*Ou#w1SixPK3j|J*&YMqMW-%-{%xOJ!IM7FvrCv$SR~eMmA=zmCe3% zyAL2itkGrhjJjCrt{`vTJ5L67xcB1+PrKWGP1Y$9D<17ujW*Y5=F=E0Nph(j*l93R z)^-a_tI=2*>v6SSEKO~qHrytxmXNDg=R&t$E`<}Xc1ZL08JWBkIZL#i<FfZ+x#{ne zZ?Ed9{JhoW+_$b>!q-jQ1cTOa2Ynx4KU3eZp<Nb_+~ca`9Ulug`T7&cc<~+HgXn0o zeTp^lqvd?lFVLa3TghhK(U<(##Qs`y;%=dtI@#v&4TFR<n#*x2lpBLhFKcD5VHEqL zX|qWsaqHS}yUtHZj1&lDY|7bP9gEax<6snavRUDxQ5xD*929nT_-v*cD_a`(CWAn` zq*)Et%dR4r;Hj=KQCTM-)--D-u)QR*{pYf5d92B}O_Is<4!*Zet}(<gcV@>e`Z+*8 zSMam=XxgaB4h{s<8+9JD8J+wChj~IE(H8k6xztkQsM(JA4$`^ASq#lFiYwYJj0lEb zSd-bNAAH6Ki2^k~5rtS=*F=e_9qw`dhUd{QvR*#l^}Vuk@Egqric0*fm5Mtv<HK3* z5#VP<lVxjt_!v1*!7Ys*i^w!Hj4HWxtX2N<MmxCclQbtWgUKh8`nqRs@$)pwIr`Zu zaH5Y_+zp9GNq&;axwwO2sh>_J7aC$67hERo6X-71Aw6sgB>XqRdy_`kPFO0ZE|W!0 zY?t44J0b&Jf4492_}kl&?H~DzQKF_-;{a^b<xgdgMe$2fU&dA^Y}CX?dG~Aa-yNsS zn?!VbB?_I%(u}+!FszY_Q#OBHQa39xZbfz~NSb?mq<>sn;y^Cjm$oKN+O&VKP(HSf z!6@S4cwtqI9o8B4oi4hWO8LefrOBI!9<WL}VYETeY&BvC<au=4%UYlh2;7$5Sq3bl z@_S@FFs1jWzYP}-ems}>{-{!#$M315Z+BAATgMpbQ(eayc~|X86^U5wA6j*`#zxV% zK34jmPY`SEBxENUFYC{5u_-9s9nVI>bEfqo*TPw>3n7En-@*S?KPKcw_AwxPlSVyp zFu)HK+1|7X#HldVggcIJA~a&DM{81Z7Os<Wrms_U=J#yfgj*%)t62>M?YCWkNZX=8 zX>CIw!?rTeLfat-GeDFMu`Od}tA}D^MMr{4lT)MBJ6N}5#-{of;ZU<Rr(;i$FUO=X z$2)NNizK-Gmt6KO;!v^RZq+TLvCd--=Tz&i-EySJdl#>Uc*B>io6{4=_2iHb-Cmmr z7Gtt8N=SNZd^OHD!2jz5L0urMfy{F+==4Q`0%ein1?t*sk?P?2J0K$~Xcd*|Geh#( zIRl<$x9C;4BL_T}#sQ<Vk5?_R5$ZSebq_s{eE)#>3*qtOdMJ;`MilRD7v+}c@X@$D zdi-F;w(y8J=T)Z9@!GG8E6!F}Pr?!Nx|lhlA16*|9;XWMS2^ljl(HzO+(B_MZ;>Jg z*|{4=n1CHNDPx82K3Td2Pm$${<vzpo?Y51d!l6ynNEu_vMU0~0F)%+D&UKTE^%RMv z9i{Q4;VNa{`Px#}C^{Y=Q!p1|R`6~B6k;bDVa7+kG)tH~GC%CDNs{#XeQ%z<eqTeq zb)!P{55>X)Lxq7-p@!<Lgps^4x)}=*7=)g$N<F}(EPSH<1iQX5I~64l<xk^FI~K3w zVgT<^lx<nvhv>eS+Rp^CrRw_iF@N1pPAp(`@zz06&Y1Sq`Ic%S`8m;|%nWhPZ;_>U zN+7o<X>_G~)#k^cREd?2?)h_i3NbUt+Fp!Ll}ks>{<Ae<FoCPyXIAbO7A(cNG`uQ7 zyJ-vH*Vkq8uclZDxCyIjvkgo5UQfgEY#t?}2k2K=7tqmX7ER@WtIp*Dr(|k%DlJMr zn|$bY9Eh(K?c~MYNy*jP7-80}N{gW;R8gJ2D!w}Z+EUoV9c=+mhn|$?<okgxqjiEp zvcuhiXJ|za^9}rhQ}S%|Du7I9QV2}mgT5FA%#B$R3L*Auw+V{x_|op4TiQ?>!)?nm zzYzdmVp=6KyhEIeEO!^>z<nDrMweSotipX8qIX%=wzI3q?3l?4hPYM@=(+FWAfdUP z4S5D*-p~|~hP>kov9_}M#b}v{v-cG+bBzW`Kx)Ay0_^LLMi<`Jk`1RqFdJn3#o2{` zRiD4~gL0PD2q$D!1`0Ka*%L>sCYbq6Clj=bjkGoGT<2mh2wpFV%y)ef1Yt~EsN(8f z?Hd&wy~q@u7KcB|Xz+TtI(L*;Y)uyefaqrcBphxCb{czhTL;K<P4dJo3E?rpuUS~? zopqV5w2Oy^VhVy?xxuENr)xnYmSMfX%_NjAvC6&Ff*K(ejj6X*Eu{rD=~W<ty4eDJ z6y+?D{$dcjR&u+hh+aRX3ah%o9SJf?Vq1-SNYAuaeMZ;V+58U;Ue;Z&e3^+l=W#~` zod{dRD^MyY<fzBKg%XZDhFEsb6?sSU0qX(QdThivSY7f8Pb~)CnJ>;fKp7tBEEb0w z(1hRH_d?aH3iaaxt)I2LIkUXGTGNN?@HXPbg7?V^8r=&)8!fQQ?RRv!i%M|Y{@0Qt z8utTZa+nfgJh*<FgRPR7PCu}WTWKKfACBOH8cnFqc)fjT6lHp8-%2<og*n8A-F4Q( zHT`HjzwPv*@%=R8xBeZL;}*K3^;(7!yQM2l!YLd{a>r0&OigB%mgBAy1{*t;=scWN z=G?P$O4`Vd{er_AS>nYf&#(&p9{N)x<WnM#pb*Pb`2Cz`N<@=+f~U=K*Dv3#y{e2} z2@aR+<j}c|(L0Vkq3A<q8OIXXX(r4soO;f(+Ozze?s}{yID<=aM&J$gEe7Tvi!1N| z7a4e^3;|s73GIpNtl`tvU;Mx@QWd&jD0Q<QEes4Zc&v=PdMLdV<q6|kDD(X3Lq{1V z{O=FosmjKu1aOt@)46UCg!buFH%Gaxr8;!(GavzTL&$+CkMGw7@Y;aKrr4Hu)H^cI z&fOcR4JJ3d@f$WGFdR~+-9c$h>c=>wa~P(4m#xQhu($@Zbp*Q8iuP@ncbAnb)f)n- zU_K`~Drk4>EW5>@fh9N#t7;Fwt9i`6pSI7W;HTPrwzqAJ<4+6c$iQ4?n4L->#jiYF z`Ow*{Wee2D{CMhl@Y8kGg&WEL5ORoBFJj^QPHvJVkp<&!67`sh-m*WBh7JCzw>`^f z{JMe$)l4cBC+eBJd08Go`o7uM4*7^ct>G{0&vM%dZZ4D-`jyP(Z|6P)QYxB8O}r5n z;p%qYS9V9}bgjxc#A_sR>?YEap?<zApBe6G_oxbt-jjom7?lxOdE>pVDX^YBc1eLl zgoQBfCP&v-J4IqtD}i7vvfhtAO&s?bPo$Oc@JpmzqiZWR9xPDMsjMsmqh8$(fQg&) zmSg-*f`dS=KQ|#Lh}2jN4Nwu6%o$UIb>5~zazkap!V61?SB6@fh{X(0=AIxMOlwHR z(AWox5w76M-p*F&?_HDM@^u|YZgQ_@scchP$lM221gvPeKm0-+X&Y3>m>f*tCbNiO zXupwxjilOpb1)xY-+~wwu1S@QaMtKS{%~{4Il}rW)nu#K;Ma|nZgX*honU^Vz`bE( zyZgOoR4j}8RrCD5cmDeBirr(e^UvZ*HhybhruFU5N`7CmjahGG$@>Jsob`1*b|3Ps z@3U?Xwz?c%I%QrV-K?mg6gDXjx;!*P<FW4Rl*9V!=~b@=%`g{ULzd8<$Bt!19x1o( z8i|b15!M0EtEiFebvdd_W9Go<OcRmCaR$lAEh?<<LOQKd-oLxYg17E4lls|EH&nF* z)Hmn&;06gsx8q+oOL{g?GmoE!xCId+zzJziV>E3H-l<Zz{76UnVHJ0pOH`}(N<hn9 zlP_p7N_EAMrV{a14nFrAz`l7|<zylF5u@1&FV({l6+Yk<oMV&w@!4UTVh!X?Wq@48 z^B#<sYbf3QCRF@tnbvEQ6T_RIJ;^pCfcu`~b+lO-IFuA9dE2yO2rq@Fr-EW%Hf<0` zo|NtzY-7U3W^!y3OcH$%wjIn!X58VLe#?kJ!)?P(i)m(QjP$)K2&uRrRIYNBq~L8P z=y?`}H`2lIcPz_}-E51k?^)ubw?{um`@N(nO-|U?F}`Jpr?Vu9-U9s#Mgxoo;eakJ zFC6UD5F-huv5=;e*aLpKY*t#{0@(tEze`iwM6Ly_8JgmGbR7ZQDp@^|oH@%4M)dLQ zwGFj98P5hBa9NH`W((ft&WpCjG$W9s#9U9hlEy{Kckm6rP94Zg->@v1sznoZl}hnH z_QmN~XW#exkldt+Eak*lc^%eb0Rx<?GJb5Ll$_81PQLBEO(9a{s3C=OCv>bo9{*-M ziIO>z!(45mbY?{56#%m*Y^&_s;kcgM0I1nJk4g7r-FO2PIA<iiOL*8f(COOxk?-Tw zBUT2*!=EJcD$M4gKc7SA95rkh7~-enj24#fIH89c0pRI69AM0X0G8iMITaq2O@RKn zg9hZ{YX;FWD%yd2^ieJHt(=y5I1=YGg&R=$aU953VYT#I{iGjv-dGB6=;ol!X5@?# zeIHpVuG|%P0+NO`x@aM_{a|s;MG_012?R%yL3oIJm(h0`9bYCXo=^K*w_~P2_OqL_ z@RmP`D-uS^0&TT3Nzx`fJT~|{52XksWjkMg^NFZfKs5RAmOMMdI#qffVNrkf6pll7 zmr5is72zYVH~yP4HP$=8H+N&?wF0Bp@r1vylUlN(<_*u_9^=#9)PP5;Bb=N5C_nIt z?O10A2nW_~)D>}@V)Px~Y{%tqR$|2@Om8MJe|MGhg$4hpCj!1>3D6dSBYnX7LdIR~ z>7v8=QMtGXFMSaOgXI0T=f`+}29imsG_vDPumR6n6aGa1MrCtE#AqFIx3BAR^=lkw z2Ihn+Udh9PU_G9k)9r6RJ^6VWtOTboa`L5@QJ4|F`qOZ|?p4|yA*`Wi58R4w_fxiZ zA8lg{Zu>wVCt3kyVp<*OPAGokP5V9Ry_XR$EM@PC@;V8PKLOfqsLkwWTpZptP5sp` z@2Avko&yp|<?EFWrSkh7ImW|shR-k<FbSj??#(0sAC5#w?$Gqi1&7B(;&nLAudA{S zuHJoa<qghvvUdI44pHQKo$i4s7dwk3M%T)6>R55$U`DYA{4t|Gw-2f#pyHiTvr4W| zFF(afbn-h)B0G5Vt~x4EjE0B00DeHq{SlToJTmsMZvh3=j!c~$i(VrjAw}j?P~{8M zs;69XAdx<K6@n(F8%cW%>v5sRR<DHQ7O;lPV_o&p-NOb=-h)<d0ZlZa*KR(*fYN|O zbP-|6YcVVn$n`683o8|Qu+#afwDOD6h7_z?X$tBA;Y_LU<wbuy!?>VK-iu8CGp7?m zNRlyPvqh%(S4GE~qI{bnA7Lh%RShP6@R-_M3sW1M$<D#T*j-(v+Gs4D%aQq+&3(G# zAy@hCJhIo<fE$z*;vmDOkJz=1r7AfDGvk8#AInEGfv<!g=u&<3q)k0cO8Xf<PN?%; zSPJDbyHw<dIv|Ts#0w$oKT4_t`f~|{+ci2YUa_Bc^B5~w1)GxB3{!6>THgPp$psXu z+%L3X&ttY&pj4cgy2aWfJJHI?^$VGhnHn6<c<0^Jn4Wm3@}*M=)s=Zn>g8c%v3&jT z{zY?22=K%lm9Z_O;~{hVx(KV`Wf}7KI)CLkkL119@2+>Hd{I}2J0$3dfd^K0>1FhZ zAg^?9o!BI&$wDFD&`J~TVP%rgdjhHb<LXNR`_>aD{Iar?rY!8@jGOw@sj=@ZeDO!G za!=h8PQ+xw>=qu>EF91NT=bx-^fLTJz=nf?*+hk|O9+AQ&CLOpUAl(v=eh9wkIO5@ z6;!n2Q4b5yUjjTdf+4mOI~{y)Ku&1-O6!B}B*m4FE#`<))cf-<zKLUfKfM|DII3I9 z=)rEtmg32DEp5ACm%;rmoun)}E&HfaZtXULF`te#?JcOsHx^+-QLT$?Ym1evV1c?x zZdaf^f7S#P8!@I(Gv+8*-YzjIq7l?N!_6H#e}I`>zUqtWu4~6Ba+KOZ$-hxb<`Ws; znh0;-la6(KDPEjKpy;S9sym2VQ1?Ne&4LQ@mO9OO4`(+*>~eZ9bb1a}%ATOmh=~u^ zRTH*bEQ-6`cPL9vU!^V#Q+&V&%jC34#?M@V=@TsQoO;1%(w&02AO|OA+0l_MJDf)Y z7C~3B!l_^<;+4;uV(uXe!31|wTxXmjjefCmv}qvHE-(C=IxM?X{L((q^X5Ay*_$Sn z_L%LAeM01iRq-U$ezr-1*QNs~0um|m#c}M}RdLBII_jYjg^lZ4EJT>>VZVI3;n78t zaOT{BpszJO=Ecs6xOvVo3}O+U7_u+9yLfQbyJY$va#K*!EwBlcmmKOH>m>pf@rC&o zQ@wz1mE{?@=B%3aBRukyD@TiK5QjtsCwSDgJ2Pn03$SVReO&nrRKeDGEP)pUtiIt> zXe3@&rww-SemNlPXO~ly)$*SynKXc9S&Q>PH)9`&v>N`snzU(2^&Xa_iVM^u_WM#J zfuj0l(c1nK0gK8-xpZGQHn>_`E)Q}dDHT3P=72q*|5fprs+r5Tq0a-Y*cQbYQ0(&x zXy3^`V&rF$Eu`gH8m;P>_vrF%rd?N0@R+i21+=)zRAQ-9uFiEcD>`7s{~4o#W;!3p zgz{z?9s6U6Y00X<Okd0Rkx5{i!LeoWr_5kYq>m{2Fs6rQ*Bj@B_JZkO4>3P>myFR6 zT}S`uor`O)7Jeq&l-Z^S(=+4#6S8$z`wML;KvKlLLDj=-;YZV`{r4H<omw(aFB7Ep zlcg*YQ8ZL8GW1wN^d1bz7DC(|Ybc8@Gl3}?+^)z-60w&B!L3!vR3}k*H>7!}@pi7A z^AC5S`fVHdFK*=P4!)<AKWC@pQ|#0!@I;ASkBNB>J{chZcXhJ-=TevZP9dt_R8I^O zU*k#<VPHZCp`6LkALzdWB;Xtl+}=w8rWis3tHC2e2QBO~Jh*?Zj{(PZkv`i+eS(Og z;el7Wo?I625i~g+9Xy84@c$%Ubdx?q!F-Z1#zX}R52I23*5Hr3PyQ|*8bbn#!Ij-S zPg?$Qna3X(BK)Tez3_3_{-dGFzqIZ!F#LZAC6GP|`S;L2<^C_V_+Ok0e`6s5@5!Hl zYdvJY>lM^X`V0f=exVbB0nF&&#Sye8@!!Pbr%?KMALty$@V6{9h6GHoJc&p45<FRo zRZ1l<0|miD>-#si!`}fCfCO&q6@6;DU%jNTNnnyb%BOE)eWcI2xxgsgOkmdjzbZJc zj}(?4T-wL;1XzOt4u!$oBJ95bPwM=^g8g?9&=?Zn^%9J&#Rw(E#(4rhF@Qn!4)}fP z%pbrqb#O&L_mj@5&-;b5p&%-#-t2#XtUv=|Px<`I76yg=0nyY3KWNi{{RjTi?7!R= ze`6s5i^fnB$e<(_IRBUtSn)FV9E!+=7Eb;*5*kASngL+Mca&hJuD^2qeX6bx0S1N? z%KT0J2k^iaTK(kUcY}Y~`^S-vKY-_sPwn)(t9K5PJsI`Kw(LK^0dD^brh5YZyQu;O z2D*j&p8yGX`|+u(cnuLh0snn-^52nG6Y&JJjV1uE4E<%)zt1WE+f`Cxp~X{zS%yjf z?k_Kl5}tTM0Iu(y0S?xjZmxiL(3#?o;i{5oqb{8aU5IPrz`$_*qvY@Ej7k7krjvnN zhiRVF{Nqu>A3)a>FzkrnQ>mgOq|a3Ip5$Cdh@O&Sp-G9*5&M)C26%b|=P7v~nq2r5 zj5Nyhlsh*!Tc!lGMIWL6P?zAJ012=x2dj@#YX6=Qey2kF<Wqp&;Pbx$3+CbFc*So^ zf4dO>weR1D8!#{ge~Un4NWgUkxMTFMw)(F(@;43=;9CRkuOt0`Q^>zdlmF&gUk_Ft zqm%lr?qo0l+&k#-;D;U+g3gcs1W3TICKwpUcW%}I2M$mBcj`(APu8$O2Y(IpRw7W_ HZ|MI3jV)XY diff --git a/src/test/resources/occi/MLSDiffVM.occic b/src/test/resources/occi/MLSDiffVM.occic deleted file mode 100644 index 3b3170f..0000000 --- a/src/test/resources/occi/MLSDiffVM.occic +++ /dev/null @@ -1,300 +0,0 @@ -<?xml version="1.0" encoding="ASCII"?> -<occi:Configuration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:infrastructure="http://schemas.ogf.org/occi/infrastructure/ecore" xmlns:occi="http://schemas.ogf.org/occi/core/ecore" xmlns:placement="http://schemas.modmacao.org/placement/ecore" xmlns:platform="http://schemas.modmacao.org/occi/platform/ecore" xmlns:workflow="http://schemas.ugoe.cs.rwm/workflow/ecore"> - <use href="http://schemas.ogf.org/occi/core#/"/> - <use href="http://schemas.ogf.org/occi/infrastructure#/"/> - <use href="http://schemas.modmacao.org/occi/platform#/"/> - <use href="http://schemas.ogf.org/occi/infrastructure/compute/template/1.1#/"/> - <use href="http://schemas.modmacao.org/placement#/"/> - <use href="http://schemas.modmacao.org/openstack/runtime#/"/> - <use href="http://schemas.modmacao.org/modmacao#/"/> - <use href="http://schemas.modmacao.org/openstack/swe#/"/> - <use href="http://schemas.ugoe.cs.rwm/workflow#/"/> - <resources xsi:type="infrastructure:Network" id="urn:uuid:d52754e0-6729-4034-adbb-8f1f3800f2c6" title="provider" location="/network/urn:uuid:d52754e0-6729-4034-adbb-8f1f3800f2c6/" occiNetworkState="inactive"> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='network']"/> - <attributes name="occi.core.id" value="urn:uuid:d52754e0-6729-4034-adbb-8f1f3800f2c6"/> - <attributes name="occi.core.title" value="provider"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.network.vlan" value="0"/> - <attributes name="occi.network.label" value=""/> - <attributes name="occi.network.state" value="inactive"/> - <attributes name="occi.network.state.message" value=""/> - <parts> - <mixin href="http://schemas.modmacao.org/openstack/runtime#//@mixins[term='runtimeid']"/> - <attributes name="openstack.runtime.id" value="d52754e0-6729-4034-adbb-8f1f3800f2c6"/> - </parts> - </resources> - <resources xsi:type="infrastructure:Storage" id="urn:uuid:a0646f23-4b3a-4298-b262-85fd92d10060" title="storage" location="/storage/urn:uuid:a0646f23-4b3a-4298-b262-85fd92d10060/" rlinks="//@resources.3/@links.0" occiStorageSize="100.0"> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='storage']"/> - <attributes name="occi.core.id" value="urn:uuid:a0646f23-4b3a-4298-b262-85fd92d10060"/> - <attributes name="occi.core.title" value="storage"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.storage.size" value="100"/> - <attributes name="occi.storage.state" value="online"/> - <attributes name="occi.storage.state.message" value=""/> - </resources> - <resources xsi:type="infrastructure:Network" id="urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590" title="management" location="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590/" rlinks="//@resources.3/@links.1 //@resources.8/@links.0" occiNetworkState="active"> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='network']"/> - <attributes name="occi.core.id" value="urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590"/> - <attributes name="occi.core.title" value="management"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.network.vlan" value="0"/> - <attributes name="occi.network.label" value=""/> - <attributes name="occi.network.state" value="active"/> - <attributes name="occi.network.state.message" value=""/> - <parts> - <mixin href="http://schemas.modmacao.org/openstack/runtime#//@mixins[term='runtimeid']"/> - <attributes name="openstack.runtime.id" value="718eaf4e-cc2b-4f19-9347-8ba8a045c515"/> - </parts> - </resources> - <resources xsi:type="infrastructure:Compute" id="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce" title="vm1" location="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/" rlinks="//@resources.5/@links.0 //@resources.4/@links.0 //@resources.11/@links.0" occiComputeCores="2" occiComputeHostname="vm2" occiComputeMemory="4096.0" occiComputeState="active"> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='compute']"/> - <attributes name="occi.core.id" value="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce"/> - <attributes name="occi.core.title" value="vm1"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.compute.architecture" value="x86"/> - <attributes name="occi.compute.cores" value="2"/> - <attributes name="occi.compute.hostname" value="vm1"/> - <attributes name="occi.compute.share" value="0"/> - <attributes name="occi.compute.speed" value="0"/> - <attributes name="occi.compute.memory" value="4096"/> - <attributes name="occi.compute.state" value="active"/> - <attributes name="occi.compute.state.message" value=""/> - <parts xsi:type="infrastructure:Ssh_key" occiCredentialsSshPublickey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"> - <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ssh_key']"/> - <attributes name="occi.credentials.ssh.publickey" value="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"/> - </parts> - <parts xsi:type="infrastructure:User_data" occiComputeUserdata="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"> - <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='user_data']"/> - <attributes name="occi.compute.userdata" value="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"/> - </parts> - <parts> - <mixin href="http://schemas.modmacao.org/openstack/swe#//@mixins[term='ubuntu_xenialxerus']"/> - </parts> - <links xsi:type="infrastructure:Storagelink" id="urn:uuid:0f24a49b-3e80-4d65-96bc-80d6256e475b" title="storageLink" location="/storagelink/urn:uuid:0f24a49b-3e80-4d65-96bc-80d6256e475b/" target="//@resources.1"> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='storagelink']"/> - <attributes name="occi.core.id" value="urn:uuid:0f24a49b-3e80-4d65-96bc-80d6256e475b"/> - <attributes name="occi.core.title" value="storageLink"/> - <attributes name="occi.storagelink.deviceid" value=""/> - <attributes name="occi.storagelink.mountpoint" value=""/> - <attributes name="occi.storagelink.state" value="active"/> - <attributes name="occi.storagelink.state.message" value=""/> - <attributes name="occi.core.source" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> - <attributes name="occi.core.target" value="/storage/urn:uuid:a0646f23-4b3a-4298-b262-85fd92d10060/"/> - </links> - <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:0f3c22cd-35ea-4e31-a09b-d866aaf4a8ag" title="link1" location="/networkinterface/urn:uuid:0f3c22cd-35ea-4e31-a09b-d866aaf4a8ag/" target="//@resources.2" occiNetworkinterfaceInterface="" occiNetworkinterfaceMac="" occiNetworkinterfaceStateMessage=""> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> - <attributes name="occi.core.id" value="urn:uuid:0f3c22cd-35ea-4e31-a09b-d866aaf4a8ag"/> - <attributes name="occi.core.title" value="link1"/> - <attributes name="occi.networkinterface.address" value="10.0.0.25"/> - <attributes name="occi.networkinterface.gateway" value="10.0.0.254"/> - <attributes name="occi.core.target" value="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590/"/> - <parts xsi:type="infrastructure:Ipnetworkinterface" occiNetworkinterfaceAddress="10.0.0.25" occiNetworkinterfaceGateway="10.0.0.254"> - <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> - </parts> - </links> - </resources> - <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896" title="Java" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896/" rlinks="//@resources.5/@links.1 //@resources.6/@links.0 //@resources.9/@links.1 //@resources.10/@links.2" occiComponentStateMessage=""> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> - <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896"/> - <attributes name="occi.core.title" value="Java"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.component.state" value="undeployed"/> - <attributes name="occi.component.state.message" value=""/> - <parts mixin="//@mixins.0"/> - <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b929" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b929/" target="//@resources.3"> - <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> - <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b929"/> - <attributes name="occi.core.title" value="link1"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:3441844f-3317-4f90-88b1-a3de96244e4d" title="depends" location="/componentlink/urn:uuid:3441844f-3317-4f90-88b1-a3de96244e4d" target="//@resources.11"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:3441844f-3317-4f90-88b1-a3de96244e4d"/> - <attributes name="occi.core.title" value="depends"/> - </links> - </resources> - <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897" title="Coarse" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/" rlinks="//@resources.6/@links.1 //@resources.7/@links.0" occiComponentStateMessage=""> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> - <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897"/> - <attributes name="occi.core.title" value="Coarse"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.component.state" value="undeployed"/> - <attributes name="occi.component.state.message" value=""/> - <parts mixin="//@mixins.1"/> - <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b928" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b928/" target="//@resources.3"> - <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> - <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b928"/> - <attributes name="occi.core.title" value="link1"/> - <attributes name="occi.core.source" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/"/> - <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:3441844f-3317-4f90-88b1-a3de96233e3d" title="depends" location="/componentlink/urn:uuid:3441844f-3317-4f90-88b1-a3de96233e3d" target="//@resources.4"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:3441844f-3317-4f90-88b1-a3de96233e3d"/> - <attributes name="occi.core.title" value="depends"/> - </links> - </resources> - <resources xsi:type="platform:Application" id="urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d" title="CoarseApplication" location="/application/urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d" occiAppName="" occiAppState="deployed"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='application']"/> - <attributes name="occi.core.id" value="urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d"/> - <attributes name="occi.core.title" value="CoarseApplication"/> - <links xsi:type="platform:Componentlink" id="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ee" title="ComponentLink" location="/componentlink/urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ee" target="//@resources.4"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ee"/> - <attributes name="occi.core.title" value="ComponentLink"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ef" title="ComponentLink" location="/componentlink/urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ef" target="//@resources.5"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ef"/> - <attributes name="occi.core.title" value="ComponentLink"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:9aa31c50-c605-4370-aa60-3c7c461051ee" title="ComponentLink" location="/componentlink/urn:uuid:9aa31c50-c605-4370-aa60-3c7c461051ee" target="//@resources.11"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:9aa31c50-c605-4370-aa60-3c7c461051ee"/> - <attributes name="occi.core.title" value="ComponentLink"/> - </links> - </resources> - <resources xsi:type="workflow:Task" id="urn:uuid:d3024b8d-d021-4bbd-abf4-0e4d44e8635a" title="CoarseTask" location="/task/urn:uuid:d3024b8d-d021-4bbd-abf4-0e4d44e8635a"> - <kind href="http://schemas.ugoe.cs.rwm/workflow#//@kinds[term='task']"/> - <attributes name="occi.core.id" value="urn:uuid:d3024b8d-d021-4bbd-abf4-0e4d44e8635a"/> - <attributes name="occi.core.title" value="CoarseTask"/> - <links xsi:type="workflow:Executionlink" id="urn:uuid:097c5265-01ac-4beb-8cc5-8958ea4d1f3f" title="execLink" location="/executionlink/urn:uuid:097c5265-01ac-4beb-8cc5-8958ea4d1f3f" target="//@resources.5"> - <kind href="http://schemas.ugoe.cs.rwm/workflow#//@kinds[term='executionlink']"/> - <attributes name="occi.core.id" value="urn:uuid:097c5265-01ac-4beb-8cc5-8958ea4d1f3f"/> - <attributes name="occi.core.title" value="execLink"/> - <attributes name="occi.core.target" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/"/> - <attributes name="occi.core.source" value="/task/urn:uuid:d3024b8d-d021-4bbd-abf4-0e4d44e8635a"/> - </links> - </resources> - <resources xsi:type="infrastructure:Compute" id="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf" title="vm2" location="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf/" rlinks="//@resources.9/@links.0 //@resources.12/@links.0 //@resources.13/@links.0" occiComputeCores="2" occiComputeHostname="vm2" occiComputeMemory="4096.0" occiComputeState="active"> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='compute']"/> - <attributes name="occi.core.id" value="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf"/> - <attributes name="occi.core.title" value="vm2"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.compute.architecture" value="x86"/> - <attributes name="occi.compute.cores" value="2"/> - <attributes name="occi.compute.hostname" value="vm2"/> - <attributes name="occi.compute.share" value="0"/> - <attributes name="occi.compute.speed" value="0"/> - <attributes name="occi.compute.memory" value="4096"/> - <attributes name="occi.compute.state" value="active"/> - <attributes name="occi.compute.state.message" value=""/> - <parts xsi:type="infrastructure:Ssh_key" occiCredentialsSshPublickey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"> - <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ssh_key']"/> - <attributes name="occi.credentials.ssh.publickey" value="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"/> - </parts> - <parts xsi:type="infrastructure:User_data" occiComputeUserdata="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"> - <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='user_data']"/> - <attributes name="occi.compute.userdata" value="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"/> - </parts> - <parts> - <mixin href="http://schemas.modmacao.org/openstack/swe#//@mixins[term='ubuntu_xenialxerus']"/> - </parts> - <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:0f3c22cd-35ea-4e31-a09b-d866aaf4a8ah" title="link1" location="/networkinterface/urn:uuid:0f3c22cd-35ea-4e31-a09b-d866aaf4a8ah/" target="//@resources.2" occiNetworkinterfaceInterface="" occiNetworkinterfaceMac="" occiNetworkinterfaceStateMessage=""> - <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> - <attributes name="occi.core.id" value="urn:uuid:0f3c22cd-35ea-4e31-a09b-d866aaf4a8ah"/> - <attributes name="occi.core.title" value="link1"/> - <attributes name="occi.networkinterface.interface" value=""/> - <attributes name="occi.networkinterface.mac" value=""/> - <attributes name="occi.networkinterface.state" value="active"/> - <attributes name="occi.networkinterface.state.message" value=""/> - <attributes name="occi.networkinterface.address" value="10.0.0.15"/> - <attributes name="occi.networkinterface.gateway" value="10.0.0.254"/> - <attributes name="occi.networkinterface.allocation" value="dynamic"/> - <attributes name="occi.core.source" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf/"/> - <attributes name="occi.core.target" value="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590/"/> - <parts xsi:type="infrastructure:Ipnetworkinterface" occiNetworkinterfaceAddress="10.0.0.15" occiNetworkinterfaceGateway="10.0.0.254"> - <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> - </parts> - </links> - </resources> - <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898" title="Fine" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898/" rlinks="//@resources.10/@links.0" occiComponentStateMessage=""> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> - <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898"/> - <attributes name="occi.core.title" value="Fine"/> - <attributes name="occi.core.summary" value=""/> - <attributes name="occi.component.state" value="undeployed"/> - <attributes name="occi.component.state.message" value=""/> - <parts mixin="//@mixins.2"/> - <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b917" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b917/" target="//@resources.8"> - <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> - <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b917"/> - <attributes name="occi.core.title" value="link1"/> - <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:3441844f-3317-4f90-88b1-a3de96233e3e" title="depends" location="/componentlink/urn:uuid:3441844f-3317-4f90-88b1-a3de96233e3e" target="//@resources.4"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:3441844f-3317-4f90-88b1-a3de96233e3e"/> - <attributes name="occi.core.title" value="depends"/> - </links> - </resources> - <resources xsi:type="platform:Application" id="urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42e" title="FineApplication" location="/application/urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42e" occiAppName="" occiAppState="deployed"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='application']"/> - <attributes name="occi.core.id" value="urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42e"/> - <attributes name="occi.core.title" value="FineApplication"/> - <links xsi:type="platform:Componentlink" id="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051eg" title="ComponentLink" location="/componentlink/urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051eg" target="//@resources.9"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051eg"/> - <attributes name="occi.core.title" value="ComponentLink"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:9aa31c50-c605-4370-aa60-4c7c461051ee" title="ComponentLink" location="/componentlink/urn:uuid:9aa31c50-c605-4370-aa60-4c7c461051ee" target="//@resources.12"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:9aa31c50-c605-4370-aa60-4c7c461051ee"/> - <attributes name="occi.core.title" value="ComponentLink"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ez" title="ComponentLink" location="/componentlink/urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ez" target="//@resources.4"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ez"/> - <attributes name="occi.core.title" value="ComponentLink"/> - </links> - </resources> - <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255887" title="Ping" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255887/" rlinks="//@resources.4/@links.1 //@resources.6/@links.2" occiComponentStateMessage=""> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> - <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255887"/> - <attributes name="occi.core.title" value="Ping"/> - <attributes name="occi.component.state.message" value=""/> - <parts mixin="//@mixins.3"/> - <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b918" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b918/" target="//@resources.3"> - <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> - <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b918"/> - <attributes name="occi.core.title" value="link1"/> - <attributes name="occi.core.source" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/"/> - <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> - </links> - </resources> - <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255888" title="Ping" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255888/" rlinks="//@resources.13/@links.1 //@resources.10/@links.1" occiComponentStateMessage=""> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> - <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255888"/> - <attributes name="occi.core.title" value="Ping"/> - <attributes name="occi.component.state.message" value=""/> - <parts mixin="//@mixins.3"/> - <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-94d33783b918" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-94d33783b918/" target="//@resources.8"> - <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> - <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-94d33783b918"/> - <attributes name="occi.core.title" value="link1"/> - <attributes name="occi.core.source" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/"/> - <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> - </links> - </resources> - <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8254896" title="Java" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8254896/" occiComponentStateMessage=""> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> - <attributes name="occi.core.title" value="Java"/> - <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8254896"/> - <attributes name="occi.component.state" value="undeployed"/> - <attributes name="occi.component.state.message" value=""/> - <parts mixin="//@mixins.0"/> - <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b919" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b919/" target="//@resources.8"> - <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> - <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b919"/> - <attributes name="occi.core.title" value="link1"/> - </links> - <links xsi:type="platform:Componentlink" id="urn:uuid:3441844f-3317-4f90-88b1-a3de96233e4d" title="depends" location="/componentlink/urn:uuid:3441844f-3317-4f90-88b1-a3de96233e4d" target="//@resources.12"> - <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> - <attributes name="occi.core.id" value="urn:uuid:3441844f-3317-4f90-88b1-a3de96233e4d"/> - <attributes name="occi.core.title" value="depends"/> - </links> - </resources> - <mixins name="java" scheme="http://schemas.modmacao.org/usermixins#" title="Java"/> - <mixins name="coarse" scheme="http://schemas.modmacao.org/usermixins#" title="Coarse"/> - <mixins name="fine" scheme="http://schemas.modmacao.org/usermixins#" title="Fine"/> - <mixins name="ping" scheme="http://schemas.modmacao.org/usermixins#" title="Ping"/> -</occi:Configuration> diff --git a/src/test/resources/occi/expectedRuntime.occic b/src/test/resources/occi/expectedRuntime.occic new file mode 100644 index 0000000..e0cefe1 --- /dev/null +++ b/src/test/resources/occi/expectedRuntime.occic @@ -0,0 +1,454 @@ +<?xml version="1.0" encoding="ASCII"?> +<occi:Configuration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ansibleconfiguration="http://schemas.modmacao.org/occi/ansible/ecore" xmlns:infrastructure="http://schemas.ogf.org/occi/infrastructure/ecore" xmlns:monitoring="http://schemas.ugoe.cs.rwm/monitoring/ecore" xmlns:occi="http://schemas.ogf.org/occi/core/ecore" xmlns:openstackruntime="http://schemas.modmacao.org/openstack/runtime/ecore" xmlns:ossweruntime="http://schemas.modmacao.org/openstack/swe/ecore" xmlns:placement="http://schemas.modmacao.org/placement/ecore" xmlns:platform="http://schemas.modmacao.org/occi/platform/ecore"> + <use href="http://schemas.ogf.org/occi/core#/"/> + <use href="http://schemas.ogf.org/occi/infrastructure#/"/> + <use href="http://schemas.modmacao.org/occi/platform#/"/> + <use href="http://schemas.ogf.org/occi/infrastructure/compute/template/1.1#/"/> + <use href="http://schemas.modmacao.org/placement#/"/> + <use href="http://schemas.modmacao.org/openstack/runtime#/"/> + <use href="http://schemas.modmacao.org/modmacao#/"/> + <use href="http://schemas.modmacao.org/occi/ansible#/"/> + <use href="http://schemas.modmacao.org/openstack/swe#/"/> + <use href="http://schemas.ugoe.cs.rwm/monitoring#/"/> + <resources xsi:type="infrastructure:Network" id="urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590" title="Management Network" location="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590/" rlinks="//@resources.8/@links.2 //@resources.12/@links.1 //@resources.13/@links.1"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='network']"/> + <attributes name="occi.core.id" value="urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590"/> + <attributes name="occi.core.title" value="Management Network"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.network.vlan" value="0"/> + <attributes name="occi.network.label" value=""/> + <attributes name="occi.network.state" value="inactive"/> + <attributes name="occi.network.state.message" value=""/> + <parts xsi:type="openstackruntime:Runtimeid" openstackRuntimeId="75a4639e-9ce7-4058-b859-8a711b0e2e7b"> + <mixin href="http://schemas.modmacao.org/openstack/runtime#//@mixins[term='runtimeid']"/> + <attributes name="openstack.runtime.id" value="75a4639e-9ce7-4058-b859-8a711b0e2e7b"/> + </parts> + </resources> + <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897" title="hMaster" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/" rlinks="//@resources.7/@links.1" occiComponentState="active" occiComponentStateMessage=""> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> + <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897"/> + <attributes name="occi.core.title" value="hMaster"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.component.state" value="active"/> + <attributes name="occi.component.state.message" value=""/> + <parts mixin="//@mixins.1"/> + <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b928" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b928/" target="//@resources.8"> + <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> + <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b928"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.core.source" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/"/> + <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> + </links> + </resources> + <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896" title="Wordcount" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896/" occiComponentStateMessage=""> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> + <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896"/> + <attributes name="occi.core.title" value="Wordcount"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.component.state" value="undeployed"/> + <attributes name="occi.component.state.message" value=""/> + <parts mixin="//@mixins.0"/> + <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b929" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b929/" target="//@resources.8"> + <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> + <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b929"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.core.source" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896/"/> + <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> + </links> + </resources> + <resources xsi:type="monitoring:Datagatherer" id="urn:uuid:051affdc-d686-48f8-884c-83fe81718a48" title="DataGatherer" location="/datagatherer/urn:uuid:051affdc-d686-48f8-884c-83fe81718a48/" rlinks="//@resources.6/@links.0 //@resources.11/@links.0"> + <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='datagatherer']"/> + <attributes name="occi.core.id" value="urn:uuid:051affdc-d686-48f8-884c-83fe81718a48"/> + <attributes name="occi.core.title" value="DataGatherer"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.component.state" value="active"/> + <attributes name="occi.component.state.message" value=""/> + <attributes name="occi.collector.period" value=""/> + <attributes name="occi.collector.granularity" value=""/> + <attributes name="occi.collector.accuracy" value=""/> + <parts mixin="//@mixins.3"/> + <links xsi:type="placement:Placementlink" id="urn:uuid:60cc05ca-4fd7-465b-8fd0-945dcbf8867f" title="link1" location="/placementlink/urn:uuid:60cc05ca-4fd7-465b-8fd0-945dcbf8867f/" target="//@resources.8"> + <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> + <attributes name="occi.core.id" value="urn:uuid:60cc05ca-4fd7-465b-8fd0-945dcbf8867f"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.core.source" value="/datagatherer/urn:uuid:051affdc-d686-48f8-884c-83fe81718a48/"/> + <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> + </links> + </resources> + <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898" title="Worker" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898/" rlinks="//@resources.7/@links.0" occiComponentState="active" occiComponentStateMessage=""> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> + <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898"/> + <attributes name="occi.core.title" value="Worker"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.component.state" value="active"/> + <attributes name="occi.component.state.message" value=""/> + <parts mixin="//@mixins.2"/> + <links xsi:type="placement:Placementlink" id="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b917" title="link1" location="/placementlink/urn:uuid:ff292f08-d263-41b6-88c8-84d33783b917/" target="//@resources.13"> + <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> + <attributes name="occi.core.id" value="urn:uuid:ff292f08-d263-41b6-88c8-84d33783b917"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.core.source" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898/"/> + <attributes name="occi.core.target" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf/"/> + </links> + </resources> + <resources xsi:type="infrastructure:Network" id="urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339591" title="hNetwork" location="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339591/" rlinks="//@resources.8/@links.0 //@resources.13/@links.0" occiNetworkVlan="0" occiNetworkLabel="" occiNetworkState="active" occiNetworkStateMessage=""> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='network']"/> + <attributes name="occi.core.id" value="urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339591"/> + <attributes name="occi.core.title" value="hNetwork"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.network.vlan" value="0"/> + <attributes name="occi.network.label" value=""/> + <attributes name="occi.network.state" value="active"/> + <attributes name="occi.network.state.message" value=""/> + <parts xsi:type="infrastructure:Ipnetwork" occiNetworkAddress="10.254.1.1/24"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetwork']"/> + <attributes name="occi.network.address" value="10.254.1.1/24"/> + <attributes name="occi.network.gateway" value=""/> + <attributes name="occi.network.allocation" value="dynamic"/> + </parts> + </resources> + <resources xsi:type="monitoring:Sensor" id="urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb" title="Sensor" location="/sensor/urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb/" occiAppState="active" occiAppStateMessage="" occiSensorTimebase="" occiSensorTimestart="" occiSensorTimestop="" occiSensorPeriod="" occiSensorGranularity="" occiSensorAccuracy="" monitoringPropertyMixin="123456"> + <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='sensor']"/> + <attributes name="occi.core.id" value="urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb"/> + <attributes name="occi.core.title" value="Sensor"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.app.name" value=""/> + <attributes name="occi.app.context" value="0"/> + <attributes name="occi.app.url" value="0"/> + <attributes name="occi.app.state" value="active"/> + <attributes name="occi.app.state.message" value=""/> + <attributes name="occi.sensor.timebase" value=""/> + <attributes name="occi.sensor.timestart" value=""/> + <attributes name="occi.sensor.timestop" value=""/> + <attributes name="occi.sensor.period" value=""/> + <attributes name="occi.sensor.granularity" value=""/> + <attributes name="occi.sensor.accuracy" value=""/> + <attributes name="monitoring.property.mixin" value="123456"/> + <links xsi:type="platform:Componentlink" id="urn:uuid:04cf6483-706d-4a2a-9114-9918ab2bb52a" title="link1" location="/componentlink/urn:uuid:04cf6483-706d-4a2a-9114-9918ab2bb52a/" target="//@resources.3"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> + <attributes name="occi.core.id" value="urn:uuid:04cf6483-706d-4a2a-9114-9918ab2bb52a"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.core.source" value="/sensor/urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb/"/> + <attributes name="occi.core.target" value="/datagatherer/urn:uuid:051affdc-d686-48f8-884c-83fe81718a48/"/> + </links> + <links xsi:type="platform:Componentlink" id="urn:uuid:9c604867-3135-4fa1-af9e-2bb11018ff5a" title="link2" location="/componentlink/urn:uuid:9c604867-3135-4fa1-af9e-2bb11018ff5a/" target="//@resources.11"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> + <attributes name="occi.core.id" value="urn:uuid:9c604867-3135-4fa1-af9e-2bb11018ff5a"/> + <attributes name="occi.core.title" value="link2"/> + <attributes name="occi.core.source" value="/sensor/urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb/"/> + <attributes name="occi.core.target" value="/processor/urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc/"/> + </links> + <links xsi:type="platform:Componentlink" id="urn:uuid:93f08e31-f350-42b7-a73b-c139eba4a8e3" title="link3" location="/componentlink/urn:uuid:93f08e31-f350-42b7-a73b-c139eba4a8e3/" target="//@resources.10"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> + <attributes name="occi.core.id" value="urn:uuid:93f08e31-f350-42b7-a73b-c139eba4a8e3"/> + <attributes name="occi.core.title" value="link3"/> + <attributes name="occi.core.source" value="/sensor/urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb/"/> + <attributes name="occi.core.target" value="/publisher/urn:uuid:588f705e-5279-4847-9337-846af2c86972/"/> + </links> + </resources> + <resources xsi:type="platform:Application" id="urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d" title="hadoopcluster" location="/application/urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d/" occiAppState="active"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='application']"/> + <attributes name="occi.core.id" value="urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d"/> + <attributes name="occi.core.title" value="hadoopcluster"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.app.name" value=""/> + <attributes name="occi.app.context" value="0"/> + <attributes name="occi.app.url" value="0"/> + <attributes name="occi.app.state" value="active"/> + <attributes name="occi.app.state.message" value=""/> + <links xsi:type="platform:Componentlink" id="urn:uuid:7890f02b-6f56-4809-865f-d8c686fd9da1" title="link4" location="/componentlink/urn:uuid:7890f02b-6f56-4809-865f-d8c686fd9da1/" target="//@resources.4"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> + <attributes name="occi.core.id" value="urn:uuid:7890f02b-6f56-4809-865f-d8c686fd9da1"/> + <attributes name="occi.core.title" value="link4"/> + <attributes name="occi.core.source" value="/application/urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d/"/> + <attributes name="occi.core.target" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255898/"/> + </links> + <links xsi:type="platform:Componentlink" id="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ef" title="ComponentLink" location="/componentlink/urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ef/" target="//@resources.1"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> + <attributes name="occi.core.id" value="urn:uuid:9aa31c50-c605-4370-aa60-2c7c461051ef"/> + <attributes name="occi.core.title" value="ComponentLink"/> + <attributes name="occi.core.source" value="/application/urn:uuid:a4888ba9-a0ea-48f2-a29e-901c876ab42d/"/> + <attributes name="occi.core.target" value="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/"/> + </links> + </resources> + <resources xsi:type="infrastructure:Compute" id="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce" title="hadoop-master" location="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/" rlinks="//@resources.2/@links.0 //@resources.1/@links.0 //@resources.3/@links.0" occiComputeCores="2" occiComputeHostname="hadoop-master" occiComputeShare="0" occiComputeSpeed="0.0" occiComputeMemory="4096.0" occiComputeState="active" occiComputeStateMessage=""> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='compute']"/> + <attributes name="occi.core.id" value="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce"/> + <attributes name="occi.core.title" value="hadoop-master"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.compute.architecture" value="x86"/> + <attributes name="occi.compute.cores" value="2"/> + <attributes name="occi.compute.hostname" value="hadoop-master"/> + <attributes name="occi.compute.share" value="0"/> + <attributes name="occi.compute.speed" value="0"/> + <attributes name="occi.compute.memory" value="4096"/> + <attributes name="occi.compute.state" value="active"/> + <attributes name="occi.compute.state.message" value=""/> + <parts xsi:type="infrastructure:Ssh_key" occiCredentialsSshPublickey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ssh_key']"/> + <attributes name="occi.credentials.ssh.publickey" value="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"/> + </parts> + <parts xsi:type="monitoring:Monitoringproperty" monitoringPropertyName="cpuutil" monitoringPropertyValue="0" monitoringPropertyId="123456"> + <mixin href="http://schemas.ugoe.cs.rwm/monitoring#//@mixins[term='monitoringproperty']"/> + <attributes name="monitoring.property.name" value="cpuutil"/> + <attributes name="monitoring.property.value" value="0"/> + <attributes name="monitoring.property.id" value="123456"/> + </parts> + <parts xsi:type="ossweruntime:Ubuntu_xenialxerus"> + <mixin href="http://schemas.modmacao.org/openstack/swe#//@mixins[term='ubuntu_xenialxerus']"/> + <attributes name="openstack.runtime.id" value="5437eae8-7c47-4834-929c-a314de77d291"/> + </parts> + <parts xsi:type="infrastructure:User_data" occiComputeUserdata="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='user_data']"/> + <attributes name="occi.compute.userdata" value="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"/> + </parts> + <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:ea482951-5c26-471d-aa1b-8e03b1e6096c" title="link3" location="/networkinterface/urn:uuid:ea482951-5c26-471d-aa1b-8e03b1e6096c/" target="//@resources.5"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> + <attributes name="occi.core.id" value="urn:uuid:ea482951-5c26-471d-aa1b-8e03b1e6096c"/> + <attributes name="occi.core.title" value="link3"/> + <attributes name="occi.networkinterface.interface" value=""/> + <attributes name="occi.networkinterface.mac" value=""/> + <attributes name="occi.networkinterface.state" value="active"/> + <attributes name="occi.networkinterface.state.message" value=""/> + <attributes name="occi.networkinterface.address" value="10.254.1.5"/> + <attributes name="occi.networkinterface.gateway" value=""/> + <attributes name="occi.networkinterface.allocation" value="dynamic"/> + <attributes name="occi.core.source" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> + <attributes name="occi.core.target" value="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339591/"/> + <parts xsi:type="infrastructure:Ipnetworkinterface" occiNetworkinterfaceAddress="10.254.1.5"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> + </links> + <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:03f91178-136f-4023-876e-84509f8a5a2d" title="monNwLink" location="/networkinterface/urn:uuid:03f91178-136f-4023-876e-84509f8a5a2d/" target="//@resources.9"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> + <attributes name="occi.core.id" value="urn:uuid:03f91178-136f-4023-876e-84509f8a5a2d"/> + <attributes name="occi.core.title" value="monNwLink"/> + <attributes name="occi.networkinterface.interface" value=""/> + <attributes name="occi.networkinterface.mac" value=""/> + <attributes name="occi.networkinterface.state" value="active"/> + <attributes name="occi.networkinterface.state.message" value=""/> + <attributes name="occi.networkinterface.address" value="100.254.1.35"/> + <attributes name="occi.networkinterface.gateway" value=""/> + <attributes name="occi.networkinterface.allocation" value="dynamic"/> + <attributes name="occi.core.source" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> + <attributes name="occi.core.target" value="/network/urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a/"/> + <parts xsi:type="infrastructure:Ipnetworkinterface" occiNetworkinterfaceAddress="100.254.1.35"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> + </links> + <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:d065d54c-55e5-48ce-81ac-2c1e8d1eee2e" title="hadoop-master -> Management Network" location="/networkinterface/urn:uuid:d065d54c-55e5-48ce-81ac-2c1e8d1eee2e/" target="//@resources.0"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> + <attributes name="occi.core.id" value="urn:uuid:d065d54c-55e5-48ce-81ac-2c1e8d1eee2e"/> + <attributes name="occi.core.title" value="hadoop-master -> Management Network"/> + <attributes name="occi.networkinterface.interface" value=""/> + <attributes name="occi.networkinterface.mac" value=""/> + <attributes name="occi.networkinterface.state" value="active"/> + <attributes name="occi.networkinterface.state.message" value=""/> + <attributes name="occi.networkinterface.address" value=""/> + <attributes name="occi.networkinterface.gateway" value=""/> + <attributes name="occi.networkinterface.allocation" value="dynamic"/> + <attributes name="occi.core.source" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/"/> + <attributes name="occi.core.target" value="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590/"/> + <parts xsi:type="infrastructure:Ipnetworkinterface"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> + <parts xsi:type="ansibleconfiguration:Ansibleendpoint"> + <mixin href="http://schemas.modmacao.org/occi/ansible#//@mixins[term='ansibleendpoint']"/> + </parts> + </links> + </resources> + <resources xsi:type="infrastructure:Network" id="urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a" title="MonitoringNetwork" location="/network/urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a/" rlinks="//@resources.8/@links.1 //@resources.12/@links.0" occiNetworkVlan="0" occiNetworkLabel="" occiNetworkState="active" occiNetworkStateMessage=""> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='network']"/> + <attributes name="occi.core.id" value="urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a"/> + <attributes name="occi.core.title" value="MonitoringNetwork"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.network.vlan" value="0"/> + <attributes name="occi.network.label" value=""/> + <attributes name="occi.network.state" value="active"/> + <attributes name="occi.network.state.message" value=""/> + <parts xsi:type="infrastructure:Ipnetwork" occiNetworkAddress="100.254.1.1/24"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetwork']"/> + <attributes name="occi.network.address" value="100.254.1.1/24"/> + <attributes name="occi.network.gateway" value=""/> + <attributes name="occi.network.allocation" value="dynamic"/> + </parts> + </resources> + <resources xsi:type="monitoring:Publisher" id="urn:uuid:588f705e-5279-4847-9337-846af2c86972" title="Publisher" location="/publisher/urn:uuid:588f705e-5279-4847-9337-846af2c86972/" rlinks="//@resources.6/@links.2"> + <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='publisher']"/> + <attributes name="occi.core.id" value="urn:uuid:588f705e-5279-4847-9337-846af2c86972"/> + <attributes name="occi.core.title" value="Publisher"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.component.state" value="active"/> + <attributes name="occi.component.state.message" value=""/> + <parts mixin="//@mixins.5"/> + <links xsi:type="platform:Componentlink" id="urn:uuid:9551c357-59f8-4ac1-8c85-0e886e206b80" title="link1" location="/componentlink/urn:uuid:9551c357-59f8-4ac1-8c85-0e886e206b80/" target="//@resources.11"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> + <attributes name="occi.core.id" value="urn:uuid:9551c357-59f8-4ac1-8c85-0e886e206b80"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.core.source" value="/publisher/urn:uuid:588f705e-5279-4847-9337-846af2c86972/"/> + <attributes name="occi.core.target" value="/processor/urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc/"/> + </links> + <links xsi:type="placement:Placementlink" id="urn:uuid:275b5bce-084c-46f0-88bc-1f6f31bf3616" title="link2" location="/placementlink/urn:uuid:275b5bce-084c-46f0-88bc-1f6f31bf3616/" target="//@resources.12"> + <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> + <attributes name="occi.core.id" value="urn:uuid:275b5bce-084c-46f0-88bc-1f6f31bf3616"/> + <attributes name="occi.core.title" value="link2"/> + <attributes name="occi.core.source" value="/publisher/urn:uuid:588f705e-5279-4847-9337-846af2c86972/"/> + <attributes name="occi.core.target" value="/compute/urn:uuid:37829092-c690-494a-98fa-335b2fd660ea/"/> + </links> + </resources> + <resources xsi:type="monitoring:Processor" id="urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc" title="Processor" location="/processor/urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc/" rlinks="//@resources.10/@links.0 //@resources.6/@links.1"> + <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='processor']"/> + <attributes name="occi.core.id" value="urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc"/> + <attributes name="occi.core.title" value="Processor"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.component.state" value="active"/> + <attributes name="occi.component.state.message" value=""/> + <parts mixin="//@mixins.4"/> + <links xsi:type="platform:Componentlink" id="urn:uuid:1a821776-7886-4cb4-8b80-46a8403acf40" title="link1" location="/componentlink/urn:uuid:1a821776-7886-4cb4-8b80-46a8403acf40/" target="//@resources.3"> + <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> + <attributes name="occi.core.id" value="urn:uuid:1a821776-7886-4cb4-8b80-46a8403acf40"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.core.source" value="/processor/urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc/"/> + <attributes name="occi.core.target" value="/datagatherer/urn:uuid:051affdc-d686-48f8-884c-83fe81718a48/"/> + </links> + <links xsi:type="placement:Placementlink" id="urn:uuid:ff7019e4-a9dc-48dc-83c3-ab77714a25f4" title="link2" location="/placementlink/urn:uuid:ff7019e4-a9dc-48dc-83c3-ab77714a25f4/" target="//@resources.12"> + <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> + <attributes name="occi.core.id" value="urn:uuid:ff7019e4-a9dc-48dc-83c3-ab77714a25f4"/> + <attributes name="occi.core.title" value="link2"/> + <attributes name="occi.core.source" value="/processor/urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc/"/> + <attributes name="occi.core.target" value="/compute/urn:uuid:37829092-c690-494a-98fa-335b2fd660ea/"/> + </links> + </resources> + <resources xsi:type="infrastructure:Compute" id="urn:uuid:37829092-c690-494a-98fa-335b2fd660ea" title="MonVm" location="/compute/urn:uuid:37829092-c690-494a-98fa-335b2fd660ea/" rlinks="//@resources.11/@links.1 //@resources.10/@links.1" occiComputeCores="2" occiComputeHostname="monvm" occiComputeShare="0" occiComputeSpeed="0.0" occiComputeMemory="4096.0" occiComputeState="active" occiComputeStateMessage=""> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='compute']"/> + <attributes name="occi.core.id" value="urn:uuid:37829092-c690-494a-98fa-335b2fd660ea"/> + <attributes name="occi.core.title" value="MonVm"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.compute.architecture" value="x86"/> + <attributes name="occi.compute.cores" value="2"/> + <attributes name="occi.compute.hostname" value="monvm"/> + <attributes name="occi.compute.share" value="0"/> + <attributes name="occi.compute.speed" value="0"/> + <attributes name="occi.compute.memory" value="4096"/> + <attributes name="occi.compute.state" value="active"/> + <attributes name="occi.compute.state.message" value=""/> + <parts xsi:type="infrastructure:Ssh_key" occiCredentialsSshPublickey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ssh_key']"/> + <attributes name="occi.credentials.ssh.publickey" value="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"/> + </parts> + <parts xsi:type="ossweruntime:Ubuntu_xenialxerus"> + <mixin href="http://schemas.modmacao.org/openstack/swe#//@mixins[term='ubuntu_xenialxerus']"/> + <attributes name="openstack.runtime.id" value="5437eae8-7c47-4834-929c-a314de77d291"/> + </parts> + <parts xsi:type="infrastructure:User_data" occiComputeUserdata="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='user_data']"/> + <attributes name="occi.compute.userdata" value="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"/> + </parts> + <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:00d6889d-b644-44bf-af13-3fe350e926ed" title="link1" location="/networkinterface/urn:uuid:00d6889d-b644-44bf-af13-3fe350e926ed/" target="//@resources.9"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> + <attributes name="occi.core.id" value="urn:uuid:00d6889d-b644-44bf-af13-3fe350e926ed"/> + <attributes name="occi.core.title" value="link1"/> + <attributes name="occi.networkinterface.interface" value=""/> + <attributes name="occi.networkinterface.mac" value=""/> + <attributes name="occi.networkinterface.state" value="active"/> + <attributes name="occi.networkinterface.state.message" value=""/> + <attributes name="occi.networkinterface.address" value=""/> + <attributes name="occi.networkinterface.gateway" value=""/> + <attributes name="occi.networkinterface.allocation" value="dynamic"/> + <attributes name="occi.core.source" value="/compute/urn:uuid:37829092-c690-494a-98fa-335b2fd660ea/"/> + <attributes name="occi.core.target" value="/network/urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a/"/> + <parts xsi:type="infrastructure:Ipnetworkinterface"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> + </links> + <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:a10c7d4b-d1e2-420e-81dc-ad4b46e718bf" title="MonVm -> Management Network" location="/networkinterface/urn:uuid:a10c7d4b-d1e2-420e-81dc-ad4b46e718bf/" target="//@resources.0"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> + <attributes name="occi.core.id" value="urn:uuid:a10c7d4b-d1e2-420e-81dc-ad4b46e718bf"/> + <attributes name="occi.core.title" value="MonVm -> Management Network"/> + <attributes name="occi.networkinterface.interface" value=""/> + <attributes name="occi.networkinterface.mac" value=""/> + <attributes name="occi.networkinterface.state" value="active"/> + <attributes name="occi.networkinterface.state.message" value=""/> + <attributes name="occi.networkinterface.address" value=""/> + <attributes name="occi.networkinterface.gateway" value=""/> + <attributes name="occi.networkinterface.allocation" value="dynamic"/> + <attributes name="occi.core.source" value="/compute/urn:uuid:37829092-c690-494a-98fa-335b2fd660ea/"/> + <attributes name="occi.core.target" value="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590/"/> + <parts xsi:type="infrastructure:Ipnetworkinterface"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> + <parts xsi:type="ansibleconfiguration:Ansibleendpoint"> + <mixin href="http://schemas.modmacao.org/occi/ansible#//@mixins[term='ansibleendpoint']"/> + </parts> + </links> + </resources> + <resources xsi:type="infrastructure:Compute" id="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf" title="hadoop-worker-1" location="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf/" rlinks="//@resources.4/@links.0" occiComputeCores="2" occiComputeHostname="hadoop-worker-1" occiComputeShare="0" occiComputeSpeed="0.0" occiComputeMemory="4096.0" occiComputeState="active" occiComputeStateMessage=""> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='compute']"/> + <attributes name="occi.core.id" value="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf"/> + <attributes name="occi.core.title" value="hadoop-worker-1"/> + <attributes name="occi.core.summary" value=""/> + <attributes name="occi.compute.architecture" value="x86"/> + <attributes name="occi.compute.cores" value="2"/> + <attributes name="occi.compute.hostname" value="hadoop-worker-1"/> + <attributes name="occi.compute.share" value="0"/> + <attributes name="occi.compute.speed" value="0"/> + <attributes name="occi.compute.memory" value="4096"/> + <attributes name="occi.compute.state" value="active"/> + <attributes name="occi.compute.state.message" value=""/> + <parts xsi:type="infrastructure:Ssh_key" occiCredentialsSshPublickey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ssh_key']"/> + <attributes name="occi.credentials.ssh.publickey" value="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6H7Ydi45BTHid4qNppGAi5mzjbnZgt7bi6xLGmZG9CiLmhMsxOuk3Z05Nn+pmoN98qS0eY8S240PPk5VOlYqBY0vdRAwrZSHHaLdMp6I7ARNrI2KraYduweqz7ZQxPXQfwIeYx2HKQxEF2r+4//Fo4WfgdBkLuulvl/Gw3TUzJNQHvgpaiNo9+PI5CZydHnZbjUkRikS12pT+CbNKj+0QKeQztbCd41aKxDv5H0DjltVRcpPppv4dmiU/zoCAIngWLO1PPgfYWyze8Z9IoyBT7Qdg30U91TYZBuxzXR5lq7Fh64y/IZ/SjdOdSIvIuDjtmJDULRdLJzrvubrKY+YH Generated-by-Nova"/> + </parts> + <parts xsi:type="ossweruntime:Ubuntu_xenialxerus"> + <mixin href="http://schemas.modmacao.org/openstack/swe#//@mixins[term='ubuntu_xenialxerus']"/> + <attributes name="openstack.runtime.id" value="5437eae8-7c47-4834-929c-a314de77d291"/> + </parts> + <parts xsi:type="infrastructure:User_data" occiComputeUserdata="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='user_data']"/> + <attributes name="occi.compute.userdata" value="I2Nsb3VkLWNvbmZpZwoKIyBVcGdyYWRlIHRoZSBpbnN0YW5jZSBvbiBmaXJzdCBib290CiMgKGllIHJ1biBhcHQtZ2V0IHVwZ3JhZGUpCiMKIyBEZWZhdWx0OiBmYWxzZQojIEFsaWFzZXM6IGFwdF91cGdyYWRlCnBhY2thZ2VfdXBncmFkZTogdHJ1ZQoKcGFja2FnZXM6CiAtIHB5dGhvbgoKd3JpdGVfZmlsZXM6CiAgLSBwYXRoOiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy5kLzUwLWNsb3VkLWluaXQuY2ZnCiAgICBjb250ZW50OiB8CiAgICAgIGF1dG8gbG8KICAgICAgaWZhY2UgbG8gaW5ldCBsb29wYmFjawogICAgICAKICAgICAgYXV0byBlbnMwCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMAogICAgICBpZmFjZSBlbnMwIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMQogICAgICBpZmFjZSBlbnMxIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMyCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMgogICAgICBpZmFjZSBlbnMyIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMzCiAgICAgIGFsbG93LWhvdHBsdWcgZW5zMwogICAgICBpZmFjZSBlbnMzIGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM0CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNAogICAgICBpZmFjZSBlbnM0IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM1CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNQogICAgICBpZmFjZSBlbnM1IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM2CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNgogICAgICBpZmFjZSBlbnM2IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM3CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zNwogICAgICBpZmFjZSBlbnM3IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM4CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOAogICAgICBpZmFjZSBlbnM4IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnM5CiAgICAgIGFsbG93LWhvdHBsdWcgZW5zOQogICAgICBpZmFjZSBlbnM5IGluZXQgZGhjcAogICAgICAKICAgICAgYXV0byBlbnMxMAogICAgICBhbGxvdy1ob3RwbHVnIGVuczEwCiAgICAgIGlmYWNlIGVuczEwIGluZXQgZGhjcAoKIyMj"/> + </parts> + <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:c8c49905-3d5e-43b2-8d09-fabf92d29722" title="link2" location="/networkinterface/urn:uuid:c8c49905-3d5e-43b2-8d09-fabf92d29722/" target="//@resources.5"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> + <attributes name="occi.core.id" value="urn:uuid:c8c49905-3d5e-43b2-8d09-fabf92d29722"/> + <attributes name="occi.core.title" value="link2"/> + <attributes name="occi.networkinterface.interface" value=""/> + <attributes name="occi.networkinterface.mac" value=""/> + <attributes name="occi.networkinterface.state" value="active"/> + <attributes name="occi.networkinterface.state.message" value=""/> + <attributes name="occi.networkinterface.address" value="10.254.1.8"/> + <attributes name="occi.networkinterface.gateway" value=""/> + <attributes name="occi.networkinterface.allocation" value="dynamic"/> + <attributes name="occi.core.source" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf/"/> + <attributes name="occi.core.target" value="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339591/"/> + <parts xsi:type="infrastructure:Ipnetworkinterface" occiNetworkinterfaceAddress="10.254.1.8"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> + </links> + <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:23fb4836-580e-4324-8b85-96429ade0bc6" title="hadoop-worker-1 -> Management Network" location="/networkinterface/urn:uuid:23fb4836-580e-4324-8b85-96429ade0bc6/" target="//@resources.0"> + <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> + <attributes name="occi.core.id" value="urn:uuid:23fb4836-580e-4324-8b85-96429ade0bc6"/> + <attributes name="occi.core.title" value="hadoop-worker-1 -> Management Network"/> + <attributes name="occi.networkinterface.interface" value=""/> + <attributes name="occi.networkinterface.mac" value=""/> + <attributes name="occi.networkinterface.state" value="active"/> + <attributes name="occi.networkinterface.state.message" value=""/> + <attributes name="occi.networkinterface.address" value=""/> + <attributes name="occi.networkinterface.gateway" value=""/> + <attributes name="occi.networkinterface.allocation" value="dynamic"/> + <attributes name="occi.core.source" value="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166cf/"/> + <attributes name="occi.core.target" value="/network/urn:uuid:29d78078-fb4c-47aa-a9af-b8aaf3339590/"/> + <parts xsi:type="infrastructure:Ipnetworkinterface"> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> + <parts xsi:type="ansibleconfiguration:Ansibleendpoint"> + <mixin href="http://schemas.modmacao.org/occi/ansible#//@mixins[term='ansibleendpoint']"/> + </parts> + </links> + </resources> + <mixins name="hjob" scheme="http://schemas.modmacao.org/usermixins#"/> + <mixins name="hmaster" scheme="http://schemas.modmacao.org/usermixins#"/> + <mixins name="hworker" scheme="http://schemas.modmacao.org/usermixins#"/> + <mixins name="cpugatherer" scheme="http://schemas.modmacao.org/usermixins#"/> + <mixins name="cpuprocessor" scheme="http://schemas.modmacao.org/usermixins#"/> + <mixins name="cpupublisher" scheme="http://schemas.modmacao.org/usermixins#"/> +</occi:Configuration> diff --git a/src/test/resources/occi/hadoopClusterNewExt.occic b/src/test/resources/occi/hadoopClusterNewExt.occic index a33758d..0cc759a 100644 --- a/src/test/resources/occi/hadoopClusterNewExt.occic +++ b/src/test/resources/occi/hadoopClusterNewExt.occic @@ -9,7 +9,7 @@ <use href="http://schemas.modmacao.org/modmacao#/"/> <use href="http://schemas.modmacao.org/openstack/swe#/"/> <use href="http://schemas.ugoe.cs.rwm/monitoring#/"/> - <resources xsi:type="infrastructure:Compute" id="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce" title="hadoop-master" location="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/" rlinks="//@resources.2/@links.0 //@resources.1/@links.0" occiComputeCores="2" occiComputeHostname="vm2" occiComputeMemory="4096.0" occiComputeState="active"> + <resources xsi:type="infrastructure:Compute" id="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce" title="hadoop-master" location="/compute/urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce/" rlinks="//@resources.2/@links.0 //@resources.1/@links.0 //@resources.8/@links.0" occiComputeCores="2" occiComputeHostname="vm2" occiComputeMemory="4096.0" occiComputeState="active"> <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='compute']"/> <attributes name="occi.core.id" value="urn:uuid:2e6a73d0-faaa-476a-bd25-ca461dd166ce"/> <attributes name="occi.core.title" value="hadoop-master"/> @@ -33,6 +33,12 @@ <parts> <mixin href="http://schemas.modmacao.org/openstack/swe#//@mixins[term='ubuntu_xenialxerus']"/> </parts> + <parts> + <mixin href="http://schemas.ugoe.cs.rwm/monitoring#//@mixins[term='monitoringproperty']"/> + <attributes name="monitoring.property.name" value="cpuutil"/> + <attributes name="monitoring.property.value" value="0"/> + <attributes name="monitoring.property.id" value="123456"/> + </parts> <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:ea482951-5c26-471d-aa1b-8e03b1e6096c" title="link3" location="/networkinterface/urn:uuid:ea482951-5c26-471d-aa1b-8e03b1e6096c" target="//@resources.6"> <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> <attributes name="occi.core.id" value="urn:uuid:ea482951-5c26-471d-aa1b-8e03b1e6096c"/> @@ -47,6 +53,9 @@ <attributes name="occi.core.id" value="urn:uuid:03f91178-136f-4023-876e-84509f8a5a2d"/> <attributes name="occi.core.title" value="monNwLink"/> <attributes name="occi.networkinterface.address" value="100.254.1.35"/> + <parts xsi:type="infrastructure:Ipnetworkinterface" occiNetworkinterfaceAddress="100.254.1.35" occiNetworkinterfaceGateway=""> + <mixin href="http://schemas.ogf.org/occi/infrastructure#//@mixins[term='ipnetworkinterface']"/> + </parts> </links> </resources> <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896" title="Wordcount" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255896/" occiComponentStateMessage=""> @@ -63,7 +72,7 @@ <attributes name="occi.core.title" value="link1"/> </links> </resources> - <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897" title="hMaster" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/" rlinks="//@resources.3/@links.0 //@resources.8/@links.0" occiComponentStateMessage=""> + <resources xsi:type="platform:Component" id="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897" title="hMaster" location="/component/urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897/" rlinks="//@resources.3/@links.0" occiComponentStateMessage=""> <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='component']"/> <attributes name="occi.core.id" value="urn:uuid:f934d445-d0c8-4f2f-8086-d9f1a8255897"/> <attributes name="occi.core.title" value="hMaster"/> @@ -157,7 +166,7 @@ <attributes name="occi.network.address" value="10.254.1.1/24"/> </parts> </resources> - <resources xsi:type="monitoring:Sensor" id="urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb" title="Sensor"> + <resources xsi:type="monitoring:Sensor" id="urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb" title="Sensor" monitoringPropertyMixin="123456"> <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='sensor']"/> <attributes name="occi.core.id" value="urn:uuid:efb0f50a-7a7c-4153-b939-4846d6554dbb"/> <attributes name="occi.core.title" value="Sensor"/> @@ -168,8 +177,9 @@ <attributes name="occi.sensor.period" value=""/> <attributes name="occi.sensor.granularity" value=""/> <attributes name="occi.sensor.accuracy" value=""/> - <attributes name="occi.app.state" value=""/> + <attributes name="occi.app.state" value="undeployed"/> <attributes name="occi.app.state.message" value=""/> + <attributes name="monitoring.property.mixin" value="123456"/> <links xsi:type="platform:Componentlink" id="urn:uuid:04cf6483-706d-4a2a-9114-9918ab2bb52a" title="link1" target="//@resources.8"> <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> <attributes name="occi.core.id" value="urn:uuid:04cf6483-706d-4a2a-9114-9918ab2bb52a"/> @@ -190,7 +200,8 @@ <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='datagatherer']"/> <attributes name="occi.core.id" value="urn:uuid:051affdc-d686-48f8-884c-83fe81718a48"/> <attributes name="occi.core.title" value="DataGatherer"/> - <links xsi:type="placement:Placementlink" id="urn:uuid:60cc05ca-4fd7-465b-8fd0-945dcbf8867f" title="link1" target="//@resources.2"> + <parts mixin="//@mixins.3"/> + <links xsi:type="placement:Placementlink" id="urn:uuid:60cc05ca-4fd7-465b-8fd0-945dcbf8867f" title="link1" target="//@resources.0"> <kind href="http://schemas.modmacao.org/placement#//@kinds[term='placementlink']"/> <attributes name="occi.core.id" value="urn:uuid:60cc05ca-4fd7-465b-8fd0-945dcbf8867f"/> <attributes name="occi.core.title" value="link1"/> @@ -200,6 +211,7 @@ <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='processor']"/> <attributes name="occi.core.id" value="urn:uuid:1bda25ab-723b-47e7-9704-5134db26ebdc"/> <attributes name="occi.core.title" value="Processor"/> + <parts mixin="//@mixins.4"/> <links xsi:type="platform:Componentlink" id="urn:uuid:1a821776-7886-4cb4-8b80-46a8403acf40" title="link1" target="//@resources.8"> <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> <attributes name="occi.core.id" value="urn:uuid:1a821776-7886-4cb4-8b80-46a8403acf40"/> @@ -215,6 +227,7 @@ <kind href="http://schemas.ugoe.cs.rwm/monitoring#//@kinds[term='publisher']"/> <attributes name="occi.core.id" value="urn:uuid:588f705e-5279-4847-9337-846af2c86972"/> <attributes name="occi.core.title" value="Publisher"/> + <parts mixin="//@mixins.5"/> <links xsi:type="platform:Componentlink" id="urn:uuid:9551c357-59f8-4ac1-8c85-0e886e206b80" title="link1" target="//@resources.9"> <kind href="http://schemas.modmacao.org/occi/platform#//@kinds[term='componentlink']"/> <attributes name="occi.core.id" value="urn:uuid:9551c357-59f8-4ac1-8c85-0e886e206b80"/> @@ -226,19 +239,22 @@ <attributes name="occi.core.title" value="link2"/> </links> </resources> - <resources xsi:type="infrastructure:Compute" id="urn:uuid:37829092-c690-494a-98fa-335b2fd660ea" title="MonVm" rlinks="//@resources.9/@links.1 //@resources.10/@links.1"> + <resources xsi:type="infrastructure:Compute" id="urn:uuid:37829092-c690-494a-98fa-335b2fd660ea" title="MonVm" rlinks="//@resources.9/@links.1 //@resources.10/@links.1" occiComputeState="inactive"> <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='compute']"/> <attributes name="occi.core.id" value="urn:uuid:37829092-c690-494a-98fa-335b2fd660ea"/> <attributes name="occi.core.title" value="MonVm"/> <attributes name="occi.core.summary" value=""/> <attributes name="occi.compute.architecture" value="x86"/> <attributes name="occi.compute.cores" value="2"/> - <attributes name="occi.compute.hostname" value="hadoop-worker-1"/> + <attributes name="occi.compute.hostname" value="monvm"/> <attributes name="occi.compute.share" value="0"/> <attributes name="occi.compute.speed" value="0"/> <attributes name="occi.compute.memory" value="4096"/> <attributes name="occi.compute.state" value="active"/> <attributes name="occi.compute.state.message" value=""/> + <parts> + <mixin href="http://schemas.modmacao.org/openstack/swe#//@mixins[term='ubuntu_xenialxerus']"/> + </parts> <links xsi:type="infrastructure:Networkinterface" id="urn:uuid:00d6889d-b644-44bf-af13-3fe350e926ed" title="link1" target="//@resources.12"> <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='networkinterface']"/> <attributes name="occi.core.id" value="urn:uuid:00d6889d-b644-44bf-af13-3fe350e926ed"/> @@ -248,7 +264,7 @@ </parts> </links> </resources> - <resources xsi:type="infrastructure:Network" id="urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a" title="MonitoringNetwork" rlinks="//@resources.11/@links.0 //@resources.0/@links.1"> + <resources xsi:type="infrastructure:Network" id="urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a" title="MonitoringNetwork" rlinks="//@resources.11/@links.0 //@resources.0/@links.1" occiNetworkState="inactive"> <kind href="http://schemas.ogf.org/occi/infrastructure#//@kinds[term='network']"/> <attributes name="occi.core.id" value="urn:uuid:7a9fca2c-24fb-473c-aa9c-8dc9e68a432a"/> <attributes name="occi.core.title" value="MonitoringNetwork"/> @@ -265,6 +281,7 @@ <mixins name="hJob" scheme="http://schemas.modmacao.org/usermixins#" title="Hjob"/> <mixins name="hMaster" scheme="http://schemas.modmacao.org/usermixins#" title="HMaster"/> <mixins name="hWorker" scheme="http://schemas.modmacao.org/usermixins#" title="HWorker"/> - <mixins name="hJobMonitoring" scheme="http://schemas.modmacao.org/usermixins#" title="HJobMonitoring"/> - <mixins name="hJobMonitoring2" scheme="http://schemas.modmacao.org/usermixins#" title="HJobMonitoring2"/> + <mixins name="CPUGatherer" scheme="http://schemas.modmacao.org/usermixins#" title="CPUGatherer"/> + <mixins name="CPUProcessor" scheme="http://schemas.modmacao.org/usermixins#" title="CPUProcessor"/> + <mixins name="CPUPublisher" scheme="http://schemas.modmacao.org/usermixins#" title="CPUPublisher"/> </occi:Configuration> -- GitLab