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.List;
import org.sigmah.client.util.ClientUtils;
import org.sigmah.client.util.ToStringBuilder;
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.orgunit.OrgUnitDTO;
import org.sigmah.shared.dto.profile.ProfileDTO;
/**
* One-to-one DTO of the {@link org.sigmah.server.domain.User} domain class.
*
* @author nrebiai (v1.3)
* @author Denis Colliot (dcolliot@ideia.fr) (v2.0)
*/
public class UserDTO extends AbstractModelDataEntityDTO<Integer> {
/**
* Serial version UID.
*/
private static final long serialVersionUID = 5865780039352557006L;
/**
* DTO corresponding entity name.
*/
public static final String ENTITY_NAME = "User";
// DTO attributes keys.
public static final String NAME = "name";
public static final String EMAIL = "email";
public static final String FIRST_NAME = "firstName";
public static final String COMPLETE_NAME = "cname";
public static final String LOCALE = "locale";
public static final String ACTIVE = "active";
public static final String PWD_CHANGE_KEY = "pwdChangeKey";
public static final String PWD_CHANGE_DATE = "pwdChangeDate";
public static final String IDD = "idd";
// Manual mapping keys.
public static final String MAIN_ORG_UNIT = "mainOrgUnit";
public static final String SECONDARY_ORG_UNITS = "secondaryOrgUnits";
public static final String PROFILES = "profiles";
public static final String USER_UNITS = "userUnits";
public static final String CONTACT = "contact";
public static final String CONTACT_ORGANIZATION = "contactOrganization";
public static final String CONTACT_MODEL = "contactModel";
// Service properties keys.
public static final String PASSWORD = "pwd";
// Custom field names.
private static final String CUSTOM_FIELD_MAIN_ORG_UNIT = MappingField.n("mainOrgUnitWithProfiles", "orgUnit");
private static final String CUSTOM_FIELD_SECONDARY_ORG_UNITS = MappingField.n("secondaryOrgUnits");
private static final String CUSTOM_FIELD_PROFILES = MappingField.n("mainOrgUnitWithProfiles", "profiles");
/**
* Mapping configurations.
*
* @author Denis Colliot (dcolliot@ideia.fr)
*/
public static enum Mode implements IsMappingMode {
/**
* Maps the user's orgUnit with {@link OrgUnitDTO.Mode#BASE} mode.
*/
WITH_BASE_ORG_UNIT(
new CustomMappingField(CUSTOM_FIELD_MAIN_ORG_UNIT, MAIN_ORG_UNIT, OrgUnitDTO.Mode.BASE),
new CustomMappingField(SECONDARY_ORG_UNITS, SECONDARY_ORG_UNITS, OrgUnitDTO.Mode.BASE)
),
/**
* Maps the user's profile(s) with {@link ProfileDTO.Mode#BASE} mode.
*/
WITH_BASE_PROFILES(new CustomMappingField(CUSTOM_FIELD_PROFILES, PROFILES, ProfileDTO.Mode.BASE)),
/**
* Maps the user's profile(s) with full mode.
*/
WITH_FULL_PROFILES(new CustomMappingField(CUSTOM_FIELD_PROFILES, PROFILES)),
/**
* Maps the user's orgUnit with {@link OrgUnitDTO.Mode#BASE} mode <b>and</b> the user's profile(s) with
* {@link ProfileDTO.Mode#BASE} mode.
*/
WITH_BASE_ORG_UNIT_AND_BASE_PROFILES(
new CustomMappingField(CUSTOM_FIELD_MAIN_ORG_UNIT, MAIN_ORG_UNIT, OrgUnitDTO.Mode.BASE),
new CustomMappingField(SECONDARY_ORG_UNITS, SECONDARY_ORG_UNITS, OrgUnitDTO.Mode.BASE),
new CustomMappingField(CUSTOM_FIELD_PROFILES, PROFILES, ProfileDTO.Mode.BASE)
),
;
private final CustomMappingField[] customFields;
private final MappingField[] excludedFields;
private Mode(final MappingField... excludedFields) {
this(null, excludedFields);
}
private Mode(final CustomMappingField... customFields) {
this(customFields, (MappingField[]) null);
}
private Mode(final CustomMappingField[] customFields, final MappingField... excludedFields) {
this.customFields = customFields;
this.excludedFields = excludedFields;
}
/**
* {@inheritDoc}
*/
@Override
public String getMapId() {
return name();
}
/**
* {@inheritDoc}
*/
@Override
public CustomMappingField[] getCustomFields() {
return customFields;
}
/**
* {@inheritDoc}
*/
@Override
public MappingField[] getExcludedFields() {
return excludedFields;
}
}
/**
* {@inheritDoc}
*/
@Override
protected void appendToString(final ToStringBuilder builder) {
builder.append(NAME, getName());
builder.append(FIRST_NAME, getFirstName());
builder.append(COMPLETE_NAME, getCompleteName());
builder.append(EMAIL, getEmail());
builder.append(LOCALE, getLocale());
builder.append(PWD_CHANGE_KEY, getChangePasswordKey());
builder.append(PWD_CHANGE_DATE, getDateChangePasswordKeyIssued());
builder.append(ACTIVE, getActive());
}
/**
* {@inheritDoc}
*/
@Override
public String getEntityName() {
return ENTITY_NAME;
}
public String getName() {
return get(NAME);
}
public void setName(String name) {
set(NAME, name);
}
public String getEmail() {
return get(EMAIL);
}
public void setEmail(String email) {
set(EMAIL, email);
}
public String getFirstName() {
return get(FIRST_NAME);
}
public void setFirstName(String firstName) {
set(FIRST_NAME, firstName);
}
public String getLocale() {
return get(LOCALE);
}
public void setLocale(String locale) {
set(LOCALE, locale);
}
public String getChangePasswordKey() {
return get(PWD_CHANGE_KEY);
}
public void setChangePasswordKey(String pwdChangeKey) {
set(PWD_CHANGE_KEY, pwdChangeKey);
}
public Date getDateChangePasswordKeyIssued() {
return get(PWD_CHANGE_DATE);
}
public void setDateChangePasswordKeyIssued(Date pwdChangeDate) {
set(PWD_CHANGE_DATE, pwdChangeDate);
}
public String getCompleteName() {
return get(COMPLETE_NAME);
}
public void setCompleteName(String cname) {
set(COMPLETE_NAME, cname);
}
public void setIdd(int id) {
set(IDD, id);
}
public int getIdd() {
return (Integer) get(IDD);
}
public void setActive(boolean active) {
set(ACTIVE, active);
}
public boolean getActive() {
return ClientUtils.isTrue(get(ACTIVE));
}
public ContactDTO getContact() {
return get(CONTACT);
}
public void setContact(ContactDTO contact) {
set(CONTACT, contact);
}
public OrgUnitDTO getMainOrgUnit() {
return get(MAIN_ORG_UNIT);
}
public void setMainOrgUnit(OrgUnitDTO orgUnit) {
set(MAIN_ORG_UNIT, orgUnit);
}
public List<OrgUnitDTO> getSecondaryOrgUnits() {
return get(SECONDARY_ORG_UNITS);
}
public void setSecondaryOrgUnits(List<OrgUnitDTO> orgUnits) {
set(SECONDARY_ORG_UNITS, orgUnits);
}
public List<OrgUnitDTO> getOrgUnits() {
List<OrgUnitDTO> orgUnitDTOs = new ArrayList<OrgUnitDTO>();
orgUnitDTOs.add(getMainOrgUnit());
orgUnitDTOs.addAll(getSecondaryOrgUnits());
return orgUnitDTOs;
}
public List<ProfileDTO> getProfiles() {
return get(PROFILES);
}
public void setProfiles(List<ProfileDTO> profiles) {
set(PROFILES, profiles);
}
public void generateCompleteName() {
String completeName = getFirstName() != null ? getFirstName() + " " + getName() : getName();
setCompleteName(completeName);
}
}