/** * *************************************************************************** * Copyright (c) 2010 Qcadoo Limited * Project: Qcadoo Framework * Version: 1.4 * * This file is part of Qcadoo. * * Qcadoo 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. * * 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 * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * *************************************************************************** */ package com.qcadoo.view.internal.ribbon.templates.model; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Set; import com.qcadoo.view.internal.api.ViewDefinition; import com.qcadoo.view.internal.ribbon.model.InternalRibbonGroup; import com.qcadoo.view.internal.ribbon.templates.RibbonTemplateParameters; public class RibbonTemplate { private final String name; private final String plugin; private final List<TemplateRibbonGroup> groups = new ArrayList<TemplateRibbonGroup>(); public RibbonTemplate(final String plugin, final String name) { this.plugin = plugin; this.name = name; } public String getPlugin() { return plugin; } public String getName() { return name; } public void addTemplateGroup(final TemplateRibbonGroup group) { if (groups.contains(group)) { throw new IllegalStateException("group '" + group.getName() + "' already exists in template '" + name + "'"); } groups.add(group); } public void removeTemplateGroup(final TemplateRibbonGroup group) { groups.remove(group); } public List<InternalRibbonGroup> getRibbonGroups(final RibbonTemplateParameters parameters, final ViewDefinition viewDefinition) { List<InternalRibbonGroup> groups = new LinkedList<InternalRibbonGroup>(); for (TemplateRibbonGroup templateGroup : getFilteredList(parameters)) { InternalRibbonGroup groupInstance = templateGroup.getRibbonGroup(parameters, viewDefinition); if (groupInstance != null) { groups.add(groupInstance); } } return groups; } private List<TemplateRibbonGroup> getFilteredList(final RibbonTemplateParameters parameters) { List<TemplateRibbonGroup> filteredList = new LinkedList<TemplateRibbonGroup>(); if (parameters.getExcludeGroups() != null) { for (TemplateRibbonGroup group : groups) { if (!parameters.getExcludeGroups().contains(group.getName())) { filteredList.add(group); } } return filteredList; } if (parameters.getIncludeGroups() != null) { for (TemplateRibbonGroup group : groups) { if (parameters.getIncludeGroups().contains(group.getName())) { filteredList.add(group); } } return filteredList; } return groups; } public void parseParameters(final RibbonTemplateParameters parameters) { parseGroupNames(parameters.getIncludeGroups()); parseGroupNames(parameters.getExcludeGroups()); parseItemNames(parameters.getIncludeItems()); parseItemNames(parameters.getExcludeItems()); } private void parseGroupNames(final Set<String> groupNames) { if (groupNames == null) { return; } for (String groupName : groupNames) { boolean groupFound = false; for (TemplateRibbonGroup group : groups) { if (groupName.equals(group.getName())) { groupFound = true; } } if (!groupFound) { throw new IllegalStateException("group '" + groupName + "' not found in template '" + name + "'"); } } } private void parseItemNames(final Set<String> itemNames) { if (itemNames == null) { return; } for (String itemName : itemNames) { String[] itemNameParts = itemName.split("\\."); if (itemNameParts.length != 2) { throw new IllegalStateException("item name '" + itemName + "' is not correct"); } TemplateRibbonGroup group = getGroupByName(itemNameParts[0]); if (group == null) { throw new IllegalStateException("group '" + itemNameParts[0] + "' of item '" + itemName + "' not found"); } if (!group.containItem(itemName)) { throw new IllegalStateException("item element '" + itemNameParts[1] + "' of item '" + itemName + "' not found in template group '" + itemNameParts[0] + "'"); } } } private TemplateRibbonGroup getGroupByName(final String groupName) { for (TemplateRibbonGroup group : groups) { if (groupName.equals(group.getName())) { return group; } } return null; } }