// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // 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, write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: Templates.java,v 1.13 2008/04/03 08:53:22 spyromus Exp $ // package com.salas.bb.remixfeeds.templates; import com.salas.bb.core.FeatureManager; import com.salas.bb.core.GlobalController; import com.salas.bb.utils.StringUtils; import com.salas.bb.utils.i18n.Strings; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.prefs.Preferences; /** * The repository of templates. */ public final class Templates { // Old modes private static final int MODE_TITLE_AND_LINK = 0; private static final int MODE_EXCERPT_AND_LINK = 1; private static final int MODE_FULL_TEXT = 2; // Preference key holding the number of templates private static final String KEY_COUNT = "ptb.templates.count"; public static Template TITLE_ONLY = new Template("Title Only", true, Strings.message("ptb.template.title.only")); public static Template BRIEF = new Template("Brief", true, Strings.message("ptb.template.brief")); public static Template FULL = new Template("Full", true, Strings.message("ptb.template.full")); public static Template DEFAULT = FULL; /** System templates only. */ private static Map<String, Template> SYSTEM = new HashMap<String, Template>(); /** All templates */ private static Map<String, Template> ALL = new HashMap<String, Template>(); static { addTemplate(TITLE_ONLY); addTemplate(BRIEF); addTemplate(FULL); SYSTEM.putAll(ALL); } /** * Hidden singleton constructor. */ private Templates() { } /** * Adds a template to the repository. * * @param template template. */ public static void addTemplate(Template template) { String key = template.getName(); if (!ALL.containsKey(key)) ALL.put(key, template); } /** * Deletes a template. * * @param template template. */ public static void deleteTemplate(Template template) { ALL.remove(template.getName()); } /** * Returns all templates mapped to their titles. * * @return templates. */ public static Map<String, Template> getAll() { return Collections.unmodifiableMap(ALL); } /** * Returns only system templates if the user has FREE level and ALL templates otherwise. * * @return templates */ public static Map<String, Template> getUserTemplates() { return hasCustomTemplatesFeature() ? getAll() : Collections.unmodifiableMap(SYSTEM); } /** * Returns the names of user-accessible templates. * * @return user template names. */ public static Collection<String> getUserTemplateNames() { return getUserTemplates().keySet(); } /** * Returns TRUE if a template with the given title is already registered. * * @param title title. * * @return TRUE if a template with the given title is already registered. */ public static boolean isExisting(String title) { return ALL.get(title) != null; } /** * This method is used to convert previously used mode into the template name. * * @param mode mode. * * @return name. */ public static String fromOldMode(int mode) { String name; switch (mode) { case MODE_TITLE_AND_LINK: name = TITLE_ONLY.getName(); break; case MODE_EXCERPT_AND_LINK: name = BRIEF.getName(); break; case MODE_FULL_TEXT: name = FULL.getName(); break; default: name = DEFAULT.getName(); } return name; } /** * Finds a template by name or returns the default. * * @param name name. * * @return template. */ public static Template getByName(String name) { Template template = ALL.get(name); if (template == null || !hasCustomTemplatesFeature()) template = DEFAULT; return template; } /** * Returns TRUE if the user has custom templates feature. * * @return TRUE if has. */ public static boolean hasCustomTemplatesFeature() { FeatureManager fm = GlobalController.SINGLETON.getFeatureManager(); return fm.isPtbAdvanced(); } /** * Stores user-defined templates. * * @param prefs preferences. */ public static void store(Preferences prefs) { Collection<Template> templates = ALL.values(); // Store templates one by one int seq = 0; for (Template template : templates) { if (!template.isSystem()) template.store(prefs, ++seq); } // Store the counter prefs.putInt(KEY_COUNT, seq); } /** * Restores user-defined templates. * * @param prefs preferences. */ public static void restore(Preferences prefs) { int count = prefs.getInt(KEY_COUNT, 0); for (int seq = 1; seq <= count; seq++) { try { Template template = new Template(); template.restore(prefs, seq); if (StringUtils.isNotEmpty(template.getName())) addTemplate(template); } catch (InvalidSyntaxException e) { // One of the templates has invalid syntax. It will be removed. } } } }