/*
This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation; either version 3 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program; if not, see http://www.gnu.org/licenses or write to the Free
Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
*/
package com.servoy.j2db.util.text;
import java.text.ParseException;
import com.servoy.j2db.util.Utils;
/**
* @author jcompagner
*
*/
public class ServoyMaskFormatter extends FixedMaskFormatter
{
private final boolean displayFormatter;
/**
* @param mask
*/
public ServoyMaskFormatter(String mask, boolean displayFormatter) throws ParseException
{
super(mask);
this.displayFormatter = displayFormatter;
}
@SuppressWarnings("nls")
@Override
public String valueToString(Object value) throws ParseException
{
if ((value == null || value.toString().trim().equals("")) && displayFormatter) return "";
try
{
return super.valueToString(value);
}
catch (ParseException pe)
{
return super.valueToString(""); //$NON-NLS-1$
}
}
@Override
public Object stringToValue(String value) throws ParseException
{
if (value == null) return null;
try
{
return super.stringToValue(value);
}
catch (ParseException pe)
{
String placeHolder = getPlaceholder();
if (placeHolder != null)
{
if (Utils.equalObjects(placeHolder, value))
{
return null;
}
else if (placeHolder.length() == value.length())
{
for (int i = 0; i < value.length(); i++)
{
if (value.charAt(i) == ' ') continue;
if (value.charAt(i) == placeHolder.charAt(i)) continue;
throw pe;
}
return null;
}
}
else if (value.replace(getPlaceholderCharacter(), ' ').trim().equals("")) //$NON-NLS-1$
{
return null;
}
else if (value.equals(valueToString(null)))
{
return null;
}
throw pe;
}
}
}