From e742bf9b8d1bc5ee7a97586510643db6fd3174f2 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 18 Nov 2019 14:53:44 +0100 Subject: Implement basic API (#15) --- .../mimuw/cloudatlas/agent/ApiImplementation.java | 71 ++++++++++++++++++++-- 1 file changed, 65 insertions(+), 6 deletions(-) (limited to 'src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java') diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java index fd52052..12682a6 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementation.java @@ -5,32 +5,91 @@ import java.rmi.RemoteException; import java.util.Set; import java.util.HashSet; +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.ValueQuery; import pl.edu.mimuw.cloudatlas.model.ValueSet; import pl.edu.mimuw.cloudatlas.model.ValueNull; import pl.edu.mimuw.cloudatlas.model.TypePrimitive; +import pl.edu.mimuw.cloudatlas.model.ZMI; import pl.edu.mimuw.cloudatlas.api.Api; public class ApiImplementation implements Api { + ZMI root; + Set contacts; + + public ApiImplementation(ZMI root) { + this.root = root; + this.contacts = new HashSet(); + } + public Set getZoneSet() throws RemoteException { - return null; + Set zones = new HashSet(); + collectZoneNames(root, zones); + return zones; + } + + private void collectZoneNames(ZMI zone, Set names) { + names.add(zone.getPathName().toString()); + for (ZMI son : zone.getSons()) { + collectZoneNames(son, names); + } } - public AttributesMap getZoneAttributeValue(String zoneName) throws RemoteException { - return null; + public AttributesMap getZoneAttributeValues(String zoneName) throws RemoteException { + try { + ZMI zmi = root.findDescendant(new PathName(zoneName)); + return zmi.getAttributes(); + } catch (ZMI.NoSuchZoneException e) { + throw new RemoteException("Zone not found", e); + } } - public void installQuery(String queryName, String query) throws RemoteException { + public void installQuery(String name, String queryCode) throws RemoteException { + try { + ValueQuery query = new ValueQuery(queryCode); + Attribute attributeName = new Attribute(name); + installQueryInHierarchy(root, attributeName, query); + } catch (Exception e) { + throw new RemoteException("Failed to install query", e); + } + } + + private void installQueryInHierarchy(ZMI zmi, Attribute queryName, ValueQuery query) { + if (!zmi.getSons().isEmpty()) { + zmi.getAttributes().addOrChange(queryName, query); + for (ZMI son : zmi.getSons()) { + installQueryInHierarchy(son, queryName, query); + } + } } public void uninstallQuery(String queryName) throws RemoteException { + uninstallQueryInHierarchy(root, new Attribute(queryName)); + } + + private void uninstallQueryInHierarchy(ZMI zmi, Attribute queryName) { + if (!zmi.getSons().isEmpty()) { + zmi.getAttributes().remove(queryName); + for (ZMI son : zmi.getSons()) { + uninstallQueryInHierarchy(son, queryName); + } + } } - public void setAttributeValue(String attributeName, Value value) throws RemoteException { + public void setAttributeValue(String zoneName, String attributeName, Value value) throws RemoteException { + try { + ZMI zmi = root.findDescendant(new PathName(zoneName)); + zmi.getAttributes().addOrChange(new Attribute(attributeName), value); + } catch (ZMI.NoSuchZoneException e) { + throw new RemoteException("Zone not found", e); + } } - public void setFallbackContacts(Set serializedContacts) throws RemoteException { + public void setFallbackContacts(Set contacts) throws RemoteException { + this.contacts = contacts; } } -- cgit v1.2.3