package org.sigmah.shared.dto; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import org.sigmah.shared.dto.base.AbstractModelDataEntityDTO; import org.sigmah.shared.dto.base.mapping.CustomMappingField; import org.sigmah.shared.dto.base.mapping.IsMappingMode; import org.sigmah.shared.dto.base.mapping.MappingField; import org.sigmah.shared.dto.country.CountryDTO; import org.sigmah.shared.dto.element.DefaultContactFlexibleElementContainer; import org.sigmah.shared.dto.element.FlexibleElementDTO; import org.sigmah.shared.dto.orgunit.OrgUnitDTO; import org.sigmah.shared.dto.referential.ContactModelType; public class ContactDTO extends AbstractModelDataEntityDTO<Integer> implements DefaultContactFlexibleElementContainer { private static final long serialVersionUID = -6688968774985926447L; public static final String ENTITY_NAME = "Contact"; public static final String ID = "id"; public static final String CONTACT_MODEL = "contactModel"; public static final String USER = "user"; public static final String ORGANIZATION = "organization"; public static final String NAME = "name"; public static final String FIRSTNAME = "firstname"; public static final String FULLNAME = "fullname"; public static final String MAIN_ORG_UNIT = "mainOrgUnit"; public static final String SECONDARY_ORG_UNITS = "secondaryOrgUnits"; public static final String LOGIN = "login"; public static final String EMAIL = "email"; public static final String PHONE_NUMBER = "phoneNumber"; public static final String POSTAL_ADDRESS = "postalAddress"; public static final String PHOTO = "photo"; public static final String COUNTRY = "country"; public static final String PARENT = "parent"; public static final String ROOT = "root"; public static final String DATE_CREATED = "dateCreated"; public static final String EMAIL_WITH_FULLNAME = "emailWithFullname"; public static final String TYPE = "type"; public enum Mode implements IsMappingMode { BASIC_INFORMATION(new MappingField(MAIN_ORG_UNIT), new MappingField(SECONDARY_ORG_UNITS), new MappingField(COUNTRY), new MappingField(PARENT), new MappingField(ROOT), new MappingField(CONTACT_MODEL)), // Just take basic information. MAIN_INFORMATION( new CustomMappingField[] { new CustomMappingField(PARENT, Mode.BASIC_INFORMATION) }, new MappingField(MAIN_ORG_UNIT), new MappingField(SECONDARY_ORG_UNITS), new MappingField(COUNTRY), new MappingField(ROOT) ), // Take all data. ALL( new CustomMappingField(MAIN_ORG_UNIT, OrgUnitDTO.Mode.BASE), new CustomMappingField(SECONDARY_ORG_UNITS, OrgUnitDTO.Mode.BASE), new CustomMappingField(PARENT, Mode.BASIC_INFORMATION), new CustomMappingField(ROOT, Mode.BASIC_INFORMATION) ); private final CustomMappingField[] customFields; private final MappingField[] excludedFields; Mode(final MappingField... excludedFields) { this(null, excludedFields); } Mode(final CustomMappingField... customFields) { this(customFields, (MappingField[]) null); } Mode(final CustomMappingField[] customFields, final MappingField... excludedFields) { this.customFields = customFields; this.excludedFields = excludedFields; } @Override public String getMapId() { return name(); } @Override public CustomMappingField[] getCustomFields() { return customFields; } @Override public MappingField[] getExcludedFields() { return excludedFields; } } public Integer getId() { return get(ID); } public void setId(Integer id) { set(ID, id); } public ContactModelDTO getContactModel() { return get(CONTACT_MODEL); } public void setContactModel(ContactModelDTO contactModel) { set(CONTACT_MODEL, contactModel); initType(); } public Integer getUserId() { return get(USER); } public void setUserId(Integer userId) { set(USER, userId); } public Integer getOrganizationId() { return get(ORGANIZATION); } public void setOrganizationId(Integer organizationId) { set(ORGANIZATION, organizationId); } public String getName() { return get(NAME); } public void setName(String name) { set(NAME, name); initFullName(); } public String getFirstname() { return get(FIRSTNAME); } public void setFirstname(String firstname) { set(FIRSTNAME, firstname); initFullName(); } public void initFullName() { String firstname = getFirstname(); String name = getName(); if (firstname == null && name == null) { return; } if (firstname == null) { set(FULLNAME, name.toUpperCase()); return; } if (name == null) { set(FULLNAME, firstname); return; } set(FULLNAME, firstname + " " + name.toUpperCase()); initEmailWithFullname(); } public String getFullName() { return get(FULLNAME); } public OrgUnitDTO getMainOrgUnit() { return get(MAIN_ORG_UNIT); } public void setMainOrgUnit(OrgUnitDTO mainOrgUnit) { set(MAIN_ORG_UNIT, mainOrgUnit); } public List<OrgUnitDTO> getSecondaryOrgUnits() { return get(SECONDARY_ORG_UNITS); } public void setSecondaryOrgUnits(List<OrgUnitDTO> secondaryOrgUnits) { set(SECONDARY_ORG_UNITS, secondaryOrgUnits); } public Set<Integer> getOrgUnitIds() { HashSet<Integer> ids = new HashSet<Integer>(); ids.add(getMainOrgUnit().getId()); for (OrgUnitDTO orgUnitDTO : getSecondaryOrgUnits()) { ids.add(orgUnitDTO.getId()); } return ids; } public String getLogin() { return get(LOGIN); } public void setLogin(String login) { set(LOGIN, login); } public String getEmail() { return get(EMAIL); } public void setEmail(String email) { set(EMAIL, email); initEmailWithFullname(); } public String getPhoneNumber() { return get(PHONE_NUMBER); } public void setPhoneNumber(String phoneNumber) { set(PHONE_NUMBER, phoneNumber); } public String getPostalAddress() { return get(POSTAL_ADDRESS); } public void setPostalAddress(String postalAddress) { set(POSTAL_ADDRESS, postalAddress); } public String getPhoto() { return get(PHOTO); } public void setPhoto(String photo) { set(PHOTO, photo); } public CountryDTO getCountry() { return get(COUNTRY); } public void setCountry(CountryDTO country) { set(COUNTRY, country); } public ContactDTO getParent() { return get(PARENT); } public void setParent(ContactDTO parent) { set(PARENT, parent); } public ContactDTO getRoot() { return get(ROOT); } public void setRoot(ContactDTO root) { set(ROOT, root); } public Date getDateCreated() { return get(DATE_CREATED); } public void setDateCreated(Date dateCreated) { set(DATE_CREATED, dateCreated); } @Override public String getEntityName() { return ENTITY_NAME; } @Override public String getFamilyName() { return getName(); } @Override public String getOrganizationName() { return getName(); } public String getEmailWithFullname() { return get(EMAIL_WITH_FULLNAME); } public void initEmailWithFullname() { String fullName = getFullName(); String email = getEmail(); if (fullName == null || fullName.isEmpty()) { set(EMAIL_WITH_FULLNAME, email); } set(EMAIL_WITH_FULLNAME, email + " (" + fullName + ")"); } public ContactModelType getType() { return get(TYPE); } public void initType() { ContactModelDTO model = getContactModel(); ContactModelType type = model.getType(); set(TYPE, type); } /** * Gets all the flexible elements instances of the given class in this organizational unit (details page). The banner * is ignored because the elements in it are read-only. * * @param clazz * The class of the searched flexible elements. * @return The elements localized for the given class, or <code>null</code> if there is no element of this class. */ public List<LocalizedElement> getLocalizedElements(Class<? extends FlexibleElementDTO> clazz) { final ArrayList<LocalizedElement> elements = new ArrayList<LocalizedElement>(); final List<ContactModelDTO.LocalizedElement> localizedElements = getContactModel().getLocalizedElements(clazz); if (localizedElements != null) { for (final ContactModelDTO.LocalizedElement localized : localizedElements) { elements.add(new LocalizedElement(localized)); } } return elements; } public static final class LocalizedElement extends OrgUnitModelDTO.LocalizedElement { public LocalizedElement(ContactModelDTO.LocalizedElement localized) { super(localized.getElement()); } } }