diff --git a/TicketBookingSystem/booking-core/pom.xml b/TicketBookingSystem/booking-core/pom.xml
index 1d30907..ff5833b 100644
--- a/TicketBookingSystem/booking-core/pom.xml
+++ b/TicketBookingSystem/booking-core/pom.xml
@@ -184,5 +184,10 @@
org.hibernate
hibernate-entitymanager
+
+
+ com.mangofactory
+ swagger-springmvc
+
\ No newline at end of file
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/config/ApiApplicationConfig.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/config/ApiApplicationConfig.java
index 6244d7a..8d9fefb 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/config/ApiApplicationConfig.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/config/ApiApplicationConfig.java
@@ -1,12 +1,14 @@
package org.ticketbooking.core.api.config;
+import javax.ws.rs.ApplicationPath;
+
import org.apache.log4j.Logger;
import org.glassfish.jersey.server.ResourceConfig;
import org.ticketbooking.core.api.web.CheckBookingStatus;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
-//@ApplicationPath("/api/*")
+@ApplicationPath("/api/*")
public class ApiApplicationConfig extends ResourceConfig {
private final static Logger LOGGER = Logger.getLogger(ApiApplicationConfig.class);
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/jaxb/user/UserDetails.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/jaxb/user/UserDetails.java
index 504f038..1962af9 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/jaxb/user/UserDetails.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/jaxb/user/UserDetails.java
@@ -9,6 +9,7 @@
import org.ticketbooking.core.api.jaxb.other.Links;
+
@XmlRootElement(name="user")
public class UserDetails {
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/web/customer/CusomerApiServiceImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/web/customer/CusomerApiServiceImpl.java
index cd0f1fd..b2085f9 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/web/customer/CusomerApiServiceImpl.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/api/web/customer/CusomerApiServiceImpl.java
@@ -1,5 +1,7 @@
package org.ticketbooking.core.api.web.customer;
+import java.util.Set;
+
import javax.annotation.Resource;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
@@ -12,14 +14,20 @@
import org.springframework.stereotype.Service;
import org.ticketbooking.core.api.jaxb.user.UserDetails;
+import org.ticketbooking.core.domain.user.AddressImpl;
import org.ticketbooking.core.domain.user.Customer;
import org.ticketbooking.core.domain.user.CustomerImpl;
import org.ticketbooking.core.helper.AddressHelper;
import org.ticketbooking.core.service.customer.CustomerService;
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiParam;
+
+@Api(value="CustomerDetails",description="Service to get the details about Customer")
@Path("/user")
@Service("apiCustomer")
-public class CusomerApiServiceImpl implements CustomerApiService{
+public class CusomerApiServiceImpl implements CustomerApiService{
@Resource(name="customerService")
CustomerService customerService;
@@ -27,10 +35,12 @@ public class CusomerApiServiceImpl implements CustomerApiService{
@Resource(name="addressHelper")
AddressHelper addressHelper;
+
+ @ApiOperation(httpMethod="POST",value="To create a customer")
@POST
@Produces(value={MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
@Consumes(value={MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
- public Response createCustomer(UserDetails userDetails) {
+ public Response createCustomer(@ApiParam(name="userDetails",value="XML/JSON for creating user")UserDetails userDetails) {
Customer customer = new CustomerImpl();
customer.setUsername(userDetails.getUserName());
@@ -40,11 +50,11 @@ public Response createCustomer(UserDetails userDetails) {
customer.setEmail(userDetails.getEmail());
customer.setPhone(userDetails.getPhone());
customer.setPassword(userDetails.getPassword());
- customer.setAddresses(addressHelper.convertAddressEntity(userDetails.getAddresses()));
- customer.setUsername(userDetails.getUserName());
customer.setUsername(userDetails.getUserName());
customerService.createCustomer(customer);
-
+ Set address = addressHelper.convertAddressEntity(userDetails.getAddresses());
+ //TODO Logic to be changed
+ addressHelper.createCustomerAddress(customer,address.iterator().next());
return Response.status(Status.CREATED).header("X-header-message", "User created").build();
}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDao.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDao.java
index b957bf9..7bc08cd 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDao.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDao.java
@@ -1,13 +1,11 @@
package org.ticketbooking.core.dao.address;
-import java.util.List;
-
import org.ticketbooking.core.domain.user.AddressImpl;
public interface AddressDao {
void createAddress(AddressImpl address);
void deleteAddress(Long id);
AddressImpl fetchAddress(Long id);
- List fetchAddressByCustomer(Long customerId);
+ //List fetchAddressByCustomer(Long customerId);
void updateAddress(AddressImpl address);
}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDaoImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDaoImpl.java
index c512c9f..fb54de0 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDaoImpl.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/address/AddressDaoImpl.java
@@ -1,10 +1,7 @@
package org.ticketbooking.core.dao.address;
-import java.util.List;
-
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.ticketbooking.core.domain.user.AddressImpl;
@@ -28,12 +25,12 @@ public AddressImpl fetchAddress(Long id) {
return entityManager.find(AddressImpl.class, id);
}
- @SuppressWarnings("unchecked")
+ /*@SuppressWarnings("unchecked")
public List fetchAddressByCustomer(Long customerId) {
Query query = entityManager.createNamedQuery("AddressImpl.fetchByCustomer");
query.setParameter("id", customerId);
return query.getResultList();
- }
+ }*/
public void updateAddress(AddressImpl address) {
entityManager.merge(address);
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/customer/address/CustomerAddressDao.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/customer/address/CustomerAddressDao.java
new file mode 100644
index 0000000..86daba5
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/customer/address/CustomerAddressDao.java
@@ -0,0 +1,9 @@
+package org.ticketbooking.core.dao.customer.address;
+
+import org.ticketbooking.core.domain.user.CustomerAddressImpl;
+
+
+
+public interface CustomerAddressDao{
+ void createCustomerAddress(CustomerAddressImpl customerAddress);
+}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/customer/address/CustomerAddressDaoImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/customer/address/CustomerAddressDaoImpl.java
new file mode 100644
index 0000000..0211e57
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/dao/customer/address/CustomerAddressDaoImpl.java
@@ -0,0 +1,18 @@
+package org.ticketbooking.core.dao.customer.address;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.springframework.stereotype.Repository;
+import org.ticketbooking.core.domain.user.CustomerAddressImpl;
+
+@Repository("customerAddressDao")
+public class CustomerAddressDaoImpl implements CustomerAddressDao{
+
+ @PersistenceContext
+ EntityManager entityManager;
+
+ public void createCustomerAddress(CustomerAddressImpl customerAddress){
+ entityManager.persist(customerAddress);
+ }
+}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/common/audit/Auditable.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/common/audit/Auditable.java
new file mode 100644
index 0000000..e4413d5
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/common/audit/Auditable.java
@@ -0,0 +1,84 @@
+package org.ticketbooking.core.domain.common.audit;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@Embeddable
+public class Auditable implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2384592094387880727L;
+
+ @Column(name="TBS_CREATED_DATE")
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date createdDate;
+
+ @Column(name="TBS_UPDATED_DATE")
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date lastUpdatedDate;
+
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+
+ public void setCreatedDate(Date createdDate) {
+ this.createdDate = createdDate;
+ }
+
+ public Date getLastUpdatedDate() {
+ return lastUpdatedDate;
+ }
+
+ public void setLastUpdatedDate(Date lastUpdatedDate) {
+ this.lastUpdatedDate = lastUpdatedDate;
+ }
+
+ @Override
+ public String toString() {
+ return "Auditable [createdDate=" + createdDate + ", lastUpdatedDate="
+ + lastUpdatedDate + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((createdDate == null) ? 0 : createdDate.hashCode());
+ result = prime * result
+ + ((lastUpdatedDate == null) ? 0 : lastUpdatedDate.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Auditable other = (Auditable) obj;
+ if (createdDate == null) {
+ if (other.createdDate != null)
+ return false;
+ } else if (!createdDate.equals(other.createdDate))
+ return false;
+ if (lastUpdatedDate == null) {
+ if (other.lastUpdatedDate != null)
+ return false;
+ } else if (!lastUpdatedDate.equals(other.lastUpdatedDate))
+ return false;
+ return true;
+ }
+
+
+
+}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/common/listener/AuditableListener.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/common/listener/AuditableListener.java
new file mode 100644
index 0000000..68bf479
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/common/listener/AuditableListener.java
@@ -0,0 +1,70 @@
+package org.ticketbooking.core.domain.common.listener;
+
+import java.lang.reflect.Field;
+import java.util.Date;
+
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+
+import org.ticketbooking.core.domain.common.audit.Auditable;
+
+public class AuditableListener {
+
+ @PrePersist
+ public void setAuditableFieldforCreate(Object entity) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
+ if (entity.getClass().isAnnotationPresent(Entity.class)) {
+ Field field = getSingleField(entity.getClass(), "auditable");
+ field.setAccessible(true);
+ if (field.isAnnotationPresent(Embedded.class)) {
+ Object auditable = field.get(entity);
+ if (auditable == null) {
+ field.set(entity, new Auditable());
+ auditable = field.get(entity);
+ }
+ Field temporalField = auditable.getClass().getDeclaredField("createdDate");
+ Field agentField = auditable.getClass().getDeclaredField("lastUpdatedDate");
+ setAuditValueTemporal(temporalField, auditable);
+ setAuditValueTemporal(agentField, auditable);
+ }
+ }
+ }
+
+ @PreUpdate
+ public void setAuditableFieldForUdate(Object entity) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException{
+ if (entity.getClass().isAnnotationPresent(Entity.class)) {
+ Field field = getSingleField(entity.getClass(), "auditable");
+ field.setAccessible(true);
+ if (field.isAnnotationPresent(Embedded.class)) {
+ Object auditable = field.get(entity);
+ if (auditable == null) {
+ field.set(entity, new Auditable());
+ auditable = field.get(entity);
+ }
+ Field agentField = auditable.getClass().getDeclaredField("lastUpdatedDate");
+ setAuditValueTemporal(agentField, auditable);
+ }
+ }
+ }
+
+
+ private void setAuditValueTemporal(Field temporalField, Object auditable) throws IllegalArgumentException, IllegalAccessException {
+ temporalField.setAccessible(true);
+ temporalField.set(auditable, new Date());
+ }
+
+ private Field getSingleField(Class> clazz, String fieldName)
+ throws IllegalStateException {
+ try {
+ return clazz.getDeclaredField(fieldName);
+ } catch (NoSuchFieldException nsf) {
+ // Try superclass
+ if (clazz.getSuperclass() != null) {
+ return getSingleField(clazz.getSuperclass(), fieldName);
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Address.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Address.java
index 72bc63e..f1381d3 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Address.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Address.java
@@ -1,8 +1,8 @@
package org.ticketbooking.core.domain.user;
-import java.util.Date;
+import java.io.Serializable;
-public interface Address {
+public interface Address extends Serializable{
public Long getId();
public void setId(Long id);
public String getStreet1();
@@ -11,13 +11,10 @@ public interface Address {
public void setStree2(String stree2);
public Long getPin();
public void setPin(Long pin);
- public Date getCreatedDate();
- public void setCreatedDate(Date createdDate);
- public Date getUpdatedDate();
- public void setUpdatedDate(Date updatedDate);
public State getState();
public void setState(StateImpl state);
- public Customer getCustomer();
- public void setCustomer(CustomerImpl customer);
-
+ public boolean isDefaultAddress();
+ public void setDefaultAddress(boolean isDefaultAddress);
+ public boolean isActiveAddress();
+ public void setActiveAddress(boolean isActiveAddress);
}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/AddressImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/AddressImpl.java
index d41924d..7248649 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/AddressImpl.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/AddressImpl.java
@@ -1,33 +1,32 @@
package org.ticketbooking.core.domain.user;
-import java.io.Serializable;
-import java.util.Date;
-
import javax.persistence.Column;
+import javax.persistence.Embedded;
import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
+
+import org.ticketbooking.core.domain.common.audit.Auditable;
+import org.ticketbooking.core.domain.common.listener.AuditableListener;
@Entity
+@EntityListeners(value=AuditableListener.class)
@Table(name="TBS_ADDRESS")
-@NamedQueries(value={
- @NamedQuery(name="AddressImpl.fetchByCustomer",query="from AddressImpl a where a.customer.id=:id")
-})
-public class AddressImpl implements Serializable,Address{
+public class AddressImpl implements Address{
/**
*
*/
private static final long serialVersionUID = 1L;
+ @Embedded
+ protected Auditable auditable = new Auditable();
+
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="TBS_ADDRESS_ID")
@@ -42,21 +41,16 @@ public class AddressImpl implements Serializable,Address{
@Column(name="TBS_ADDRESS_PIN")
private Long pin;
- @Column(name="TBS_ADDRESS_CREATED_DATE")
- @Temporal(TemporalType.TIMESTAMP)
- private Date createdDate;
+ @Column(name="TBS_DEFAULT_ADDRESS")
+ private boolean isDefaultAddress;
- @Column(name="TBS_ADDRESS_UPDATED_DATE")
- @Temporal(TemporalType.TIMESTAMP)
- private Date updatedDate;
+ @Column(name="TBS_ACTIVE_ADDRESS")
+ private boolean isActiveAddress;
@ManyToOne
@JoinColumn(name="TBS_STATE_ID",nullable=false)
private StateImpl state;
- @ManyToOne
- @JoinColumn(name="TBS_CUSTOMER_ID")
- private CustomerImpl customer;
public Long getId() {
return id;
@@ -90,45 +84,110 @@ public void setPin(Long pin) {
this.pin = pin;
}
- public Date getCreatedDate() {
- return createdDate;
+ public State getState() {
+ return state;
}
- public void setCreatedDate(Date createdDate) {
- this.createdDate = createdDate;
+ public void setState(StateImpl state) {
+ this.state = state;
}
- public Date getUpdatedDate() {
- return updatedDate;
+
+ public Auditable getAudit() {
+ return auditable;
}
- public void setUpdatedDate(Date updatedDate) {
- this.updatedDate = updatedDate;
+ public void setAudit(Auditable audit) {
+ this.auditable = audit;
}
- public State getState() {
- return state;
+ public boolean isDefaultAddress() {
+ return isDefaultAddress;
}
- public void setState(StateImpl state) {
- this.state = state;
+ public void setDefaultAddress(boolean isDefaultAddress) {
+ this.isDefaultAddress = isDefaultAddress;
}
- public Customer getCustomer() {
- return customer;
+ public boolean isActiveAddress() {
+ return isActiveAddress;
}
- public void setCustomer(CustomerImpl customer) {
- this.customer = customer;
+ public void setActiveAddress(boolean isActiveAddress) {
+ this.isActiveAddress = isActiveAddress;
}
@Override
public String toString() {
- return "AddressImpl [id=" + id + ", street1=" + street1 + ", stree2="
- + stree2 + ", pin=" + pin + ", createdDate=" + createdDate
- + ", updatedDate=" + updatedDate + ", state=" + state
- + ", customer=" + customer + "]";
+ return "AddressImpl [audit=" + auditable + ", id=" + id + ", street1="
+ + street1 + ", stree2=" + stree2 + ", pin=" + pin
+ + ", isDefaultAddress=" + isDefaultAddress
+ + ", isActiveAddress=" + isActiveAddress + ", state=" + state
+ + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((auditable == null) ? 0 : auditable.hashCode());
+
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + (isActiveAddress ? 1231 : 1237);
+ result = prime * result + (isDefaultAddress ? 1231 : 1237);
+ result = prime * result + ((pin == null) ? 0 : pin.hashCode());
+ result = prime * result + ((state == null) ? 0 : state.hashCode());
+ result = prime * result + ((stree2 == null) ? 0 : stree2.hashCode());
+ result = prime * result + ((street1 == null) ? 0 : street1.hashCode());
+ return result;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ AddressImpl other = (AddressImpl) obj;
+ if (auditable == null) {
+ if (other.auditable != null)
+ return false;
+ } else if (!auditable.equals(other.auditable))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (isActiveAddress != other.isActiveAddress)
+ return false;
+ if (isDefaultAddress != other.isDefaultAddress)
+ return false;
+ if (pin == null) {
+ if (other.pin != null)
+ return false;
+ } else if (!pin.equals(other.pin))
+ return false;
+ if (state == null) {
+ if (other.state != null)
+ return false;
+ } else if (!state.equals(other.state))
+ return false;
+ if (stree2 == null) {
+ if (other.stree2 != null)
+ return false;
+ } else if (!stree2.equals(other.stree2))
+ return false;
+ if (street1 == null) {
+ if (other.street1 != null)
+ return false;
+ } else if (!street1.equals(other.street1))
+ return false;
+ return true;
+ }
+
}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Customer.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Customer.java
index 580bd00..4f89894 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Customer.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/Customer.java
@@ -1,9 +1,8 @@
package org.ticketbooking.core.domain.user;
-import java.util.Date;
-import java.util.Set;
+import java.io.Serializable;
-public interface Customer {
+public interface Customer extends Serializable {
public Long getId();
public void setId(Long id);
public String getUsername();
@@ -20,10 +19,7 @@ public interface Customer {
public void setEmail(String email);
public String getPhone();
public void setPhone(String phone);
- public Date getCreatedDate();
- public void setCreatedDate(Date createdDate);
- public Date getLastUpdated();
- public void setLastUpdated(Date lastUpdated);
- public Set getAddresses();
- public void setAddresses(Set addresses);
+ public boolean isActive();
+ public void setActive(boolean isActive);
+
}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerAddress.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerAddress.java
new file mode 100644
index 0000000..1daf5b0
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerAddress.java
@@ -0,0 +1,7 @@
+package org.ticketbooking.core.domain.user;
+
+import java.io.Serializable;
+
+public interface CustomerAddress extends Serializable {
+
+}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerAddressImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerAddressImpl.java
new file mode 100644
index 0000000..62886ad
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerAddressImpl.java
@@ -0,0 +1,123 @@
+package org.ticketbooking.core.domain.user;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+
+@Entity
+@Table(name="TBS_CUSTOMER_ADDRESS")
+public class CustomerAddressImpl implements CustomerAddress{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5517676145261999176L;
+
+ @Id
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ @Column(name="TBS_CUSTOMER_ADDRESS_ID")
+ private Long id;
+
+ @Column(name="TBS_CUSTOMER_ADDRESS_NAME")
+ private String addressName;
+
+ @ManyToOne(cascade=CascadeType.ALL,targetEntity=CustomerImpl.class)
+ @JoinColumn(name="TBS_CUSTOMER_ID")
+ private CustomerImpl customer;
+
+ @ManyToOne(cascade=CascadeType.ALL,targetEntity=AddressImpl.class)
+ @JoinColumn(name="TBS_ADDRESS_ID")
+ private AddressImpl address;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getAddressName() {
+ return addressName;
+ }
+
+ public void setAddressName(String addressName) {
+ this.addressName = addressName;
+ }
+
+ public CustomerImpl getCustomer() {
+ return customer;
+ }
+
+ public void setCustomer(CustomerImpl customer) {
+ this.customer = customer;
+ }
+
+ public AddressImpl getAddress() {
+ return address;
+ }
+
+ public void setAddress(AddressImpl address) {
+ this.address = address;
+ }
+
+ @Override
+ public String toString() {
+ return "CustomerAddressImpl [id=" + id + ", addressName=" + addressName
+ + ", customer=" + customer + ", address=" + address + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((address == null) ? 0 : address.hashCode());
+ result = prime * result
+ + ((addressName == null) ? 0 : addressName.hashCode());
+ result = prime * result
+ + ((customer == null) ? 0 : customer.hashCode());
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CustomerAddressImpl other = (CustomerAddressImpl) obj;
+ if (address == null) {
+ if (other.address != null)
+ return false;
+ } else if (!address.equals(other.address))
+ return false;
+ if (addressName == null) {
+ if (other.addressName != null)
+ return false;
+ } else if (!addressName.equals(other.addressName))
+ return false;
+ if (customer == null) {
+ if (other.customer != null)
+ return false;
+ } else if (!customer.equals(other.customer))
+ return false;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ return true;
+ }
+
+
+}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerImpl.java
index 948f469..2de0cdd 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerImpl.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/domain/user/CustomerImpl.java
@@ -1,33 +1,35 @@
package org.ticketbooking.core.domain.user;
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Set;
-
import javax.persistence.Column;
+import javax.persistence.Embedded;
import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
-import javax.persistence.OneToMany;
import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
+
+import org.ticketbooking.core.domain.common.audit.Auditable;
+import org.ticketbooking.core.domain.common.listener.AuditableListener;
@Entity
+@EntityListeners(value=AuditableListener.class)
@Table(name="TBS_CUSTOMER")
@NamedQueries(value={
@NamedQuery(name="CustomerImpl.fetchByUsername",query="from CustomerImpl c where c.username=:username")
})
-public class CustomerImpl implements Serializable,Customer{
+public class CustomerImpl implements Customer{
/**
*
*/
private static final long serialVersionUID = 1L;
+ @Embedded
+ protected Auditable auditable = new Auditable();
+
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="TBS_CUSTOMER_ID")
@@ -54,16 +56,9 @@ public class CustomerImpl implements Serializable,Customer{
@Column(name="TBS_CUSTOMER_PHONE")
private String phone;
- @Column(name="TBS_CUSTOMER_CREATED_DATE")
- @Temporal(TemporalType.TIMESTAMP)
- private Date createdDate;
-
- @Column(name="TBS_CUSTOMER_UPDATED_DATE")
- @Temporal(TemporalType.TIMESTAMP)
- private Date lastUpdated;
+ @Column(name="TBS_CUSTOMER_ACTIVE")
+ private boolean isActive;
- @OneToMany(mappedBy="customer")
- private Set addresses;
public Long getId() {
return id;
@@ -129,56 +124,44 @@ public void setPhone(String phone) {
this.phone = phone;
}
- public Date getCreatedDate() {
- return createdDate;
- }
-
- public void setCreatedDate(Date createdDate) {
- this.createdDate = createdDate;
- }
- public Date getLastUpdated() {
- return lastUpdated;
+ public Auditable getAudit() {
+ return auditable;
}
- public void setLastUpdated(Date lastUpdated) {
- this.lastUpdated = lastUpdated;
+ public void setAudit(Auditable audit) {
+ this.auditable = audit;
}
- public Set getAddresses() {
- return addresses;
+ public boolean isActive() {
+ return isActive;
}
- public void setAddresses(Set addresses) {
- this.addresses = addresses;
+ public void setActive(boolean isActive) {
+ this.isActive = isActive;
}
@Override
public String toString() {
- return "CustomerImpl [id=" + id + ", username=" + username
- + ", password=" + password + ", firstName=" + firstName
- + ", lastName=" + lastName + ", middleName=" + middleName
- + ", email=" + email + ", phone=" + phone + ", createdDate="
- + createdDate + ", lastUpdated=" + lastUpdated + ", addresses="
- + addresses + "]";
+ return "CustomerImpl [audit=" + auditable + ", id=" + id + ", username="
+ + username + ", password=" + password + ", firstName="
+ + firstName + ", lastName=" + lastName + ", middleName="
+ + middleName + ", email=" + email + ", phone=" + phone
+ + ", isActive=" + isActive + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result
- + ((addresses == null) ? 0 : addresses.hashCode());
- result = prime * result
- + ((createdDate == null) ? 0 : createdDate.hashCode());
+ result = prime * result + ((auditable == null) ? 0 : auditable.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + (isActive ? 1231 : 1237);
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
- result = prime * result
- + ((lastUpdated == null) ? 0 : lastUpdated.hashCode());
result = prime * result
+ ((middleName == null) ? 0 : middleName.hashCode());
result = prime * result
@@ -198,15 +181,10 @@ public boolean equals(Object obj) {
if (getClass() != obj.getClass())
return false;
CustomerImpl other = (CustomerImpl) obj;
- if (addresses == null) {
- if (other.addresses != null)
- return false;
- } else if (!addresses.equals(other.addresses))
- return false;
- if (createdDate == null) {
- if (other.createdDate != null)
+ if (auditable == null) {
+ if (other.auditable != null)
return false;
- } else if (!createdDate.equals(other.createdDate))
+ } else if (!auditable.equals(other.auditable))
return false;
if (email == null) {
if (other.email != null)
@@ -223,16 +201,13 @@ public boolean equals(Object obj) {
return false;
} else if (!id.equals(other.id))
return false;
+ if (isActive != other.isActive)
+ return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
- if (lastUpdated == null) {
- if (other.lastUpdated != null)
- return false;
- } else if (!lastUpdated.equals(other.lastUpdated))
- return false;
if (middleName == null) {
if (other.middleName != null)
return false;
@@ -255,6 +230,7 @@ public boolean equals(Object obj) {
return false;
return true;
}
+
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/helper/AddressHelper.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/helper/AddressHelper.java
index f5df5cb..5df2bf3 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/helper/AddressHelper.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/helper/AddressHelper.java
@@ -1,6 +1,5 @@
package org.ticketbooking.core.helper;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -8,14 +7,20 @@
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
import org.ticketbooking.core.api.jaxb.user.Address;
import org.ticketbooking.core.domain.other.LocaleImpl;
import org.ticketbooking.core.domain.user.AddressImpl;
import org.ticketbooking.core.domain.user.CountryImpl;
+import org.ticketbooking.core.domain.user.Customer;
+import org.ticketbooking.core.domain.user.CustomerAddressImpl;
+import org.ticketbooking.core.domain.user.CustomerImpl;
import org.ticketbooking.core.domain.user.StateImpl;
import org.ticketbooking.core.service.address.AddressService;
import org.ticketbooking.core.service.address.country.CountryService;
import org.ticketbooking.core.service.address.state.StateService;
+import org.ticketbooking.core.service.customer.CustomerService;
+import org.ticketbooking.core.service.customer.address.CustomerAddressService;
@Component("addressHelper")
public class AddressHelper {
@@ -28,6 +33,12 @@ public class AddressHelper {
@Resource(name="countryService")
CountryService countryService;
+
+ @Resource(name="customerAddressService")
+ CustomerAddressService customerAddressService;
+
+ @Resource(name="customerService")
+ CustomerService customerService;
public Address convertAddress(org.ticketbooking.core.domain.user.Address address){
Address convertedAddress = new Address();
@@ -43,8 +54,6 @@ public Set convertAddressEntity(List addresses) {
Set addresses2 = new HashSet();
for (Address address : addresses) {
AddressImpl address2 = new AddressImpl();
- address2.setCreatedDate(new Date());
- address2.setUpdatedDate(new Date());
address2.setPin(address.getPin());
address2.setStreet1(address.getStreet1());
address2.setStree2(address.getStreet2());
@@ -68,4 +77,13 @@ public Set convertAddressEntity(List addresses) {
return addresses2;
}
+
+ @Transactional("tbsTransaction")
+ public void createCustomerAddress(Customer customer,AddressImpl address){
+ CustomerAddressImpl customerAddress = new CustomerAddressImpl();
+ customerAddress.setCustomer((CustomerImpl) customerService.findCustomerById(customer.getId()));
+ customerAddress.setAddress(addressService.fetchAddress(address.getId()));
+ customerAddress.setAddressName("Address created for custoemr");
+ customerAddressService.createCustomerAddress(customerAddress);
+ }
}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressService.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressService.java
index 12fcd17..b5227b0 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressService.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressService.java
@@ -1,13 +1,11 @@
package org.ticketbooking.core.service.address;
-import java.util.List;
-
import org.ticketbooking.core.domain.user.AddressImpl;
public interface AddressService {
void createAddress(AddressImpl address);
void deleteAddress(Long id);
AddressImpl fetchAddress(Long id);
- List fetchAddressByCustomer(Long customerId);
+// List fetchAddressByCustomer(Long customerId);
void updateAddress(AddressImpl address);
}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressServiceImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressServiceImpl.java
index d3f5dbb..ee4b3c6 100644
--- a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressServiceImpl.java
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/address/AddressServiceImpl.java
@@ -32,10 +32,10 @@ public AddressImpl fetchAddress(Long id) {
}
- @Transactional(value="tbsTransaction",readOnly=true)
+ /*@Transactional(value="tbsTransaction",readOnly=true)
public List fetchAddressByCustomer(Long customerId) {
return addressDao.fetchAddressByCustomer(customerId);
- }
+ }*/
@Transactional("tbsTransaction")
public void updateAddress(AddressImpl address) {
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/customer/address/CustomerAddressService.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/customer/address/CustomerAddressService.java
new file mode 100644
index 0000000..da22bf5
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/customer/address/CustomerAddressService.java
@@ -0,0 +1,7 @@
+package org.ticketbooking.core.service.customer.address;
+
+import org.ticketbooking.core.domain.user.CustomerAddressImpl;
+
+public interface CustomerAddressService {
+ void createCustomerAddress(CustomerAddressImpl customerAddress);
+}
diff --git a/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/customer/address/CustomerAddressServiceImpl.java b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/customer/address/CustomerAddressServiceImpl.java
new file mode 100644
index 0000000..0d05457
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/java/org/ticketbooking/core/service/customer/address/CustomerAddressServiceImpl.java
@@ -0,0 +1,21 @@
+package org.ticketbooking.core.service.customer.address;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.ticketbooking.core.dao.customer.address.CustomerAddressDao;
+import org.ticketbooking.core.domain.user.CustomerAddressImpl;
+
+@Service("customerAddressService")
+public class CustomerAddressServiceImpl implements CustomerAddressService{
+
+ @Resource(name="customerAddressDao")
+ CustomerAddressDao addressDao;
+
+ @Transactional("tbsTransaction")
+ public void createCustomerAddress(CustomerAddressImpl customerAddress){
+ addressDao.createCustomerAddress(customerAddress);
+ }
+
+}
diff --git a/TicketBookingSystem/booking-core/src/main/resources/config.properties b/TicketBookingSystem/booking-core/src/main/resources/config.properties
index 6b5ca6d..6a4aeff 100644
--- a/TicketBookingSystem/booking-core/src/main/resources/config.properties
+++ b/TicketBookingSystem/booking-core/src/main/resources/config.properties
@@ -19,4 +19,4 @@ application.host.name=localhost
application.port.number=8080
application.path=/
application.channel=http
-application.isHttps=false
\ No newline at end of file
+application.isHttps=false
diff --git a/TicketBookingSystem/booking-core/src/main/resources/swagger.properties b/TicketBookingSystem/booking-core/src/main/resources/swagger.properties
new file mode 100644
index 0000000..d9b35ed
--- /dev/null
+++ b/TicketBookingSystem/booking-core/src/main/resources/swagger.properties
@@ -0,0 +1,2 @@
+documentation.services.version=1.0
+documentation.services.basePath=http://localhost:8080/
\ No newline at end of file
diff --git a/TicketBookingSystem/booking-site/src/main/java/org/ticketbooking/site/api/web/customer/CustomerController.java b/TicketBookingSystem/booking-site/src/main/java/org/ticketbooking/site/api/web/customer/CustomerController.java
index 26173ef..3359af7 100644
--- a/TicketBookingSystem/booking-site/src/main/java/org/ticketbooking/site/api/web/customer/CustomerController.java
+++ b/TicketBookingSystem/booking-site/src/main/java/org/ticketbooking/site/api/web/customer/CustomerController.java
@@ -16,6 +16,11 @@
import org.ticketbooking.core.helper.LinksHelper;
import org.ticketbooking.core.service.customer.CustomerService;
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiParam;
+
+@Api(value="CustomerDetails",description="Service to get the details about Customer")
@RestController
@RequestMapping("/user")
public class CustomerController {
@@ -27,14 +32,16 @@ public class CustomerController {
@Resource(name="addressHelper")
AddressHelper addressHelper;
- @RequestMapping(value="/{username}",produces="{application/json,application/xml}",method=RequestMethod.GET)
- public UserDetails getUserDetails(@PathVariable("username") String username){
+ @ApiOperation(httpMethod="GET",responseClass="UserDetails",value="will retrive all the details about the customer based on the username provided")
+ @RequestMapping(value="/{username}",produces={"application/json","application/xml"},method=RequestMethod.GET)
+ public UserDetails getUserDetails(@ApiParam(name="username",value="Username of the customer",required=true)@PathVariable("username") String username){
UserDetails userDetails = new UserDetails();
Customer customer = customerService.findCustomerByUserName(username);
List addresses = new ArrayList();
- for (org.ticketbooking.core.domain.user.Address address : customer.getAddresses()) {
+ //TODO To Implement Address with Customer
+ /*for (org.ticketbooking.core.domain.user.Address address : customer.getAddresses()) {
addresses.add(addressHelper.convertAddress(address));
- }
+ }*/
userDetails.setAddresses(addresses);
userDetails.setEmail(customer.getEmail());
userDetails.setFirstName(customer.getFirstName());
diff --git a/TicketBookingSystem/booking-site/src/main/resources/swagger.properties b/TicketBookingSystem/booking-site/src/main/resources/swagger.properties
new file mode 100644
index 0000000..d9b35ed
--- /dev/null
+++ b/TicketBookingSystem/booking-site/src/main/resources/swagger.properties
@@ -0,0 +1,2 @@
+documentation.services.version=1.0
+documentation.services.basePath=http://localhost:8080/
\ No newline at end of file
diff --git a/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/applicationContext.xml b/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/applicationContext.xml
index 0b4473c..ace830a 100644
--- a/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/applicationContext.xml
+++ b/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/applicationContext.xml
@@ -19,18 +19,4 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/dispatcher-servlet.xml b/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/dispatcher-servlet.xml
index e657348..a567273 100644
--- a/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/dispatcher-servlet.xml
+++ b/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/dispatcher-servlet.xml
@@ -11,4 +11,17 @@
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
+
+
+
+
+
+
+
+ classpath:swagger.properties
+
+
+
+
+
\ No newline at end of file
diff --git a/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/web.xml b/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/web.xml
index cef8a99..67cfa97 100644
--- a/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/web.xml
+++ b/TicketBookingSystem/booking-site/src/main/webapp/WEB-INF/web.xml
@@ -6,10 +6,10 @@
contextConfigLocation
+ /WEB-INF/applicationContext-filter.xml
classpath:applicationContext-core.xml
/WEB-INF/applicationContext.xml
/WEB-INF/applicationContext-security.xml
- /WEB-INF/applicationContext-filter.xml
diff --git a/TicketBookingSystem/pom.xml b/TicketBookingSystem/pom.xml
index 8f1c94f..1681da1 100644
--- a/TicketBookingSystem/pom.xml
+++ b/TicketBookingSystem/pom.xml
@@ -234,7 +234,13 @@
org.hibernate
hibernate-validator
- 4.2.0.Final
+ 5.2.1.Final
+
+
+ com.fasterxml
+ classmate
+
+
org.hibernate.common
@@ -264,7 +270,17 @@
javax.servlet-api
${servlet.api.version}
-
+
+
+ com.mangofactory
+ swagger-springmvc
+ 0.5.2
+
+
+ com.fasterxml
+ classmate
+ 0.8.0
+