From 0b74cc7ffc9efce871402363923a637d1173b105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20D=C3=A9mare?= Date: Thu, 6 Feb 2014 22:44:45 +0100 Subject: [PATCH] Add the 'add node attribute' command --- src-gama-test/gama_model/models/test.gaml | 15 +++++ .../sender/AddNodeAttributeStatement.java | 60 +++++++++++++++++++ .../gama/extension/sender/GSSender.java | 8 +-- 3 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 src/org/graphstream/gama/extension/sender/AddNodeAttributeStatement.java diff --git a/src-gama-test/gama_model/models/test.gaml b/src-gama-test/gama_model/models/test.gaml index 15ae639..a4d3dc6 100644 --- a/src-gama-test/gama_model/models/test.gaml +++ b/src-gama-test/gama_model/models/test.gaml @@ -42,6 +42,21 @@ global { // Step gs_step gs_sender_id:"test1" gs_step_number:1; + // Add attributes on node + // A string attribute + gs_add_node_attribute gs_sender_id:"test1" gs_node_id:"node1" gs_attribute_name:"string" gs_attribute_value:"a string value"; + // A double attribute + gs_add_node_attribute gs_sender_id:"test1" gs_node_id:"node1" gs_attribute_name:"double" gs_attribute_value:10.0; + // An integer attribute + gs_add_node_attribute gs_sender_id:"test1" gs_node_id:"node1" gs_attribute_name:"integer" gs_attribute_value:1; + // A boolean attribute + gs_add_node_attribute gs_sender_id:"test1" gs_node_id:"node1" gs_attribute_name:"boolean" gs_attribute_value:true; + // A list attribute + gs_add_node_attribute gs_sender_id:"test1" gs_node_id:"node1" gs_attribute_name:"list" gs_attribute_value:[1,2,3]; + + // Step + gs_step gs_sender_id:"test1" gs_step_number:2; + // Clear gs_clear gs_sender_id:"test1"; diff --git a/src/org/graphstream/gama/extension/sender/AddNodeAttributeStatement.java b/src/org/graphstream/gama/extension/sender/AddNodeAttributeStatement.java new file mode 100644 index 0000000..f7ae87c --- /dev/null +++ b/src/org/graphstream/gama/extension/sender/AddNodeAttributeStatement.java @@ -0,0 +1,60 @@ +package org.graphstream.gama.extension.sender; + +import msi.gama.precompiler.ISymbolKind; +import msi.gama.precompiler.GamlAnnotations.facet; +import msi.gama.precompiler.GamlAnnotations.facets; +import msi.gama.precompiler.GamlAnnotations.inside; +import msi.gama.precompiler.GamlAnnotations.symbol; +import msi.gama.runtime.IScope; +import msi.gama.runtime.exceptions.GamaRuntimeException; +import msi.gaml.descriptions.IDescription; +import msi.gaml.expressions.IExpression; +import msi.gaml.statements.AbstractStatement; +import msi.gaml.statements.IStatement; +import msi.gaml.types.IType; + +import org.graphstream.gama.extension.GSManager; +import org.graphstream.gama.extension.IKeywordGSAdditional; + + +@symbol(name = IKeywordGSAdditional.ADD_NODE_ATTRIBUTE, kind = ISymbolKind.SINGLE_STATEMENT, with_sequence = false) +@inside(kinds = { ISymbolKind.BEHAVIOR, ISymbolKind.SINGLE_STATEMENT }) +@facets(value = { @facet(name = IKeywordGSAdditional.SENDERID, type = IType.STRING, optional = false), + @facet(name = IKeywordGSAdditional.NODE_ID, type = IType.STRING, optional = false), + @facet(name = IKeywordGSAdditional.ATTRIBUTE_NAME, type = IType.STRING, optional = false), + @facet(name = IKeywordGSAdditional.ATTRIBUTE_VALUE, type = IType.NONE, optional = false)}) +public class AddNodeAttributeStatement extends AbstractStatement implements IStatement{ + + final IExpression senderid; + final IExpression nodeid; + final IExpression attname; + final IExpression attval; + + public AddNodeAttributeStatement(IDescription desc) { + super(desc); + senderid = getFacet(IKeywordGSAdditional.SENDERID); + nodeid = getFacet(IKeywordGSAdditional.NODE_ID); + attname = getFacet(IKeywordGSAdditional.ATTRIBUTE_NAME); + attval = getFacet(IKeywordGSAdditional.ATTRIBUTE_VALUE); + } + + @Override + protected Object privateExecuteIn(IScope scope) throws GamaRuntimeException { + String s = (String)(senderid.value(scope)); + String eid = (String)(nodeid.value(scope)); + String an = (String)(attname.value(scope)); + Object av = attval.value(scope); + GSSender sender = GSManager.getSender(s); + // If it is a GamaList, it must be cast to an array + if(av instanceof msi.gama.util.GamaList){ + Object[] av_ar = ((msi.gama.util.GamaList) av).toArray(); + sender.sendNodeAttributeAdded(eid, an, av_ar); + } + else { + sender.sendNodeAttributeAdded(eid, an, av); + } + return null; + } + + +} \ No newline at end of file diff --git a/src/org/graphstream/gama/extension/sender/GSSender.java b/src/org/graphstream/gama/extension/sender/GSSender.java index 401f9eb..c3fc9f5 100644 --- a/src/org/graphstream/gama/extension/sender/GSSender.java +++ b/src/org/graphstream/gama/extension/sender/GSSender.java @@ -55,9 +55,9 @@ public class GSSender { nsSender.graphAttributeAdded(sourceId, newEvent(), attribute, value); } - public void sendNodeAttributeAdded(long nodeId, String attribute, + public void sendNodeAttributeAdded(String nodeId, String attribute, Object value) { - nsSender.nodeAttributeAdded(sourceId, newEvent(), nodeId + "", + nsSender.nodeAttributeAdded(sourceId, newEvent(), nodeId, attribute, value); } @@ -71,8 +71,8 @@ public class GSSender { nsSender.graphAttributeRemoved(sourceId, newEvent(), attribute); } - public void sendNodeAttributeRemoved(long nodeId, String attribute) { - nsSender.nodeAttributeRemoved(sourceId, newEvent(), nodeId + "", + public void sendNodeAttributeRemoved(String nodeId, String attribute) { + nsSender.nodeAttributeRemoved(sourceId, newEvent(), nodeId, attribute); } -- GitLab