@Override
 public void received(IResource resource, ChangeType change) {
   Trace.debug("Watch received change in {0} state\n{1}", state, resource.toJson(false));
   if (State.CONNECTED == state.get()) {
     IResource newItem = null;
     IResource oldItem = null;
     int index = resources.indexOf(resource);
     if (ChangeType.ADDED.equals(change)) {
       resources.add(resource);
       newItem = resource;
     } else if (ChangeType.DELETED.equals(change)) {
       oldItem = index > NOT_FOUND ? resources.remove(index) : resource;
     } else if (ChangeType.MODIFIED.equals(change)) {
       if (index > NOT_FOUND) {
         oldItem = resources.remove(index);
       }
       resources.add(resource);
       newItem = resource;
     }
     ConnectionsRegistrySingleton.getInstance()
         .fireConnectionChanged(conn, ConnectionProperties.PROPERTY_RESOURCE, oldItem, newItem);
   }
 }