CustomFieldUtilities.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.apache.commons.lang.builder.CompareToBuilder;
- import org.apache.log4j.Logger;
- import org.itracker.core.resources.ITrackerResources;
- import org.itracker.model.CustomField;
- import org.itracker.model.CustomFieldValue;
- import java.io.Serializable;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Locale;
- public class CustomFieldUtilities {
- public static final String DATE_FORMAT_UNKNOWN = "UNKNOWN";
- public static final String DATE_FORMAT_FULL = "full";
- public static final String DATE_FORMAT_DATEONLY = "dateonly";
- public static final String DATE_FORMAT_TIMEONLY = "timeonly";
- private static final Logger logger = Logger.getLogger(CustomFieldUtilities.class);
- /**
- * Returns the string representation of a field type
- *
- * @param code type code to translate
- * @param locale the locale to translate the type into
- * @return a string representation of the field type translated to the default locale
- */
- public static String getTypeString(int code, Locale locale) {
- return getTypeString(CustomField.Type.valueOf(code), locale);
- }
- /**
- * Returns the string representation of a field type.
- *
- * @param type the type to translate
- * @param locale the locale to translate the type into
- * @return a string representation of the field type translated to the default locale
- */
- public static String getTypeString(CustomField.Type type, Locale locale) {
- if (type == CustomField.Type.STRING) {
- return ITrackerResources.getString(ITrackerResources.KEY_BASE_CUSTOMFIELD_TYPE + "string", locale);
- } else if (type == CustomField.Type.INTEGER) {
- return ITrackerResources.getString(ITrackerResources.KEY_BASE_CUSTOMFIELD_TYPE + "integer", locale);
- } else if (type == CustomField.Type.DATE) {
- return ITrackerResources.getString(ITrackerResources.KEY_BASE_CUSTOMFIELD_TYPE + "date", locale);
- } else if (type == CustomField.Type.LIST) {
- return ITrackerResources.getString(ITrackerResources.KEY_BASE_CUSTOMFIELD_TYPE + "list", locale);
- }
- return ITrackerResources.getString(ITrackerResources.KEY_BASE_CUSTOMFIELD_TYPE + "unknown", locale);
- }
- /**
- * Returns the label key for a particular custom field. This is made up of
- * a static part and the unique value of the custom field.
- *
- * @param fieldId the CustomField id to return the label key for
- * @return the label key for the field
- */
- public static String getCustomFieldLabelKey(Integer fieldId) {
- return ITrackerResources.KEY_BASE_CUSTOMFIELD + fieldId + ITrackerResources.KEY_BASE_CUSTOMFIELD_LABEL;
- }
- /**
- * Returns the label key for a particular custom field option. This is made up of
- * a static part and the unique value of the custom field option.
- *
- * @param fieldId the CustomField id to return the label key for
- * @param optionId the CustomField option's id to return the label key for
- * @return the label key for the field option
- */
- public static String getCustomFieldOptionLabelKey(Integer fieldId, Integer optionId) {
- return ITrackerResources.KEY_BASE_CUSTOMFIELD + fieldId + ITrackerResources.KEY_BASE_CUSTOMFIELD_OPTION + optionId + ITrackerResources.KEY_BASE_CUSTOMFIELD_LABEL;
- }
- /**
- * Returns the label for a custom field in the default locale.
- *
- * @param fieldId the id of the field to return the label for
- * @return the label for the field translated to the default locale
- */
- public static String getCustomFieldName(Integer fieldId) {
- return getCustomFieldName(fieldId, ITrackerResources.getLocale());
- }
- /**
- * Returns the label for a custom field in the specified locale.
- *
- * @param fieldId the id of the field to return the label for
- * @param locale the locale to return the label for
- * @return the label for the field translated to the specified locale
- */
- public static String getCustomFieldName(Integer fieldId, Locale locale) {
- return ITrackerResources.getString(CustomFieldUtilities.getCustomFieldLabelKey(fieldId), locale);
- }
- /**
- * Returns the label for a custom field option in the specified locale.
- *
- * @param fieldId the id of the field to return the label for
- * @param optionId the id of the field option to return the label for
- * @param locale the locale to return the label for
- * @return the label for the field option translated to the default locale
- */
- public static String getCustomFieldOptionName(Integer fieldId, Integer optionId, Locale locale) {
- if (fieldId != null && optionId != null) {
- return ITrackerResources.getString(CustomFieldUtilities.getCustomFieldOptionLabelKey(fieldId, optionId), locale);
- }
- return "";
- }
- public static String getCustomFieldOptionName(CustomFieldValue option, Locale locale) {
- if (null == option) {
- return null;
- }
- return getCustomFieldOptionName(option.getCustomField().getId(), option.getId(), locale);
- }
- public static CustomFieldValue getCustomFieldOptionByValue(List<CustomFieldValue> fields, String value) {
- if (null != fields && !fields.isEmpty()) {
- for (CustomFieldValue fieldValue : fields) {
- if (fieldValue.getValue().equalsIgnoreCase(value)) {
- return fieldValue;
- }
- }
- return fields.get(0);
- }
- return null;
- }
- public static String getCustomFieldOptionName(CustomField field,
- String value, Locale locale) {
- if (null == field) {
- return null;
- }
- if (field.getFieldType() != CustomField.Type.LIST) {
- return value;
- }
- try {
- return CustomFieldUtilities.getCustomFieldOptionName(field.getId(),
- CustomFieldUtilities.getCustomFieldOptionByValue(
- field.getOptions(),
- value).getId(),
- locale);
- } catch (Exception e) {
- logger.warn("doEndTag: failed to get custom field option name for value " + value + ", " + field.getOptions());
- }
- return value;
- }
- public static final class CustomFieldByNameComparator implements Comparator<CustomField>, Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private final Locale locale;
- public CustomFieldByNameComparator(Locale locale) {
- this.locale = locale;
- }
- public int compare(CustomField o1, CustomField o2) {
- return new CompareToBuilder().append(
- getCustomFieldName(o1.getId(), locale),
- getCustomFieldName(o2.getId(), locale))
- .append(o1.getId(), o2.getId())
- .toComparison();
- }
- }
- /**
- * Compares 2 CustomFieldValues by name.
- * <p/>
- * <p>
- * If 2 instances have the same name, they are ordered by sortOrder.
- * </p>
- * <p/>
- * <p>
- * It doesn't take into account the custom field. <br>
- * It should therefore only be used to compare options that belong to a
- * single custom field.
- * </p>
- */
- public static final class CustomFieldValueByNameComparator implements
- Comparator<CustomFieldValue>, Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private final Locale locale;
- public CustomFieldValueByNameComparator(Locale locale) {
- this.locale = locale;
- }
- public int compare(CustomFieldValue a, CustomFieldValue b) {
- return new CompareToBuilder()
- .append(
- CustomFieldUtilities.getCustomFieldOptionName(a, this.locale),
- CustomFieldUtilities.getCustomFieldOptionName(b, this.locale))
- .append(a.getSortOrder(), b.getSortOrder())
- .append(a.getId(), b.getId()).toComparison();
- }
- }
- }