// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.actions.relation; import java.util.Collection; import java.util.Collections; import javax.swing.AbstractAction; import org.openstreetmap.josm.actions.OsmPrimitiveAction; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.tools.SubclassFilteredCollection; /** * Ancestor for all actions that want to work with relation collection and * to be disabled if the collection is empty * @since 5793 */ public abstract class AbstractRelationAction extends AbstractAction implements OsmPrimitiveAction { protected transient Collection<Relation> relations = Collections.<Relation>emptySet(); @SuppressWarnings("unused") protected static final Collection<Relation> getRelations(Collection<? extends OsmPrimitive> primitives) { if (primitives == null || primitives.isEmpty()) { return Collections.<Relation>emptySet(); } else { return new SubclassFilteredCollection<>(primitives, Relation.class::isInstance); } } @Override public void setPrimitives(Collection<? extends OsmPrimitive> primitives) { this.relations = getRelations(primitives); updateEnabledState(); } protected void updateEnabledState() { setEnabled(!relations.isEmpty()); } }