JAMES-2530 Requests/Responses for JMAP filters

This will be tested later in JMAP CRUD tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2224a02e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2224a02e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2224a02e

Branch: refs/heads/master
Commit: 2224a02eb9957e89a6c91d2d13b292162da1fa6d
Parents: 25965a9
Author: Benoit Tellier <[email protected]>
Authored: Tue Aug 28 09:35:22 2018 +0700
Committer: Antoine Duprat <[email protected]>
Committed: Tue Aug 28 14:11:50 2018 +0200

----------------------------------------------------------------------
 .../james/jmap/model/GetFilterRequest.java      | 55 ++++++++++++
 .../james/jmap/model/GetFilterResponse.java     | 88 ++++++++++++++++++++
 .../james/jmap/model/SetFilterRequest.java      | 75 +++++++++++++++++
 .../james/jmap/model/SetFilterResponse.java     | 56 +++++++++++++
 4 files changed, 274 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.java
new file mode 100644
index 0000000..52195f0
--- /dev/null
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterRequest.java
@@ -0,0 +1,55 @@
+/****************************************************************
+ * 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.model;
+
+import org.apache.james.jmap.JmapFieldNotSupportedException;
+import org.apache.james.jmap.methods.JmapRequest;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+
+@JsonDeserialize(builder = GetFilterRequest.Builder.class)
+public class GetFilterRequest implements JmapRequest {
+    private static final String ISSUER = "GetFilterRequest";
+
+    @JsonPOJOBuilder(withPrefix = "")
+    public static class Builder {
+
+        private Builder() {
+
+        }
+
+        public Builder accountId(String accountId) {
+            throw new JmapFieldNotSupportedException(ISSUER, "accountId");
+        }
+
+        public GetFilterRequest build() {
+            return new GetFilterRequest();
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    private GetFilterRequest() {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java
new file mode 100644
index 0000000..6cbe278
--- /dev/null
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetFilterResponse.java
@@ -0,0 +1,88 @@
+/****************************************************************
+ * 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.model;
+
+import java.util.List;
+
+import org.apache.james.jmap.api.filtering.Rule;
+import org.apache.james.jmap.methods.Method;
+
+import com.google.common.collect.ImmutableList;
+
+public class GetFilterResponse implements Method.Response {
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static class Builder {
+
+        private String accountId;
+        private String state;
+        private ImmutableList.Builder<JmapRuleDTO> rules;
+
+        public Builder() {
+            this.rules = ImmutableList.builder();
+        }
+
+        public Builder accountId(String accountId) {
+            this.accountId = accountId;
+            return this;
+        }
+
+        public Builder state(String state) {
+            this.state = state;
+            return this;
+        }
+
+        public Builder rules(List<Rule> rules) {
+            this.rules.addAll(rules.stream()
+                .map(JmapRuleDTO::from)
+                .collect(ImmutableList.toImmutableList()));
+            return this;
+        }
+
+        public GetFilterResponse build() {
+            return new GetFilterResponse(accountId, state, rules.build());
+        }
+    }
+
+    private final String accountId;
+    private final String state;
+    private final List<JmapRuleDTO> rules;
+
+    private GetFilterResponse(String accountId, String state, 
List<JmapRuleDTO> rules) {
+        this.accountId = accountId;
+        this.state = state;
+        this.rules = rules;
+    }
+
+    public String getAccountId() {
+        return accountId;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public List<JmapRuleDTO> getSingleton() {
+        return rules;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java
new file mode 100644
index 0000000..5371534
--- /dev/null
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterRequest.java
@@ -0,0 +1,75 @@
+/****************************************************************
+ * 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.model;
+
+import java.util.List;
+
+import org.apache.james.jmap.JmapFieldNotSupportedException;
+import org.apache.james.jmap.methods.JmapRequest;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import com.google.common.collect.ImmutableList;
+
+@JsonDeserialize(builder = SetFilterRequest.Builder.class)
+public class SetFilterRequest implements JmapRequest {
+
+    private static final String ISSUER = "SetFilterRequest";
+
+    @JsonPOJOBuilder(withPrefix = "")
+    public static class Builder {
+        private final ImmutableList.Builder<JmapRuleDTO> rules;
+
+        private Builder() {
+            this.rules = ImmutableList.builder();
+        }
+
+        public Builder accountId(String accountId) {
+            throw new JmapFieldNotSupportedException(ISSUER, "accountId");
+        }
+
+        public Builder ifInState(String ifInState) {
+            throw new JmapFieldNotSupportedException(ISSUER, "ifInState");
+        }
+
+        public Builder singleton(List<JmapRuleDTO> rules) {
+            this.rules.addAll(rules);
+            return this;
+        }
+
+        public SetFilterRequest build() {
+            return new SetFilterRequest(rules.build());
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    private final List<JmapRuleDTO> singleton;
+
+    private SetFilterRequest(List<JmapRuleDTO> singleton) {
+        this.singleton = singleton;
+    }
+
+    public List<JmapRuleDTO> getSingleton() {
+        return singleton;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2224a02e/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java
new file mode 100644
index 0000000..fe56cbf
--- /dev/null
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetFilterResponse.java
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.model;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.james.jmap.methods.Method;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+public class SetFilterResponse implements Method.Response {
+    public static final String SINGLETON = "singleton";
+
+    public static SetFilterResponse updated() {
+        return new SetFilterResponse(ImmutableList.of(SINGLETON), 
ImmutableMap.of());
+    }
+
+    public static SetFilterResponse notUpdated(SetError error) {
+        return new SetFilterResponse(ImmutableList.of(), 
ImmutableMap.of(SINGLETON, error));
+    }
+
+    private final List<String> updated;
+    private final Map<String, SetError> notUpdated;
+
+    private SetFilterResponse(List<String> updated, Map<String, SetError> 
notUpdated) {
+        this.updated = updated;
+        this.notUpdated = notUpdated;
+    }
+
+    public List<String> getUpdated() {
+        return updated;
+    }
+
+    public Map<String, SetError> getNotUpdated() {
+        return notUpdated;
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to