blob: 7eadc9bf291bec1e60d8ae28fa872344444d7bfb [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.Optional;
import org.apache.commons.lang3.NotImplementedException;
import org.apache.james.jmap.methods.Method;
import org.apache.james.jmap.model.Number;
import org.apache.james.mailbox.model.MessageId;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
public class GetMessageListResponse implements Method.Response {
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String accountId;
private Filter filter;
private final ImmutableList.Builder<String> sort;
private boolean collapseThreads;
private String state;
private boolean canCalculateUpdates;
private Optional<Number> position;
private Optional<Number> total;
private final ImmutableList.Builder<String> threadIds;
private final ImmutableList.Builder<MessageId> messageIds;
private Builder() {
sort = ImmutableList.builder();
threadIds = ImmutableList.builder();
messageIds = ImmutableList.builder();
position = Optional.empty();
total = Optional.empty();
}
public Builder accountId(String accountId) {
throw new NotImplementedException("not implemented");
}
public Builder filter(Filter filter) {
this.filter = filter;
return this;
}
public Builder sort(List<String> sort) {
this.sort.addAll(sort);
return this;
}
public Builder collapseThreads(boolean collapseThreads) {
throw new NotImplementedException("not implemented");
}
public Builder state(String state) {
throw new NotImplementedException("not implemented");
}
public Builder canCalculateUpdates(boolean canCalculateUpdates) {
throw new NotImplementedException("not implemented");
}
public Builder position(int position) {
throw new NotImplementedException("not implemented");
}
public Builder total(int total) {
throw new NotImplementedException("not implemented");
}
public Builder threadIds(List<String> threadIds) {
throw new NotImplementedException("not implemented");
}
public Builder messageId(MessageId messageId) {
this.messageIds.add(messageId);
return this;
}
public Builder messageIds(List<MessageId> messageIds) {
this.messageIds.addAll(messageIds);
return this;
}
public GetMessageListResponse build() {
return new GetMessageListResponse(accountId, filter, sort.build(), collapseThreads, state,
canCalculateUpdates, position.orElse(Number.ZERO), total.orElse(Number.ZERO), threadIds.build(), messageIds.build());
}
}
private final String accountId;
private final Filter filter;
private final List<String> sort;
private final boolean collapseThreads;
private final String state;
private final boolean canCalculateUpdates;
private final Number position;
private final Number total;
private final List<String> threadIds;
private final List<MessageId> messageIds;
@VisibleForTesting GetMessageListResponse(String accountId, Filter filter, List<String> sort, boolean collapseThreads, String state,
boolean canCalculateUpdates, Number position, Number total, List<String> threadIds, List<MessageId> messageIds) {
this.accountId = accountId;
this.filter = filter;
this.sort = sort;
this.collapseThreads = collapseThreads;
this.state = state;
this.canCalculateUpdates = canCalculateUpdates;
this.position = position;
this.total = total;
this.threadIds = threadIds;
this.messageIds = messageIds;
}
public String getAccountId() {
return accountId;
}
public Filter getFilter() {
return filter;
}
public List<String> getSort() {
return sort;
}
public boolean isCollapseThreads() {
return collapseThreads;
}
public String getState() {
return state;
}
public boolean isCanCalculateUpdates() {
return canCalculateUpdates;
}
public Number getPosition() {
return position;
}
public Number getTotal() {
return total;
}
public List<String> getThreadIds() {
return threadIds;
}
public List<MessageId> getMessageIds() {
return messageIds;
}
}