org.obm.provisioning.json.ObmUserJsonSerializer.java Source code

Java tutorial

Introduction

Here is the source code for org.obm.provisioning.json.ObmUserJsonSerializer.java

Source

/* ***** BEGIN LICENSE BLOCK *****
 *
 * Copyright (C) 2011-2014  Linagora
 *
 * This program is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version, provided you comply
 * with the Additional Terms applicable for OBM connector by Linagora
 * pursuant to Section 7 of the GNU Affero General Public License,
 * subsections (b), (c), and (e), pursuant to which you must notably (i) retain
 * the Message sent thanks to OBM, Free Communication by Linagora?
 * signature notice appended to any and all outbound messages
 * (notably e-mail and meeting requests), (ii) retain all hypertext links between
 * OBM and obm.org, as well as between Linagora and linagora.com, and (iii) refrain
 * from infringing Linagora intellectual property rights over its trademarks
 * and commercial brands. Other Additional Terms apply,
 * see <http://www.linagora.com/licenses/> for more details.
 *
 * 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 Affero General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * and its applicable Additional Terms for OBM along with this program. If not,
 * see <http://www.gnu.org/licenses/> for the GNU Affero General Public License version 3
 * and <http://www.linagora.com/licenses/> for the Additional Terms applicable to
 * OBM connectors.
 *
 * ***** END LICENSE BLOCK ***** */
package org.obm.provisioning.json;

import static org.obm.provisioning.bean.UserJsonFields.ADDRESSES;
import static org.obm.provisioning.bean.UserJsonFields.ARCHIVED;
import static org.obm.provisioning.bean.UserJsonFields.BUSINESS_ZIPCODE;
import static org.obm.provisioning.bean.UserJsonFields.COMMONNAME;
import static org.obm.provisioning.bean.UserJsonFields.COMPANY;
import static org.obm.provisioning.bean.UserJsonFields.COUNTRY;
import static org.obm.provisioning.bean.UserJsonFields.DESCRIPTION;
import static org.obm.provisioning.bean.UserJsonFields.DIRECTION;
import static org.obm.provisioning.bean.UserJsonFields.EFFECTIVEMAILS;
import static org.obm.provisioning.bean.UserJsonFields.FAXES;
import static org.obm.provisioning.bean.UserJsonFields.FIRSTNAME;
import static org.obm.provisioning.bean.UserJsonFields.GROUPS;
import static org.obm.provisioning.bean.UserJsonFields.HIDDEN;
import static org.obm.provisioning.bean.UserJsonFields.ID;
import static org.obm.provisioning.bean.UserJsonFields.KIND;
import static org.obm.provisioning.bean.UserJsonFields.LASTNAME;
import static org.obm.provisioning.bean.UserJsonFields.LOGIN;
import static org.obm.provisioning.bean.UserJsonFields.MAILS;
import static org.obm.provisioning.bean.UserJsonFields.MAIL_QUOTA;
import static org.obm.provisioning.bean.UserJsonFields.MAIL_SERVER;
import static org.obm.provisioning.bean.UserJsonFields.MOBILE;
import static org.obm.provisioning.bean.UserJsonFields.PASSWORD;
import static org.obm.provisioning.bean.UserJsonFields.PHONES;
import static org.obm.provisioning.bean.UserJsonFields.PROFILE;
import static org.obm.provisioning.bean.UserJsonFields.SERVICE;
import static org.obm.provisioning.bean.UserJsonFields.TIMECREATE;
import static org.obm.provisioning.bean.UserJsonFields.TIMEUPDATE;
import static org.obm.provisioning.bean.UserJsonFields.TITLE;
import static org.obm.provisioning.bean.UserJsonFields.TOWN;
import static org.obm.provisioning.bean.UserJsonFields.ZIPCODE;

import java.io.IOException;
import java.util.Set;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import org.obm.provisioning.Group;
import org.obm.provisioning.bean.GroupIdentifier;
import org.obm.provisioning.utils.SerializationUtils;
import org.obm.sync.host.ObmHost;

import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;

import fr.aliacom.obm.common.domain.ObmDomain;
import fr.aliacom.obm.common.user.ObmUser;

public class ObmUserJsonSerializer extends JsonSerializer<ObmUser> {

    @Override
    public void serialize(ObmUser value, JsonGenerator jgen, SerializerProvider provider)
            throws IOException, JsonProcessingException {

        jgen.writeStartObject();
        jgen.writeObjectField(ID.asSpecificationValue(), value.getExtId());
        jgen.writeStringField(LOGIN.asSpecificationValue(), value.getLogin());
        jgen.writeStringField(LASTNAME.asSpecificationValue(), value.getLastName());
        jgen.writeStringField(PROFILE.asSpecificationValue(),
                value.getProfileName() != null ? value.getProfileName().getName() : null);
        jgen.writeStringField(FIRSTNAME.asSpecificationValue(), value.getFirstName());
        jgen.writeStringField(COMMONNAME.asSpecificationValue(), value.getCommonName());
        jgen.writeStringField(PASSWORD.asSpecificationValue(), value.getPassword());
        jgen.writeStringField(KIND.asSpecificationValue(), value.getKind());
        jgen.writeStringField(TITLE.asSpecificationValue(), value.getTitle());
        jgen.writeStringField(DESCRIPTION.asSpecificationValue(), value.getDescription());
        jgen.writeStringField(COMPANY.asSpecificationValue(), value.getCompany());
        jgen.writeStringField(SERVICE.asSpecificationValue(), value.getService());
        jgen.writeStringField(DIRECTION.asSpecificationValue(), value.getDirection());
        writeObjectsField(jgen, ADDRESSES.asSpecificationValue(), value.getAddress1(), value.getAddress2(),
                value.getAddress3());
        jgen.writeStringField(TOWN.asSpecificationValue(), value.getTown());
        jgen.writeStringField(ZIPCODE.asSpecificationValue(), value.getZipCode());
        jgen.writeStringField(BUSINESS_ZIPCODE.asSpecificationValue(), value.getExpresspostal());
        jgen.writeStringField(COUNTRY.asSpecificationValue(), value.getCountryCode());
        writeObjectsField(jgen, PHONES.asSpecificationValue(), value.getPhone(), value.getPhone2());
        jgen.writeStringField(MOBILE.asSpecificationValue(), value.getMobile());
        writeObjectsField(jgen, FAXES.asSpecificationValue(), value.getFax(), value.getFax2());
        jgen.writeBooleanField(ARCHIVED.asSpecificationValue(), value.isArchived());
        jgen.writeStringField(MAIL_QUOTA.asSpecificationValue(),
                String.valueOf(Objects.firstNonNull(value.getMailQuota(), 0)));
        jgen.writeStringField(MAIL_SERVER.asSpecificationValue(), getMailHostName(value));
        jgen.writeObjectField(MAILS.asSpecificationValue(),
                SerializationUtils.serializeUserEmailAddresses(value.getUserEmails()));
        jgen.writeObjectField(EFFECTIVEMAILS.asSpecificationValue(),
                Iterables.toArray(value.expandAllEmailDomainTuples(), String.class));
        jgen.writeBooleanField(HIDDEN.asSpecificationValue(), value.isHidden());
        jgen.writeObjectField(TIMECREATE.asSpecificationValue(), value.getTimeCreate());
        jgen.writeObjectField(TIMEUPDATE.asSpecificationValue(), value.getTimeUpdate());
        jgen.writeObjectField(GROUPS.asSpecificationValue(),
                extractGroupIdentifiers(value.getGroups(), value.getDomain()));
        jgen.writeEndObject();
    }

    private String getMailHostName(ObmUser user) {
        ObmHost host = user.getMailHost();

        return host != null ? host.getName() : null;
    }

    private void writeObjectsField(JsonGenerator jgen, String fieldName, Object... values)
            throws JsonGenerationException, IOException {
        jgen.writeFieldName(fieldName);
        jgen.writeStartArray();
        for (Object value : values) {
            if (value != null) {
                jgen.writeObject(value);
            }
        }
        jgen.writeEndArray();
    }

    private Set<GroupIdentifier> extractGroupIdentifiers(Set<Group> groups, ObmDomain domain) {
        if (groups == null) {
            return ImmutableSet.of();
        }

        Set<GroupIdentifier> identifiers = Sets.newHashSet();
        for (Group group : groups) {
            GroupIdentifier identifier = GroupIdentifier.builder().id(group.getExtId()).domainUuid(domain.getUuid())
                    .build();
            identifiers.add(identifier);
        }

        return identifiers;
    }
}