From a0f7bc374e1cae1451c0f160e9dec748fd7953ce Mon Sep 17 00:00:00 2001 From: Mikhail-Petrov <dragon294@mail.ru> Date: Mon, 28 Mar 2016 16:17:34 +0300 Subject: [PATCH] added unsubscribe --- src/wrapper/SmartSpaceKPI.java | 50 +++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/wrapper/SmartSpaceKPI.java b/src/wrapper/SmartSpaceKPI.java index 151f08d..5604ecc 100644 --- a/src/wrapper/SmartSpaceKPI.java +++ b/src/wrapper/SmartSpaceKPI.java @@ -11,10 +11,12 @@ public class SmartSpaceKPI { private KPICore core; private ArrayList<String> subscriptionIdList; + private ArrayList<SmartSpaceTriplet> tripletList; public SmartSpaceKPI(String host, int port, String spaceName) throws SmartSpaceException { core = new KPICore(host, port, spaceName); subscriptionIdList = new ArrayList<String>(); + tripletList = new ArrayList<SmartSpaceTriplet>(); SIBResponse joinResponse = core.join(); @@ -28,8 +30,8 @@ public class SmartSpaceKPI { SIBResponse insertResponse = core.insert(triplet.getSubject(), triplet.getPredicate(), triplet.getObject(), triplet.getSubjectType(), triplet.getObjectType()); if (!insertResponse.isConfirmed()) { String text = String.format("KPI failed to insert triplet: (%s, %s, %s, %s, %s)", - triplet.getSubject(), triplet.getPredicate(), triplet.getObject(), - triplet.getSubjectType(), triplet.getObjectType()); + triplet.getSubject(), triplet.getPredicate(), triplet.getObject(), + triplet.getSubjectType(), triplet.getObjectType()); throw new SmartSpaceException(text + '\n' + insertResponse.Message); } @@ -39,8 +41,8 @@ public class SmartSpaceKPI { SIBResponse removeResponse = core.remove(triplet.getSubject(), triplet.getPredicate(), triplet.getObject(), triplet.getSubjectType(), triplet.getObjectType()); if (!removeResponse.isConfirmed()) { String text = String.format("KP failed to remove triplet: (%s, %s, %s, %s, %s)", - triplet.getSubject(), triplet.getPredicate(), triplet.getObject(), - triplet.getSubjectType(), triplet.getObjectType()); + triplet.getSubject(), triplet.getPredicate(), triplet.getObject(), + triplet.getSubjectType(), triplet.getObjectType()); throw new SmartSpaceException(text + '\n' + removeResponse.Message); } @@ -84,6 +86,7 @@ public class SmartSpaceKPI { if (subscribeResponse != null && subscribeResponse.isConfirmed()) { subscriptionIdList.add(subscribeResponse.subscription_id); + tripletList.add(triplet); } else { System.err.println("Some problems with subscribing"); throw new SmartSpaceException(subscribeResponse != null ? subscribeResponse.Message : null); @@ -94,9 +97,7 @@ public class SmartSpaceKPI { try { unsubscribe(); - } - catch (SmartSpaceException exception) - { + } catch (SmartSpaceException exception) { System.err.println(exception.getMessage()); } @@ -127,4 +128,39 @@ public class SmartSpaceKPI { throw new SmartSpaceException(exceptionMessage); } } + + public void unsubscribe(SmartSpaceTriplet triplet, boolean fullMatch) throws SmartSpaceException { + String exceptionMessage = ""; + + String subject = triplet.getSubject(), predicate = triplet.getPredicate(), object = triplet.getObject(); + + for (int i = 0; i < subscriptionIdList.size(); i++) { + SmartSpaceTriplet curTriplet = tripletList.get(i); + + if (check2Strings(subject, curTriplet.getSubject(), fullMatch)) + if (check2Strings(predicate, curTriplet.getPredicate(), fullMatch)) + if (check2Strings(object, curTriplet.getObject(), fullMatch)) { + SIBResponse unsubscribeResponse = core.unsubscribe(subscriptionIdList.get(i)); + + // у Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹ Ñ Ð¾Ñ‚Ð¿Ð¸Ñкой от интеллектуального проÑтранÑтва + if (!unsubscribeResponse.isConfirmed()) { + exceptionMessage += subscriptionIdList.get(i) + ": " + unsubscribeResponse.Message + '\n'; + } + } + } + + // проблемы во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ð¿Ð¸Ñки были, Ñигнализируем Ñто + if (!exceptionMessage.isEmpty()) { + throw new SmartSpaceException(exceptionMessage); + } + } + + private boolean check2Strings(String mainString, String curString, boolean fullMatch) { + if (mainString == null) + if (fullMatch) + return (curString == null); + else + return true; + return mainString.equals(curString); + } } -- GitLab