Add Example Code demonstrating how to get started with SBDG.
Resolves gh-54.
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright 2019 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 example.app.crm;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
import example.app.crm.model.Customer;
|
||||
import example.app.crm.repo.CustomerRepository;
|
||||
|
||||
/**
|
||||
* {@link SpringBootApplication Spring Boot application} implementing a Customer Relationship Management service (CRM).
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.boot.SpringApplication
|
||||
* @see org.springframework.boot.autoconfigure.SpringBootApplication
|
||||
* @since 1.2.0
|
||||
*/
|
||||
// tag::class[]
|
||||
@SpringBootApplication
|
||||
public class CrmApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(CrmApplication.class, args);
|
||||
}
|
||||
|
||||
// tag::runner[]
|
||||
@Bean
|
||||
ApplicationRunner runner(CustomerRepository customerRepository) {
|
||||
|
||||
return args -> {
|
||||
|
||||
assertThat(customerRepository.count()).isEqualTo(0);
|
||||
|
||||
Customer jonDoe = Customer.newCustomer(1L, "JonDoe");
|
||||
|
||||
System.err.printf("Saving Customer [%s]...%n", jonDoe);
|
||||
|
||||
jonDoe = customerRepository.save(jonDoe);
|
||||
|
||||
assertThat(jonDoe).isNotNull();
|
||||
assertThat(jonDoe.getId()).isEqualTo(1L);
|
||||
assertThat(jonDoe.getName()).isEqualTo("JonDoe");
|
||||
assertThat(customerRepository.count()).isEqualTo(1);
|
||||
|
||||
System.err.println("Querying for Customer [SELECT * FROM /Customers WHERE name LIKE '%Doe']...");
|
||||
|
||||
Customer queriedJonDoe = customerRepository.findByNameLike("%Doe");
|
||||
|
||||
assertThat(queriedJonDoe).isEqualTo(jonDoe);
|
||||
|
||||
System.err.printf("Customer was [%s]%n", queriedJonDoe);
|
||||
};
|
||||
}
|
||||
// tag::runner[]
|
||||
}
|
||||
// end::class[]
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2019 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 example.app.crm.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions;
|
||||
import org.springframework.geode.config.annotation.EnableClusterAware;
|
||||
|
||||
import example.app.crm.model.Customer;
|
||||
|
||||
/**
|
||||
* Spring {@link Configuration} class used to configure and initialize Apache Geode for the CRM application
|
||||
* beyond Spring Boot {@literal auto-configuration}.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.context.annotation.Configuration
|
||||
* @see org.springframework.data.gemfire.config.annotation.EnableEntityDefinedRegions
|
||||
* @see org.springframework.geode.config.annotation.EnableClusterAware
|
||||
* @since 1.2.0
|
||||
*/
|
||||
// tag::class[]
|
||||
@Configuration
|
||||
@EnableClusterAware
|
||||
@EnableEntityDefinedRegions(basePackageClasses = Customer.class)
|
||||
public class CustomerConfiguration {
|
||||
|
||||
}
|
||||
// end::class[]
|
||||
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright 2019 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 example.app.crm.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import example.app.crm.model.Customer;
|
||||
import example.app.crm.repo.CustomerRepository;
|
||||
|
||||
/**
|
||||
* Spring Web MVC {@link RestController} used to implement a crude CRM application REST interface.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.web.bind.annotation.GetMapping
|
||||
* @see org.springframework.web.bind.annotation.PostMapping
|
||||
* @see org.springframework.web.bind.annotation.RestController
|
||||
* @see example.app.crm.model.Customer
|
||||
* @see example.app.crm.repo.CustomerRepository
|
||||
* @since 1.2.0
|
||||
*/
|
||||
// tag::class[]
|
||||
@RestController
|
||||
public class CustomerController {
|
||||
|
||||
private static final String HTML = "<H1>%s</H1>";
|
||||
|
||||
@Autowired
|
||||
private CustomerRepository customerRepository;
|
||||
|
||||
@GetMapping("/customers")
|
||||
public Iterable<Customer> findAll() {
|
||||
return this.customerRepository.findAll();
|
||||
}
|
||||
|
||||
@PostMapping("/customers")
|
||||
public Customer save(Customer customer) {
|
||||
return this.customerRepository.save(customer);
|
||||
}
|
||||
|
||||
@GetMapping("/customers/{name}")
|
||||
public Customer findByName(@PathVariable("name") String name) {
|
||||
return this.customerRepository.findByNameLike(name);
|
||||
}
|
||||
|
||||
@GetMapping("/")
|
||||
public String home() {
|
||||
return format("Customer Relationship Management");
|
||||
}
|
||||
|
||||
@GetMapping("/ping")
|
||||
public String ping() {
|
||||
return format("PONG");
|
||||
}
|
||||
|
||||
private String format(String value) {
|
||||
return String.format(HTML, value);
|
||||
}
|
||||
}
|
||||
// end::class[]
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2019 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 example.app.crm.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.gemfire.mapping.annotation.Region;
|
||||
|
||||
/**
|
||||
* Abstract Data Type (ADT) modeling a {@link Customer}.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.data.annotation.Id
|
||||
* @see org.springframework.data.gemfire.mapping.annotation.Region
|
||||
* @since 1.2.0
|
||||
*/
|
||||
// tag::class[]
|
||||
@Region("Customers")
|
||||
@Data
|
||||
@ToString(of = "name")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor(staticName = "newCustomer")
|
||||
public class Customer {
|
||||
|
||||
@Id
|
||||
private Long id;
|
||||
|
||||
private String name;
|
||||
|
||||
}
|
||||
// end::class[]
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2019 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 example.app.crm.repo;
|
||||
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
import example.app.crm.model.Customer;
|
||||
|
||||
/**
|
||||
* Spring Data {@link CrudRepository} or Data Access Object (DAO) implementing basic CRUD and simple Query data access
|
||||
* operations on {@link Customer} objects.
|
||||
*
|
||||
* @author John Blum
|
||||
* @see org.springframework.data.repository.CrudRepository
|
||||
* @see example.app.crm.model.Customer
|
||||
* @since 1.2.0
|
||||
*/
|
||||
// tag::class[]
|
||||
public interface CustomerRepository extends CrudRepository<Customer, Long> {
|
||||
|
||||
Customer findByNameLike(String name);
|
||||
|
||||
}
|
||||
// end::class[]
|
||||
Reference in New Issue
Block a user