You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2016/04/22 10:33:12 UTC
[04/13] james-project git commit: JAMES-1717 Add interfaces for
storing users vacations
JAMES-1717 Add interfaces for storing users vacations
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/30e7a476
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/30e7a476
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/30e7a476
Branch: refs/heads/master
Commit: 30e7a476cf5c22bf4a4271f874a143364756f56c
Parents: 5619dbc
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Apr 5 18:20:08 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Apr 22 15:28:59 2016 +0700
----------------------------------------------------------------------
.../james/jmap/api/vacation/AccountId.java | 58 +++++++++
.../james/jmap/api/vacation/Vacation.java | 126 +++++++++++++++++++
.../jmap/api/vacation/VacationRepository.java | 32 +++++
.../AbstractVacationRepositoryTest.java | 81 ++++++++++++
.../james/jmap/api/vacation/AccountIdTest.java | 45 +++++++
.../james/jmap/model/VacationResponse.java | 2 +-
6 files changed, 343 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/30e7a476/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/AccountId.java
----------------------------------------------------------------------
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/AccountId.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/AccountId.java
new file mode 100644
index 0000000..b1885dd
--- /dev/null
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/AccountId.java
@@ -0,0 +1,58 @@
+/****************************************************************
+ * 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.api.vacation;
+
+import java.util.Objects;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+
+public class AccountId {
+
+ public static AccountId fromString(String identifier) {
+ Preconditions.checkArgument(!Strings.isNullOrEmpty(identifier), "AccountId identifier should not be null or empty");
+ return new AccountId(identifier);
+ }
+
+ private final String identifier;
+
+ private AccountId(String identifier) {
+ this.identifier = identifier;
+ }
+
+ public String getIdentifier() {
+ return identifier;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ AccountId accountId = (AccountId) o;
+ return Objects.equals(this.identifier, accountId.identifier);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(identifier);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/30e7a476/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java
----------------------------------------------------------------------
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java
new file mode 100644
index 0000000..5957d37
--- /dev/null
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java
@@ -0,0 +1,126 @@
+/****************************************************************
+ * 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.api.vacation;
+
+import java.time.ZonedDateTime;
+import java.util.Objects;
+import java.util.Optional;
+
+import com.google.common.base.Preconditions;
+
+public class Vacation {
+
+ public static final String ID = "singleton";
+ public static final boolean DEFAULT_DISABLED = false;
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private Optional<Boolean> isEnabled = Optional.empty();
+ private Optional<ZonedDateTime> fromDate = Optional.empty();
+ private Optional<ZonedDateTime> toDate = Optional.empty();
+ private String textBody = "";
+
+ public Builder enabled(boolean enabled) {
+ isEnabled = Optional.of(enabled);
+ return this;
+ }
+
+ public Builder fromDate(Optional<ZonedDateTime> fromDate) {
+ Preconditions.checkNotNull(fromDate);
+ this.fromDate = fromDate;
+ return this;
+ }
+
+ public Builder toDate(Optional<ZonedDateTime> toDate) {
+ Preconditions.checkNotNull(toDate);
+ this.toDate = toDate;
+ return this;
+ }
+
+ public Builder textBody(String textBody) {
+ this.textBody = textBody;
+ return this;
+ }
+
+ public Builder copy(Vacation vacation) {
+ this.textBody = vacation.getTextBody();
+ this.fromDate = vacation.getFromDate();
+ this.toDate = vacation.getToDate();
+ this.isEnabled = Optional.of(vacation.isEnabled());
+ return this;
+ }
+
+ public Vacation build() {
+ Preconditions.checkNotNull(textBody);
+ return new Vacation(isEnabled.orElse(DEFAULT_DISABLED), fromDate, toDate, textBody);
+ }
+ }
+
+ private final boolean isEnabled;
+ private final Optional<ZonedDateTime> fromDate;
+ private final Optional<ZonedDateTime> toDate;
+ private final String textBody;
+
+ private Vacation(boolean isEnabled, Optional<ZonedDateTime> fromDate, Optional<ZonedDateTime> toDate, String textBody) {
+ this.isEnabled = isEnabled;
+ this.fromDate = fromDate;
+ this.toDate = toDate;
+ this.textBody = textBody;
+ }
+
+
+ public boolean isEnabled() {
+ return isEnabled;
+ }
+
+ public Optional<ZonedDateTime> getFromDate() {
+ return fromDate;
+ }
+
+ public Optional<ZonedDateTime> getToDate() {
+ return toDate;
+ }
+
+ public String getTextBody() {
+ return textBody;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Vacation vacation = (Vacation) o;
+
+ return Objects.equals(this.isEnabled, vacation.isEnabled) &&
+ Objects.equals(this.fromDate, vacation.fromDate) &&
+ Objects.equals(this.toDate, vacation.toDate) &&
+ Objects.equals(this.textBody, vacation.textBody);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(isEnabled, fromDate, toDate, textBody);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/30e7a476/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/VacationRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/VacationRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/VacationRepository.java
new file mode 100644
index 0000000..02ff1c6
--- /dev/null
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/VacationRepository.java
@@ -0,0 +1,32 @@
+/****************************************************************
+ * 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.api.vacation;
+
+import java.util.concurrent.CompletableFuture;
+
+public interface VacationRepository {
+
+ Vacation DEFAULT_VACATION = Vacation.builder().enabled(false).build();
+
+ CompletableFuture<Void> modifyVacation(AccountId accountId, Vacation vacation);
+
+ CompletableFuture<Vacation> retrieveVacation(AccountId accountId);
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/30e7a476/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java
new file mode 100644
index 0000000..ba15584
--- /dev/null
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java
@@ -0,0 +1,81 @@
+/****************************************************************
+ * 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.api.vacation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.time.ZonedDateTime;
+import java.util.Optional;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public abstract class AbstractVacationRepositoryTest {
+
+ public static final AccountId ACCOUNT_ID = AccountId.fromString("identifier");
+ public static final ZonedDateTime ZONED_DATE_TIME = ZonedDateTime.parse("2016-04-03T02:01+07:00[Asia/Vientiane]");
+ public static final Vacation VACATION_1 = Vacation.builder().enabled(true).build();
+ public static final Vacation VACATION_2 = Vacation.builder().fromDate(Optional.of(ZONED_DATE_TIME)).enabled(true).build();
+
+ private VacationRepository vacationRepository;
+
+ protected abstract VacationRepository createVacationRepository();
+
+ @Before
+ public void setUp() {
+ vacationRepository = createVacationRepository();
+ }
+
+ @Test
+ public void retrieveVacationShouldReturnDefaultValueByDefault() {
+ assertThat(vacationRepository.retrieveVacation(ACCOUNT_ID).join()).isEqualTo(VacationRepository.DEFAULT_VACATION);
+ }
+
+ @Test
+ public void modifyVacationShouldWork() {
+ vacationRepository.modifyVacation(ACCOUNT_ID, VACATION_1).join();
+
+ assertThat(vacationRepository.retrieveVacation(ACCOUNT_ID).join()).isEqualTo(VACATION_1);
+ }
+
+ @Test
+ public void modifyVacationShouldReplacePreviousValue() {
+ vacationRepository.modifyVacation(ACCOUNT_ID, VACATION_1).join();
+ vacationRepository.modifyVacation(ACCOUNT_ID, VACATION_2).join();
+
+ assertThat(vacationRepository.retrieveVacation(ACCOUNT_ID).join()).isEqualTo(VACATION_2);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void retrieveVacationShouldThrowOnNullAccountId() {
+ vacationRepository.retrieveVacation(null);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void modifyVacationShouldThrowOnNullAccountId() {
+ vacationRepository.modifyVacation(null, VACATION_1);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void modifyVacationShouldThrowOnNullVacation() {
+ vacationRepository.modifyVacation(ACCOUNT_ID, null);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/30e7a476/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AccountIdTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AccountIdTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AccountIdTest.java
new file mode 100644
index 0000000..4362273
--- /dev/null
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AccountIdTest.java
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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.api.vacation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class AccountIdTest {
+
+ public static final String IDENTIFIER = "id";
+
+ @Test(expected = IllegalArgumentException.class)
+ public void createShouldThrowOnNullIdentifier() {
+ AccountId.fromString(null);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void createShouldThrowOnEmptyIdentifier() {
+ AccountId.fromString("");
+ }
+
+ @Test
+ public void createShouldWork() {
+ assertThat(AccountId.fromString(IDENTIFIER).getIdentifier()).isEqualTo(IDENTIFIER);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/30e7a476/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
index 4af3c5f..d81607e 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
@@ -72,7 +72,7 @@ public class VacationResponse {
}
public Builder fromVacation(Vacation vacation) {
- this.id = vacation.getId();
+ this.id = Vacation.ID;
this.isEnabled = vacation.isEnabled();
this.fromDate = vacation.getFromDate();
this.toDate = vacation.getToDate();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org