public Object subscribe(IReaction reaction, String event, String key, Provider provider)
      throws TupleSpaceException, TupleSpaceSecurityException {

    Object obj = null;

    switch (provider) {
      case LOCAL:
        obj = localDomain.subscribe(reaction, event, key);
        break;

      case INFRA:
        obj = infraDomain.subscribe(reaction, event, key);
        break;

      case ADHOC:
        obj = adhocDomain.subscribe(reaction, event, key);
        break;
      default: // ALL providers
        List<Object> objList = new ArrayList<Object>();
        objList.add(localDomain.subscribe(reaction, event, key));
        objList.add(infraDomain.subscribe(reaction, event, key));
        objList.add(adhocDomain.subscribe(reaction, event, key));

        obj = objList;

        break;
    }

    return obj;
  }