/** * Copyright (C) 2012 KRM Associates, Inc. healtheme@krminc.com * * 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 com.krminc.phr.api.converter; import com.krminc.phr.api.converter.util.ConverterUtils; import com.krminc.phr.domain.Address; import com.krminc.phr.domain.User; import java.math.BigInteger; import java.net.URI; import java.util.Date; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlAttribute; import javax.ws.rs.core.UriBuilder; import javax.persistence.EntityManager; /** * Address Converter Class. * @author Daniel Shaw (dshaw.com) */ @XmlRootElement(name = "address") public class AddressConverter { private Address entity; private URI uri; private int expandLevel; /** Creates a new instance of AddressConverter */ public AddressConverter() { entity = new Address(); } /** * Creates a new instance of AddressConverter. * * @param entity associated entity * @param uri associated uri * @param expandLevel indicates the number of levels the entity graph should be expanded@param isUriExtendable indicates whether the uri can be extended */ public AddressConverter(Address entity, URI uri, int expandLevel, boolean isUriExtendable) { this.entity = entity; this.uri = (isUriExtendable) ? UriBuilder.fromUri(uri).path(entity.getAddressId() + "/").build() : uri; this.expandLevel = expandLevel; getUser(); } /** * Creates a new instance of AddressConverter. * * @param entity associated entity * @param uri associated uri * @param expandLevel indicates the number of levels the entity graph should be expanded */ public AddressConverter(Address entity, URI uri, int expandLevel) { this(entity, uri, expandLevel, false); } /** * Getter for addressId. * * @return value for addressId */ @XmlElement public Long getAddressId() { return (expandLevel > 0) ? entity.getAddressId() : null; } /** * Setter for addressId. * * @param value the value to set */ public void setAddressId(Long value) { entity.setAddressId(value); } /** * Getter for primaryAddress. * * @return value for primaryAddress */ @XmlElement public Boolean getPrimaryAddress() { return (expandLevel > 0) ? entity.getPrimaryAddress() : null; } /** * Setter for primaryAddress. * * @param value the value to set */ public void setPrimaryAddress(Boolean value) { entity.setPrimaryAddress(value); } /** * Getter for address1. * * @return value for address1 */ @XmlElement public String getAddress1() { return (expandLevel > 0) ? entity.getAddress1() : null; } /** * Setter for address1. * * @param value the value to set */ public void setAddress1(String value) { value = ConverterUtils.prepareInput(value); entity.setAddress1(value); } /** * Getter for address2. * * @return value for address2 */ @XmlElement public String getAddress2() { return (expandLevel > 0) ? entity.getAddress2() : null; } /** * Setter for address2. * * @param value the value to set */ public void setAddress2(String value) { value = ConverterUtils.prepareInput(value); entity.setAddress2(value); } /** * Getter for address3. * * @return value for address3 */ @XmlElement public String getAddress3() { return (expandLevel > 0) ? entity.getAddress3() : null; } /** * Setter for address3. * * @param value the value to set */ public void setAddress3(String value) { value = ConverterUtils.prepareInput(value); entity.setAddress3(value); } /** * Getter for city. * * @return value for city */ @XmlElement public String getCity() { return (expandLevel > 0) ? entity.getCity() : null; } /** * Setter for city. * * @param value the value to set */ public void setCity(String value) { value = ConverterUtils.prepareInput(value); entity.setCity(value); } /** * Getter for state. * * @return value for state */ @XmlElement public String getState() { return (expandLevel > 0) ? entity.getState() : null; } /** * Setter for state. * * @param value the value to set */ public void setState(String value) { value = ConverterUtils.prepareInput(value); entity.setState(value); } /** * Getter for province. * * @return value for province */ @XmlElement public String getProvince() { return (expandLevel > 0) ? entity.getProvince() : null; } /** * Setter for province. * * @param value the value to set */ public void setProvince(String value) { value = ConverterUtils.prepareInput(value); entity.setProvince(value); } /** * Getter for zip. * * @return value for zip */ @XmlElement public String getZip() { return (expandLevel > 0) ? entity.getZip() : null; } /** * Setter for zip. * * @param value the value to set */ public void setZip(String value) { value = ConverterUtils.prepareInput(value); entity.setZip(value); } /** * Getter for country. * * @return value for country */ @XmlElement public String getCountry() { return (expandLevel > 0) ? entity.getCountry() : null; } /** * Setter for country. * * @param value the value to set */ public void setCountry(String value) { value = ConverterUtils.prepareInput(value); entity.setCountry(value); } /** * Getter for dateCreated. * * @return value for dateCreated */ @XmlElement public Date getDateCreated() { return (expandLevel > 0) ? entity.getDateCreated() : null; } /** * Setter for dateCreated. * * @param value the value to set */ public void setDateCreated(Date value) { entity.setDateCreated(value); } /** * Getter for createdByUserId. * * @return value for createdByUserId */ @XmlElement public BigInteger getCreatedByUserId() { return (expandLevel > 0) ? entity.getCreatedByUserId() : null; } /** * Setter for createdByUserId. * * @param value the value to set */ public void setCreatedByUserId(BigInteger value) { entity.setCreatedByUserId(value); } /** * Getter for lastUpdated. * * @return value for lastUpdated */ @XmlElement public Date getLastUpdated() { return (expandLevel > 0) ? entity.getLastUpdated() : null; } /** * Setter for lastUpdated. * * @param value the value to set */ public void setLastUpdated(Date value) { entity.setLastUpdated(value); } /** * Getter for user. * * @return value for user */ @XmlElement public UserConverter getUser() { if (expandLevel > 0) { if (entity.getUser() != null) { return new UserConverter(entity.getUser(), uri.resolve("user/"), expandLevel - 1, false); } } return null; } /** * Setter for user. * * @param value the value to set */ public void setUser(UserConverter value) { entity.setUser((value != null) ? value.getEntity() : null); } /** * Returns the URI associated with this converter. * * @return the uri */ @XmlAttribute public URI getUri() { return uri; } /** * Sets the URI for this reference converter. * */ public void setUri(URI uri) { this.uri = uri; } /** * Returns the Address entity. * * @return an entity */ @XmlTransient public Address getEntity() { if (entity.getAddressId() == null) { AddressConverter converter = UriResolver.getInstance().resolve(AddressConverter.class, uri); if (converter != null) { entity = converter.getEntity(); } } return entity; } /** * Returns the resolved Address entity. * * @return an resolved entity */ public Address resolveEntity(EntityManager em) { User user = entity.getUser(); if (user != null) { entity.setUser(em.getReference(User.class, user.getUserId())); } return entity; } }