Java tutorial
/** * Copyright (C) 2012 the original author or authors. * * 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 co.leugim.jade4ninja.template; import java.util.Map; import java.util.Map.Entry; import com.google.common.base.CaseFormat; import com.google.common.base.Optional; import com.google.common.collect.Maps; import ninja.Context; import ninja.Result; import ninja.i18n.Lang; import ninja.i18n.Messages; public class JadeModelParamsBuilder { private Context context; private Result result; private Messages messages; private Lang lang; public final JadeModelParamsBuilder with(Context context) { this.context = context; return this; } public final JadeModelParamsBuilder with(Result result) { this.result = result; return this; } public final JadeModelParamsBuilder with(Messages messages) { this.messages = messages; return this; } public final JadeModelParamsBuilder with(Lang lang) { this.lang = lang; return this; } public final Map<String, Object> build() { checkParams(); Map<String, Object> model = getRenderableResult(); setI18n(model); setLanguage(model); setSession(model); setContext(model); setFlash(model); return model; } protected void setFlash(Map<String, Object> model) { // ///////////////////////////////////////////////////////////////////// // Convenience method to translate possible flash scope keys. // !!! If you want to set messages with placeholders please do that // !!! in your controller. We only can set simple messages. // Eg. A message like "errorMessage=my name is: {0}" => translate in // controller and pass directly. // A message like " errorMessage=An error occurred" => use that as // errorMessage. // // get keys via ${flash.KEYNAME} // //////////////////////////////////////////////////////////////////// Map<String, String> translatedFlashCookieMap = Maps.newHashMap(); if (context.getFlashCookie() != null) for (Entry<String, String> entry : context.getFlashCookie().getCurrentFlashCookieData().entrySet()) { String messageValue = null; Optional<String> messageValueOptional = messages.get(entry.getValue(), context, Optional.of(result)); if (!messageValueOptional.isPresent()) { messageValue = entry.getValue(); } else { messageValue = messageValueOptional.get(); } // new way translatedFlashCookieMap.put(entry.getKey(), messageValue); } // now we can retrieve flash cookie messages via ${flash.MESSAGE_KEY} model.put("flash", translatedFlashCookieMap); } protected void setContext(Map<String, Object> model) { model.put("contextPath", context.getContextPath()); } protected void setSession(Map<String, Object> model) { // put all entries of the session cookie to the map. // You can access the values by their key in the cookie if (context.getSessionCookie() != null && !context.getSessionCookie().isEmpty()) { model.put("session", context.getSessionCookie().getData()); } } protected void setLanguage(Map<String, Object> model) { // set language from framework. You can access // it in the templates as ${lang} Optional<String> language = lang.getLanguage(context, Optional.of(result)); if (language.isPresent()) { model.put("lang", language.get()); } } protected void setI18n(Map<String, Object> model) { model.put("i18n", new JadeI18nHandler(messages, context, result)); } protected void checkParams() { if (context == null || result == null || messages == null) { throw new IllegalArgumentException("Context, result or messages cannot be null"); } } protected Map<String, Object> getRenderableResult() { Object object = result.getRenderable(); Map<String, Object> model; if (object == null) { model = Maps.newHashMap(); } else if (object instanceof Map) { @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) object; model = map; } else { model = Maps.newHashMap(); String realClassNameLowerCamelCase = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, object.getClass().getSimpleName()); model.put(realClassNameLowerCamelCase, object); } return model; } }