001/*
002 * (C) Copyright 2006-2010 Nuxeo SAS (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     bstefanescu
016 */
017package org.nuxeo.ecm.platform.actions;
018
019import java.util.ArrayList;
020import java.util.Arrays;
021import java.util.List;
022
023import org.nuxeo.runtime.model.ContributionFragmentRegistry;
024
025/**
026 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
027 */
028public class FilterContributionHandler extends ContributionFragmentRegistry<DefaultActionFilter> {
029
030    protected ActionFilterRegistry filterReg;
031
032    public FilterContributionHandler() {
033        filterReg = new ActionFilterRegistry();
034    }
035
036    public ActionFilterRegistry getRegistry() {
037        return filterReg;
038    }
039
040    @Override
041    public DefaultActionFilter clone(DefaultActionFilter object) {
042        return object.clone();
043    }
044
045    @Override
046    public void contributionUpdated(String id, DefaultActionFilter filter, DefaultActionFilter origContrib) {
047        filterReg.addFilter(filter);
048    }
049
050    @Override
051    public void contributionRemoved(String id, DefaultActionFilter origContrib) {
052        filterReg.removeFilter(id);
053    }
054
055    @Override
056    public String getContributionId(DefaultActionFilter contrib) {
057        return contrib.getId();
058    }
059
060    @Override
061    public void merge(DefaultActionFilter src, DefaultActionFilter dst) {
062        if (src.getAppend()) {
063            List<FilterRule> mergedRules = new ArrayList<FilterRule>();
064            mergedRules.addAll(Arrays.asList(dst.getRules()));
065            mergedRules.addAll(Arrays.asList(src.getRules()));
066            dst.setRules(mergedRules.toArray(new FilterRule[mergedRules.size()]));
067        } else {
068            dst.setRules(src.getRules());
069        }
070    }
071
072}