Package org.eurekastreams.server.action.execution

Source Code of org.eurekastreams.server.action.execution.UpdatePersonExecution

/*
* Copyright (c) 2010-2011 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.server.action.execution;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.eurekastreams.commons.actions.TaskHandlerExecutionStrategy;
import org.eurekastreams.commons.actions.context.PrincipalActionContext;
import org.eurekastreams.commons.actions.context.TaskHandlerActionContext;
import org.eurekastreams.commons.exceptions.ExecutionException;
import org.eurekastreams.commons.logging.LogFactory;
import org.eurekastreams.server.domain.Background;
import org.eurekastreams.server.domain.BackgroundItem;
import org.eurekastreams.server.domain.BackgroundItemType;
import org.eurekastreams.server.domain.Person;
import org.eurekastreams.server.persistence.BackgroundMapper;
import org.eurekastreams.server.persistence.PersonMapper;
import org.eurekastreams.server.persistence.mappers.DomainMapper;
import org.eurekastreams.server.persistence.mappers.cache.CacheKeys;
import org.eurekastreams.server.search.modelview.PersonModelView;

import edu.emory.mathcs.backport.java.util.Collections;

/**
* This class updates a person object based on the Map of fields that come in and match the properties of the Person
* object.
*
*/
public class UpdatePersonExecution implements TaskHandlerExecutionStrategy<PrincipalActionContext>
{
    /**
     * Logger.
     */
    private final Log log = LogFactory.make();

    /**
     * Person mapper.
     */
    private final PersonMapper personMapper;

    /**
     * Background mapper.
     */
    private final BackgroundMapper backgroundMapper;

    /**
     * Persist Resource Execution strategy configured for a person.
     */
    private final TaskHandlerExecutionStrategy personPersister;

    /**
     * DAO for deleting cache keys.
     */
    private DomainMapper<Set<String>, Boolean> deleteCacheKeyDAO;

    /**
     * Constructor.
     *
     * @param inPersonMapper
     *            - instance of {@link PersonMapper} for this execution strategy.
     * @param inPersonPersister
     *            - instance of {@link PersistResourceExecution} for a Person.
     * @param inBackgroundMapper
     *            - instance of {@link BackgroundMapper} for this execution strategy.
     * @param inDeleteCacheKeyDAO
     *            DAO for deleting cache keys.
     */
    public UpdatePersonExecution(final PersonMapper inPersonMapper,
            final TaskHandlerExecutionStrategy inPersonPersister, final BackgroundMapper inBackgroundMapper,
            final DomainMapper<Set<String>, Boolean> inDeleteCacheKeyDAO)
    {
        personMapper = inPersonMapper;
        personPersister = inPersonPersister;
        backgroundMapper = inBackgroundMapper;
        deleteCacheKeyDAO = inDeleteCacheKeyDAO;
    }

    /**
     * {@inheritDoc}.
     *
     * This method updates the person object with the data from the form.
     */
    @Override
    // TODO: This is a weird mix of wrapping PersistResourceAction with another execution strategy and they are
    // each fiddling with the update in different ways. This needs to be refactored. It's at best non-standard
    // and error-prone in it's current state.
    public Serializable execute(final TaskHandlerActionContext<PrincipalActionContext> inActionContext)
            throws ExecutionException
    {
        Map<String, Serializable> fields = (Map<String, Serializable>) inActionContext.getActionContext().getParams();
        fields.remove("isAdministrator");
        fields.remove(PersonModelView.CELLPHONE_KEY);
        fields.remove(PersonModelView.FAX_KEY);

        log.debug("Updating person with fields: " + fields.keySet());

        Person person = (Person) personPersister.execute(inActionContext);

        List<BackgroundItem> skills = convertStringToBackgroundItems((String) fields.get(PersonModelView.SKILLS_KEY),
                BackgroundItemType.SKILL);

        Background background = backgroundMapper.findOrCreatePersonBackground(person.getOpenSocialId());
        background.setBackgroundItems(skills, BackgroundItemType.SKILL);

        personMapper.flush();
        deleteCacheKeyDAO.execute(Collections.singleton(CacheKeys.PERSON_BY_ID + person.getId()));

        return person;
    }

    /**
     * Converts a String of comma separated elements to a list of background items.
     *
     * @param bgItems
     *            String of Background Items.
     * @param type
     *            Type of Background Item.
     * @return List of Background Items.
     */
    private List<BackgroundItem> convertStringToBackgroundItems(final String bgItems, final BackgroundItemType type)
    {
        ArrayList<BackgroundItem> results = new ArrayList<BackgroundItem>();

        String[] bgItemsArray = bgItems.split(",");

        for (String bgItem : bgItemsArray)
        {
            if (!bgItem.trim().isEmpty())
            {
                results.add(new BackgroundItem(bgItem.trim(), type));
            }
        }

        return results;

    }
}
TOP

Related Classes of org.eurekastreams.server.action.execution.UpdatePersonExecution

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.