private IStatus updateServerRefs(
      IModule[] modulesToRemove, IServer affectedServer, IProgressMonitor monitor)
      throws CoreException {
    if (modulesToRemove == null || modulesToRemove.length == 0) {
      return Status.OK_STATUS;
    }
    monitor.beginTask(MODS_FROM_SERVERS, modulesToRemove.length * 100);
    for (int j = 0; j < modulesToRemove.length; j++) {
      IServerWorkingCopy wc = null;
      try {
        wc = affectedServer.createWorkingCopy();
        List list = Arrays.asList(affectedServer.getModules());
        if (list.contains(modulesToRemove[j])) {
          ServerUtil.modifyModules(wc, null, new IModule[] {modulesToRemove[j]}, null);
        }
      } catch (CoreException ce) {
        // Add it to a multistatus list?
        throw ce;
        // J2EEPlugin.logError(ce);
      } finally {
        try {
          if (wc != null) {
            IServer newServer = wc.saveAll(true, null);
            int state = newServer.getServerState();
            if (state == IServer.STATE_STARTED) {
              newServer.publish(
                  IServer.PUBLISH_INCREMENTAL,
                  new NullProgressMonitor()); // TODO use child progress?
            }
          }

        } catch (CoreException ce) {
          throw ce;
        }
      }
    }
    return Status.OK_STATUS;
  }