Ejemplo n.º 1
0
  private void addBuddies(List<SsiItem> items) {
    SsiServiceImpl service = getSsiService();
    final List<Integer> ids = SsiTools.getIdsForItems(items);
    LOGGER.fine("Adding buddies " + items + " - ID's: " + ids);
    CreateItemsCmd cmd = new CreateItemsCmd(items);
    service.sendSsiModification(
        cmd,
        new SnacRequestAdapter() {
          public void handleResponse(SnacResponseEvent e) {
            if (e.getSnacCommand() instanceof SsiDataModResponse) {
              SsiDataModResponse dataModResponse = (SsiDataModResponse) e.getSnacCommand();
              int[] results = dataModResponse.getResults();
              if (results.length != 1) {
                LOGGER.warning("Got multiple results for addBuddies: " + results);
              }
              int result = results[0];
              LOGGER.fine("Got SSI response: " + result);
              if (result == SsiDataModResponse.RESULT_SUCCESS) {
                addBuddiesToGroup(ids);
              }
            }
          }

          private boolean addBuddiesToGroup(List<Integer> toAdd) {
            GroupItem item = getItem();
            LOGGER.fine("Adding buddies to group " + item + ": " + toAdd);
            List<Integer> result = new ArrayList<Integer>();
            int[] oldIds = item.getBuddies();
            if (oldIds != null) {
              for (int id : oldIds) result.add(id);
            }
            assert oldIds == null || result.size() == oldIds.length;
            LOGGER.finer("Old ID list: " + oldIds);

            // add all toAdd ID's which are not already in result
            List<Integer> ids = new ArrayList<Integer>(toAdd);
            ids.removeAll(result);
            LOGGER.finer("Actually adding " + ids);
            result.addAll(ids);

            int[] newIds = new int[result.size()];
            int i = 0;
            for (int id : result) {
              newIds[i] = id;
              i++;
            }
            assert i == newIds.length;

            GroupItem newGroupItem = new GroupItem(item);
            newGroupItem.setBuddies(newIds);
            LOGGER.fine("New group item: " + newGroupItem);
            ModifyItemsCmd cmd = new ModifyItemsCmd(newGroupItem.toSsiItem());
            getSsiService().sendSsiModification(cmd);
            return true;
          }
        });
  }
Ejemplo n.º 2
0
  public void deleteBuddies(List<Buddy> ingroup) {
    List<SsiItem> items = SsiTools.getBuddiesToDelete(ingroup);
    final List<Integer> ids = SsiTools.getIdsForItems(items);
    assert SsiTools.isOnlyBuddies(items);

    DeleteItemsCmd deleteCmd = new DeleteItemsCmd(items);
    SsiServiceImpl service = getSsiService();
    service.sendSsiModification(
        deleteCmd,
        new SnacRequestAdapter() {
          public void handleResponse(SnacResponseEvent e) {
            if (e.getSnacCommand() instanceof SsiDataModResponse) {
              SsiDataModResponse dataModResponse = (SsiDataModResponse) e.getSnacCommand();
              int result = dataModResponse.getResults()[0];
              if (result == SsiDataModResponse.RESULT_SUCCESS) {
                removeItemsFromGroup(ids);
              }
            }
          }

          private boolean removeItemsFromGroup(List<Integer> removeIds) {
            // figure out how long to make the new array (there might be
            // duplicate copies of groupid in the list)
            GroupItem groupItem = getItem();
            int[] oldIds = groupItem.getBuddies();
            List<Integer> result = new ArrayList<Integer>();
            if (oldIds == null) return false;

            for (int id : oldIds) result.add(id);
            result.removeAll(removeIds);

            int[] newIds = new int[result.size()];
            int i = 0;
            for (int val : result) {
              newIds[i] = val;
              i++;
            }
            assert i == newIds.length;

            // modify the root item
            GroupItem newGroupItem = new GroupItem(groupItem);
            newGroupItem.setBuddies(newIds);
            SsiServiceImpl service = getSsiService();
            service.sendSsiModification(new ModifyItemsCmd(newGroupItem.toSsiItem()));
            return true;
          }
        });
  }
Ejemplo n.º 3
0
 public void rename(String newName) {
   GroupItem item = new GroupItem(getItem());
   item.setGroupName(newName);
   SsiServiceImpl ssiService = getSsiService();
   ssiService.sendSsiModification(new ModifyItemsCmd(item.toSsiItem()));
 }