001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.tagging.presets.items;
003
004import java.awt.GridLayout;
005import java.util.Collection;
006import java.util.LinkedList;
007import java.util.List;
008import java.util.Map;
009
010import javax.swing.JPanel;
011
012import org.openstreetmap.josm.data.osm.OsmPrimitive;
013import org.openstreetmap.josm.data.osm.Tag;
014import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
015import org.openstreetmap.josm.tools.GBC;
016
017/**
018 * A group of {@link Check}s.
019 * @since 6114
020 */
021public class CheckGroup extends TaggingPresetItem {
022
023    /**
024     * Number of columns (positive integer)
025     */
026    public String columns; // NOSONAR
027
028    /**
029     * List of checkboxes
030     */
031    public final List<Check> checks = new LinkedList<>();
032
033    @Override
034    public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
035        Integer cols = Integer.valueOf(columns);
036        int rows = (int) Math.ceil(checks.size()/cols.doubleValue());
037        JPanel panel = new JPanel(new GridLayout(rows, cols));
038
039        for (Check check : checks) {
040            check.addToPanel(panel, sel, presetInitiallyMatches);
041        }
042
043        p.add(panel, GBC.eol());
044        return false;
045    }
046
047    @Override
048    public void addCommands(List<Tag> changedTags) {
049        for (Check check : checks) {
050            check.addCommands(changedTags);
051        }
052    }
053
054    @Override
055    public Boolean matches(Map<String, String> tags) {
056        for (Check check : checks) {
057            if (Boolean.TRUE.equals(check.matches(tags))) {
058                return Boolean.TRUE;
059            }
060        }
061        return null;
062    }
063
064    @Override
065    public String toString() {
066        return "CheckGroup [columns=" + columns + ']';
067    }
068}