blob: 2ce18461124d74c0b8358491ef635252b0974541 [file] [log] [blame]
// Copyright 2004, 2005 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.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
*/
public abstract class LocaleSelection extends BaseComponent implements
ILocaleSelectionListener
{
// properties
public abstract Locale getCurrentLocale();
public abstract Set getLocaleSet();
public abstract void setLocaleSet(Set objLocaleSet);
/**
* @see org.apache.tapestry.workbench.table.ILocaleSelectionListener#localesSelected(Locale[])
*/
public void localesSelected(Locale[] arrLocales)
{
Set objLocaleSet = getLocaleSet();
addAll(objLocaleSet, arrLocales);
// ensure that the framework knows about the change and the set is
// persisted
setLocaleSet(objLocaleSet);
}
private void addAll(Set objLocaleSet, Locale[] arrLocales)
{
for(int i = 0; i < arrLocales.length; i++)
objLocaleSet.add(arrLocales[i]);
}
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.getListenerParameters();
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
{
private static final long serialVersionUID = 1L;
/**
* @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 static final long serialVersionUID = 1L;
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);
}
}
}