@Override
protected ObjectDescription<User> describeObject(final User obj) {
// todo: describe user content actions
final ObjectDescriber<User> describer = this;
TimeZone timeZone = obj.getTimeZone();
return super.describeObject(obj).addValue("Name", obj.getName()).addValue("First Name", obj.getFirstName()).addValue("Last Name", obj.getLastName()).addValue("Link", obj.getLink()).addValue("About", obj.getAbout()).
addValue("Birthday", obj.getBirthday()). addValue("Work", getWorkDescriber().describeList(obj.getWork())).addValue("Education", getEducationDescriber().describeList(obj.getEducation())).addValue("Email", obj.getEmail()).
addValue("Website", obj.getWebsite()). addValue("Location", getLocationDescriber().describe(obj.getLocation())).addValue("Biography", obj.getBiography()).addValue("Quotes", obj.getQuotes()).addValue("Gender", obj.getGender()).
addValue("Interested in", obj.getInterestedIn()).addValue("Seeking", obj.getSeeking()).addValue("Religion", obj.getReligion()).addValue("Political Affiliation", obj.getPoliticalAffiliation()).
addValue("Verified", obj.isVerified()).addValue("Significant Other", describe(obj.getSignificantOther())).addValue("Time Zone", timeZone != null ? timeZone.getID() : null).addValue("Third-Party ID", obj.getThirdPartyID()).
addValue("Locale", obj.getLocale()).addValue("Address", getAddressDescriber().describe(obj.getAddress())).addValue("Mobile Phone", obj.getMobilePhone()).addValue("Relationship Status", obj.getRelationshipStatus()).
addValue("Languages", getLanguageDescriber().describeList(obj.getLanguages())).addValue("Updated Time", obj.getUpdatedTime()).
addAction("Home Feed", new AbstractAction<User, List<ObjectDescription<Post>>>() {
@Override
public void execute(final User obj, final String param, final AsyncCallback<List<ObjectDescription<Post>>> callback) {