/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.webui.core.lifecycle;
import java.io.Writer;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.exoplatform.commons.utils.PropertyManager;
import org.exoplatform.groovyscript.text.BindingContext;
import org.exoplatform.resolver.ResourceResolver;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.resources.Orientation;
import org.exoplatform.web.url.navigation.NodeURL;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.UIComponentDecorator;
import org.exoplatform.webui.core.UIContainer;
import groovy.lang.Closure;
@SuppressWarnings("serial")
public class WebuiBindingContext extends BindingContext {
protected static Log log = ExoLogger.getLogger("portal:WebuiBindingContext");
private UIComponent uicomponent_;
private WebuiRequestContext rcontext_;
public WebuiBindingContext(ResourceResolver resolver, Writer w, UIComponent uicomponent, final WebuiRequestContext context) {
super(resolver, w);
uicomponent_ = uicomponent;
rcontext_ = context;
// Closure nodeurl()
put("nodeurl", new Closure(this) {
@Override
public Object call(Object[] args) {
return context.createURL(NodeURL.TYPE);
}
});
// Add Orientation specific information
Orientation orientation = context.getOrientation();
this.put("orientation", orientation);
this.put("isLT", orientation.isLT());
this.put("isRT", orientation.isRT());
this.put("dir", orientation.isLT() ? "ltr" : "rtl");
}
public UIComponent getUIComponent() {
return uicomponent_;
}
public WebuiRequestContext getRequestContext() {
return rcontext_;
}
public String getContextPath() {
return rcontext_.getRequestContextPath();
}
public String getPortalContextPath() {
return rcontext_.getPortalContextPath();
}
public BindingContext clone() {
BindingContext newContext = new WebuiBindingContext(resolver_, writer_, uicomponent_, rcontext_);
newContext.putAll(this);
newContext.setGroovyTemplateService(service_);
return newContext;
}
public String appRes(String mesgKey) {
String value = "";
try {
ResourceBundle res = rcontext_.getApplicationResourceBundle();
value = res.getString(mesgKey);
} catch (MissingResourceException ex) {
if (PropertyManager.isDevelopping())
log.warn("Can not find resource bundle for key : " + mesgKey);
if (mesgKey != null)
value = mesgKey.substring(mesgKey.lastIndexOf('.') + 1);
}
return value;
}
public void renderChildren() throws Exception {
if (uicomponent_ instanceof UIComponentDecorator) {
UIComponentDecorator uiComponentDecorator = (UIComponentDecorator) uicomponent_;
if (uiComponentDecorator.getUIComponent() == null)
return;
uiComponentDecorator.getUIComponent().processRender(rcontext_);
return;
}
UIContainer uicontainer = (UIContainer) uicomponent_;
List<UIComponent> children = uicontainer.getChildren();
for (UIComponent child : children) {
if (child.isRendered()) {
child.processRender(rcontext_);
}
}
}
public void renderChild(String id) throws Exception {
if (!(uicomponent_ instanceof UIContainer))
return;
UIContainer uicontainer = (UIContainer) uicomponent_;
UIComponent uiChild = uicontainer.getChildById(id);
uiChild.processRender(rcontext_);
}
public void renderUIComponent(UIComponent uicomponent) throws Exception {
uicomponent.processRender(rcontext_);
}
public void renderChild(int index) throws Exception {
if (!(uicomponent_ instanceof UIContainer))
return;
UIContainer uicontainer = (UIContainer) uicomponent_;
UIComponent uiChild = uicontainer.getChild(index);
uiChild.processRender(rcontext_);
}
@SuppressWarnings("unused")
public void userRes(String mesgKey) {
}
}