@Override
  public void commit(CommitRequest request) {
    logger.debug(request);

    try {

      User user = new User();
      user.setId(request.getUserId());
      Device device = new Device(request.getDeviceId());
      Workspace workspace = new Workspace(request.getWorkspaceId());

      CommitNotification result =
          getHandler().doCommit(user, workspace, device, request.getItems());
      result.setRequestId(request.getRequestId());

      UUID id = workspace.getId();

      RemoteWorkspace commitNotifier = broker.lookupMulti(id.toString(), RemoteWorkspace.class);
      commitNotifier.notifyCommit(result);

      logger.debug("Consumer: Response sent to workspace \"" + workspace + "\"");

    } catch (Exception e) {
      logger.error(e);
    }
  }
  @Override
  public void updateWorkspace(UpdateWorkspaceRequest request)
      throws UserNotFoundException, WorkspaceNotUpdatedException {
    logger.debug(request);

    User user = new User();
    user.setId(request.getUserId());
    Item item = new Item(request.getParentItemId());

    Workspace workspace = new Workspace(request.getWorkspaceId());
    workspace.setName(request.getWorkspaceName());
    workspace.setParentItem(item);

    getHandler().doUpdateWorkspace(user, workspace);

    // Create notification
    UpdateWorkspaceNotification notification =
        new UpdateWorkspaceNotification(
            workspace.getId(), workspace.getName(), workspace.getParentItem().getId());
    notification.setRequestId(request.getRequestId());

    // Send notification to owner
    RemoteClient client;
    try {
      client = broker.lookupMulti(user.getId().toString(), RemoteClient.class);
      client.notifyUpdateWorkspace(notification);
    } catch (RemoteException e1) {
      logger.error(String.format("Could not notify user: '******'", user.getId()), e1);
    }
  }
  @Override
  public void createShareProposal(ShareProposalRequest request)
      throws ShareProposalNotCreatedException, UserNotFoundException {

    logger.debug(request);

    User user = new User();
    user.setId(request.getUserId());

    Item item = new Item(request.getItemId());

    // Create share proposal
    Workspace workspace =
        getHandler().doShareFolder(user, request.getEmails(), item, request.isEncrypted());

    // Create notification
    ShareProposalNotification notification =
        new ShareProposalNotification(
            workspace.getId(),
            workspace.getName(),
            item.getId(),
            workspace.getOwner().getId(),
            workspace.getOwner().getName(),
            workspace.getSwiftContainer(),
            workspace.getSwiftUrl(),
            workspace.isEncrypted());

    notification.setRequestId(request.getRequestId());

    // Send notification to owner
    RemoteClient client;
    try {
      client = broker.lookupMulti(user.getId().toString(), RemoteClient.class);
      client.notifyShareProposal(notification);
    } catch (RemoteException e1) {
      logger.error(String.format("Could not notify user: '******'", user.getId()), e1);
    }

    // Send notifications to users
    for (User addressee : workspace.getUsers()) {
      try {
        client = broker.lookupMulti(addressee.getId().toString(), RemoteClient.class);
        client.notifyShareProposal(notification);
      } catch (RemoteException e) {
        logger.error(String.format("Could not notify user: '******'", addressee.getId()), e);
      }
    }
  }
  public CloneWorkspace(Workspace r) {
    this.id = r.getId().toString();
    this.name = r.getName();

    this.parentId = null;
    if (r.getParentItem() != null && r.getParentItem().getId() != null) {
      this.parentId = r.getParentItem().getId();
    }

    this.defaultWorkspace = !r.isShared();
    this.localLastUpdate = r.getLatestRevision();
    this.remoteLastUpdate = r.getLatestRevision();
    this.swiftContainer = r.getSwiftContainer();
    this.swiftStorageURL = r.getSwiftUrl();
    this.owner = r.getOwner().getId().toString();
    this.pathWorkspace = generatePath();
    this.encrypted = true;

    if (!defaultWorkspace) this.encrypted = r.isEncrypted();
  }