blob: ce71dc7a069d6d2de15e981021f3f25b7a235823 [file] [log] [blame]
/*
* Copyright (C) 2005 db4objects Inc. http://www.db4o.com
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* db4objects - Initial API and implementation
* Matt Carter - Improved primitive conversion support (bug 197679)
*/
package org.eclipse.core.internal.databinding.conversion;
import org.eclipse.core.databinding.conversion.IConverter;
/**
* StringToCharacterConverter.
*/
public class StringToCharacterConverter implements IConverter {
private final boolean primitiveTarget;
/**
*
* @param primitiveTarget
*/
public StringToCharacterConverter(boolean primitiveTarget) {
this.primitiveTarget = primitiveTarget;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.binding.converter.IConverter#convert(java.lang.Object)
*/
public Object convert(Object source) {
if (source != null && !(source instanceof String))
throw new IllegalArgumentException(
"String2Character: Expected type String, got type [" + source.getClass().getName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
String s = (String) source;
if (source == null || s.equals("")) { //$NON-NLS-1$
if (primitiveTarget)
throw new IllegalArgumentException(
"String2Character: cannot convert null/empty string to character primitive"); //$NON-NLS-1$
return null;
}
Character result;
if (s.length() > 1)
throw new IllegalArgumentException(
"String2Character: string too long: " + s); //$NON-NLS-1$
try {
result = new Character(s.charAt(0));
} catch (Exception e) {
throw new IllegalArgumentException(
"String2Character: " + e.getMessage() + ": " + s); //$NON-NLS-1$ //$NON-NLS-2$
}
return result;
}
public Object getFromType() {
return String.class;
}
public Object getToType() {
return primitiveTarget ? Character.TYPE : Character.class;
}
/**
* @param primitive
* @return converter
*/
public static StringToCharacterConverter toCharacter(boolean primitive) {
return new StringToCharacterConverter(primitive);
}
}