1
pom.xml
1
pom.xml
@@ -31,7 +31,6 @@
|
||||
<springdata.commons>3.0.0-SNAPSHOT</springdata.commons>
|
||||
<springdata.jpa>3.0.0-SNAPSHOT</springdata.jpa>
|
||||
<springdata.mongodb>4.0.0-SNAPSHOT</springdata.mongodb>
|
||||
<springdata.geode>3.0.0-SNAPSHOT</springdata.geode>
|
||||
<springdata.keyvalue>3.0.0-SNAPSHOT</springdata.keyvalue>
|
||||
<servlet.version>5.0.0</servlet.version>
|
||||
|
||||
|
||||
@@ -15,10 +15,6 @@
|
||||
|
||||
<modules>
|
||||
<module>spring-data-rest-tests-core</module>
|
||||
<!-- Disabled until Apache Geode can be made work with having Micrometer 2 in the class path.
|
||||
See https://github.com/spring-projects/spring-data-rest/issues/2106 and
|
||||
https://github.com/spring-projects/spring-data-geode/issues/572 -->
|
||||
<!-- <module>spring-data-rest-tests-geode</module> -->
|
||||
<module>spring-data-rest-tests-jpa</module>
|
||||
<module>spring-data-rest-tests-mongodb</module>
|
||||
<module>spring-data-rest-tests-security</module>
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-rest-tests</artifactId>
|
||||
<version>4.0.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<name>Spring Data REST Tests - Geode</name>
|
||||
<artifactId>spring-data-rest-tests-geode</artifactId>
|
||||
|
||||
<properties>
|
||||
<java-module-name>spring.data.rest.tests.geode</java-module-name>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-rest-tests-core</artifactId>
|
||||
<version>4.0.0-SNAPSHOT</version>
|
||||
<type>test-jar</type>
|
||||
</dependency>
|
||||
|
||||
<!-- Geode -->
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-geode</artifactId>
|
||||
<version>${springdata.geode}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
|
||||
/**
|
||||
* Base class for persistent classes.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
*/
|
||||
public class AbstractPersistentEntity {
|
||||
|
||||
@Id private final Long id;
|
||||
|
||||
/**
|
||||
* Returns the identifier of the entity.
|
||||
*
|
||||
* @return the id
|
||||
*/
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
protected AbstractPersistentEntity(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
protected AbstractPersistentEntity() {
|
||||
this.id = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this.id == null || obj == null || !(this.getClass().equals(obj.getClass()))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
AbstractPersistentEntity that = (AbstractPersistentEntity) obj;
|
||||
|
||||
return this.id.equals(that.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return id == null ? 0 : id.hashCode();
|
||||
}
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* An address.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class Address {
|
||||
|
||||
private final String street, city, country;
|
||||
|
||||
/**
|
||||
* Creates a new {@link Address} from the given street, city and country.
|
||||
*
|
||||
* @param street must not be {@literal null} or empty.
|
||||
* @param city must not be {@literal null} or empty.
|
||||
* @param country must not be {@literal null} or empty.
|
||||
*/
|
||||
public Address(String street, String city, String country) {
|
||||
|
||||
Assert.hasText(street, "Street must not be null or empty");
|
||||
Assert.hasText(city, "City must not be null or empty");
|
||||
Assert.hasText(country, "Country must not be null or empty");
|
||||
|
||||
this.street = street;
|
||||
this.city = city;
|
||||
this.country = country;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a copy of the current {@link Address} instance which is a new entity in terms of persistence.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Address getCopy() {
|
||||
return new Address(this.street, this.city, this.country);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the street.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getStreet() {
|
||||
return street;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the city.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getCity() {
|
||||
return city;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the country.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getCountry() {
|
||||
return country;
|
||||
}
|
||||
}
|
||||
@@ -1,132 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.data.gemfire.mapping.annotation.Region;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A customer.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
@Region
|
||||
public class Customer extends AbstractPersistentEntity {
|
||||
private EmailAddress emailAddress;
|
||||
private String firstname, lastname;
|
||||
private Set<Address> addresses = new HashSet<Address>();
|
||||
|
||||
/**
|
||||
* Creates a new {@link Customer} from the given parameters.
|
||||
*
|
||||
* @param id the unique id;
|
||||
* @param emailAddress must not be {@literal null} or empty.
|
||||
* @param firstname must not be {@literal null} or empty.
|
||||
* @param lastname must not be {@literal null} or empty.
|
||||
*/
|
||||
public Customer(Long id, EmailAddress emailAddress, String firstname, String lastname) {
|
||||
super(id);
|
||||
Assert.hasText(firstname, "Firstname must not be null or empty");
|
||||
Assert.hasText(lastname, "Lastname must not be null or empty");
|
||||
Assert.notNull(emailAddress, "EmailAddress must not be null");
|
||||
|
||||
this.firstname = firstname;
|
||||
this.lastname = lastname;
|
||||
this.emailAddress = emailAddress;
|
||||
}
|
||||
|
||||
protected Customer() {}
|
||||
|
||||
/**
|
||||
* Adds the given {@link Address} to the {@link Customer}.
|
||||
*
|
||||
* @param address must not be {@literal null}.
|
||||
*/
|
||||
public void add(Address address) {
|
||||
|
||||
Assert.notNull(address, "Address must not be null");
|
||||
this.addresses.add(address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the firstname of the {@link Customer}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getFirstname() {
|
||||
return firstname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the firstname of the {@link Customer}.
|
||||
*
|
||||
* @param firstname
|
||||
*/
|
||||
public void setFirstname(String firstname) {
|
||||
this.firstname = firstname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the lastname of the {@link Customer}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getLastname() {
|
||||
return lastname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the lastname of the {@link Customer}.
|
||||
*
|
||||
* @param lastname
|
||||
*/
|
||||
public void setLastname(String lastname) {
|
||||
this.lastname = lastname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link EmailAddress} of the {@link Customer}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public EmailAddress getEmailAddress() {
|
||||
return emailAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the emailAddress of the {@link Customer}.
|
||||
*
|
||||
* @param emailAddress
|
||||
*/
|
||||
public void setEmailAddress(EmailAddress emailAddress) {
|
||||
this.emailAddress = emailAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the {@link Customer}'s addresses.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Set<Address> getAddresses() {
|
||||
return Collections.unmodifiableSet(addresses);
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
/**
|
||||
* Repository interface to access {@link Customer}s.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
*/
|
||||
public interface CustomerRepository extends CrudRepository<Customer, Long> {
|
||||
|
||||
/**
|
||||
* Finds all {@link Customer}s with the given lastname.
|
||||
*
|
||||
* @param lastname
|
||||
* @return
|
||||
*/
|
||||
List<Customer> findByLastname(@Param("lastname") String lastname);
|
||||
|
||||
/**
|
||||
* Finds the Customer with the given {@link EmailAddress}.
|
||||
*
|
||||
* @param emailAddress
|
||||
* @return
|
||||
*/
|
||||
Customer findByEmailAddress(@Param("email") EmailAddress emailAddress);
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
|
||||
/**
|
||||
* Value object to represent email addresses.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
public final class EmailAddress {
|
||||
|
||||
private static final String EMAIL_REGEX = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
|
||||
private static final Pattern PATTERN = Pattern.compile(EMAIL_REGEX);
|
||||
private final String value;
|
||||
|
||||
/**
|
||||
* Creates a new {@link EmailAddress} from the given {@link String} representation.
|
||||
*
|
||||
* @param emailAddress must not be {@literal null} or empty.
|
||||
*/
|
||||
@JsonCreator
|
||||
public EmailAddress(String emailAddress) {
|
||||
Assert.isTrue(isValid(emailAddress), "Invalid email address");
|
||||
this.value = emailAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the given {@link String} is a valid {@link EmailAddress} which means you can safely instantiate the
|
||||
* class.
|
||||
*
|
||||
* @param candidate
|
||||
* @return
|
||||
*/
|
||||
public static boolean isValid(String candidate) {
|
||||
return candidate == null ? false : PATTERN.matcher(candidate).matches();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(obj instanceof EmailAddress)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
EmailAddress that = (EmailAddress) obj;
|
||||
return this.value.equals(that.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
@Component
|
||||
static class EmailAddressToStringConverter implements Converter<EmailAddress, String> {
|
||||
|
||||
@Override
|
||||
public String convert(EmailAddress source) {
|
||||
return source == null ? null : source.value;
|
||||
}
|
||||
}
|
||||
|
||||
@Component
|
||||
static class StringToEmailAddressConverter implements Converter<String, EmailAddress> {
|
||||
|
||||
public EmailAddress convert(String source) {
|
||||
return StringUtils.hasText(source) ? new EmailAddress(source) : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public class LineItem {
|
||||
|
||||
private BigDecimal price;
|
||||
private int amount;
|
||||
private Long productId;
|
||||
|
||||
/**
|
||||
* Creates a new {@link LineItem} for the given {@link Product}.
|
||||
*
|
||||
* @param product must not be {@literal null}.
|
||||
*/
|
||||
public LineItem(Product product) {
|
||||
this(product, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link LineItem} for the given {@link Product} and amount.
|
||||
*
|
||||
* @param product must not be {@literal null}.
|
||||
* @param amount
|
||||
*/
|
||||
public LineItem(Product product, int amount) {
|
||||
Assert.notNull(product, "The given Product must not be null");
|
||||
Assert.isTrue(amount > 0, "The amount of Products to be bought must be greater than 0");
|
||||
|
||||
this.productId = product.getId();
|
||||
this.amount = amount;
|
||||
this.price = product.getPrice();
|
||||
}
|
||||
|
||||
protected LineItem() {}
|
||||
|
||||
/**
|
||||
* Returns the id of the {@link Product} the {@link LineItem} refers to.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Long getProductId() {
|
||||
return productId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the amount of {@link Product}s to be ordered.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the price a single unit of the {@link LineItem}'s product.
|
||||
*
|
||||
* @return the price
|
||||
*/
|
||||
public BigDecimal getUnitPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total for the {@link LineItem}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public BigDecimal getTotal() {
|
||||
return price.multiply(BigDecimal.valueOf(amount));
|
||||
}
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.data.gemfire.mapping.annotation.Region;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
@Region
|
||||
public class Order extends AbstractPersistentEntity {
|
||||
|
||||
private Long customerId;
|
||||
private Address billingAddress;
|
||||
private Address shippingAddress;
|
||||
private Set<LineItem> lineItems = new HashSet<LineItem>();
|
||||
|
||||
/**
|
||||
* Creates a new {@link Order} for the given {@link org.springframework.data.rest.tests.geode.Customer}.
|
||||
*
|
||||
* @param id order ID
|
||||
* @param customerId must not be {@literal null}.
|
||||
* @param shippingAddress must not be {@literal null}.
|
||||
*/
|
||||
public Order(Long id, Long customerId, Address shippingAddress) {
|
||||
super(id);
|
||||
Assert.notNull(customerId, "CustomerId must not be null");
|
||||
Assert.notNull(shippingAddress, "ShippingAddress must not be null");
|
||||
|
||||
this.customerId = customerId;
|
||||
this.shippingAddress = shippingAddress;
|
||||
}
|
||||
|
||||
protected Order() {}
|
||||
|
||||
/**
|
||||
* Adds the given {@link LineItem} to the {@link Order}.
|
||||
*
|
||||
* @param lineItem
|
||||
*/
|
||||
public void add(LineItem lineItem) {
|
||||
this.lineItems.add(lineItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the id of the {@link org.springframework.data.rest.tests.geode.Customer} who placed the
|
||||
* {@link Order}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Long getCustomerId() {
|
||||
return customerId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the billing {@link Address} for this order.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Address getBillingAddress() {
|
||||
return billingAddress != null ? billingAddress : shippingAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the shipping {@link Address} for this order;
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Address getShippingAddress() {
|
||||
return shippingAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all {@link LineItem}s currently belonging to the {@link Order}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Set<LineItem> getLineItems() {
|
||||
return Collections.unmodifiableSet(lineItems);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total of the {@link Order}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public BigDecimal getTotal() {
|
||||
|
||||
BigDecimal total = BigDecimal.ZERO;
|
||||
|
||||
for (LineItem item : lineItems) {
|
||||
total = total.add(item.getTotal());
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
*/
|
||||
public interface OrderRepository extends CrudRepository<Order, Long> {
|
||||
|
||||
List<Order> findByCustomerId(Long customerId);
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.data.annotation.PersistenceConstructor;
|
||||
import org.springframework.data.gemfire.mapping.annotation.Region;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* A product.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
@Region
|
||||
public class Product extends AbstractPersistentEntity {
|
||||
|
||||
private String name, description;
|
||||
private BigDecimal price;
|
||||
private Map<String, String> attributes = new HashMap<String, String>();
|
||||
|
||||
/**
|
||||
* Creates a new {@link Product} with the given name.
|
||||
*
|
||||
* @param id a unique Id
|
||||
* @param name must not be {@literal null} or empty.
|
||||
* @param price must not be {@literal null} or less than or equal to zero.
|
||||
*/
|
||||
public Product(Long id, String name, BigDecimal price) {
|
||||
this(id, name, price, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link Product} from the given name and description.
|
||||
*
|
||||
* @param id a unique Id
|
||||
* @param name must not be {@literal null} or empty.
|
||||
* @param price must not be {@literal null} or less than or equal to zero.
|
||||
* @param description
|
||||
*/
|
||||
@PersistenceConstructor
|
||||
public Product(Long id, String name, BigDecimal price, String description) {
|
||||
super(id);
|
||||
Assert.hasText(name, "Name must not be null or empty");
|
||||
Assert.isTrue(BigDecimal.ZERO.compareTo(price) < 0, "Price must be greater than zero");
|
||||
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
protected Product() {}
|
||||
|
||||
/**
|
||||
* Sets the attribute with the given name to the given value.
|
||||
*
|
||||
* @param name must not be {@literal null} or empty.
|
||||
* @param value
|
||||
*/
|
||||
public void setAttribute(String name, String value) {
|
||||
|
||||
Assert.hasText(name, "Name must not be null or empty");
|
||||
|
||||
if (value == null) {
|
||||
this.attributes.remove(value);
|
||||
} else {
|
||||
this.attributes.put(name, value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link Product}'s name.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link Product}'s description.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all the custom attributes of the {@link Product}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Map<String, String> getAttributes() {
|
||||
return Collections.unmodifiableMap(attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the price of the {@link Product}.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public BigDecimal getPrice() {
|
||||
return price;
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.gemfire.repository.Query;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
/**
|
||||
* Repository interface to access {@link Product}s.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
*/
|
||||
public interface ProductRepository extends CrudRepository<Product, Long> {
|
||||
|
||||
/**
|
||||
* Returns a list of {@link Product}s having a description which contains the given snippet.
|
||||
*
|
||||
* @param the search string
|
||||
* @return
|
||||
*/
|
||||
List<Product> findByDescriptionContaining(String description);
|
||||
|
||||
/**
|
||||
* Returns all {@link Product}s having the given attribute value.
|
||||
*
|
||||
* @param attribute
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
@Query("SELECT * FROM /Product where attributes[$1] = $2")
|
||||
List<Product> findByAttributes(String key, String value);
|
||||
|
||||
List<Product> findByName(String name);
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.ImportResource;
|
||||
import org.springframework.data.gemfire.mapping.GemfireMappingContext;
|
||||
import org.springframework.data.gemfire.mapping.annotation.Region;
|
||||
import org.springframework.data.gemfire.repository.config.EnableGemfireRepositories;
|
||||
import org.springframework.data.util.AnnotatedTypeScanner;
|
||||
|
||||
/**
|
||||
* Spring JavaConfig configuration class to setup a Spring container and infrastructure components.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author David Turanski
|
||||
*/
|
||||
@Configuration
|
||||
@ImportResource("classpath:META-INF/spring/cache-config.xml")
|
||||
@EnableGemfireRepositories
|
||||
class GeodeRepositoryConfig {
|
||||
|
||||
/**
|
||||
* TODO: Remove, once Spring Data Gemfire exposes a mapping context.
|
||||
*/
|
||||
@Bean
|
||||
public GemfireMappingContext gemfireMappingContext() {
|
||||
|
||||
AnnotatedTypeScanner scanner = new AnnotatedTypeScanner(Region.class);
|
||||
|
||||
GemfireMappingContext context = new GemfireMappingContext();
|
||||
context.setInitialEntitySet(scanner.findTypes(GeodeRepositoryConfig.class.getPackage().getName()));
|
||||
context.initialize();
|
||||
|
||||
return context;
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013-2022 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
|
||||
*
|
||||
* https://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.data.rest.tests.geode;
|
||||
|
||||
import org.springframework.data.rest.tests.CommonWebTests;
|
||||
import org.springframework.hateoas.LinkRelation;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
@ContextConfiguration(classes = GeodeRepositoryConfig.class)
|
||||
class GeodeWebTests extends CommonWebTests {
|
||||
|
||||
@Override
|
||||
protected Iterable<LinkRelation> expectedRootLinkRels() {
|
||||
return LinkRelation.manyOf("products");
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:geode="http://www.springframework.org/schema/geode"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/geode https://www.springframework.org/schema/geode/spring-geode.xsd
|
||||
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
|
||||
|
||||
<geode:cache use-bean-factory-locator="false"/>
|
||||
|
||||
<geode:replicated-region id="Customer"/>
|
||||
<geode:replicated-region id="Order"/>
|
||||
<geode:replicated-region id="Product"/>
|
||||
|
||||
</beans>
|
||||
Reference in New Issue
Block a user