org.betaconceptframework.astroboa.console.jsf.edit.MultipleSimpleCmsPropertyWrapper.java Source code

Java tutorial

Introduction

Here is the source code for org.betaconceptframework.astroboa.console.jsf.edit.MultipleSimpleCmsPropertyWrapper.java

Source

/*
 * Copyright (C) 2005-2012 BetaCONCEPT Limited
 *
 * This file is part of Astroboa.
 *
 * Astroboa is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Astroboa 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Astroboa.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.betaconceptframework.astroboa.console.jsf.edit;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.faces.application.FacesMessage;

import org.apache.commons.collections.CollectionUtils;
import org.betaconceptframework.astroboa.api.model.ContentObject;
import org.betaconceptframework.astroboa.api.model.SimpleCmsProperty;
import org.betaconceptframework.astroboa.api.model.definition.CmsPropertyDefinition;
import org.betaconceptframework.astroboa.model.factory.CmsRepositoryEntityFactory;
import org.betaconceptframework.ui.jsf.utility.JSFUtilities;
import org.richfaces.event.DropEvent;

/**
 * @author Gregory Chomatas (gchomatas@betaconcept.com)
 * @author Savvas Triantafyllou (striantafyllou@betaconcept.com)
 * 
 */
public abstract class MultipleSimpleCmsPropertyWrapper<T extends SimpleCmsProperty<?, ?, ?>>
        extends CmsPropertyWrapper<T> {

    protected List<SimpleCmsPropertyValueWrapper> simpleCmsPropertyValueWrappers = new ArrayList<SimpleCmsPropertyValueWrapper>();

    public MultipleSimpleCmsPropertyWrapper(CmsPropertyDefinition cmsPropertyDefinition,
            String parentCmsPropertyPath, CmsRepositoryEntityFactory cmsRepositoryEntityFactory,
            ContentObject contentObject, int wrapperIndex, ComplexCmsPropertyEdit complexCmsPropertyEdit) {
        super(cmsPropertyDefinition, parentCmsPropertyPath, cmsRepositoryEntityFactory, contentObject, wrapperIndex,
                complexCmsPropertyEdit);
    }

    private void swapPropertyValuePositions(Integer fromIndex, Integer toIndex) {

        if (CollectionUtils.isEmpty(simpleCmsPropertyValueWrappers)) {
            logger.error("List of values is empty. This method should never be invoked when value list is empty");
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        if (cmsProperty.swapValues(fromIndex, toIndex)) {

            SimpleCmsPropertyValueWrapper fromSimpleCmsPropertyValueWrapper = simpleCmsPropertyValueWrappers
                    .get(fromIndex);
            SimpleCmsPropertyValueWrapper toSimpleCmsPropertyValueWrapper = simpleCmsPropertyValueWrappers
                    .get(toIndex);

            fromSimpleCmsPropertyValueWrapper.changeIndex(toIndex);
            toSimpleCmsPropertyValueWrapper.changeIndex(fromIndex);

            Collections.swap(simpleCmsPropertyValueWrappers, fromIndex, toIndex);
        } else {
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
        }
    }

    private void changePropertyValuePosition(Integer fromIndex, Integer toIndex) {

        if (CollectionUtils.isEmpty(simpleCmsPropertyValueWrappers)) {
            logger.error("List of values is empty. This method should never be invoked when value list is empty");
            JSFUtilities.addMessage(null, "object.edit.changePropertyValuePosition.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        if (cmsProperty.changePositionOfValue(fromIndex, toIndex)) {

            simpleCmsPropertyValueWrappers.add(toIndex, simpleCmsPropertyValueWrappers.get(fromIndex));
            if (fromIndex > toIndex) {
                fromIndex++;
            }
            simpleCmsPropertyValueWrappers.remove(fromIndex.intValue());

            int index = 0;
            for (SimpleCmsPropertyValueWrapper simpleCmsPropertyValueWrapper : simpleCmsPropertyValueWrappers) {
                simpleCmsPropertyValueWrapper.changeIndex(index);
                ++index;
            }
        } else {
            JSFUtilities.addMessage(null, "object.edit.changePropertyValuePosition.failed", null,
                    FacesMessage.SEVERITY_WARN);
        }
    }

    public void addDraggedAndDroppedReference_Listener(DropEvent dropEvent) {
        // add the wrapper index to the list of wrappers that should be updated by the UI
        complexCmsPropertyEdit.setWrapperIndexesToUpdate(Collections.singleton(wrapperIndex));

        Integer fromIndex = (Integer) dropEvent.getDragValue();

        Integer toIndex = (Integer) dropEvent.getDropValue();

        if (fromIndex == null || toIndex == null || fromIndex < 0 || toIndex < 0) {
            logger.warn("Cannot drag value from {} to {}", fromIndex, toIndex);
            JSFUtilities.addMessage(null, "object.edit.changePropertyValuePosition.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        if (fromIndex.equals(toIndex)) {
            return;
        }

        logger.debug("Moving value  from index " + fromIndex + " to index " + toIndex);

        changePropertyValuePosition(fromIndex, toIndex);

    }

    public void moveUp_UIAction(SimpleCmsPropertyValueWrapper simpleCmsPropertyValueWrapper) {

        if (simpleCmsPropertyValueWrapper == null) {
            logger.warn("No value provided to move");
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        if (CollectionUtils.isEmpty(simpleCmsPropertyValueWrappers)) {
            logger.error("List of values is empty. This method should never be invoked when value list is empty");
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        int valueIndexInList = simpleCmsPropertyValueWrappers.indexOf(simpleCmsPropertyValueWrapper);
        if (valueIndexInList == -1) {
            logger.error("List of values does not contain value {}",
                    simpleCmsPropertyValueWrapper.getSimpleCmsPropertyLocalizedLabelOfFullPathforLocale());
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        if (valueIndexInList == 0) {
            //Value is already at the top of the list
            return;
        }

        logger.debug("Moving value "
                + simpleCmsPropertyValueWrapper.getSimpleCmsPropertyLocalizedLabelOfFullPathforLocale()
                + " from index " + valueIndexInList + " to index " + (valueIndexInList - 1));

        swapPropertyValuePositions(valueIndexInList, valueIndexInList - 1);

    }

    public void moveDown_UIAction(SimpleCmsPropertyValueWrapper simpleCmsPropertyValueWrapper) {

        if (simpleCmsPropertyValueWrapper == null) {
            logger.warn("No value provided to move");
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        if (CollectionUtils.isEmpty(simpleCmsPropertyValueWrappers)) {
            logger.error("List of values is empty. This method should never be invoked when value list is empty");
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        int valueIndexInList = simpleCmsPropertyValueWrappers.indexOf(simpleCmsPropertyValueWrapper);

        if (valueIndexInList == -1) {
            logger.error("List of values does not contain value {}",
                    simpleCmsPropertyValueWrapper.getSimpleCmsPropertyLocalizedLabelOfFullPathforLocale());
            JSFUtilities.addMessage(null, "object.edit.swapPropertyValuePositions.failed", null,
                    FacesMessage.SEVERITY_WARN);
            return;
        }

        if (valueIndexInList == simpleCmsPropertyValueWrappers.size()) {
            //Value is already at the bottom of the list
            return;
        }

        swapPropertyValuePositions(valueIndexInList, valueIndexInList + 1);

    }
}