blob: bc9d684fbe96d1e316565ec34f7ff2f2ee5f922f [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.james.jmap.draft.model;
import java.util.List;
import java.util.Map;
import org.apache.james.jmap.draft.model.mailbox.Mailbox;
import org.apache.james.jmap.methods.Method;
import org.apache.james.mailbox.model.MailboxId;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
public class SetMailboxesResponse implements Method.Response {
public static Builder builder() {
return new Builder();
}
public static class Builder {
private final ImmutableMap.Builder<MailboxCreationId, Mailbox> created;
private final ImmutableList.Builder<MailboxId> updated;
private final ImmutableList.Builder<MailboxId> destroyed;
private final ImmutableMap.Builder<MailboxCreationId, SetError> notCreated;
private final ImmutableMap.Builder<MailboxId, SetError> notUpdated;
private final ImmutableMap.Builder<MailboxId, SetError> notDestroyed;
private Builder() {
created = ImmutableMap.builder();
updated = ImmutableList.builder();
destroyed = ImmutableList.builder();
notCreated = ImmutableMap.builder();
notUpdated = ImmutableMap.builder();
notDestroyed = ImmutableMap.builder();
}
public Builder created(MailboxCreationId creationId, Mailbox mailbox) {
created.put(creationId, mailbox);
return this;
}
public Builder created(ImmutableMap<MailboxCreationId, Mailbox> created) {
this.created.putAll(created);
return this;
}
public Builder updated(MailboxId mailboxId) {
updated.add(mailboxId);
return this;
}
public Builder updated(List<MailboxId> mailboxIds) {
updated.addAll(mailboxIds);
return this;
}
public Builder destroyed(MailboxId mailboxId) {
destroyed.add(mailboxId);
return this;
}
public Builder destroyed(ImmutableList<MailboxId> destroyed) {
this.destroyed.addAll(destroyed);
return this;
}
public Builder notCreated(Map<MailboxCreationId, SetError> notCreated) {
this.notCreated.putAll(notCreated);
return this;
}
public Builder notCreated(MailboxCreationId mailboxCreationId, SetError setError) {
this.notCreated.put(mailboxCreationId, setError);
return this;
}
public Builder notUpdated(MailboxId mailboxId, SetError setError) {
notUpdated.put(mailboxId, setError);
return this;
}
public Builder notUpdated(Map<MailboxId, SetError> notUpdated) {
this.notUpdated.putAll(notUpdated);
return this;
}
public Builder notDestroyed(MailboxId mailboxId, SetError setError) {
notDestroyed.put(mailboxId, setError);
return this;
}
public Builder notDestroyed(ImmutableMap<MailboxId, SetError> notDestroyed) {
this.notDestroyed.putAll(notDestroyed);
return this;
}
public SetMailboxesResponse build() {
return new SetMailboxesResponse(created.build(), updated.build(), destroyed.build(), notCreated.build(), notUpdated.build(), notDestroyed.build());
}
}
private final ImmutableMap<MailboxCreationId, Mailbox> created;
private final ImmutableList<MailboxId> updated;
private final ImmutableList<MailboxId> destroyed;
private final ImmutableMap<MailboxCreationId, SetError> notCreated;
private final ImmutableMap<MailboxId,SetError> notUpdated;
private final ImmutableMap<MailboxId,SetError> notDestroyed;
@VisibleForTesting
SetMailboxesResponse(ImmutableMap<MailboxCreationId, Mailbox> created, ImmutableList<MailboxId> updated, ImmutableList<MailboxId> destroyed,
ImmutableMap<MailboxCreationId, SetError> notCreated, ImmutableMap<MailboxId, SetError> notUpdated, ImmutableMap<MailboxId, SetError> notDestroyed) {
this.created = created;
this.updated = updated;
this.destroyed = destroyed;
this.notCreated = notCreated;
this.notUpdated = notUpdated;
this.notDestroyed = notDestroyed;
}
public ImmutableMap<MailboxCreationId, Mailbox> getCreated() {
return created;
}
public ImmutableList<MailboxId> getUpdated() {
return updated;
}
public ImmutableList<MailboxId> getDestroyed() {
return destroyed;
}
public Map<MailboxCreationId, SetError> getNotCreated() {
return notCreated;
}
public ImmutableMap<MailboxId,SetError> getNotUpdated() {
return notUpdated;
}
public ImmutableMap<MailboxId,SetError> getNotDestroyed() {
return notDestroyed;
}
public SetMailboxesResponse.Builder mergeInto(SetMailboxesResponse.Builder responseBuilder) {
return responseBuilder
.created(getCreated())
.updated(getUpdated())
.destroyed(getDestroyed())
.notCreated(getNotCreated())
.notUpdated(getNotUpdated())
.notDestroyed(getNotDestroyed());
}
@Override
public int hashCode() {
return Objects.hashCode(created, notCreated, destroyed, notDestroyed);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof SetMailboxesResponse) {
SetMailboxesResponse other = (SetMailboxesResponse) obj;
return Objects.equal(this.created, other.created)
&& Objects.equal(this.updated, other.updated)
&& Objects.equal(this.destroyed, other.destroyed)
&& Objects.equal(this.notCreated, other.notCreated)
&& Objects.equal(this.notUpdated, other.notUpdated)
&& Objects.equal(this.notDestroyed, other.notDestroyed);
}
return false;
}
}