ProjectUtilities.java
- /*
- * This software was designed and created by Jason Carroll.
- * Copyright (c) 2002, 2003, 2004 Jason Carroll.
- * The author can be reached at jcarroll@cowsultants.com
- * ITracker website: http://www.cowsultants.com
- * ITracker forums: http://www.cowsultants.com/phpBB/index.php
- *
- * This program is free software; you can redistribute it and/or modify
- * it only 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.
- */
- package org.itracker.model.util;
- import org.itracker.core.resources.ITrackerResources;
- import org.itracker.model.Status;
- import java.util.*;
- public class ProjectUtilities {
- // Options use bitmasks and are stored as a single integer in the db
- public static final int OPTION_SURPRESS_HISTORY_HTML = 1;
- public static final int OPTION_ALLOW_ASSIGN_TO_CLOSE = 2;
- public static final int OPTION_PREDEFINED_RESOLUTIONS = 4;
- public static final int OPTION_ALLOW_SELF_REGISTERED_CREATE = 8;
- public static final int OPTION_ALLOW_SELF_REGISTERED_VIEW_ALL = 16;
- public static final int OPTION_NO_ATTACHMENTS = 32;
- public static final int OPTION_LITERAL_HISTORY_HTML = 64;
- /**
- * Cache of status names by Locale, loaded lazily on first request
- * from itracker.properties.
- * <p/>
- * The Map implementation is synchronized because it can be accessed
- * by multiple threads that will alter it in case of cache miss.
- */
- private static final Map<Locale, Map<Status, String>> statusNames =
- new Hashtable<Locale, Map<Status, String>>();
- /**
- * Contains only static methods and isn't intended to be instantiated.
- */
- private ProjectUtilities() {
- }
- /**
- * Returns the localized name of the given status for the application
- * default locale.
- *
- * @param status enum constant of which we want the localized name
- * @return name in the current locale
- */
- public static String getStatusName(Status status) {
- return getStatusName(status, ITrackerResources.getLocale());
- }
- /**
- * Returns the localized name of the given status for the given locale.
- *
- * @param status enum constant of which we want the localized name
- * @param locale desired locale
- * @return name in the given locale or "MISSING RESOURCE " + resource key
- * if no resource could be found
- */
- public static String getStatusName(Status status, Locale locale) {
- return ITrackerResources.getString(
- ITrackerResources.KEY_BASE_PROJECT_STATUS + status.getCode(),
- locale);
- }
- /**
- * @return unmodifiable map of status names for the application default Locale
- */
- @Deprecated
- public static Map<Status, String> getStatusNames() {
- return getStatusNames(ITrackerResources.getLocale());
- }
- /**
- * This method loads the status names in the cache if they're not
- * found in it.
- * <p/>
- * <p>The returned map is cached for future requests. </p>
- *
- * @return unmodifiable map of status names for the requested Locale
- */
- public static Map<Status, String> getStatusNames(Locale locale) {
- Map<Status, String> statuses = statusNames.get(locale);
- if (statuses == null) {
- // No labels found for the requested Locale => load in cache.
- statuses = new EnumMap<Status, String>(Status.class);
- for (Status status : Status.values()) {
- statuses.put(status, getStatusName(status, locale));
- }
- statusNames.put(locale, Collections.unmodifiableMap(statuses));
- }
- return Collections.unmodifiableMap(statusNames.get(locale));
- }
- public static boolean hasOption(int option, int currentOptions) {
- return ((option & currentOptions) == option);
- }
- public static Integer[] getOptions(int currentOptions) {
- List<Integer> options = new ArrayList<Integer>();
- if (hasOption(OPTION_SURPRESS_HISTORY_HTML, currentOptions)) {
- options.add(OPTION_SURPRESS_HISTORY_HTML);
- }
- if (hasOption(OPTION_ALLOW_ASSIGN_TO_CLOSE, currentOptions)) {
- options.add(OPTION_ALLOW_ASSIGN_TO_CLOSE);
- }
- if (hasOption(OPTION_PREDEFINED_RESOLUTIONS, currentOptions)) {
- options.add(OPTION_PREDEFINED_RESOLUTIONS);
- }
- if (hasOption(OPTION_ALLOW_SELF_REGISTERED_CREATE, currentOptions)) {
- options.add(OPTION_ALLOW_SELF_REGISTERED_CREATE);
- }
- if (hasOption(OPTION_ALLOW_SELF_REGISTERED_VIEW_ALL, currentOptions)) {
- options.add(OPTION_ALLOW_SELF_REGISTERED_VIEW_ALL);
- }
- if (hasOption(OPTION_NO_ATTACHMENTS, currentOptions)) {
- options.add(OPTION_NO_ATTACHMENTS);
- }
- if (hasOption(OPTION_LITERAL_HISTORY_HTML, currentOptions)) {
- options.add(OPTION_LITERAL_HISTORY_HTML);
- }
- Integer[] optionsArray = new Integer[options.size()];
- options.toArray(optionsArray);
- return optionsArray;
- }
- public static String getScriptPriorityLabelKey(Integer fieldId) {
- return ITrackerResources.getString(ITrackerResources.KEY_BASE_PRIORITY + fieldId + ITrackerResources.KEY_BASE_PRIORITY_LABEL);
- }
- public static String getScriptPrioritySize() {
- return ITrackerResources.getString(ITrackerResources.KEY_BASE_PRIORITY + ITrackerResources.KEY_BASE_PRIORITY_SIZE);
- }
- }