/* * * Copyright 2008 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 2008 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * */ package com.agiletec.apsadmin.system.tiles.impl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.ServletContext; import org.apache.tiles.impl.BasicTilesContainer; /** * @see com.agiletec.plugins.struts2.tiles.JapsStrutsTilesListener * @author zuanni G.Cocco */ public class JapsBasicTilesContainer extends BasicTilesContainer { @Override public List<String> getResourceNames(String resourceString) { StringTokenizer tokenizer = new StringTokenizer(resourceString, ","); List<String> filenames = new ArrayList<String>(); System.out.println(com.agiletec.apsadmin.system.tiles.impl.JapsBasicTilesContainer.class.getName() + " Tiles Conf files: "); while (tokenizer.hasMoreTokens()) { String currentFilename = tokenizer.nextToken().trim(); int index = currentFilename.indexOf(AXTER); if (-1 == index) { filenames.add(currentFilename); System.out.println(com.agiletec.apsadmin.system.tiles.impl.JapsBasicTilesContainer.class.getName() + " " + currentFilename); } else { List<String> confFiles = new ArrayList<String>(); String rootInspectionDir = currentFilename.substring(0, index); this.inspectResources(currentFilename, rootInspectionDir, confFiles); filenames.addAll(confFiles); } } return filenames; } private void inspectResources(String currentFilenamesConf, String rootInspectionDir, List<String> confFiles) { Set<String> resourcesPath = this.getServletContext().getResourcePaths(rootInspectionDir); Iterator<String> it = resourcesPath.iterator(); while (it.hasNext()) { String current = it.next(); if (!current.endsWith("/") && this.isConfResource(current, currentFilenamesConf)){ confFiles.add(current); System.out.println(com.agiletec.apsadmin.system.tiles.impl.JapsBasicTilesContainer.class.getName() + " " + current); } else { this.inspectResources(currentFilenamesConf, current, confFiles); } } } private boolean isConfResource(String current, String currentFilename) { String regExp = currentFilename.replaceAll(AXTER_REG_EXP, REG_EXP); Pattern p = Pattern.compile(regExp); Matcher m = p.matcher(current); return m.matches(); } public void setServletContext(ServletContext servletContext) { this._servletContext = servletContext; } public ServletContext getServletContext() { return _servletContext; } private ServletContext _servletContext; private final static String REG_EXP = "[\\\\w,\\\\-,_]*"; private final static String AXTER = "**"; private final static String AXTER_REG_EXP = "\\*\\*"; }