Package org.freeplane.features.icon.factory

Source Code of org.freeplane.features.icon.factory.IconStoreFactory

/*
*  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.factory;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.util.LogUtils;
import org.freeplane.core.util.TextUtils;
import org.freeplane.features.icon.IconGroup;
import org.freeplane.features.icon.IconNotFound;
import org.freeplane.features.icon.IconStore;
import org.freeplane.features.icon.MindIcon;
import org.freeplane.features.icon.UIIcon;
import org.freeplane.features.icon.UserIcon;

/**
*
* Factory for IconStore objects.
*
* @author Tamas Eppel
*
*/
public class IconStoreFactory {
  private static final String SEPARATOR = ";";
  private static final ResourceController RESOURCE_CONTROLLER = ResourceController.getResourceController();
  private static final String GROUP_NAMES_KEY = "icons.groups";
  private static final String GROUP_KEY = "icons.group.%s";
  private static final String GROUP_ICON_KEY = "IconGroupPopupAction.%s.icon";
  private static final String GROUP_DESC_KEY = "IconGroupPopupAction.%s.text";
  private static IconStore groups;

  /**
   *
   * Creates an IconStore from the property file. If one was already
   * constructed it will be returned without creating a new one.
   *
   * @return
   */
  public static IconStore create() {
    if (groups != null) {
      return groups;
    }
    groups = new IconStore();
    IconStoreFactory.setIconGroups(groups);
    return groups;
  }

  private static void setIconGroups(final IconStore iconStore) {
    final String[] groupNames = RESOURCE_CONTROLLER.getProperty(GROUP_NAMES_KEY).split(SEPARATOR);
    for (final String groupName : groupNames) {
      final String description = TextUtils.getText(String.format(GROUP_DESC_KEY, groupName));
      List<MindIcon> icons;
      UIIcon groupIcon = null;
      if ("user".equals(groupName)) {
        icons = IconStoreFactory.getUserIcons();
        groupIcon = MindIconFactory.create("user_icon");
      }
      else {
        final String groupIconName = RESOURCE_CONTROLLER.getProperty(String.format(GROUP_ICON_KEY, groupName));
        final Map<String, MindIcon> iconMap = IconStoreFactory.getIcons(groupName);
        groupIcon = iconMap.get(groupIconName);
        icons = new ArrayList<MindIcon>(iconMap.values());
      }
      if (groupIcon == null) {
        groupIcon = icons.size() > 0 ? icons.get(0) : IconNotFound.instance();
      }
      iconStore.addGroup(new IconGroup(groupName, groupIcon, description, icons));
    }
  }

  private static Map<String, MindIcon> getIcons(final String groupName) {
    final String[] iconNames = RESOURCE_CONTROLLER.getProperty(String.format(GROUP_KEY, groupName))
        .split(SEPARATOR);
    final Map<String, MindIcon> icons = new LinkedHashMap<String, MindIcon>(iconNames.length);
    for (final String iconName : iconNames) {
      final MindIcon icon = MindIconFactory.create(iconName);
      icons.put(iconName, icon);
    }
    return icons;
  }

  private static List<MindIcon> getUserIcons() {
    final ResourceController resourceController = ResourceController.getResourceController();
    if (resourceController.isApplet()) {
      return Collections.emptyList();
    }
    final File iconDir = new File(resourceController.getFreeplaneUserDirectory(), "icons");
    if (!iconDir.exists()) {
      LogUtils.info("creating user icons directory " + iconDir);
      iconDir.mkdirs();
      return Collections.emptyList();
    }
    return IconStoreFactory.getUserIcons(iconDir, "");
  }

  private static List<MindIcon> getUserIcons(final File iconDir, final String dir) {
    final String[] userIconArray = iconDir.list(new FilenameFilter() {
      public boolean accept(final File dir, final String name) {
        final int nameLength = name.length();
        return nameLength > 4 && name.substring(nameLength - 4).equalsIgnoreCase(".png") || new File(dir, name).isDirectory();
      }
    });
    if (userIconArray == null) {
      return Collections.emptyList();
    }
    final List<MindIcon> icons = new ArrayList<MindIcon>(userIconArray.length);
    for (final String fileName : userIconArray) {
      final File childDir = new File(iconDir, fileName);
      final String fullName = dir + fileName;
      if (childDir.isDirectory()) {
        final List<MindIcon> childUserIcons = IconStoreFactory.getUserIcons(childDir, fullName + '/');
        icons.addAll(childUserIcons);
      }
    }
    for (final String fileName : userIconArray) {
      final File childDir = new File(iconDir, fileName);
      final String fullName = dir + fileName;
      if (childDir.isDirectory()) {
        continue;
      }
      final String iconName = fullName.substring(0, fullName.length() - 4);
      final String iconDescription = fileName.substring(0, fileName.length() - 4);
      if (iconName.equals("")) {
        continue;
      }
      final UserIcon icon = new UserIcon(iconName, fullName, iconDescription);
      icons.add(icon);
    }
    return icons;
  }
}
TOP

Related Classes of org.freeplane.features.icon.factory.IconStoreFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.