1 16 package com.blandware.atleap.webapp.util.core; 17 18 import com.blandware.atleap.webapp.struts.HeritableComponentDefinition; 19 import com.blandware.atleap.webapp.struts.HeritableI18nFactorySet; 20 import org.apache.struts.tiles.DefinitionsFactoryException; 21 import org.apache.struts.tiles.TilesUtil; 22 import org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper; 23 24 import javax.servlet.ServletContext ; 25 import javax.servlet.http.HttpServletRequest ; 26 import java.util.*; 27 28 38 public final class DefinitionUtil { 39 42 private static final String INSTANCE_KEY = "com.blandware.atleap.webapp.util.DefinitionUtil.INSTANCE"; 43 44 47 private DefinitionUtil() { 48 } 49 50 56 public static DefinitionUtil getInstance(ServletContext servletContext) { 57 DefinitionUtil definitionUtil = (DefinitionUtil) servletContext.getAttribute(INSTANCE_KEY); 58 if ( definitionUtil == null ) { 59 definitionUtil = new DefinitionUtil(); 60 servletContext.setAttribute(INSTANCE_KEY, definitionUtil); 61 } 62 return definitionUtil; 63 } 64 65 71 public List getDefinitionsNames(HttpServletRequest request) throws DefinitionsFactoryException { 72 Map definitionsMap = ((HeritableI18nFactorySet) ((ComponentDefinitionsFactoryWrapper) TilesUtil.getDefinitionsFactory(request, request.getSession().getServletContext())).getInternalFactory()).getDefinitions(request, request.getSession().getServletContext()); 73 List names = new ArrayList(definitionsMap.keySet()); 74 return names; 75 } 76 77 83 public List getDefinitions(HttpServletRequest request) throws DefinitionsFactoryException { 84 Map definitionsMap = ((HeritableI18nFactorySet) ((ComponentDefinitionsFactoryWrapper) TilesUtil.getDefinitionsFactory(request, request.getSession().getServletContext())).getInternalFactory()).getDefinitions(request, request.getSession().getServletContext()); 85 List definitions = new ArrayList(definitionsMap.values()); 86 return definitions; 87 } 88 89 98 public List getDescendantDefinitionsNames(String name, HttpServletRequest request, ServletContext servletContext) throws DefinitionsFactoryException { 99 if (name == null) { 100 return new ArrayList(); 101 } 102 103 List allDefinitions = getDefinitionsNames(request); 104 Set descendants = new TreeSet(); 106 Set notDescendants = new TreeSet(); 109 110 for (int i = 0; i < allDefinitions.size(); i++) { 111 String definitionName = (String ) allDefinitions.get(i); 112 if (!descendants.contains(definitionName) && !notDescendants.contains(definitionName)) { 113 Set definitionAndAncestors = new TreeSet(); 117 definitionAndAncestors.add(definitionName); 118 do { 119 definitionName = ((HeritableComponentDefinition) TilesUtil.getDefinition(definitionName, request, servletContext)).getExtends(); 120 if (definitionName != null) { 121 if (name.equals(definitionName) || descendants.contains(definitionName)) { 122 descendants.addAll(definitionAndAncestors); 125 break; 126 } else if (notDescendants.contains(definitionName)) { 127 notDescendants.addAll(definitionAndAncestors); 130 break; 131 } else { 132 definitionAndAncestors.add(definitionName); 134 } 135 } 136 } while (definitionName != null); 137 notDescendants.addAll(definitionAndAncestors); 139 } 140 } 141 142 return new ArrayList(descendants); 143 } 144 } 145 | Popular Tags |