/*
* DescriptionManager.java
*
* Created on 3 ������ 2006 �., 16:09
*
*/
package datechooser.beans.editor.descriptor;
import static datechooser.beans.locale.LocaleUtils.getEditorLocaleString;
import java.text.MessageFormat;
import java.util.*;
/**
* Describes all properties used in this library. Descriptions: text (for users)
* and java (for IDEs).<br>
* �����, ����������� �������� �������� ���� ������� �����������, ������������
* � ����������. ��������������� �������� ���� �������� �����: ���������
* (��� ������ �� �����) � java (��� ��������� ����).<br>
* �� ������� ������� �� �������� ��������������� ������ � ������ ������� ��
* ���������� ��������:<br>
* 1) ����� ����� �������� ��������� �� ��������� � �������� �������.<br>
* 2) ��������� ������ ������� �� ����������� ���������� (String, boolean, ...)
* ������� ��� ����������� �������� � ��� ��������������� ��������. �������
* ��� ��������� �������� ����� ������� �������� ������� �� �� �������.<br>
* ��������� ������� ���� ����������� ��������� ��������� �������, �������
* �������������� � ����.
* @author Androsov Vadim
* @see ClassDescriptor
* @since 1.0
*/
public class DescriptionManager {
private static DescriptionManager instance = new DescriptionManager();
private ArrayList<ClassDescriptor> descriptors = new ArrayList<ClassDescriptor>();
private DescriptionManager() {
registerDescriptor(new FontDescriptor());
registerDescriptor(new ColorDescriptor());
registerDescriptor(new BorderDescriptor());
registerDescriptor(new CustomCellAppearanceDescriptor());
registerDescriptor(new SwingCellAppearanceDescriptor());
registerDescriptor(new ModelBehaviorDescriptor());
registerDescriptor(new ViewDescriptor());
registerDescriptor(new AppearancesListDescriptor());
registerDescriptor(new GregorianCalendarDescriptor());
registerDescriptor(new PeriodDescriptor());
registerDescriptor(new PeriodSetDescriptor());
registerDescriptor(new LocaleDescriptor());
registerDescriptor(new IntegerDescriptor());
registerDescriptor(new StringDescriptor());
registerDescriptor(new WeekDaysStyleDescriptor());
registerDescriptor(new BackRendererDescriptor());
}
/**
* Lets register new class descriptor.<br>
* ��������� ���������������� ����������� ��������� ������.
* @param descriptor Desriptor class for user object.<br>
* �����, �����������, ������� ����������������� ����.
* @see ClassDescriptor
*/
public void registerDescriptor(ClassDescriptor descriptor) {
descriptors.add(descriptor);
}
private ClassDescriptor getDescriptor(Class aClass) {
for (ClassDescriptor elem : descriptors) {
if (elem.getDescriptedClass().isAssignableFrom(aClass) ) {
return elem;
}
}
return null;
}
/**
* Text description for component users.<br>
* ���������� �������� ������� ��� ������ �� �����.
* @param value Object for description.<br>
* ����������� ������.
* @return Object description.<br>
* �������� �������
*/
public static String describe(Object value) {
return describe(value, null);
}
/**
* Text description for component users.<br>
* ���������� �������� ������� ��� ������ �� �����.
* @param value Object for description.<br>
* ����������� ������.
* @param locale Locale.<br>
* �����������
* @return Object description.<br>
* �������� �������
*/
public static String describe(Object value, Locale locale) {
if (value == null) {
return getEditorLocaleString("null");
}
ClassDescriptor descriptor = instance.getDescriptor(value.getClass());
if (descriptor == null) return MessageFormat.format(
getEditorLocaleString("cant_describe_message"),
value.getClass().getName());
return locale == null ?
descriptor.getDescription(value) :
descriptor.getDescription(value, locale);
}
/**
* Java initialization code.<br>
* ��� ������������� ������� �� Java
* @param value Object for description.<br>
* ����������� ������.
* @param aClass Class of describing object. Used when value = <b>null</b>.<br>
* ����� ������������ ��������.
* ������������ ������ � �������, ����� ������ �������� ����� null.
* @return Java initialization code.<br>
* Java ���
*/
public static String describeJava(Object value, Class aClass) {
ClassDescriptor descriptor = instance.getDescriptor(aClass);
if (descriptor == null) return "new " + value.getClass().getName() +
"() /*" + getEditorLocaleString("no_java_init_default_used") + "*/";
if ((value == null) && (!descriptor.canProcessNull())) {
return "(" + aClass.getName() + ")null";
}
return descriptor.getJavaDescription(value);
}
}