blob: bef257a551ded31ae24c7c39463e9b5155f1bb3c [file] [log] [blame]
// Copyright 2004 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry.workbench.table;
import java.text.DateFormat;
import java.text.DecimalFormatSymbols;
import java.util.Date;
import java.util.Locale;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.apache.tapestry.BaseComponent;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.contrib.table.model.ITableColumn;
import org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator;
import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
/**
* @author mindbridge
* @version $Id$
*/
public abstract class LocaleSelection extends BaseComponent implements ILocaleSelectionListener
{
// immutable
private VerbosityRating m_objVerbosityRating;
// temporary
private Locale m_objCurrentLocale;
// properties
public abstract Locale getCurrentLocale();
public abstract Set getLocaleSet();
public abstract void setLocaleSet(Set objLocaleSet);
/**
* Creates a new LocaleSelection component
*/
public LocaleSelection()
{
m_objVerbosityRating = new VerbosityRating();
}
/**
* @see org.apache.tapestry.workbench.table.ILocaleSelectionListener#localesSelected(Locale[])
*/
public void localesSelected(Locale[] arrLocales)
{
Set objLocaleSet = getLocaleSet();
CollectionUtils.addAll(objLocaleSet, arrLocales);
// ensure that the framework knows about the change and the set is persisted
setLocaleSet(objLocaleSet);
}
public ITableColumn getCurrencyColumn()
{
// The column value is extracted in a custom evaluator class
return new SimpleTableColumn("Currency", new CurrencyEvaluator(), true);
}
public ITableColumn getDateFormatColumn()
{
// The entire column is defined using a custom column class
return new DateFormatColumn(new Date());
}
/**
* Returns the verbosity of the current locale.
* This is used by the Block rendering the 'Verbosity' column
* @return int the current locale verbosity
*/
public int getCurrentLocaleVerbosity()
{
int nVerbosity = VerbosityRating.calculateVerbosity(getCurrentLocale());
return nVerbosity;
}
/**
* Generates the context that will be passed to the deleteLocale() listener
* if a "remove" link is selected. <p>
*
* This is used by the Block rendering the 'Remove' column.
*
* @return String[] the context for the deleteLocale() listener
*/
public String[] getDeleteLocaleContext()
{
Locale objLocale = getCurrentLocale();
return new String[] {
objLocale.getLanguage(),
objLocale.getCountry(),
objLocale.getVariant()};
}
/**
* A listener invoked when a "remove" link is selected.
* It removes from the data model the locale corresponding to the link. <p>
*
* @param objCycle the request cycle
*/
public void deleteLocale(IRequestCycle objCycle)
{
Object[] arrParams = objCycle.getServiceParameters();
Locale objLocale =
new Locale(arrParams[0].toString(), arrParams[1].toString(), arrParams[2].toString());
getLocaleSet().remove(objLocale);
}
/**
* A class defining the logic for getting the currency symbol from a locale
*/
private static class CurrencyEvaluator implements ITableColumnEvaluator
{
/**
* @see org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator#getColumnValue(ITableColumn, Object)
*/
public Object getColumnValue(ITableColumn objColumn, Object objRow)
{
Locale objLocale = (Locale) objRow;
String strCountry = objLocale.getCountry();
if (strCountry == null || strCountry.equals(""))
return "";
DecimalFormatSymbols objSymbols = new DecimalFormatSymbols(objLocale);
return objSymbols.getCurrencySymbol();
}
}
/**
* A class defining a column for displaying the date format
*/
private static class DateFormatColumn extends SimpleTableColumn
{
private Date m_objDate;
public DateFormatColumn(Date objDate)
{
super("Date Format", true);
m_objDate = objDate;
}
public Object getColumnValue(Object objRow)
{
Locale objLocale = (Locale) objRow;
DateFormat objFormat =
DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, objLocale);
return objFormat.format(m_objDate);
}
}
}