Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
158 lines (116 sloc) 3.62 KB

10. 商品の一連の操作を実装しよう(前準備)

DAOMockの準備

ハンズオンの中でDatabaseの代わりに動作する DAOMock クラスを作成する。(時間が無い人はコピーで)

IDAOMock.java を作成する。

package javado.lec06;


import java.util.List;

public interface IDAOMock {

  List<Product> select();

  Product select(int id);

  void insert(Product product);

  void update(int id, Product product);

  void delete(int id);
}

DAOMock.java を作成する。

package javado.lec06;

import java.util.*;
import java.util.stream.Collectors;

/**
 * データベースの処理を模したMockクラス。シングルトンオブジェクトを生成する。
 */
public class DAOMock implements IDAOMock {

  private static DAOMock instance = new DAOMock();

  private Map<Integer, Product> productMap;

  private DAOMock() {
    productMap = new HashMap<>();

    Product product1 = new Product();
    product1.setName("孤独のグルメ 【新装版】");
    product1.setPrice(1234);
    insert(product1);

    Product product2 = new Product();
    product2.setName("孤独のグルメ2");
    product2.setPrice(994);
    insert(product2);
  }

  public static DAOMock getInstance() {
    return instance;
  }

  @Override
  public List<Product> select() {
    List<Product> products = productMap.entrySet()
        .stream()
        .map(Map.Entry::getValue)
        .sorted(Comparator.comparing(Product::getId))
        .collect(Collectors.toList());
    return products;
  }

  @Override
  public Product select(int id) {
    Optional<Product> product = productMap.entrySet()
        .stream()
        .filter(e -> Objects.equals(e.getKey(), id))
        .map(e -> e.getValue())
        .findFirst();
    return product.orElseThrow(() -> new IllegalArgumentException("検索しようとしたidが存在しません:" + id));
  }

  @Override
  public synchronized void insert(Product product) {
    if (Objects.isNull(product)) {
      throw new NullPointerException("登録データが存在しません");
    }
    int maxId = productMap.entrySet()
        .stream()
        .map(Map.Entry::getKey)
        .max((a, b) -> a.compareTo(b)).orElse(0);
    int newId = maxId + 1;
    product.setId(newId);
    productMap.put(newId, product);
  }

  @Override
  public synchronized void update(int id, Product product) {
    if (Objects.isNull(product)) {
      throw new NullPointerException("更新データが存在しません");
    }
    product.setId(id);
    if (count(id) > 0) {
      productMap.replace(id, product);
      return;
    }
    throw new IllegalArgumentException("更新しようとしたidが存在しません:" + id);
  }

  @Override
  public synchronized void delete(int id) {
    if (count(id) > 0) {
      productMap.remove(id);
      return;
    }
    throw new IllegalArgumentException("削除しようとしたidが存在しません:" + id);

  }

  protected long count(int id) {
    return productMap.entrySet()
        .stream()
        .filter(e -> Objects.equals(e.getKey(), id))
        .count();
  }

}

ProductResource クラスに次のメソッドを追加する。

@GET
@Path("all")
@Produces(MediaType.APPLICATION_JSON)
public List<Product> getProducts() {
  IDAOMock dao = DAOMock.getInstance();
  return dao.select();
}

javado.lec06.Main を実行しなおす。

http://localhost:8080/myapp/product/all にブラウザでアクセスして、下のようなJSONが表示されればOK。

[{"id":1,"name":"孤独のグルメ 【新装版】","price":1234},{"id":2,"name":"孤独のグルメ2","price":994}]

--

戻る

You can’t perform that action at this time.