// Path: cqrs-lib/src/main/java/se/citerus/cqrs/bookstore/GenericId.java
// public class GenericId {
// 
//   public final String id;
// 
//   public static final String ID_PATTERN =
//       "^(([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12})$";
// 
//   public GenericId(String id) {
//     this.id = id;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     return EqualsBuilder.reflectionEquals(this, o);
//   }
// 
//   @Override
//   public int hashCode() {
//     return HashCodeBuilder.reflectionHashCode(this);
//   }
// 
//   @Override
//   public String toString() {
//     return id;
//   }
// 
// }


import se.citerus.cqrs.bookstore.GenericId;
package se.citerus.cqrs.bookstore.domain;


public interface Repository {

  <AR extends AggregateRoot> void save(AR aggregateRoot);

// Path: cqrs-lib/src/main/java/se/citerus/cqrs/bookstore/GenericId.java
// public class GenericId {
// 
//   public final String id;
// 
//   public static final String ID_PATTERN =
//       "^(([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12})$";
// 
//   public GenericId(String id) {
//     this.id = id;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     return EqualsBuilder.reflectionEquals(this, o);
//   }
// 
//   @Override
//   public int hashCode() {
//     return HashCodeBuilder.reflectionHashCode(this);
//   }
// 
//   @Override
//   public String toString() {
//     return id;
//   }
// 
// }


// Path: cqrs-lib/src/main/java/se/citerus/cqrs/bookstore/domain/Repository.java
import se.citerus.cqrs.bookstore.GenericId;

package se.citerus.cqrs.bookstore.domain;


public interface Repository {

  <AR extends AggregateRoot> void save(AR aggregateRoot);

  <AR extends AggregateRoot, ID extends GenericId> AR load(ID id, Class<AR> aggregateType);