/* Copyright (c) 2001 - 2009 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.translator.view;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.geoserver.web.GeoServerBasePage;
/**
* A page to start the translation for a new {@link Locale}.
*
* @author Gabriel Roldan
* @version $Id: NewTranslationPage.java 13241 2009-08-30 05:44:14Z groldan $
* @since 2.0
*/
public class NewTranslationPage extends GeoServerBasePage {
private Component newLanguageChoice;
private Form newTranslationForm;
private LocaleInputField localeInput;
public NewTranslationPage() {
super();
add(newTranslationForm = new Form("newTranslationForm"));
newLanguageChoice = newLanguageChoice();
newTranslationForm.add(newLanguageChoice);
newTranslationForm.add(new CheckBox("showNativeLanguageNames"));
newTranslationForm.add(createNewTranslationLink());
newTranslationForm.add(cancelLink());
localeInput = new LocaleInputField("localeInput");
localeInput.setOutputMarkupId(true);
newTranslationForm.add(localeInput);
}
private Link cancelLink() {
return new Link("cancel") {
private static final long serialVersionUID = -765151069378795644L;
@Override
public void onClick() {
setResponsePage(TranslationPage.class);
}
};
}
private Component newLanguageChoice() {
// GeoServerDialog dialog = new GeoServerDialog("dialog");
// add(dialog);
// return new NewLanguageLink("newLanguage", dialog, translateForm.getModel());
IModel userInterfaceLocaleModel = new Model(getLocale());
IModel selectedLocaleModel = new Model(getLocale());
IModel choices = new NonTranslatedLocalesDetachableModel();
final LocaleDropDown localeDropDown = new LocaleDropDown("newTranslationLanguage",
userInterfaceLocaleModel, selectedLocaleModel, choices);
localeDropDown.add(new OnChangeAjaxBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
Locale newTranslation = (Locale) newLanguageChoice.getModelObject();
localeInput.setValue(newTranslation);
target.addComponent(localeInput);
}
});
// localeDropDown.add(new AjaxFormSubmitBehavior(newTranslationForm, "onchange") {
// private static final long serialVersionUID = 1L;
//
// @Override
// protected void onSubmit(final AjaxRequestTarget target) {
// }
//
// @Override
// protected void onError(AjaxRequestTarget arg0) {
// // TODO Auto-generated method stub
//
// }
// });
return localeDropDown;
}
private Component createNewTranslationLink() {
SubmitLink submitLink = new SubmitLink("createLanguage", newTranslationForm) {
private static final long serialVersionUID = 1L;
@Override
public void onSubmit() {
error("Not yet implemented");
}
};
return submitLink;
}
private class NonTranslatedLocalesDetachableModel extends LoadableDetachableModel {
private static final long serialVersionUID = 8363152206993598511L;
@Override
protected Object load() {
// TranslateBean translateState = (TranslateBean)
// NewLanguagePanel.this.getModelObject();
// Set<Locale> availableTranslations = translateState.getAvailableTranslations();
Set<Locale> nonTranslated = new HashSet<Locale>(Arrays.asList(Locale
.getAvailableLocales()));
// nonTranslated.removeAll(availableTranslations);
List<Locale> choices = new ArrayList<Locale>(nonTranslated);
{
final Locale userInterfaceLocale = NewTranslationPage.this.getLocale();
Collections.sort(choices, new Comparator<Locale>() {
public int compare(Locale o1, Locale o2) {
return o1.getDisplayName(o1).compareTo(o2.getDisplayName(o2));
}
});
}
return choices;
}
}
public static class LocaleInputField extends Panel {
private static final long serialVersionUID = 1L;
private TextField language;
private TextField country;
private TextField variant;
public LocaleInputField(final String id) {
super(id);
add(language = new TextField("language", new Model("")));
add(country = new TextField("country", new Model("")));
add(variant = new TextField("variant", new Model("")));
language.setRequired(true);
}
public void setValue(final Locale locale) {
if (locale == null) {
language.setModelObject(null);
country.setModelObject(null);
variant.setModelObject(null);
} else {
language.setModelObject(locale.getLanguage());
country.setModelObject(locale.getCountry());
variant.setModelObject(locale.getVariant());
}
}
public String getLanguage() {
return language.getValue() == null ? "" : language.getValue();
}
public String getCountry() {
return country.getValue() == null ? "" : country.getValue();
}
public String getVariant() {
return variant.getValue() == null ? "" : variant.getValue();
}
}
}