#177 - Polished domain model.
Inlined Address type into Store. Moved to @Value and removed code that got obsolete with that. Removed custom WebConfig that's not needed anymore with Spring Boot.
This commit is contained in:
@@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2014-2015 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 example.springdata.rest.stores;
|
|
||||||
|
|
||||||
import static org.springframework.data.mongodb.core.index.GeoSpatialIndexType.*;
|
|
||||||
|
|
||||||
import lombok.Value;
|
|
||||||
|
|
||||||
import org.springframework.data.geo.Point;
|
|
||||||
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Value object to represent an {@link Address}.
|
|
||||||
*
|
|
||||||
* @author Oliver Gierke
|
|
||||||
*/
|
|
||||||
@Value
|
|
||||||
public class Address {
|
|
||||||
|
|
||||||
private final String street, city, zip;
|
|
||||||
private final @GeoSpatialIndexed(type = GEO_2DSPHERE) Point location;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
public String toString() {
|
|
||||||
return String.format("%s, %s %s", street, zip, city);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-2015 the original author or authors.
|
* Copyright 2014-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -17,10 +17,6 @@ package example.springdata.rest.stores;
|
|||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.Module;
|
|
||||||
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring configuration class main application bootstrap point.
|
* Spring configuration class main application bootstrap point.
|
||||||
@@ -28,14 +24,9 @@ import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
|
|||||||
* @author Oliver Gierke
|
* @author Oliver Gierke
|
||||||
*/
|
*/
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class StoreApp {
|
public class Application {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(StoreApp.class, args);
|
SpringApplication.run(Application.class, args);
|
||||||
}
|
|
||||||
|
|
||||||
// Workaround for https://github.com/spring-projects/spring-boot/issues/4336
|
|
||||||
public @Bean Module namesModule() {
|
|
||||||
return new ParameterNamesModule();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014 the original author or authors.
|
* Copyright 2014-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -15,9 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
package example.springdata.rest.stores;
|
package example.springdata.rest.stores;
|
||||||
|
|
||||||
import lombok.Data;
|
import static org.springframework.data.mongodb.core.index.GeoSpatialIndexType.*;
|
||||||
|
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.springframework.data.annotation.Id;
|
import org.springframework.data.annotation.Id;
|
||||||
|
import org.springframework.data.geo.Point;
|
||||||
|
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
|
||||||
import org.springframework.data.mongodb.core.mapping.Document;
|
import org.springframework.data.mongodb.core.mapping.Document;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,25 +31,31 @@ import org.springframework.data.mongodb.core.mapping.Document;
|
|||||||
*
|
*
|
||||||
* @author Oliver Gierke
|
* @author Oliver Gierke
|
||||||
*/
|
*/
|
||||||
@Data
|
@Value
|
||||||
@Document
|
@Document
|
||||||
public class Store {
|
public class Store {
|
||||||
|
|
||||||
private final @Id String id;
|
@Id UUID id = UUID.randomUUID();
|
||||||
private final String name;
|
String name;
|
||||||
private final Address address;
|
Address address;
|
||||||
|
|
||||||
public Store(String name, Address address) {
|
/**
|
||||||
|
* Value object to represent an {@link Address}.
|
||||||
|
*
|
||||||
|
* @author Oliver Gierke
|
||||||
|
*/
|
||||||
|
@Value
|
||||||
|
public static class Address {
|
||||||
|
|
||||||
this.name = name;
|
String street, city, zip;
|
||||||
this.address = address;
|
@GeoSpatialIndexed(type = GEO_2DSPHERE) Point location;
|
||||||
this.id = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Store() {
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
this.id = null;
|
* @see java.lang.Object#toString()
|
||||||
this.name = null;
|
*/
|
||||||
this.address = null;
|
public String toString() {
|
||||||
|
return String.format("%s, %s %s", street, zip, city);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014 the original author or authors.
|
* Copyright 2014-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package example.springdata.rest.stores;
|
package example.springdata.rest.stores;
|
||||||
|
|
||||||
|
import example.springdata.rest.stores.Store.Address;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -80,8 +81,8 @@ public class StoreInitializer {
|
|||||||
lineMapper.setFieldSetMapper(fields -> {
|
lineMapper.setFieldSetMapper(fields -> {
|
||||||
|
|
||||||
Point location = new Point(fields.readDouble("Longitude"), fields.readDouble("Latitude"));
|
Point location = new Point(fields.readDouble("Longitude"), fields.readDouble("Latitude"));
|
||||||
Address address = new Address(fields.readString("Street Address"), fields.readString("City"), fields
|
Address address = new Address(fields.readString("Street Address"), fields.readString("City"),
|
||||||
.readString("Zip"), location);
|
fields.readString("Zip"), location);
|
||||||
|
|
||||||
return new Store(fields.readString("Name"), address);
|
return new Store(fields.readString("Name"), address);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2015 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 example.springdata.rest.stores;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
|
||||||
import org.springframework.web.servlet.resource.ResourceUrlEncodingFilter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Temporarily required manual configuration of resource handling to activate the resource chain handling.
|
|
||||||
*
|
|
||||||
* @author Brian Clozel
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class WebConfig extends WebMvcConfigurerAdapter {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
|
||||||
registry.addResourceHandler("/webjars/**").//
|
|
||||||
addResourceLocations("classpath:/META-INF/resources/webjars/").//
|
|
||||||
resourceChain(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
|
|
||||||
return new ResourceUrlEncodingFilter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2014-2015 the original author or authors.
|
* Copyright 2014-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -18,10 +18,7 @@ package example.springdata.rest.stores;
|
|||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.*;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
import example.springdata.rest.stores.Address;
|
import example.springdata.rest.stores.Store.Address;
|
||||||
import example.springdata.rest.stores.Store;
|
|
||||||
import example.springdata.rest.stores.StoreApp;
|
|
||||||
import example.springdata.rest.stores.StoreRepository;
|
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -44,7 +41,7 @@ import org.springframework.test.context.web.WebAppConfiguration;
|
|||||||
*/
|
*/
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
@WebAppConfiguration
|
@WebAppConfiguration
|
||||||
@SpringApplicationConfiguration(classes = StoreApp.class)
|
@SpringApplicationConfiguration(classes = Application.class)
|
||||||
public class StoreRepositoryIntegrationTests {
|
public class StoreRepositoryIntegrationTests {
|
||||||
|
|
||||||
@Autowired StoreRepository repository;
|
@Autowired StoreRepository repository;
|
||||||
|
|||||||
Reference in New Issue
Block a user