/*
* @(#)RangeConverter.java 5/22/2014
*
* Copyright 2002 - 2014 JIDE Software Inc. All rights reserved.
*/
package com.jidesoft.converter;
import com.jidesoft.range.Range;
import java.text.MessageFormat;
import java.util.Locale;
/**
* An abstract class that is extended by any converters that convert to/from an array-like format, such as 1, 2, 3.
* Examples are Point. Point(100, 200) can convert to/from "100, 200" <br> You have the choice of what the separator is;
* separator is the ", " in the Point example above.
*/
public class RangeConverter implements ObjectConverter {
private Class<?> _elementClass;
public static final ConverterContext CONTEXT_RANGE = new ConverterContext("Range");
public static final ConverterContext CONTEXT_MULTIPLE = new ConverterContext("Multiple");
/**
* Creates an ArrayConverter.
*
* @param elementClass class of the array element. Assume all elements have the same class type. If not, use the
* constructor which takes Class<?>[] as parameter.
*/
public RangeConverter(Class<?> elementClass) {
_elementClass = elementClass;
}
/**
* Converts from array to string by concating them with separators.
*
* @param objects an array of objects
* @param context converter context
* @return string all objects concatenated with separators
*/
public String arrayToString(Object[] objects, ConverterContext context) {
if (objects.length > 1) {
if (CONTEXT_RANGE.equals(context)) {
String s = Resource.getResourceBundle(Locale.getDefault()).getString("Range.range");
return MessageFormat.format(s, toString(0, objects[0], context), toString(1, objects[1], context));
}
else {
return Resource.getResourceBundle(Locale.getDefault()).getString("Range.multiple");
}
}
else if (objects.length == 1) {
return toString(0, objects[0], context);
}
return "";
}
protected String toString(int i, Object o, ConverterContext context) {
return ObjectConverterManager.toString(o, _elementClass, context);
}
/**
* Converts from string to an array of objects, using separator to separate the string.
*
* @param string string to be converted
* @param context converter context
* @return the array
*/
public Object[] arrayFromString(String string, ConverterContext context) {
return null;
}
protected Object fromString(int i, String s, ConverterContext context) {
return ObjectConverterManager.fromString(s, _elementClass, context);
}
public String toString(Object object, ConverterContext context) {
if (object instanceof Range) {
Range range = (Range) object;
if (range.size() == 0) {
return arrayToString(new Object[]{range.lower()}, context);
}
return arrayToString(new Object[]{range.lower(), range.upper()}, context);
}
else {
return "";
}
}
public boolean supportToString(Object object, ConverterContext context) {
return true;
}
public Object fromString(String string, ConverterContext context) {
if (string == null || string.trim().length() == 0) {
return null;
}
Object[] objects = arrayFromString(string, context);
if (objects == null) return null;
else if (objects.length == 1) {
return null;
}
else if (objects.length >= 2) {
return null;
}
return null;
}
public boolean supportFromString(String string, ConverterContext context) {
return false;
}
}