/* * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * * This file is part of jAPS software. * jAPS is a free software; * you can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * */ package com.agiletec.apsadmin.tags; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import org.apache.commons.beanutils.BeanComparator; import org.apache.struts2.views.jsp.StrutsBodyTagSupport; import org.springframework.web.context.WebApplicationContext; import com.agiletec.aps.util.ApsWebApplicationUtils; import com.agiletec.apsadmin.system.plugin.HookPointElementContainer; import com.opensymphony.xwork2.util.ValueStack; /** * Defines a hookpoint, a point of inclusion of objects -that is, jsp fragments - in * well defined points in the JSP of the administration interface. * @author E.Santoboni */ public class HookPointTag extends StrutsBodyTagSupport { @Override public int doStartTag() throws JspException { HttpServletRequest request = (HttpServletRequest) this.pageContext.getRequest(); ValueStack stack = this.getStack(); try { List<HookPointElementContainer> containers = extractElements(request); if (containers.size()>0) { stack.getContext().put(this.getObjectName(), containers); stack.setValue("#attr['" + this.getObjectName() + "']", containers, false); return EVAL_BODY_INCLUDE; } } catch (Throwable t) { throw new JspException("Error detected ", t); } return super.doStartTag(); } private List<HookPointElementContainer> extractElements(HttpServletRequest request) { WebApplicationContext wac = ApsWebApplicationUtils.getWebApplicationContext(request); String[] beanNames = wac.getBeanNamesForType(HookPointElementContainer.class); List<HookPointElementContainer> containers = new ArrayList<HookPointElementContainer>(); for (int i=0; i<beanNames.length; i++) { HookPointElementContainer container = (HookPointElementContainer) wac.getBean(beanNames[i]); if (null != container && null != container.getHookPointKey() && container.getHookPointKey().equals(this.getKey())) { containers.add(container); } } BeanComparator comparator = new BeanComparator("priority"); Collections.sort(containers, comparator); return containers; } /** * Get the jack to include * @return The bean handling the object to include. */ protected String getObjectName() { return _objectName; } /** * Set the jack to include. * @param objectName The bean handling the object to include. */ public void setObjectName(String objectName) { this._objectName = objectName; } public String getKey() { return _key; } public void setKey(String key) { this._key = key; } private String _objectName; private String _key; }