From: <fg...@us...> - 2007-01-04 17:32:56
|
Revision: 148 http://svn.sourceforge.net/openutils/?rev=148&view=rev Author: fgiust Date: 2007-01-04 09:32:56 -0800 (Thu, 04 Jan 2007) Log Message: ----------- adding elx, su and DAO tlds Modified Paths: -------------- trunk/openutils-tags-spring/pom.xml Added Paths: ----------- trunk/openutils-tags-spring/src/main/java/it/ trunk/openutils-tags-spring/src/main/java/it/openutils/ trunk/openutils-tags-spring/src/main/java/it/openutils/web/ trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/ trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/DaoFunctions.java trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/ElxFunctions.java trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-dao.tld trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-elx.tld trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-su.tld Modified: trunk/openutils-tags-spring/pom.xml =================================================================== --- trunk/openutils-tags-spring/pom.xml 2007-01-04 16:52:28 UTC (rev 147) +++ trunk/openutils-tags-spring/pom.xml 2007-01-04 17:32:56 UTC (rev 148) @@ -13,6 +13,64 @@ <description /> <dependencies> <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.4</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>jstl</groupId> + <artifactId>jstl</artifactId> + <version>1.1.2</version> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>jsp-api</artifactId> + <version>2.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.2</version> + </dependency> + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + <version>1.7.0</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <version>1.0.1</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + <version>2.0.1</version> + <optional>true</optional> + <exclusions> + <exclusion> + <groupId>taglibs</groupId> + <artifactId>standard</artifactId> + </exclusion> + <exclusion> + <groupId>logkit</groupId> + <artifactId>logkit</artifactId> + </exclusion> + <exclusion> + <groupId>avalon-framework</groupId> + <artifactId>avalon-framework</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.13</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> Added: trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/DaoFunctions.java =================================================================== --- trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/DaoFunctions.java (rev 0) +++ trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/DaoFunctions.java 2007-01-04 17:32:56 UTC (rev 148) @@ -0,0 +1,71 @@ +package it.openutils.web.jstl; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; + +import javax.servlet.jsp.PageContext; + +import org.apache.log4j.Logger; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; + + +/** + * EL functions fo simple data access operations. + * @author fgiust + * @version $Revision$ ($Author$) + */ +public class DaoFunctions +{ + + /** + * Logger. + */ + private static Logger log = Logger.getLogger(DaoFunctions.class); + + /** + * Call findAll on a given DAO and retuns the result. The findAll method is caled using reflection, so the DAO + * doesn't need to implement any specific interface. + * @param pageContext jsp page context + * @param daoName dao name, without the "DAO" postfix, automatically added (e.g. "user" for "userDAO"). The full + * name of the dao should be the name of a bean available in spring application context. + * @return List returned by DAO.findAll(). + */ + public static List findAll(PageContext pageContext, String daoName) throws Throwable + { + + String fullDaoName = daoName + "DAO"; + if (log.isDebugEnabled()) + { + log.debug("calling dao:findall for [" + daoName + "]"); + } + + WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(pageContext + .getServletContext()); + + Object dao = context.getBean(fullDaoName); + + Method m = dao.getClass().getMethod("findAll", null); + + List results = null; + + try + { + results = (List) m.invoke(dao, null); + } + catch (InvocationTargetException ex) + { + throw ex.getTargetException(); + } + + if (log.isDebugEnabled()) + { + log.debug("Returning " + results); + } + + return results; + + } + +} Property changes on: trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/DaoFunctions.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/ElxFunctions.java =================================================================== --- trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/ElxFunctions.java (rev 0) +++ trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/ElxFunctions.java 2007-01-04 17:32:56 UTC (rev 148) @@ -0,0 +1,299 @@ +package it.openutils.web.jstl; + +import java.lang.reflect.InvocationTargetException; +import java.util.Collection; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.jstl.core.Config; +import javax.servlet.jsp.jstl.fmt.LocalizationContext; + +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author fgiust + * @version $Revision$ ($Author$) + */ +public class ElxFunctions +{ + + /** + * Logger. + */ + private static Logger log = LoggerFactory.getLogger(ElxFunctions.class); + + /** + * check is a collection is empty. + * @param collection + * @return boolean + */ + public static boolean isCollectionEmpty(Object collection) + { + + if (collection == null) + { + return true; + } + + try + { + if (collection instanceof Collection) + { + return ((Collection) collection).isEmpty(); + } + else if (collection instanceof Map) + { + return ((Map) collection).isEmpty(); + } + } + catch (Throwable e) + { + // catch hibernate lazy initialization errors + log.error("An error occurred while evaluating the elx:isempty function: " + e.getMessage(), e); + return true; + } + + // the "new Throwable()" is used to add a stacktrace + log + .error( + "elx:isempty can be used only with an object of type java.util.Collection or java.util.Map, you are trying to use it with an instance of " + + collection.getClass(), + new Throwable()); + + return true; + + } + + /** + * return the size of the collection. + * @param collection + * @return int + */ + public static int getCollectionSize(Object collection) + { + + if (collection == null) + { + return 0; + } + + try + { + if (collection instanceof Collection) + { + return ((Collection) collection).size(); + } + else if (collection instanceof Map) + { + return ((Map) collection).size(); + } + } + catch (Throwable e) + { + // catch hibernate lazy initialization errors + log.error("An error occurred while evaluating the elx:size function: " + e.getMessage(), e); + return 0; + } + + // the "new Throwable()" is used to add a stacktrace + log + .error( + "elx:size can be used only with an object of type java.util.Collection or java.util.Map, you are trying to use it with an instance of " + + collection.getClass(), + new Throwable()); + return 0; + } + + public static String formatMessage(PageContext pageContext, String key) + { + String title = null; + ResourceBundle bundle = null; + + // standard jstl localizationContest + // check for the localizationContext in applicationScope, set in web.xml + LocalizationContext localization = getLocalizationContext(pageContext); + + if (localization != null) + { + bundle = localization.getResourceBundle(); + } + + if (bundle != null) + { + try + { + title = bundle.getString(key); + } + catch (MissingResourceException e) + { + // ignore + } + } + + return title; + } + + /** + * Check if a given array of Strings contains <em>the String representation</em> of an object. + * @param array String array + * @param value object to search for + * @return <code>true</code> if a array contains a value equals to the String representation of object + */ + public static boolean containsString(String[] array, Object value) + { + if (log.isDebugEnabled()) + { + // log.debug("containsString [" + value + "] in [" + ArrayUtils.toString(array) + "]"); + } + + if (array == null || value == null) + { + return false; + } + + String valueString = value.toString(); + + for (String element : array) + { + if (valueString.equals(element)) + { + return true; + } + } + + return false; + } + + /** + * Compares the String representation of two objects. + * @param one first object to be compared + * @param two second object to be compared + * @return <code>true</code> only if both objects are not null and their String representaion is equals() + */ + public static boolean equalsString(Object one, Object two) + { + if (one == null || two == null) + { + return false; + } + + if (log.isDebugEnabled()) + { + log.debug("Comparing [" + one + "] and [" + two + "]"); + } + + return one.toString().equals(two.toString()); + } + + /** + * Returns a bean property (optionally nested= handling nulls both in bean and property name) + * @param bean bean + * @param property property name, optionally nested + * @return property value, null if bean is null, bean if property is null + * @throws IllegalAccessException + * @throws InvocationTargetException + * @throws NoSuchMethodException + */ + public static Object getProperty(Object bean, String property) + { + if (bean == null) + { + return null; + } + if (StringUtils.isEmpty(property)) + { + return bean; + } + + try + { + if (property.startsWith("(string)")) + { + return StringUtils.substringAfter(property, "(string)"); + } + else + { + return PropertyUtils.getProperty(bean, property); + } + + } + catch (Exception e) + { + log.error("Error while evaluating property \"" + property + "\" in bean " + bean.getClass().getName(), e); + } + + return StringUtils.EMPTY; + } + + /** + * Check if ricambio is into the inverval of tavola verifying dates + * @param tavolaDa start date for tavola + * @param tavolaA end date for tavola + * @param ricambioDa start date for ricambio + * @param ricambioA end date for ricambio + * @return + */ + public static boolean dateRange(java.util.Date tavolaDa, java.util.Date tavolaA, java.util.Date ricambioDa, + java.util.Date ricambioA) + { + long tavDa = (tavolaDa == null) ? 0 : tavolaDa.getTime(); + long tavA = (tavolaA == null) ? Long.MAX_VALUE : tavolaA.getTime(); + + long ricDa = (ricambioDa == null) ? 0 : ricambioDa.getTime(); + long ricA = (ricambioA == null) ? Long.MAX_VALUE : ricambioA.getTime(); + + return (ricDa <= tavA && ricA >= tavDa); + } + + public static String space() + { + return " "; + } + + /** + * Gets the default I18N localization context. + * @param pc Page in which to look up the default I18N localization context + */ + private static LocalizationContext getLocalizationContext(PageContext pc) + { + LocalizationContext locCtxt = null; + + Object obj = Config.find(pc, Config.FMT_LOCALIZATION_CONTEXT); + if (obj == null) + { + return null; + } + + if (obj instanceof LocalizationContext) + { + locCtxt = (LocalizationContext) obj; + } + else + { + // localization context is a bundle basename + locCtxt = getLocalizationContext(pc, (String) obj); + } + + return locCtxt; + } + + private static LocalizationContext getLocalizationContext(PageContext pc, String basename) + { + LocalizationContext locCtxt = null; + ResourceBundle bundle = null; + + if ((basename == null) || basename.equals("")) + { + return new LocalizationContext(); + } + + return locCtxt; + } + +} Property changes on: trunk/openutils-tags-spring/src/main/java/it/openutils/web/jstl/ElxFunctions.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-dao.tld =================================================================== --- trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-dao.tld (rev 0) +++ trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-dao.tld 2007-01-04 17:32:56 UTC (rev 148) @@ -0,0 +1,13 @@ +<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> + <description>DAO Tag Library</description> + <display-name>DAO extension</display-name> + <tlib-version>1.1</tlib-version> + <short-name>dao</short-name> + <uri>dao</uri> + <function> + <name>findAll</name> + <function-class>it.openutils.web.jstl.DaoFunctions</function-class> + <function-signature>java.util.List findAll(javax.servlet.jsp.PageContext, java.lang.String)</function-signature> + </function> +</taglib> \ No newline at end of file Property changes on: trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-dao.tld ___________________________________________________________________ Name: svn:mime-type + text/xml Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-elx.tld =================================================================== --- trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-elx.tld (rev 0) +++ trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-elx.tld 2007-01-04 17:32:56 UTC (rev 148) @@ -0,0 +1,87 @@ +<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" + version="2.0"> + <description>EL extension Tag Library</description> + <display-name>EL extension</display-name> + <tlib-version>1.1</tlib-version> + <short-name>elx</short-name> + <uri>elx</uri> + <tag> + <description>Converts text in the body of the tag to options tags.</description> + <name>stringToOptions</name> + <tag-class>it.openutils.web.jstl.StringToOptionsTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>Separator, defaults to |.</description> + <name>separator</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + <tag> + <name>summary</name> + <tag-class>it.openutils.web.tag.SummaryTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <name>lines</name> + <required>true</required> + </attribute> + <attribute> + <name>charsPerLine</name> + <required>true</required> + </attribute> + <attribute> + <name>ellipses</name> + <required>false</required> + </attribute> + </tag> + <function> + <name>lang</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature>Object chooseLanguage(java.lang.Object)</function-signature> + </function> + <function> + <name>isempty</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature>boolean isCollectionEmpty(java.lang.Object)</function-signature> + </function> + <function> + <name>size</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature>int getCollectionSize(java.lang.Object)</function-signature> + </function> + <function> + <name>fmt</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature> + java.lang.String formatMessage(javax.servlet.jsp.PageContext, java.lang.String) + </function-signature> + </function> + <function> + <name>containsString</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature>boolean containsString(java.lang.String[], java.lang.Object)</function-signature> + </function> + <function> + <name>equalsString</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature>boolean equalsString(java.lang.Object, java.lang.Object)</function-signature> + </function> + <function> + <name>getProperty</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature>java.lang.Object getProperty(java.lang.Object, java.lang.String)</function-signature> + </function> + <function> + <name>space</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature>java.lang.String space()</function-signature> + </function> + <function> + <name>dateRange</name> + <function-class>it.openutils.web.jstl.ElxFunctions</function-class> + <function-signature> + boolean dateRange(java.util.Date, java.util.Date, java.util.Date, java.util.Date) + </function-signature> + </function> +</taglib> \ No newline at end of file Property changes on: trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-elx.tld ___________________________________________________________________ Name: svn:mime-type + text/xml Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native Added: trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-su.tld =================================================================== --- trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-su.tld (rev 0) +++ trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-su.tld 2007-01-04 17:32:56 UTC (rev 148) @@ -0,0 +1,53 @@ +<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> + <description>jakarta commons-lang EL functions</description> + <display-name>Commons lang EL library</display-name> + <tlib-version>1.2</tlib-version> + <short-name>cl</short-name> + <uri>stringutils</uri> + <function> + <name>substringAfter</name> + <function-class>org.apache.commons.lang.StringUtils</function-class> + <function-signature>java.lang.String substringAfter(java.lang.String, java.lang.String)</function-signature> + </function> + <function> + <name>substringBefore</name> + <function-class>org.apache.commons.lang.StringUtils</function-class> + <function-signature>java.lang.String substringBefore(java.lang.String, java.lang.String)</function-signature> + </function> + <function> + <name>substringAfterLast</name> + <function-class>org.apache.commons.lang.StringUtils</function-class> + <function-signature>java.lang.String substringAfterLast(java.lang.String, java.lang.String)</function-signature> + </function> + <function> + <name>substringBeforeLast</name> + <function-class>org.apache.commons.lang.StringUtils</function-class> + <function-signature>java.lang.String substringBeforeLast(java.lang.String, java.lang.String)</function-signature> + </function> + <function> + <name>indexOf</name> + <function-class>org.apache.commons.lang.StringUtils</function-class> + <function-signature>int indexOf(java.lang.String, java.lang.String)</function-signature> + </function> + <function> + <name>split</name> + <function-class>org.apache.commons.lang.StringUtils</function-class> + <function-signature>java.lang.String[] split(java.lang.String, java.lang.String)</function-signature> + </function> + <function> + <name>contains</name> + <function-class>org.apache.commons.lang.ArrayUtils</function-class> + <function-signature>boolean contains(java.lang.Object[], java.lang.Object)</function-signature> + </function> + <function> + <name>getFullStackTrace</name> + <function-class>org.apache.commons.lang.exception.ExceptionUtils</function-class> + <function-signature>java.lang.String getFullStackTrace(java.lang.Throwable)</function-signature> + </function> + <function> + <name>escapeXml</name> + <function-class>org.apache.commons.lang.StringEscapeUtils</function-class> + <function-signature>java.lang.String escapeXml(java.lang.String)</function-signature> + </function> +</taglib> \ No newline at end of file Property changes on: trunk/openutils-tags-spring/src/main/resources/META-INF/openutils-tags-su.tld ___________________________________________________________________ Name: svn:mime-type + text/xml Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |