diff options
author | Magdalena GrodziĆska <mag.grodzinska@gmail.com> | 2020-01-11 17:00:26 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-11 17:00:26 +0100 |
commit | 5de908b8a0e15c7d71dadf0f4314c12b1429ac6c (patch) | |
tree | b7062c202f2a054d3b9ac69888519dd634190b66 /src/main/java/pl/edu/mimuw | |
parent | c125370268544a1321aaa2152e200b5a74664880 (diff) | |
parent | a07c25266dc18f9ff3f0a23a8157fc478cdf5299 (diff) |
Merge pull request #97 from m-chrzan/handle_contacts
Add setting fallback contacts
Diffstat (limited to 'src/main/java/pl/edu/mimuw')
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(); + } + } } |