diff options
Diffstat (limited to 'src/main/java/pl/edu')
3 files changed, 27 insertions, 17 deletions
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Qurnik.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Qurnik.java index 3864aba..9b7268a 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Qurnik.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Qurnik.java @@ -15,6 +15,7 @@ import pl.edu.mimuw.cloudatlas.interpreter.InterpreterException; import pl.edu.mimuw.cloudatlas.interpreter.QueryResult; import pl.edu.mimuw.cloudatlas.model.Attribute; import pl.edu.mimuw.cloudatlas.model.AttributesMap; +import pl.edu.mimuw.cloudatlas.model.AttributesUtil; import pl.edu.mimuw.cloudatlas.model.PathName; import pl.edu.mimuw.cloudatlas.model.TypePrimitive; import pl.edu.mimuw.cloudatlas.model.Value; @@ -92,9 +93,11 @@ public class Qurnik extends Module { if (!currentPath.toString().equals("/")) { newAttributes.add("name", new ValueString(currentPath.getSingletonName())); } - long currentTime = System.currentTimeMillis() / 1000; + long currentTime = System.currentTimeMillis(); newAttributes.add("timestamp", new ValueTime(currentTime)); + AttributesUtil.transferAttributes(newAttributes, zmi.getAttributes()); + UpdateAttributesMessage message = new UpdateAttributesMessage("", currentTime, currentPath.toString(), newAttributes); sendMessage(message); } diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java index e8721b3..4694219 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java @@ -12,6 +12,7 @@ import pl.edu.mimuw.cloudatlas.agent.messages.UpdateAttributesMessage; import pl.edu.mimuw.cloudatlas.agent.messages.UpdateQueriesMessage; import pl.edu.mimuw.cloudatlas.model.Attribute; import pl.edu.mimuw.cloudatlas.model.AttributesMap; +import pl.edu.mimuw.cloudatlas.model.AttributesUtil; import pl.edu.mimuw.cloudatlas.model.PathName; import pl.edu.mimuw.cloudatlas.model.Type; import pl.edu.mimuw.cloudatlas.model.TypePrimitive; @@ -67,7 +68,7 @@ public class Stanik extends Module { ZMI zone = hierarchy.findDescendant(message.getPathName()); AttributesMap attributes = zone.getAttributes(); if (valueLower(attributes.get("timestamp"), message.getAttributes().get("timestamp"))) { - transferAttributes(message.getAttributes(), attributes); + AttributesUtil.transferAttributes(message.getAttributes(), attributes); } else { System.out.println("DEBUG: not applying update with older attributes"); } @@ -127,21 +128,6 @@ public class Stanik extends Module { return value != null && !value.isNull() && value.getType().isCompatible(type); } - private void transferAttributes(AttributesMap fromAttributes, AttributesMap toAttributes) { - Iterator<Entry<Attribute, Value>> iterator = toAttributes.iterator(); - while (iterator.hasNext()) { - Entry<Attribute, Value> entry = iterator.next(); - Attribute attribute = entry.getKey(); - Value newValue = fromAttributes.getOrNull(attribute); - if (newValue == null) { - iterator.remove(); - } - } - for (Entry<Attribute, Value> entry : fromAttributes) { - toAttributes.addOrChange(entry.getKey(), entry.getValue()); - } - } - private void addMissingZones(PathName path) { try { if (!hierarchy.descendantExists(path)) { diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/model/AttributesUtil.java b/src/main/java/pl/edu/mimuw/cloudatlas/model/AttributesUtil.java new file mode 100644 index 0000000..cd2ae91 --- /dev/null +++ b/src/main/java/pl/edu/mimuw/cloudatlas/model/AttributesUtil.java @@ -0,0 +1,21 @@ +package pl.edu.mimuw.cloudatlas.model; + +import java.util.Iterator; +import java.util.Map.Entry; + +public class AttributesUtil { + public static void transferAttributes(AttributesMap fromAttributes, AttributesMap toAttributes) { + Iterator<Entry<Attribute, Value>> iterator = toAttributes.iterator(); + while (iterator.hasNext()) { + Entry<Attribute, Value> entry = iterator.next(); + Attribute attribute = entry.getKey(); + Value newValue = fromAttributes.getOrNull(attribute); + if (newValue == null) { + iterator.remove(); + } + } + for (Entry<Attribute, Value> entry : fromAttributes) { + toAttributes.addOrChange(entry.getKey(), entry.getValue()); + } + } +} |