/* * Freeplane - mind map editor * Copyright (C) 2009 Tamas Eppel * * This file author is Tamas Eppel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.freeplane.features.icon; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.freeplane.core.resources.ResourceController; import org.freeplane.features.icon.factory.MindIconFactory; /** * * Stores all kinds of icons used in Freeplane. * * @author Tamas Eppel * */ public class IconStore { private final Map<String, IconGroup> groups; private final Map<String, MindIcon> mindIcons; private final Map<String, UIIcon> uiIcons; public IconStore() { groups = new LinkedHashMap<String, IconGroup>(); mindIcons = new HashMap<String, MindIcon>(); uiIcons = new HashMap<String, UIIcon>(); } /** * Adds a new MindIcon group to the store. * * @param group */ public void addGroup(final IconGroup group) { groups.put(group.getName(), group); for (final MindIcon icon : group.getIcons()) { mindIcons.put(icon.getName(), icon); } } /** * Adds a new MindIcon to the group with the given name. * * @param groupName where to add the icon * @param icon to add */ public void addMindIcon(final String groupName, final MindIcon icon) { if (!groups.containsKey(groupName)) { final IconGroup group = new IconGroup(groupName, icon); groups.put(groupName, group); } groups.get(groupName).addIcon(icon); mindIcons.put(icon.getName(), icon); } public void addUIIcon(final UIIcon uiIcon) { uiIcons.put(uiIcon.getFileName(), uiIcon); } /** * @return all groups in the store */ public Collection<IconGroup> getGroups() { return groups.values(); } /** * @return all MindIcons from all groups in the store, including user icons */ public Collection<MindIcon> getMindIcons() { final List<MindIcon> icons = new ArrayList<MindIcon>(); for (final IconGroup group : groups.values()) { icons.addAll(group.getIcons()); } return icons; } /** * @return all user icons in the store */ public Collection<MindIcon> getUserIcons() { return groups.get("user").getIcons(); } /** * @param name of MindIcon to return * @return MindIcon with given name */ public MindIcon getMindIcon(final String name) { if(name == null){ return IconNotFound.instance(); } if (mindIcons.containsKey(name)) { return mindIcons.get(name); } // icons in directory /image are not registered final MindIcon mindIcon = MindIconFactory.create(name); if (ResourceController.getResourceController().getResource(mindIcon.getPath()) != null) { return mindIcon; } return IconNotFound.instance(); } /** * Returns a UIIcon with a given name. If one is not found in the store, * it will be created and stored. * * @param name of UIIcon to return * @return UIIcon with given name */ public UIIcon getUIIcon(final String name) { UIIcon result; if (mindIcons.containsKey(name)) { result = mindIcons.get(name); } else if (uiIcons.containsKey(name)) { result = uiIcons.get(name); } else { result = new UIIcon(name, name); uiIcons.put(name, result); } return result; } }