package de.ironjan.mensaupb.stw.rest_api;
import android.provider.BaseColumns;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import de.ironjan.mensaupb.persistence.AllergensArrayPersister;
import de.ironjan.mensaupb.stw.BadgesStringConverter;
/**
* A class representing a raw menu with all possible information
*/
@DatabaseTable(tableName = StwMenu.TABLE)
public class StwMenu implements Cloneable {
public static final String TABLE = "menus";
public static final String NAME_GERMAN = "name_de";
public static final String CATEGORY_DE = "category_de";
public static final String STUDENTS_PRICE = "priceStudents";
public static final String PRICE_TYPE = "pricetype";
public static final String DATE = "date";
public static final String RESTAURANT = "restaurant";
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static final String ALLERGENS = "allergens";
public static final Logger LOGGER = LoggerFactory.getLogger(StwMenu.class);
public static final String SORT_ORDER = "sortOrder";
public static final String BADGES = "badges";
public static final String NAME_EN = "name_en";
public static final String CATEGORY_EN = "category_en";
public static final String DESCRIPTION_EN = "description_en";
public static final String DESCRIPTION_DE = "description_de";
public static final String UPDATED_ON = "updated_on";
@DatabaseField(generatedId = true, columnName = BaseColumns._ID)
long _id;
@DatabaseField
int order_info;
@DatabaseField(canBeNull = false, columnName = DATE, dataType = DataType.DATE_STRING, format = DATE_FORMAT)
private Date date;
@DatabaseField(canBeNull = false, columnName = NAME_GERMAN)
private String name_de;
@DatabaseField(canBeNull = false, columnName = NAME_EN)
private String name_en;
@DatabaseField(columnName = DESCRIPTION_DE)
private String description_de = "";
@DatabaseField(columnName = DESCRIPTION_EN)
private String description_en = "";
@DatabaseField
@JsonProperty("category")
private String categoryIdentifier = "";
@DatabaseField(columnName = CATEGORY_DE)
private String category_de;
@DatabaseField(columnName = CATEGORY_EN)
private String category_en;
@DatabaseField
private String subcategory_de = "";
@DatabaseField
private String subcategory_en = "";
@DatabaseField(canBeNull = false, columnName = STUDENTS_PRICE)
private double priceStudents;
@DatabaseField(canBeNull = false)
private double priceWorkers;
@DatabaseField(canBeNull = false)
private double priceGuests;
@DatabaseField(columnName = ALLERGENS, persisterClass = AllergensArrayPersister.class)
private Allergen[] allergens;
private Badge[] badges;
@DatabaseField(columnName = BADGES)
private String badgesAsString;
@DatabaseField(columnName = RESTAURANT)
private String restaurant;
@DatabaseField(canBeNull = false, columnName = PRICE_TYPE)
private PriceType pricetype;
@DatabaseField
private String image;
@DatabaseField
private String thumbnail;
@DatabaseField(columnName = SORT_ORDER, defaultValue = "100")
private int sortOrder = 100;
@DatabaseField(canBeNull = false, columnName = UPDATED_ON, dataType = DataType.DATE_LONG)
Date updatedOn;
public StwMenu() {
}
public int getSortOrder() {
return sortOrder;
}
public void setSortOrder(int sortOrder) {
this.sortOrder = sortOrder;
}
public long get_id() {
return _id;
}
public void set_id(long _id) {
this._id = _id;
}
public Date getDate() {
return date;
}
public void setDate(String dateString) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
try {
this.date = simpleDateFormat.parse(dateString);
} catch (ParseException e) {
LOGGER.error("Could not parse date", e);
}
}
public String getName_de() {
return name_de;
}
public void setName_de(String name_de) {
this.name_de = name_de;
}
public String getName_en() {
return name_en;
}
public void setName_en(String name_en) {
this.name_en = name_en;
}
public String getDescription_de() {
return description_de;
}
public void setDescription_de(String description_de) {
this.description_de = description_de;
}
public String getDescription_en() {
return description_en;
}
public void setDescription_en(String description_en) {
this.description_en = description_en;
}
public String getCategory_de() {
return category_de;
}
public void setCategory_de(String category_de) {
this.category_de = category_de;
}
public String getCategory_en() {
return category_en;
}
public void setCategory_en(String category_en) {
this.category_en = category_en;
}
public String getSubcategory_de() {
return subcategory_de;
}
public void setSubcategory_de(String subcategory_de) {
this.subcategory_de = subcategory_de;
}
public String getSubcategory_en() {
return subcategory_en;
}
public void setSubcategory_en(String subcategory_en) {
this.subcategory_en = subcategory_en;
}
public double getPriceStudents() {
return priceStudents;
}
@SuppressWarnings("SameParameterValue")
public void setPriceStudents(double priceStudents) {
this.priceStudents = priceStudents;
}
public double getPriceWorkers() {
return priceWorkers;
}
@SuppressWarnings("SameParameterValue")
public void setPriceWorkers(double priceWorkers) {
this.priceWorkers = priceWorkers;
}
public double getPriceGuests() {
return priceGuests;
}
@SuppressWarnings("SameParameterValue")
public void setPriceGuests(double priceGuests) {
this.priceGuests = priceGuests;
}
public Allergen[] getAllergens() {
return allergens;
}
public void setAllergens(Allergen[] allergens) {
this.allergens = allergens;
}
public int getOrder_info() {
return order_info;
}
public void setOrder_info(int order_info) {
this.order_info = order_info;
}
public Badge[] getBadges() {
if (badges == null && badgesAsString != null) {
badges = BadgesStringConverter.convert(this.badgesAsString);
}
return badges;
}
public void setBadges(Badge[] badges) {
this.badges = badges;
buildBadgesAsString();
}
private void buildBadgesAsString() {
badgesAsString = BadgesStringConverter.convert(badges.clone());
}
public String getBadgesAsString() {
buildBadgesAsString();
return badgesAsString;
}
public void setBadgesAsString(String badgesAsString) {
this.badgesAsString = badgesAsString;
badges = BadgesStringConverter.convert(this.badgesAsString);
}
public String getRestaurant() {
return restaurant;
}
public void setRestaurant(String restaurant) {
this.restaurant = restaurant;
}
public PriceType getPricetype() {
return pricetype;
}
public void setPricetype(PriceType pricetype) {
this.pricetype = pricetype;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
@Override
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return "StwMenu{" +
"date=" + sdf.format(date) + " -- " + date +
", name_de='" + name_de + '\'' +
", restaurant='" + restaurant + '\'' +
", name_en='" + name_en + '\'' +
", description_de='" + description_de + '\'' +
", description_en='" + description_en + '\'' +
", category_de='" + category_de + '\'' +
", category_en='" + category_en + '\'' +
", subcategory_de='" + subcategory_de + '\'' +
", subcategory_en='" + subcategory_en + '\'' +
", priceStudents=" + priceStudents +
", priceWorkers=" + priceWorkers +
", priceGuests=" + priceGuests +
", allergens=" + Arrays.toString(allergens) +
", order_info=" + order_info +
", badges=" + Arrays.toString(badges) +
", pricetype=" + pricetype +
", image='" + image + '\'' +
", thumbnail='" + thumbnail + '\'' +
'}';
}
@JsonAnySetter
public void setAny(String key, Object o) {
if (LOGGER.isDebugEnabled()) LOGGER.debug("Any setter invoked: {} -> {}", key, o);
}
public String getCategoryIdentifier() {
return categoryIdentifier;
}
public void setCategoryIdentifier(String categoryIdentifier) {
this.categoryIdentifier = categoryIdentifier;
}
public Date getUpdatedOn() {
return updatedOn;
}
public void setUpdatedOn(Date updatedOn) {
this.updatedOn = updatedOn;
}
public StwMenu copy() {
try {
return (StwMenu) super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}