/*
* Copyright 2012 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
*
* 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.github.carlomicieli.rest.representations;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.MultivaluedMap;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import com.github.carlomicieli.entities.Brand;
import com.github.carlomicieli.entities.Era;
import com.github.carlomicieli.entities.PowerMethod;
import com.github.carlomicieli.entities.Railway;
import com.github.carlomicieli.entities.RollingStock;
import com.github.carlomicieli.entities.Scale;
/**
*
* @author Carlo Micieli
*
*/
@XmlRootElement(name = "rollingStock",
namespace = "http://schemas.trenako.com/2012/05")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class RollingStockRepresentation {
private final RollingStock rollingStock;
private String brandName;
private String scaleName;
private String railwayName;
public RollingStockRepresentation() {
this.rollingStock = new RollingStock();
}
public RollingStockRepresentation(RollingStock rollingStock) {
this.rollingStock = rollingStock;
}
public RollingStockRepresentation(MultivaluedMap<String, String> formValues) {
this();
}
/**
* Returns the rolling stock entity wrapped object.
* @return the entity object.
*/
public RollingStock getInner() {
return this.rollingStock;
}
/**
* Return the unique id.
* @return the unique id.
*/
public long getId() {
return getInner().getId();
}
/**
* Set the unique id.
* @param id the unique id.
*/
public void setId(long id) {
getInner().setId(id);
}
/**
* Return the brand name.
* @return the brand name.
*/
@XmlTransient
Brand getBrand() {
return getInner().getBrand();
}
/**
* Set the brand name.
* @param brand the brand name.
*/
void setBrand(Brand brand) {
getInner().setBrand(brand);
}
/**
* Returns the brand name.
* @return the brand name.
*/
@XmlElement(name = "brand")
public String getBrandName() {
if( this.brandName!=null ) return this.brandName;
if( getBrand()==null ) return null;
return getBrand().getName();
}
/**
* Sets the brand name.
* @param brandName
*/
public void setBrandName(String brandName) {
this.brandName = brandName;
}
/**
* Return the item number.
* @return the item number.
*/
public String getItemNumber() {
return getInner().getItemNumber();
}
/**
* Set the item number.
* @param itemNumber the item number.
*/
public void setItemNumber(String itemNumber) {
getInner().setItemNumber(itemNumber);
}
/**
* Return the rolling stock description.
* @return the rolling stock description.
*/
public String getDescription() {
return getInner().getDescription();
}
/**
* Set the rolling stock description.
* @param description the rolling stock description.
*/
public void setDescription(String description) {
getInner().setDescription(description);
}
/**
* Return the railway name.
* @return the railway name.
*/
@XmlTransient
public Railway getRailway() {
return getInner().getRailway();
}
/**
* Set the railway name.
* @param railway the railway name.
*/
public void setRailway(Railway railway) {
getInner().setRailway(railway);
}
/**
* Return the railway name.
* @return the railway name.
*/
@XmlElement(name = "railway")
public String getRailwayName() {
if( this.railwayName!=null ) return this.railwayName;
if( getRailway()==null ) return null;
return getRailway().getName();
}
/**
* Set the railway name.
* @param railwayName the railway name.
*/
public void setRailwayName(String railwayName) {
this.railwayName = railwayName;
}
/**
* Return the scale.
* @return the scale.
*/
@XmlTransient
public Scale getScale() {
return getInner().getScale();
}
/**
* Set the scale.
* @param scale the scale.
*/
public void setScale(Scale scale) {
getInner().setScale(scale);
}
/**
* Return the scale.
* @return the scale.
*/
@XmlElement(name = "scale")
public String getScaleName() {
if( this.scaleName!=null ) return this.scaleName;
if( getScale()==null ) return null;
return getScale().getName();
}
/**
* Set the scale.
* @param scaleName the scale.
*/
public void setScaleName(String scaleName) {
this.scaleName = scaleName;
}
/**
* Returns the model era.
* @return the model era.
*/
public String getEra() {
return getInner().getEra().toString();
}
/**
* Sets the model era.
* @param era the model era.
*/
public void setEra(String era) {
getInner().setEra(Enum.valueOf(Era.class, era));
}
/**
* Returns the model power method.
* @return the model power method.
*/
public String getPowerMethod() {
return getInner().getPowerMethod().toString();
}
/**
* Sets the model power method.
* @param powerMethod the model power method.
*/
public void setPowerMethod(String powerMethod) {
getInner().setPowerMethod(Enum.valueOf(PowerMethod.class, powerMethod));
}
/**
* Compute the ETag for the current player representation.
* @return the ETag value.
*/
public EntityTag tag() {
return new EntityTag(Long.toHexString(this.hashCode()));
}
/**
* Returns a string representation of this <em>BrandRepresentation</em>.
* @return a string representation of the object.
*/
@Override
public int hashCode() {
return new HashCodeBuilder(15, 37)
.append(getBrandName())
.append(getItemNumber())
.append(getDescription())
.append(getScale())
.append(getRailway())
.append(getEra())
.append(getPowerMethod())
.toHashCode();
}
}