/** * *************************************************************************** * 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.List; import java.util.Set; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.qcadoo.view.internal.api.ViewDefinition; import com.qcadoo.view.internal.ribbon.model.InternalRibbonGroup; import com.qcadoo.view.internal.ribbon.model.RibbonGroupsPack; import com.qcadoo.view.internal.ribbon.templates.RibbonTemplateParameters; public class TemplateRibbonGroupsPack implements RibbonGroupsPack { private final RibbonTemplate template; private final RibbonTemplateParameters parameters; private List<InternalRibbonGroup> groups; private final ViewDefinition viewDefinition; private final boolean update; public TemplateRibbonGroupsPack(final RibbonTemplate template, final RibbonTemplateParameters parameters, final ViewDefinition viewDefinition) { this(template, parameters, viewDefinition, new ArrayList<InternalRibbonGroup>()); } private TemplateRibbonGroupsPack(final RibbonTemplate template, final RibbonTemplateParameters parameters, final ViewDefinition viewDefinition, final List<InternalRibbonGroup> updatedGroups) { this.template = template; this.parameters = parameters; this.viewDefinition = viewDefinition; this.groups = updatedGroups; update = updatedGroups.isEmpty() ^ true; } @Override public List<InternalRibbonGroup> getGroups() { if (!update) { List<InternalRibbonGroup> templateGroups = template.getRibbonGroups(parameters, viewDefinition); if (templateGroups.size() > groups.size()) { appendGroupsFromTemplate(templateGroups); } } return groups; } private void appendGroupsFromTemplate(final List<InternalRibbonGroup> templateGroups) { Set<InternalRibbonGroup> groupsSet = Sets.newLinkedHashSet(groups); groupsSet.addAll(templateGroups); groups = Lists.newArrayList(groupsSet); } @Override public InternalRibbonGroup getGroupByName(final String groupName) { for (InternalRibbonGroup group : getGroups()) { if (group.getName().equals(groupName)) { return group; } } return null; } @Override public RibbonGroupsPack getCopy() { return new TemplateRibbonGroupsPack(template, parameters, viewDefinition); } @Override public RibbonGroupsPack getUpdate() { List<InternalRibbonGroup> updatedGroups = Lists.newArrayList(); for (InternalRibbonGroup group : getGroups()) { InternalRibbonGroup updatedGroup = group.getUpdate(); if (updatedGroup != null) { updatedGroups.add(updatedGroup); } } if (updatedGroups.isEmpty()) { return null; } return new TemplateRibbonGroupsPack(template, parameters, viewDefinition, updatedGroups); } }