package com.google.sitebricks.rendering.control;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
import com.google.sitebricks.Evaluator;
import com.google.sitebricks.Localizer;
import com.google.sitebricks.Renderable;
import com.google.sitebricks.Respond;
import com.google.sitebricks.i18n.ResourceBundle;
import com.google.sitebricks.rendering.EmbedAs;
import com.google.sitebricks.rendering.SelfRendering;
@SelfRendering
@EmbedAs("errors")
public class ErrorsWidget implements Renderable {
@Inject
private Map<Class<?>, Map<Locale, Localizer.Localization>> localizationsMap;
@Inject
private Locale locale;
public ErrorsWidget(WidgetChain widgetChain, String expression, Evaluator evaluator) {
}
@Override
public void render(Object bound, Respond respond) {
if (!respond.getErrors().isEmpty()) {
Localizer.Localization localization = null;
ResourceBundle resourceBundle = bound.getClass().getAnnotation(ResourceBundle.class);
if (resourceBundle != null) {
Map<Locale, Localizer.Localization> localizerMap = localizationsMap.get(resourceBundle.value());
if (localizerMap != null) {
localization = localizerMap.get(locale);
}
if (localization == null) {
localization = Localizer.defaultLocalizationFor(resourceBundle.value());
}
}
respond.write("<div class=\"errors\">");
respond.write("<ul>");
for (String errorKey : respond.getErrors()) {
String errorMessage = null;
if (localization != null) {
errorMessage = localization.getMessageBundle().get(errorKey);
}
if (errorMessage != null) {
respond.write("<li>" + errorMessage + "</li>");
}
else {
respond.write("<li> !!! " + errorKey + " !!! </li>");
}
}
respond.write("</ul>");
respond.write("</div");
}
}
@Override
public <T extends Renderable> Set<T> collect(Class<T> clazz) {
return Collections.emptySet();
}
}