m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagdalena GrodziƄska <mag.grodzinska@gmail.com>2020-01-11 17:00:26 +0100
committerGitHub <noreply@github.com>2020-01-11 17:00:26 +0100
commit5de908b8a0e15c7d71dadf0f4314c12b1429ac6c (patch)
treeb7062c202f2a054d3b9ac69888519dd634190b66
parentc125370268544a1321aaa2152e200b5a74664880 (diff)
parenta07c25266dc18f9ff3f0a23a8157fc478cdf5299 (diff)
Merge pull request #97 from m-chrzan/handle_contacts
Add setting fallback contacts
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java27
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StanikMessage.java3
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/UpdateContactsMessage.java20
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java41
4 files changed, 47 insertions, 44 deletions
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java
index def1d72..b293446 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java
@@ -15,27 +15,12 @@ import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
-import pl.edu.mimuw.cloudatlas.agent.messages.RequestStateMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.ResponseMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.SetAttributeMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.UpdateQueriesMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.*;
import pl.edu.mimuw.cloudatlas.interpreter.Interpreter;
import pl.edu.mimuw.cloudatlas.interpreter.InterpreterException;
import pl.edu.mimuw.cloudatlas.interpreter.Main;
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.PathName;
-import pl.edu.mimuw.cloudatlas.model.ValueContact;
-import pl.edu.mimuw.cloudatlas.model.Value;
-import pl.edu.mimuw.cloudatlas.model.ValueNull;
-import pl.edu.mimuw.cloudatlas.model.ValueQuery;
-import pl.edu.mimuw.cloudatlas.model.ValueSet;
-import pl.edu.mimuw.cloudatlas.model.ValueTime;
-import pl.edu.mimuw.cloudatlas.model.Type;
-import pl.edu.mimuw.cloudatlas.model.TypePrimitive;
-import pl.edu.mimuw.cloudatlas.model.ZMI;
+import pl.edu.mimuw.cloudatlas.model.*;
import pl.edu.mimuw.cloudatlas.api.Api;
public class NewApiImplementation implements Api {
@@ -138,6 +123,12 @@ public class NewApiImplementation implements Api {
}
public void setFallbackContacts(Set<ValueContact> contacts) throws RemoteException {
- // this.contacts = contacts;
+ try {
+ UpdateContactsMessage message = new UpdateContactsMessage("", System.currentTimeMillis(), contacts);
+ eventBus.addMessage(message);
+ } catch (Exception e) {
+ System.out.println("ERROR: failed to set contacts");
+ throw new RemoteException("Failed to set contacts", e);
+ }
}
}
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StanikMessage.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StanikMessage.java
index 3daa5f9..d59acda 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StanikMessage.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StanikMessage.java
@@ -9,7 +9,8 @@ public abstract class StanikMessage extends AgentMessage {
REMOVE_ZMI,
SET_ATTRIBUTE,
UPDATE_ATTRIBUTES,
- UPDATE_QUERIES
+ UPDATE_QUERIES,
+ UPDATE_CONTACTS
}
private Type type;
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/UpdateContactsMessage.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/UpdateContactsMessage.java
new file mode 100644
index 0000000..227d213
--- /dev/null
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/UpdateContactsMessage.java
@@ -0,0 +1,20 @@
+package pl.edu.mimuw.cloudatlas.agent.messages;
+
+import java.util.Set;
+
+import pl.edu.mimuw.cloudatlas.model.ValueContact;
+
+public class UpdateContactsMessage extends StanikMessage {
+ private Set<ValueContact> contacts;
+
+ public UpdateContactsMessage(String messageId, long timestamp, Set<ValueContact> contacts) {
+ super(messageId, timestamp, Type.UPDATE_CONTACTS);
+ this.contacts = contacts;
+ }
+
+ public UpdateContactsMessage() {}
+
+ public Set<ValueContact> getContacts() {
+ return contacts;
+ }
+}
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 3fca1d5..c713827 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
@@ -1,33 +1,11 @@
package pl.edu.mimuw.cloudatlas.agent.modules;
import java.nio.file.Path;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
import java.util.Map.Entry;
-import pl.edu.mimuw.cloudatlas.agent.messages.AgentMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.GetStateMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.RemoveZMIMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.SetAttributeMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.StanikMessage;
-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;
-import pl.edu.mimuw.cloudatlas.model.Value;
-import pl.edu.mimuw.cloudatlas.model.ValueBoolean;
-import pl.edu.mimuw.cloudatlas.model.ValueDuration;
-import pl.edu.mimuw.cloudatlas.model.ValueQuery;
-import pl.edu.mimuw.cloudatlas.model.ValueString;
-import pl.edu.mimuw.cloudatlas.model.ValueTime;
-import pl.edu.mimuw.cloudatlas.model.ValueUtils;
-import pl.edu.mimuw.cloudatlas.model.ZMI;
+import pl.edu.mimuw.cloudatlas.agent.messages.*;
+import pl.edu.mimuw.cloudatlas.model.*;
public class Stanik extends Module {
private class InvalidUpdateAttributesMessage extends Exception {
@@ -39,6 +17,8 @@ public class Stanik extends Module {
private ZMI hierarchy;
private HashMap<Attribute, Entry<ValueQuery, ValueTime>> queries;
private long freshnessPeriod;
+ private Set<ValueContact> contacts;
+ private ValueTime contactsTimestamp;
public Stanik(long freshnessPeriod) {
super(ModuleType.STATE);
@@ -46,6 +26,8 @@ public class Stanik extends Module {
queries = new HashMap<Attribute, Entry<ValueQuery, ValueTime>>();
hierarchy.getAttributes().add("timestamp", new ValueTime(0l));
this.freshnessPeriod = freshnessPeriod;
+ this.contactsTimestamp = ValueUtils.currentTime();
+ this.contacts = new HashSet<>();
}
public Stanik() {
@@ -69,6 +51,8 @@ public class Stanik extends Module {
case UPDATE_QUERIES:
handleUpdateQueries((UpdateQueriesMessage) message);
break;
+ case UPDATE_CONTACTS:
+ handleUpdateContacts((UpdateContactsMessage) message);
default:
throw new InvalidMessageType("This type of message cannot be handled by Stanik");
}
@@ -251,4 +235,11 @@ public class Stanik extends Module {
public HashMap<Attribute, Entry<ValueQuery, ValueTime>> getQueries() {
return queries;
}
+
+ private void handleUpdateContacts(UpdateContactsMessage message) {
+ if (message.getContacts() != null && !message.getContacts().isEmpty() &&
+ ValueUtils.valueLower(contactsTimestamp, new ValueTime(message.getTimestamp()))) {
+ this.contacts = message.getContacts();
+ }
+ }
}