From 58423f2c9f45dd1014ddb42f20fa213b13f68637 Mon Sep 17 00:00:00 2001 From: John Blum Date: Mon, 21 May 2018 22:52:10 -0700 Subject: [PATCH] Add the o.s.b.d.g.core.env.support.Service class and ADT modeling the basic concept of a Pivotal CloudFoundry service.geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/core/env/support/Service.java --- .../data/geode/core/env/support/Service.java | 70 +++++++++++++++++ .../core/env/support/ServiceUnitTests.java | 75 +++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/core/env/support/Service.java create mode 100644 geode-spring-boot-starter/src/test/java/org/springframework/boot/data/geode/core/env/support/ServiceUnitTests.java diff --git a/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/core/env/support/Service.java b/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/core/env/support/Service.java new file mode 100644 index 00000000..c9d9bc89 --- /dev/null +++ b/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/core/env/support/Service.java @@ -0,0 +1,70 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed 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.springframework.boot.data.geode.core.env.support; + +import org.springframework.util.Assert; + +/** + * The {@link Service} class is an Abstract Data Type (ADT) modeling a Pivotal CloudFoundry Service. + * + * @author John Blum + * @since 1.0.0 + */ +@SuppressWarnings("unused") +public class Service { + + /** + * Factory method to construct a new {@link Service} initialized with a {@link String name}. + * + * @param name {@link String} containing the name of the {@link Service}. + * @return a new {@link Service} configured with the given {@link String name}. + * @throws IllegalArgumentException if the {@link String name} is {@literal null} or empty. + * @see #Service(String) + */ + public static Service with(String name) { + return new Service(name); + } + + private final String name; + + /** + * Constructs a new {@link Service} initialized with a {@link String name}. + * + * @param name {@link String} containing the name of the {@link Service}. + * @throws IllegalArgumentException if the {@link String name} is {@literal null} or empty. + */ + Service(String name) { + + Assert.hasText(name, String.format("Service name [%s] is required", name)); + + this.name = name; + } + + /** + * Returns the {@link String name} of this {@link Service}. + * + * @return this {@link Service Service's} {@link String name}. + */ + public String getName() { + return this.name; + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/geode-spring-boot-starter/src/test/java/org/springframework/boot/data/geode/core/env/support/ServiceUnitTests.java b/geode-spring-boot-starter/src/test/java/org/springframework/boot/data/geode/core/env/support/ServiceUnitTests.java new file mode 100644 index 00000000..43d530a3 --- /dev/null +++ b/geode-spring-boot-starter/src/test/java/org/springframework/boot/data/geode/core/env/support/ServiceUnitTests.java @@ -0,0 +1,75 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed 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.springframework.boot.data.geode.core.env.support; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +/** + * Unit tests for {@link Service}. + * + * @author John Blum + * @see org.junit.Test + * @see org.springframework.boot.data.geode.core.env.support.Service + * @since 1.0.0 + */ +public class ServiceUnitTests { + + @Test + public void withNameReturnsNewService() { + + Service service = Service.with("test"); + + assertThat(service).isNotNull(); + assertThat(service.getName()).isEqualTo("test"); + } + + private void testWithInvalidNameThrowsIllegalArgumentException(String name) { + + try { + Service.with(name); + } + catch (IllegalArgumentException expected) { + + assertThat(expected).hasMessage("Service name [%s] is required", name); + assertThat(expected).hasNoCause(); + + throw expected; + } + } + + @Test(expected = IllegalArgumentException.class) + public void withBlankServiceNameThrowsIllegalArgumentException() { + testWithInvalidNameThrowsIllegalArgumentException(" "); + } + + @Test(expected = IllegalArgumentException.class) + public void withEmptyServiceNameThrowsIllegalArgumentException() { + testWithInvalidNameThrowsIllegalArgumentException(""); + } + + @Test(expected = IllegalArgumentException.class) + public void withNullServiceNameThrowsIllegalArgumentException() { + testWithInvalidNameThrowsIllegalArgumentException(""); + } + + @Test + public void toStringReturnsServiceName() { + assertThat(Service.with("test").toString()).isEqualTo("test"); + } +}