/** * Copyright (C) 2012 BonitaSoft S.A. * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble * 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 2.0 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/>. */ package org.bonitasoft.web.rest.server.datastore.organization; import java.util.Map; import org.bonitasoft.engine.api.TenantAPIAccessor; import org.bonitasoft.engine.exception.NotFoundException; import org.bonitasoft.engine.identity.ContactData; import org.bonitasoft.engine.identity.ContactDataUpdater; import org.bonitasoft.engine.identity.UserUpdater; import org.bonitasoft.engine.session.APISession; import org.bonitasoft.engine.session.InvalidSessionException; import org.bonitasoft.web.rest.model.identity.ProfessionalContactDataItem; import org.bonitasoft.web.rest.server.datastore.CommonDatastore; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasAdd; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasGet; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasUpdate; import org.bonitasoft.web.toolkit.client.common.exception.api.APIException; import org.bonitasoft.web.toolkit.client.common.exception.api.APISessionInvalidException; import org.bonitasoft.web.toolkit.client.data.APIID; /** * @author Paul AMAR * */ public class ProfessionalContactDataDatastore extends CommonDatastore<ProfessionalContactDataItem, ContactData> implements DatastoreHasGet<ProfessionalContactDataItem>, DatastoreHasUpdate<ProfessionalContactDataItem>, DatastoreHasAdd<ProfessionalContactDataItem> { public ProfessionalContactDataDatastore(final APISession engineSession) { super(engineSession); } @Override public ProfessionalContactDataItem get(final APIID id) { try { // Hard-coded at true because we want to retrieve ContactData final ContactData result = TenantAPIAccessor.getIdentityAPI(getEngineSession()) .getUserContactData(id.toLong(), false); return createContactDataItemConverter(id).convert(result); } catch (final NotFoundException e) { return null; } catch (final InvalidSessionException e) { throw new APISessionInvalidException(e); } catch (final Exception e) { throw new APIException(e); } } @Override public ProfessionalContactDataItem update(final APIID id, final Map<String, String> attributes) { try { final ContactDataUpdater professionalDataUpdater = new ContactDataUpdater(); if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_EMAIL)) { professionalDataUpdater.setEmail(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_EMAIL)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_PHONE)) { professionalDataUpdater.setPhoneNumber(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_PHONE)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_MOBILE)) { professionalDataUpdater.setMobileNumber(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_MOBILE)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_FAX)) { professionalDataUpdater.setFaxNumber(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_FAX)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_BUILDING)) { professionalDataUpdater.setBuilding(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_BUILDING)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_ROOM)) { professionalDataUpdater.setRoom(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_ROOM)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_ADDRESS)) { professionalDataUpdater.setAddress(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_ADDRESS)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_ZIPCODE)) { professionalDataUpdater.setZipCode(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_ZIPCODE)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_CITY)) { professionalDataUpdater.setCity(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_CITY)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_STATE)) { professionalDataUpdater.setState(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_STATE)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_COUNTRY)) { professionalDataUpdater.setCountry(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_COUNTRY)); } if (attributes.containsKey(ProfessionalContactDataItem.ATTRIBUTE_WEBSITE)) { professionalDataUpdater.setWebsite(attributes.get(ProfessionalContactDataItem.ATTRIBUTE_WEBSITE)); } UserUpdater userUpdater = new UserUpdater() .setProfessionalContactData(professionalDataUpdater) // TODO remove once handle by engine .setPersonalContactData(new ContactDataUpdater()); TenantAPIAccessor.getIdentityAPI(getEngineSession()).updateUser(id.toLong(), userUpdater); return get(id); } catch (final InvalidSessionException e) { throw new APISessionInvalidException(e); } catch (final Exception e) { throw new APIException(e); } } @Override public ProfessionalContactDataItem add(final ProfessionalContactDataItem item) { return update(item.getId(), item.getAttributes()); } @Override protected ProfessionalContactDataItem convertEngineToConsoleItem(ContactData item) { throw new RuntimeException("Use ContactDataConverter instead!"); } private ContactDataConverter<ProfessionalContactDataItem> createContactDataItemConverter(final APIID id) { return new ContactDataConverter<ProfessionalContactDataItem>() { @Override public ProfessionalContactDataItem createContactDataItem() { return new ProfessionalContactDataItem(); } @Override public void setContactId(ProfessionalContactDataItem contactData) { contactData.setId(id); } }; } }