/*
*
*/
package org.smartly.packages.mongo.impl.db.entity;
import com.mongodb.DBObject;
import org.smartly.IConstants;
import org.smartly.commons.util.CollectionUtils;
import org.smartly.commons.util.StringUtils;
import org.smartly.packages.mongo.impl.MongoObject;
import org.smartly.packages.mongo.impl.db.entity.item.MongoAddress;
import org.smartly.packages.mongo.impl.util.MongoUtils;
import java.util.List;
/**
* @author angelo.geminiani
*/
public class MongoUser extends MongoObject {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
public static String COLLECTION = "users";
//-- objects --//
public static final String DATA = IMongoEntityConstants.DATA; // custom fields
//-- fields --//
// account
public static final String UID = IMongoEntityConstants.UID;
public static final String ENABLED = IMongoEntityConstants.ENABLED;
public static final String REMOVED = IMongoEntityConstants.REMOVED;
public static final String FINDABLE = IMongoEntityConstants.FINDABLE;
public static final String LANG = IMongoEntityConstants.LANG;
public static final String COUNTRY_ID = IMongoEntityConstants.COUNTRY_ID;
public static final String COUNTRY = IMongoEntityConstants.COUNTRY; // late initialized (after login)
public static final String USERNAME = IMongoEntityConstants.USERNAME;
public static final String PASSWORD = IMongoEntityConstants.PASSWORD;
public static final String EMAIL = IMongoEntityConstants.EMAIL;
public static final String IMAGE = IMongoEntityConstants.IMAGE;
// billing
public static final String REALNAME = IMongoEntityConstants.REALNAME;
public static final String COMPANY = IMongoEntityConstants.COMPANY;
public static final String VAT = IMongoEntityConstants.VAT;
public static final String ADDRESS_DELIVERY = IMongoEntityConstants.ADDRESS_DELIVERY; // object
public static final String ADDRESS_BILLING = IMongoEntityConstants.ADDRESS_BILLING; // object
// advanced
public static final String GENDER = IMongoEntityConstants.GENDER;
public static final String BIRTHDATE = IMongoEntityConstants.BIRTHDATE;
public static final String EMAILOFFICE = IMongoEntityConstants.EMAILOFFICE;
public static final String PHONEMOBILE = IMongoEntityConstants.PHONEMOBILE;
public static final String PHONEHOME = IMongoEntityConstants.PHONEHOME;
public static final String PHONEOFFICE = IMongoEntityConstants.PHONEOFFICE;
public static final String JOB = IMongoEntityConstants.JOB;
// price list
public static final String DISCOUNT = IMongoEntityConstants.DISCOUNT;
//-- collections --//
public static final String PRODUCTS = IMongoEntityConstants.PRODUCTS;
public static final String PRODUCT_LINKS = IMongoEntityConstants.PRODUCT_LINKS;
public static final String ROLES = IMongoEntityConstants.ROLES;
public static final String PROFILES = IMongoEntityConstants.PROFILES;
// internal use only
public static final String SMSCOUNTER = "smscounter";
public static final String SMSLIMIT = "smslimit"; // max number of SMS for user
// ------------------------------------------------------------------------
// Constructor
// ------------------------------------------------------------------------
public MongoUser() {
this.init();
}
public MongoUser(final DBObject object) {
super(object);
}
// ------------------------------------------------------------------------
// p u b l i c
// ------------------------------------------------------------------------
public String getUid() {
return super.getString(UID);
}
public void setUid(String value) {
super.append(UID, value);
}
public String getLang() {
return super.getString(LANG);
}
public void setLang(String value) {
super.append(LANG, value);
}
public String getCountryId() {
return super.getString(COUNTRY_ID);
}
public void setCountryId(String value) {
super.append(COUNTRY_ID, value);
}
public String getUsername() {
return super.getString(USERNAME);
}
public void setUsername(String value) {
super.append(USERNAME, value);
}
public String getPassword() {
return super.getString(PASSWORD);
}
public void setPassword(String value) {
super.append(PASSWORD, value);
}
public String getEmail() {
return super.getString(EMAIL);
}
public void setEmail(String value) {
super.append(EMAIL, value);
}
public String getEmailoffice() {
return super.getString(EMAILOFFICE);
}
public void setEmailoffice(String value) {
super.append(EMAILOFFICE, value);
}
public String getImage() {
return super.getString(IMAGE);
}
public void setImage(String value) {
super.append(IMAGE, value);
}
public String getPhonemobile() {
return super.getString(PHONEMOBILE);
}
public void setPhonemobile(String value) {
super.append(PHONEMOBILE, value);
}
public String getPhonehome() {
return super.getString(PHONEHOME);
}
public void setPhonehome(String value) {
super.append(PHONEHOME, value);
}
public String getPhoneoffice() {
return super.getString(PHONEOFFICE);
}
public void setPhoneoffice(String value) {
super.append(PHONEOFFICE, value);
}
public String getRealname() {
return super.getString(REALNAME);
}
public void setRealname(String value) {
super.append(REALNAME, value);
}
public String getGender() {
return super.getString(GENDER);
}
public void setGender(String value) {
super.append(GENDER, value);
}
public String getBirthdate() {
return super.getString(BIRTHDATE);
}
public void setBirthdate(String value) {
super.append(BIRTHDATE, value);
}
public String getJob() {
return super.getString(JOB);
}
public void setJob(String value) {
super.append(JOB, value);
}
public String getCompany() {
return super.getString(COMPANY);
}
public void setCompany(String value) {
super.append(COMPANY, value);
}
public int getSmscounter() {
return super.getInt(SMSCOUNTER);
}
public void setSmscounter(int value) {
super.append(SMSCOUNTER, value);
}
public int getSmslimit() {
return super.getInt(SMSLIMIT);
}
public void setSmslimit(int value) {
super.append(SMSLIMIT, value);
}
public boolean getEnabled() {
return super.getBoolean(ENABLED);
}
public void setEnabled(boolean value) {
super.append(ENABLED, value);
}
// ------------------------------------------------------------------------
// p r i v a t e
// ------------------------------------------------------------------------
private void init() {
final String id = MongoUtils.createUUID();
this.append(ID, id);
this.append(LANG, IConstants.DEF_LANG);
this.append(UID, id);
this.append(COUNTRY_ID, IConstants.DEF_COUNTRY);
this.append(ENABLED, false);
this.append(REMOVED, false);
this.append(USERNAME, "");
this.append(PASSWORD, "");
this.append(EMAIL, "");
this.append(EMAILOFFICE, "");
this.append(BIRTHDATE, "");
this.append(COMPANY, "");
this.append(GENDER, "");
this.append(IMAGE, "");
this.append(JOB, "");
this.append(PHONEHOME, "");
this.append(PHONEMOBILE, "");
this.append(PHONEOFFICE, "");
this.append(PRODUCTS, "");
this.append(PRODUCT_LINKS, "");
this.append(REALNAME, "");
this.append(VAT, "");
this.append(SMSCOUNTER, "0");
this.append(SMSLIMIT, "-1");
this.append(DISCOUNT, 0.0);
}
// ------------------------------------------------------------------------
// S T A T I C
// ------------------------------------------------------------------------
public static String getId(final DBObject item) {
return MongoUtils.getString(item, IMongoEntityConstants.ID);
}
public static void setId(final DBObject item, final String value) {
MongoUtils.put(item, IMongoEntityConstants.ID, value);
}
public static DBObject getData(final DBObject item) {
return MongoUtils.getDBObject(item, DATA);
}
public static void setData(final DBObject item, final DBObject value) {
MongoUtils.put(item, DATA, value);
}
public static String getUid(final DBObject item) {
return MongoUtils.getString(item, UID);
}
public static void setUid(final DBObject item, final String value) {
MongoUtils.put(item, UID, value);
}
public static boolean getEnabled(final DBObject item) {
return MongoUtils.getBoolean(item, ENABLED);
}
public static void setEnabled(final DBObject item, final boolean value) {
MongoUtils.put(item, ENABLED, value);
}
public static boolean getRemoved(final DBObject item) {
return MongoUtils.getBoolean(item, REMOVED, false);
}
public static void setRemoved(final DBObject item, final boolean value) {
MongoUtils.put(item, REMOVED, value);
}
public static boolean getFindable(final DBObject item) {
return MongoUtils.getBoolean(item, FINDABLE, false);
}
public static void setFindable(final DBObject item, final boolean value) {
MongoUtils.put(item, FINDABLE, value);
}
public static String getEmail(final DBObject item) {
return MongoUtils.getString(item, EMAIL);
}
public static void setEmail(final DBObject item, final String value) {
MongoUtils.put(item, EMAIL, value);
}
public static String getEmailOffice(final DBObject item) {
return MongoUtils.getString(item, EMAILOFFICE);
}
public static void setEmailOffice(final DBObject item, final String value) {
MongoUtils.put(item, EMAILOFFICE, value);
}
public static String getPassword(final DBObject item) {
return MongoUtils.getString(item, PASSWORD);
}
public static void setPassword(final DBObject item, final String value) {
MongoUtils.put(item, PASSWORD, value);
}
public static String getLang(final DBObject item) {
return MongoUtils.getString(item, LANG);
}
public static String getLang(final DBObject item, final String defaultValue) {
return MongoUtils.getString(item, LANG, defaultValue);
}
public static void setLang(final DBObject item, final String value) {
MongoUtils.put(item, LANG, value);
}
public static String getCountryId(final DBObject item) {
final String result = MongoUtils.getString(item, COUNTRY_ID);
return StringUtils.hasText(result)?result:MongoUtils.getString(item, "countryid");
}
public static void setCountryId(final DBObject item, final String value) {
MongoUtils.put(item, COUNTRY_ID, value);
}
public static DBObject getCountry(final DBObject item) {
return MongoUtils.getDBObject(item, COUNTRY);
}
public static void setCountry(final DBObject item, final DBObject value) {
MongoUtils.put(item, COUNTRY, value);
}
public static String getUserName(final DBObject item) {
return MongoUtils.getString(item, USERNAME);
}
public static void setUserName(final DBObject item, final String value) {
MongoUtils.put(item, USERNAME, value);
}
public static String getBirthDate(final DBObject item) {
return MongoUtils.getString(item, BIRTHDATE);
}
public static void setBirthdate(final DBObject item, final String value) {
MongoUtils.put(item, BIRTHDATE, value);
}
public static String getCompnay(final DBObject item) {
return MongoUtils.getString(item, COMPANY);
}
public static void setCompany(final DBObject item, final String value) {
MongoUtils.put(item, COMPANY, value);
}
public static String getGender(final DBObject item) {
return MongoUtils.getString(item, GENDER);
}
public static void setGender(final DBObject item, final String value) {
MongoUtils.put(item, GENDER, value);
}
public static String getImage(final DBObject item) {
return MongoUtils.getString(item, IMAGE);
}
public static void setImage(final DBObject item, final String value) {
MongoUtils.put(item, IMAGE, value);
}
public static String getJob(final DBObject item) {
return MongoUtils.getString(item, JOB);
}
public static void setJob(final DBObject item, final String value) {
MongoUtils.put(item, JOB, value);
}
public static String getPhoneHome(final DBObject item) {
return MongoUtils.getString(item, PHONEHOME);
}
public static void setPhoneHome(final DBObject item, final String value) {
MongoUtils.put(item, PHONEHOME, value);
}
public static String getPhoneMobile(final DBObject item) {
return MongoUtils.getString(item, PHONEMOBILE);
}
public static void setPhoneMobile(final DBObject item, final String value) {
MongoUtils.put(item, PHONEMOBILE, value);
}
public static String getPhoneOffice(final DBObject item) {
return MongoUtils.getString(item, PHONEOFFICE);
}
public static void setPhoneOffice(final DBObject item, final String value) {
MongoUtils.put(item, PHONEOFFICE, value);
}
public static String getRealName(final DBObject item) {
return MongoUtils.getString(item, REALNAME);
}
public static void setRealName(final DBObject item, final String value) {
MongoUtils.put(item, REALNAME, value);
}
public static String getSmsCounter(final DBObject item) {
return MongoUtils.getString(item, SMSCOUNTER);
}
public static void setSmsCounter(final DBObject item, final String value) {
MongoUtils.put(item, SMSCOUNTER, value);
}
public static String getSmsLimit(final DBObject item) {
return MongoUtils.getString(item, SMSLIMIT);
}
public static void setSmsLimit(final DBObject item, final String value) {
MongoUtils.put(item, SMSLIMIT, value);
}
public static double getDiscount(final DBObject item) {
return MongoUtils.getDouble(item, DISCOUNT);
}
public static void setDiscount(final DBObject item, final double value) {
MongoUtils.put(item, DISCOUNT, value);
}
public static String getAtLeastUsername(final DBObject item) {
if (null != item) {
final String id = MongoUtils.getString(item, ID);
final String realname = MongoUtils.getString(item, REALNAME);
final String username = MongoUtils.getString(item, USERNAME);
try {
final String result = StringUtils.hasText(realname)
? realname
: username;
if (!result.startsWith("00")) {
return result;
} else {
return "[Reserved]";
}
} catch (Throwable ignored) {
}
return id + "";
}
return "";
}
public static String getFirstname(final DBObject item) {
final String result = getAtLeastUsername(item);
final String[] tokens = StringUtils.split(result, " ");
if (tokens.length > 0) {
if (tokens.length > 2) {
return tokens[0] + " " + tokens[1];
} else {
return tokens[0];
}
}
return result;
}
public static String getExcerpt(final DBObject item) {
final StringBuilder result = new StringBuilder();
final String id = MongoUtils.getString(item, ID);
final String gender = MongoUtils.getString(item, GENDER);
final String birthdate = MongoUtils.getString(item, BIRTHDATE);
final String emailoffice = MongoUtils.getString(item, EMAILOFFICE);
final String phoneoffice = MongoUtils.getString(item, PHONEOFFICE);
final String company = MongoUtils.getString(item, COMPANY);
final String job = MongoUtils.getString(item, JOB);
// user Name
final String name = getAtLeastUsername(item);
if (StringUtils.hasText(name)) {
StringUtils.append("Username: " + name, result);
} else {
StringUtils.append("User ID: " + id, result);
}
// Gender
if (StringUtils.hasText(gender)) {
StringUtils.append("Gender: " + gender, result);
}
// Birthdate
if (StringUtils.hasText(birthdate)) {
StringUtils.append("Birthdate: " + birthdate, result);
}
// office email
if (StringUtils.hasText(emailoffice)) {
StringUtils.append("EMail Office: " + emailoffice, result);
}
// Phone Office
if (StringUtils.hasText(phoneoffice)) {
StringUtils.append("Phone Office: " + phoneoffice, result);
}
// company
if (StringUtils.hasText(company)) {
StringUtils.append("Company: " + company, result);
}
// job
if (StringUtils.hasText(job)) {
StringUtils.append("Job: " + job, result);
}
return result.toString();
}
public static String getVat(final DBObject item) {
return MongoUtils.getString(item, VAT);
}
public static void setVat(final DBObject item, final String value) {
MongoUtils.put(item, VAT, value);
}
public static MongoAddress getAddressBilling(final DBObject item) {
final DBObject result = MongoUtils.getDBObject(item, ADDRESS_BILLING);
return new MongoAddress(result);
}
public static void setAddressBilling(final DBObject item, final DBObject value) {
MongoUtils.put(item, ADDRESS_BILLING, value);
}
public static MongoAddress getAddressDelivery(final DBObject item) {
final DBObject result = MongoUtils.getDBObject(item, ADDRESS_DELIVERY);
return new MongoAddress(result);
}
public static void setAddressDelivery(final DBObject item, final DBObject value) {
MongoUtils.put(item, ADDRESS_DELIVERY, value);
}
public static List<String> getRoles(final DBObject item) {
return MongoUtils.getList(item, ROLES);
}
public static void setRoles(final DBObject item, final List<String> value) {
MongoUtils.put(item, ROLES, value);
}
public static void setRoles(final DBObject item, final String commasepRoles) {
final String[] roles = StringUtils.split(commasepRoles, ",");
setRoles(item, roles);
}
public static void setRoles(final DBObject item, final String[] roles) {
setRoles(item, CollectionUtils.toList(roles));
}
public static List<DBObject> getProfiles(final DBObject item) {
return MongoUtils.getList(item, PROFILES);
}
public static void setProfiles(final DBObject item, final List<DBObject> value) {
MongoUtils.put(item, PROFILES, value);
}
public static List<String> getProducts(final DBObject item) {
return MongoUtils.getList(item, PRODUCTS);
}
public static void setProducts(final DBObject item, final List<String> value) {
MongoUtils.put(item, PRODUCTS, value);
}
public static List<String> getProductLinks(final DBObject item) {
return MongoUtils.getList(item, PRODUCT_LINKS);
}
public static void setProductLinks(final DBObject item, final List<String> value) {
MongoUtils.put(item, PRODUCT_LINKS, value);
}
}