Author: sletellier Date: 2011-06-15 14:46:25 +0200 (Wed, 15 Jun 2011) New Revision: 87 Url: http://chorem.org/repositories/revision/vradi/87 Log: Use struts2-jquery grids'plugins Added: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormGridAction.java trunk/vradi-web/src/main/webapp/WEB-INF/jsp/activeQuery.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/resultGrid.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/savedQueries.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/thesaurusFilter.jsp Removed: trunk/vradi-web/src/main/java/org/chorem/vradi/FormPaginatedList.java trunk/vradi-web/src/main/java/org/chorem/vradi/decorators/ Modified: trunk/pom.xml trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/SearchManager.java trunk/vradi-web/pom.xml trunk/vradi-web/src/main/i18n/jsp.rules trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ThesaurusAction.java trunk/vradi-web/src/main/resources/struts.xml trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formView.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp trunk/vradi-web/src/main/webapp/css/search.css trunk/vradi-web/src/main/webapp/index.jsp Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/pom.xml 2011-06-15 12:46:25 UTC (rev 87) @@ -472,20 +472,7 @@ <version>${struts2Version}</version> </dependency> - <!-- Displaytag --> <dependency> - <groupId>displaytag</groupId> - <artifactId>displaytag</artifactId> - <version>1.2</version> - <exclusions> - <exclusion> - <groupId>org.slf4j</groupId> - <artifactId>jcl104-over-slf4j</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.12.1.GA</version> Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/SearchManager.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/SearchManager.java 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/SearchManager.java 2011-06-15 12:46:25 UTC (rev 87) @@ -165,7 +165,7 @@ criteria.addSortAscending(formPagedResult.getFieldToSort()); } } - criteria.addSortAscending(Form.FQ_FIELD_INFOGENE_ID); +// criteria.addSortAscending(Form.FQ_FIELD_INFOGENE_ID); log.info(criteria); Modified: trunk/vradi-web/pom.xml =================================================================== --- trunk/vradi-web/pom.xml 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/pom.xml 2011-06-15 12:46:25 UTC (rev 87) @@ -129,14 +129,7 @@ <scope>runtime</scope> </dependency> - <!-- Displaytag --> <dependency> - <groupId>displaytag</groupId> - <artifactId>displaytag</artifactId> - <scope>compile</scope> - </dependency> - - <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <scope>runtime</scope> @@ -264,7 +257,6 @@ <s>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</s> <sx>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</sx> <sj>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</sj> - <displaytag>http://displaytag.sourceforge.net/1.2/#displaytag.tld</displaytag> <jsp>http://java.sun.com/JSP/Page</jsp> <decorator> http://www.opensymphony.com/sitemesh/decorator Modified: trunk/vradi-web/src/main/i18n/jsp.rules =================================================================== --- trunk/vradi-web/src/main/i18n/jsp.rules 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/i18n/jsp.rules 2011-06-15 12:46:25 UTC (rev 87) @@ -11,6 +11,3 @@ //s:select/@key //sx:datetimepicker/@key - -//displaytag:column/@title -//displaytag:column/@titleKey Deleted: trunk/vradi-web/src/main/java/org/chorem/vradi/FormPaginatedList.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/FormPaginatedList.java 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/FormPaginatedList.java 2011-06-15 12:46:25 UTC (rev 87) @@ -1,132 +0,0 @@ -package org.chorem.vradi; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.chorem.vradi.beans.FormPagedResult; -import org.chorem.vradi.entities.Form; -import org.chorem.vradi.entities.Infogene; -import org.displaytag.pagination.PaginatedList; -import org.displaytag.properties.SortOrderEnum; -import org.nuiton.wikitty.WikittyProxy; - -import javax.servlet.http.HttpServletRequest; -import java.util.List; - -/** - * @author sletellier - */ -public class FormPaginatedList implements PaginatedList { - - protected static final Log log = LogFactory.getLog(FormPaginatedList.class); - - public static final String DISPLAY_URL_PAGE = "page"; - public static final String DISPLAY_URL_SORT = "sort"; - public static final String DISPLAY_URL_DIR = "dir"; - - protected FormPagedResult result; - protected WikittyProxy proxy; - - public FormPaginatedList(WikittyProxy proxy, int nbForms) { - this.proxy = proxy; - result = new FormPagedResult(); - result.setNbFormsToShow(nbForms); - result.setPageToShow(1); - - // Sort by default by fate descending - result.setAscending(false); - result.setFieldToSort(Infogene.FIELD_INFOGENE_CREATIONDATE); - } - - public FormPagedResult getResult() { - return result; - } - - public void setResult(FormPagedResult result) { - this.result = result; - } - - @Override - public List<Form> getList() { - List<String> formsIdsToShow = result.getFormsIdsToShow(); - - return proxy.restore(Form.class, formsIdsToShow); - } - - @Override - public int getPageNumber() { - return result.getPageToShow(); - } - - @Override - public int getObjectsPerPage() { - return result.getNbFormsToShow(); - } - - @Override - public int getFullListSize() { - return result.getTotalFoundFormNb(); - } - - @Override - public String getSortCriterion() { - return result.getFieldToSort(); - } - - @Override - public SortOrderEnum getSortDirection() { - if (result.isAscending()) { - return SortOrderEnum.ASCENDING; - } else { - return SortOrderEnum.DESCENDING; - } - } - - @Override - public String getSearchId() { - - // Not used - return null; - } - - /** - * Recupere les parametres depuis une requete de servlet. - * - * @param request la requete utilisee pour recuperee les valeur du POJO - * @return l'instance - */ - public FormPaginatedList fromRequest(HttpServletRequest request) { - - // Number of forms by pages - String page = request.getParameter(DISPLAY_URL_PAGE); - if (page != null && !page.trim().isEmpty()) { - Integer pageNumber = Integer.valueOf(page); - if (log.isDebugEnabled()) { - log.debug("change pageNumber : " + pageNumber); - } - result.setPageToShow(pageNumber); - } - - // Search field criteria - String criterion = request.getParameter(DISPLAY_URL_SORT); - if (criterion != null && !criterion.trim().isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("change sortCriterion : " + criterion); - } - result.setFieldToSort(criterion); - } - - // attention, on supose ici qu'on a defini les variables suivantes dans displaytag.properties : - // pagination.sort.asc.value=ascending - // pagination.sort.desc.value=descending - String direction = request.getParameter(DISPLAY_URL_DIR); - if (direction != null && !direction.trim().isEmpty()) { - SortOrderEnum orderEnum = SortOrderEnum.fromName(direction); - if (log.isDebugEnabled()) { - log.debug("change sortDirection : " + orderEnum); - } - boolean ascending = orderEnum.equals(SortOrderEnum.ASCENDING); - result.setAscending(ascending); - } - return this; - } -} Added: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormGridAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormGridAction.java (rev 0) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/FormGridAction.java 2011-06-15 12:46:25 UTC (rev 87) @@ -0,0 +1,173 @@ +package org.chorem.vradi.actions; + +import org.apache.struts2.interceptor.ServletRequestAware; +import org.chorem.vradi.beans.FormPagedResult; +import org.chorem.vradi.beans.QueryParameters; +import org.chorem.vradi.entities.Form; +import org.chorem.vradi.services.VradiException; +import org.chorem.vradi.services.search.UnsupportedQueryException; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * Action to display struts2-jquery grid + * + * @author sletellier + */ +public class FormGridAction extends VradiBaseAction implements ServletRequestAware { + + protected HttpServletRequest request; + //Your result List + protected List<Form> gridModel; + //get how many rows we want to have into the grid - rowNum attribute in the grid + protected Integer rows = 0; + //Get the requested page. By default grid sets this to 1. + protected Integer page = 0; + // sorting order - asc or desc + protected String sord; + // get index row - i.e. user click to sort. + protected String sidx; + // Search Field + protected String searchField; + // The Search String + protected String searchString; + // he Search Operation ['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc'] + protected String searchOper; + // Your Total Pages + protected Integer total = 0; + // All Record + protected Integer records = 0; + protected String query; + + @Override + public void setServletRequest(HttpServletRequest request) { + this.request = request; + } + + public List<Form> getGridModel() { + return gridModel; + } + + public void setGridModel(List<Form> gridModel) { + this.gridModel = gridModel; + } + + public Integer getRows() { + return rows; + } + + public void setRows(Integer rows) { + this.rows = rows; + } + + public Integer getPage() { + return page; + } + + public void setPage(Integer page) { + this.page = page; + } + + public String getSord() { + return sord; + } + + public void setSord(String sord) { + this.sord = sord; + } + + public String getSidx() { + return sidx; + } + + public void setSidx(String sidx) { + this.sidx = sidx; + } + + public String getSearchField() { + return searchField; + } + + public void setSearchField(String searchField) { + this.searchField = searchField; + } + + public String getSearchString() { + return searchString; + } + + public void setSearchString(String searchString) { + this.searchString = searchString; + } + + public String getSearchOper() { + return searchOper; + } + + public void setSearchOper(String searchOper) { + this.searchOper = searchOper; + } + + public Integer getTotal() { + return total; + } + + public void setTotal(Integer total) { + this.total = total; + } + + public Integer getRecords() { + return records; + } + + public void setRecords(Integer records) { + this.records = records; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public String getJSON() { + return execute(); + } + + /** + * Initializes everything before displaying the home page + */ + public String execute() { + + // Build search + QueryParameters queryParameters = new QueryParameters(getQuery()); + + // Do search + FormPagedResult result = new FormPagedResult(); + result.setNbFormsToShow(getRows()); + result.setPageToShow(getPage()); + result.setAscending(getSord().equalsIgnoreCase("asc")); + result.setFieldToSort(getSidx()); + try { + + result = getDataService().findForms(queryParameters, result); + } catch (VradiException eee) { + log.error("Failed to execute query", eee); + } catch (UnsupportedQueryException eee) { + log.error("Unsuported query", eee); + } + + List<String> formsIdsToShow = result.getFormsIdsToShow(); + List<Form> forms = getProxy().restore(Form.class, formsIdsToShow); + setGridModel(forms); + setRecords(result.getTotalFoundFormNb()); + + //calculate the total pages for the query + setTotal((int) Math.ceil((double)getRecords() / (double)getRows())); + + return SUCCESS; + } +} Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java 2011-06-15 12:46:25 UTC (rev 87) @@ -1,14 +1,9 @@ package org.chorem.vradi.actions; -import org.apache.commons.lang.StringUtils; +import com.opensymphony.xwork2.ActionContext; import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.vradi.FormPaginatedList; -import org.chorem.vradi.beans.FormPagedResult; -import org.chorem.vradi.beans.QueryParameters; import org.chorem.vradi.entities.Query; import org.chorem.vradi.entities.VradiUser; -import org.chorem.vradi.services.VradiException; -import org.chorem.vradi.services.search.UnsupportedQueryException; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; @@ -24,10 +19,13 @@ public class SearchAction extends VradiBaseAction implements ServletRequestAware { private static final long serialVersionUID = -3735250067223062719L; - public static final String REQUEST_ATTRIBUTE_FORMS = "forms"; private static final int DEFAULT_NB_FORMS = 10; + static public SearchAction getAction() { + return (SearchAction) ActionContext.getContext().get(CONTEXT_ACTION_KEY); + } + protected int nbForms = DEFAULT_NB_FORMS; protected String query; protected String queryName; @@ -35,10 +33,6 @@ protected List<Query> lastQueries; protected boolean queryActive; - // Name of submit - protected String switchUserQueryActivation; - protected String saveRequest; - public int getNbForms() { return nbForms; } @@ -47,22 +41,6 @@ this.nbForms = nbForms; } - public String getSaveRequest() { - return saveRequest; - } - - public void setSaveRequest(String saveRequest) { - this.saveRequest = saveRequest; - } - - public String getSwitchUserQueryActivation() { - return switchUserQueryActivation; - } - - public void setSwitchUserQueryActivation(String switchUserQueryActivation) { - this.switchUserQueryActivation = switchUserQueryActivation; - } - public String getQueryName() { return queryName; } @@ -100,53 +78,38 @@ */ public String execute() { - // Activate or not query for user, if it's the first one, user and client will - // be created to add request. It will be automaticly added to email binding. VradiUser user = getUser(); - boolean doSwithUserQueryActivation = !StringUtils.isEmpty(switchUserQueryActivation); - if (doSwithUserQueryActivation) { - queryActive = getVradiSession().getDataService().switchUserQueryActivation(user, queryName, query); - } - FormPaginatedList paginatedList = new FormPaginatedList(getProxy(), getNbForms()); - // Retrive paginatedList and fill by request params - paginatedList.fromRequest(request); + // Check if request is active / inactive + this.queryActive = getVradiSession().getDataService().checkRequestIsActive(user, queryName); - // Build search - QueryParameters queryParameters = new QueryParameters(query); - - // Do search - try { - FormPagedResult result = paginatedList.getResult(); - FormPagedResult forms = getDataService().findForms(queryParameters, result); - paginatedList.setResult(forms); - } catch (VradiException eee) { - log.error("Failed to execute query", eee); - } catch (UnsupportedQueryException eee) { - log.error("Unsuported query", eee); + // Retrieve last requests + Set<String> queriesId = user.getQueries(); + if (queriesId != null) { + this.lastQueries = getProxy().restore(Query.class, new ArrayList<String>(queriesId)); } - // Save request played - if ((!StringUtils.isEmpty(saveRequest) || - doSwithUserQueryActivation) && - !StringUtils.isEmpty(queryName)) { + return SUCCESS; + } - user = getVradiSession().getDataService().saveQuery(user, queryName, query); + public String saveQuery() { - setUser(user); + VradiUser user = getUser(); - // Check if request is active / inactive - this.queryActive = getVradiSession().getDataService().checkRequestIsActive(user, queryName); - } + user = getVradiSession().getDataService().saveQuery(user, queryName, query); - // Retrieve last requests - Set<String> queriesId = user.getQueries(); - if (queriesId != null) { - this.lastQueries = getProxy().restore(Query.class, new ArrayList<String>(queriesId)); - } + setUser(user); - request.setAttribute(REQUEST_ATTRIBUTE_FORMS, paginatedList); + return SUCCESS; + } + public String switchQueryActivation() { + // Activate or not query for user, if it's the first one, user and client will + // be created to add request. It will be automaticly added to email binding. + VradiUser user = getUser(); + queryActive = getVradiSession().getDataService().switchUserQueryActivation(user, queryName, query); + return SUCCESS; } + } \ No newline at end of file Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ThesaurusAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ThesaurusAction.java 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/ThesaurusAction.java 2011-06-15 12:46:25 UTC (rev 87) @@ -1,6 +1,7 @@ package org.chorem.vradi.actions; import com.jgeppert.struts2.jquery.tree.result.TreeNode; +import com.opensymphony.xwork2.ActionContext; import org.apache.commons.lang.StringUtils; import org.apache.struts2.interceptor.ServletRequestAware; import org.chorem.vradi.entities.RootThesaurus; @@ -23,6 +24,10 @@ private static final long serialVersionUID = -2886756982077980790L; + static public ThesaurusAction getAction() { + return (ThesaurusAction) ActionContext.getContext().get(CONTEXT_ACTION_KEY); + } + public static final String THESAURUS_NAME_REQUEST = "thesaurusNameRequest"; protected List<TreeNode> nodes = new ArrayList<TreeNode>(); @@ -33,16 +38,6 @@ public String execute() { - if (id == null) { - // Store in session to keep it - request.getSession().setAttribute(THESAURUS_NAME_REQUEST, thesaurusNameRequest); - return SUCCESS; - } - else { - // Retrieve from session - this.thesaurusNameRequest = (String)request.getSession().getAttribute(THESAURUS_NAME_REQUEST); - } - if ("0".equals(id)) { List<RootThesaurus> rootThesaurus; try { @@ -86,6 +81,11 @@ return SUCCESS; } + public String filter() throws Exception { + log.info("Filter thesaurus with : " + getThesaurusNameRequest()); + return "success"; + } + @Override public void setServletRequest(HttpServletRequest request) { this.request = request; Modified: trunk/vradi-web/src/main/resources/struts.xml =================================================================== --- trunk/vradi-web/src/main/resources/struts.xml 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/resources/struts.xml 2011-06-15 12:46:25 UTC (rev 87) @@ -73,7 +73,7 @@ <package name="login" extends="loginArea"> <action name="register_*" method="{1}" class="org.chorem.vradi.actions.RegisterAction"> <result name="input">/WEB-INF/jsp/register.jsp</result> - <result type="redirectAction">search</result> + <result type="redirectAction">searchView</result> </action> <action name="forgotPassword_*" method="{1}" class="org.chorem.vradi.actions.ForgotPasswordAction"> <result name="input">/WEB-INF/jsp/forgotPassword.jsp</result> @@ -97,21 +97,28 @@ | Change local +--> <action name="locale" class="org.chorem.vradi.actions.LocaleAction"> - <result type="redirect">search.action</result> + <result type="redirect">searchView.action</result> </action> <!-- | Search +--> - <action name="search" class="org.chorem.vradi.actions.SearchAction"> + <action name="searchView" class="org.chorem.vradi.actions.SearchAction"> <result>/WEB-INF/jsp/search.jsp</result> - <result name="input" type="redirectAction">search</result> </action> <!-- + | Search + +--> + <action name="saveQuery" method="saveQuery" class="org.chorem.vradi.actions.SearchAction"> + <param name="query"/> + <param name="queryName"/> + <result type="redirect">/fragment/savedQuery.action</result> + </action> + + <!-- | Thesaurus +--> - <action name="thesaurus" class="org.chorem.vradi.actions.ThesaurusAction"> <param name="thesaurusNameRequest"/> <result name="success" type="json"> @@ -120,6 +127,14 @@ </action> <!-- + | Form grid + +--> + <action name="formGrid" class="org.chorem.vradi.actions.FormGridAction"> + <param name="query"/> + <result name="success" type="json"/> + </action> + + <!-- | Affiche le détail du formulaire +--> <action name="formView/*" class="org.chorem.vradi.actions.FormViewAction"> @@ -175,6 +190,41 @@ <action name="userInfo" class="org.chorem.vradi.actions.RestoreUserAction"> <result>/WEB-INF/jsp/userInfo.jsp</result> </action> + <!-- + | genere un thesaurus filtre + +--> + <action name="thesaurusFilter" class="org.chorem.vradi.actions.ThesaurusAction" method="filter"> + <result>/WEB-INF/jsp/thesaurusFilter.jsp</result> + </action> + <!-- + | genere la grille des resultats + +--> + <action name="search" class="org.chorem.vradi.actions.SearchAction"> + <result>/WEB-INF/jsp/resultGrid.jsp</result> + </action> + <!-- + | genere le bouton d'activation des queries + +--> + <action name="activeQuery" class="org.chorem.vradi.actions.SearchAction"> + <result>/WEB-INF/jsp/activeQuery.jsp</result> + </action> + + <!-- + | Switch query activation + +--> + <action name="switchQueryActivation" method="switchQueryActivation" class="org.chorem.vradi.actions.SearchAction"> + <param name="query"/> + <param name="queryName"/> + <result>/WEB-INF/jsp/activeQuery.jsp</result> + </action> + + <!-- + | Save query + +--> + <action name="savedQuery" class="org.chorem.vradi.actions.SearchAction"> + <result>/WEB-INF/jsp/savedQueries.jsp</result> + </action> + </package> <package name="ajax" namespace="/ajax" extends="restrictedArea"> Added: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/activeQuery.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/activeQuery.jsp (rev 0) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/activeQuery.jsp 2011-06-15 12:46:25 UTC (rev 87) @@ -0,0 +1,39 @@ +<%@ page import="org.chorem.vradi.actions.SearchAction" %> +<%@ page import="com.opensymphony.xwork2.ActionContext" %> +<%@taglib prefix="s" uri="/struts-tags"%> +<%@taglib prefix="sj" uri="/struts-jquery-tags" %> + +<% +SearchAction action = SearchAction.getAction(); +String query = action.getQuery(); +String queryName = action.getQueryName(); +boolean queryActive = action.isQueryActive(); +ActionContext.getContext().put("queryActive", queryActive); +ActionContext.getContext().put("query", query); +ActionContext.getContext().put("queryName", queryName); +%> + +<s:url id="switchQueryUrl" action="switchQueryActivation"> + <s:param name="query"> + <s:property value="query"/> + </s:param> + <s:param name="queryName"> + <s:property value="queryName"/> + </s:param> +</s:url> + +<s:set id="queryActiveText"> + <s:if test="queryActive"> + <s:text name="vradi.search.unActivateQuery"/> + </s:if> + <s:else> + <s:text name="vradi.search.activateQuery"/> + </s:else> +</s:set> + +<sj:submit id="swithActivateQuery" + href="%{switchQueryUrl}" + value="%{queryActiveText}" + indicator="indicator-activeQuery" + targets="activeQueryPanel" + button="true"/> Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formView.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formView.jsp 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/formView.jsp 2011-06-15 12:46:25 UTC (rev 87) @@ -1,7 +1,4 @@ <%@ page import="org.chorem.vradi.entities.Form" %> -<%@ page import="org.chorem.vradi.entities.FormImpl" %> -<%@ page import="com.opensymphony.xwork2.ActionContext" %> -<%@ page import="org.omg.DynamicAny.FieldNameHelper" %> <%@ page import="org.nuiton.wikitty.entities.Wikitty" %> <%@ page import="org.nuiton.wikitty.entities.WikittyExtension" %> <%@ page import="org.chorem.vradi.VradiSession" %> Added: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/resultGrid.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/resultGrid.jsp (rev 0) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/resultGrid.jsp 2011-06-15 12:46:25 UTC (rev 87) @@ -0,0 +1,57 @@ +<%@ page import="org.chorem.vradi.entities.Infogene" %> +<%@ page import="org.chorem.vradi.actions.SearchAction" %> +<%@ page import="com.opensymphony.xwork2.ActionContext" %> + +<%@taglib prefix="s" uri="/struts-tags"%> +<%@taglib prefix="sjg" uri="/struts-jquery-grid-tags"%> + +<% +SearchAction action = SearchAction.getAction(); +String query = action.getQuery(); +ActionContext.getContext().put("query", query); +%> + +<s:set id="creationDateText"> + <s:text name="vradi.form.creationDate"/> +</s:set> +<s:set id="objetText"> + <s:text name="vradi.form.object"/> +</s:set> +<s:set id="fqCreationDate"> + <%=Infogene.FQ_FIELD_INFOGENE_CREATIONDATE%> +</s:set> +<s:set id="fqObjet"> + <%=Infogene.FQ_FIELD_INFOGENE_OBJET%> +</s:set> + +<s:url id="formResultUrl" action="formGrid"> + <s:param name="query"> + <s:property value="query"/> + </s:param> +</s:url> + +<sjg:grid id="formResult" + dataType="json" + href="%{formResultUrl}" + pager="true" + gridModel="gridModel" + rowList="10,100,1000" + rowNum="10" + rownumbers="true" + autowidth="true" + onSelectRowTopics="rowselect"> + + <sjg:gridColumn name="creationDate" + index="%{#fqCreationDate}" + title="%{#creationDateText}" + formatter="date" + formatoptions="{newformat : 'd/m/Y H:i', srcformat : 'Y-m-d H:i:s'}" + sortable="true" + width="30"/> + + <sjg:gridColumn name="objet" + index="%{#fqObjet}" + title="%{#objetText}" + sortable="true"/> + +</sjg:grid> \ No newline at end of file Added: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/savedQueries.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/savedQueries.jsp (rev 0) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/savedQueries.jsp 2011-06-15 12:46:25 UTC (rev 87) @@ -0,0 +1,20 @@ +<%@ page import="org.chorem.vradi.actions.SearchAction" %> +<%@ page import="com.opensymphony.xwork2.ActionContext" %> +<%@ page import="org.chorem.vradi.entities.Query" %> +<%@ page import="java.util.List" %> +<%@taglib prefix="s" uri="/struts-tags"%> +<%@taglib prefix="sj" uri="/struts-jquery-tags" %> + +<% +SearchAction action = SearchAction.getAction(); +List<Query> lastQueries = action.getLastQueries(); +ActionContext.getContext().put("lastQueries", lastQueries); +%> + +<s:select id="lastQueries" + name="lastQueries" + listKey="content" + listValue="name" + list="lastQueries" + emptyOption="true" + onchange="form.elements['query'].innerHTML = this.options[this.selectedIndex].value"/> \ No newline at end of file Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp 2011-06-15 12:46:25 UTC (rev 87) @@ -1,21 +1,31 @@ <%@page import="org.chorem.vradi.entities.Infogene"%> -<%@page import="org.chorem.vradi.decorators.EscapeScriptColomnDecorator" %> <%@page import="org.chorem.vradi.entities.Form" %> -<%@page import="org.chorem.vradi.decorators.DateFormatColumnDecorator" %> +<%@ page import="org.chorem.vradi.actions.SearchAction" %> +<%@ page import="com.opensymphony.xwork2.ActionContext" %> <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> -<%@taglib prefix="displaytag" uri="http://displaytag.sf.net"%> <%@taglib prefix="sj" uri="/struts-jquery-tags" %> <%@taglib prefix="sjt" uri="/struts-jquery-tree-tags" %> +<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags"%> <html> <head> <s:url var="css" value="/css/search.css" /> <link href="${css}" rel="stylesheet" type="text/css" /> <title><s:text name="vradi.search.title" /></title> - <s:head /> - <sj:head/> + <sj:head compressed="false" + jquerytheme="redmond" + debug="true" + jqueryui="true"/> <script type="text/javascript"> + <%-- Table --%> + $.subscribe('rowselect', function(event, data) { + var id = event.originalEvent.id; + var wikittyId = id.substring(10, id.length); + window.open("/formView/" + wikittyId + ".action"); + }); + + <%-- Thesaurus --%> $.subscribe('treeClicked', function(event, data) { var item = event.originalEvent.data.rslt.obj; var parent = item.parentsUntil(".jstree", "li"); @@ -32,109 +42,93 @@ } finalName = rootName + ":\"" + item.text().trim() + "\""; } - $('#searchArea')[0].innerHTML += finalName.trim(); + $('#searchArea')[0].value += finalName.trim(); }); - - function updateThesaurus() { - - // Send thesaurus filter - var xhr = new XMLHttpRequest(); - var thesaurusUrl = getThesaurusUrl(); - xhr.open('GET', thesaurusUrl, true); - xhr.send(null); - - // Refresh tree - $('#thesaurus').jstree("refresh"); - alert(url); - } - - function getThesaurusUrl() { - var thesaurusNameRequest = $("#thesaurusNameRequestArea")[0].value; - return "/thesaurus.action?thesaurusNameRequest=" + thesaurusNameRequest; - } </script> </head> <body> <div> <div id="thesaurusPanel" class="left"> - <input type="text" id="thesaurusNameRequestArea"/> - <s:set id="thesaurusFilterButtonText"> - <s:text name="vradi.search.thesaurusFilterButton"/> - </s:set> - <input type="submit" - value="${thesaurusFilterButtonText}" - onclick="updateThesaurus()"/> - <s:url id="thesaurusDataUrl" action="thesaurus"/> - <sjt:tree - id="thesaurus" - href="%{thesaurusDataUrl}" - onClickTopics="treeClicked"/> + <form id="thesaurusForm" + action="/fragment/thesaurusFilter.action"> + <s:textfield id="thesaurusNameRequestField" + cssClass="left" + theme="simple" + name="thesaurusNameRequest"/> + <s:set id="thesaurusFilterButtonText"> + <s:text name="vradi.search.thesaurusFilterButton"/> + </s:set> + <div class="right"> + <sj:submit id="thesaurusSubmit" + value="%{#thesaurusFilterButtonText}" + indicator="indicator-thesaurus" + targets="thesaurusDiv" + button="true"/> + </div> + </form> + <sj:div id="thesaurusDiv" href="/fragment/thesaurusFilter.action" indicator="indicator-thesaurus"> + <img id="indicator-thesaurus" src="/img/indicator.gif" alt="Loading..." style="display:none"/> + </sj:div> + </div> <div id="contentPanel"> <div id="searchPanel"> - <s:form id="searchForm" action="search" method="post" theme="simple"> - <s:select id="lastQueries" - name="lastQueries" - listKey="content" - listValue="name" - list="lastQueries" - emptyOption="true" - onchange="form.elements['query'].innerHTML = this.options[this.selectedIndex].value"/> - <s:text name="vradi.search.queryName"/> - <s:textfield id="queryName" name="queryName"/></br> + <form id="searchForm" action="/fragment/search.action"> + + <div id="queriesPanel"> + <sj:div id="savedQueriesPanel" + cssClass="left" + href="/fragment/savedQuery.action" + indicator="indicator-savedQuery"> + <img id="indicator-savedQuery" src="/img/indicator.gif" alt="Loading..." style="display:none"/> + </sj:div> + + <s:text name="vradi.search.queryName"/> + <s:textfield id="queryName" + cssClass="right" + theme="simple" + name="queryName" + size="40"/> + </div> <div id="queryPanel"> <s:textarea id="searchArea" name="query" cols="160" - rows="4"/> + rows="6"/> </div> <div id="searchActionPanel"> - <s:submit key="vradi.search.saveQuery" name="saveRequest"/></br> - <s:if test="queryActive"> - <s:submit key="vradi.search.unActivateQuery" name="switchUserQueryActivation"/> - </s:if> - <s:else> - <s:submit key="vradi.search.activateQuery" name="switchUserQueryActivation"/> - </s:else> - </br> - <s:submit key="vradi.search.submit" name="search"/> - <s:select label="nbForms" - name="nbForms" - headerKey="10" - headerValue="10" - list="#{100:'100',1000:'1000'}" - value="nbForms" - required="true"/> - </div> - </s:form> - </div> - <div id="resultPanel"> - <displaytag:table name="forms" - sort="list" - id="f" - requestURI="search.action"> - <displaytag:column titleKey="vradi.form.creationDate" - property="<%=Infogene.FIELD_INFOGENE_CREATIONDATE%>" - sortable="true" - href='<%=f == null ? null : "formView/" + ((Form)f).getWikittyId() + ".action"%>' - sortProperty="<%=Infogene.FQ_FIELD_INFOGENE_CREATIONDATE%>" - decorator="<%=DateFormatColumnDecorator.class.getName()%>"/> + <s:url id="saveQueryUrl" action="saveQuery"/> - <displaytag:column titleKey="vradi.form.object" - property="<%=Infogene.FIELD_INFOGENE_OBJET%>" - sortable="true" - href='<%=f == null ? null : "formView/" + ((Form)f).getWikittyId() + ".action"%>' - sortProperty="<%=Infogene.FQ_FIELD_INFOGENE_OBJET%>" - decorator="<%=EscapeScriptColomnDecorator.class.getName()%>"/> + <s:set id="searchText"> + <s:text name="vradi.search.saveQuery"/> + </s:set> + <sj:submit id="saveQuery" + href="%{saveQueryUrl}" + value="%{#searchText}" + indicator="indicator-savedQuery" + targets="savedQueriesPanel" + button="true"/> - <displaytag:column titleKey="common.action" class="action"> - <s:set name="formNoteListUrl"><%="formNoteList/" + ((Form)f).getWikittyId()%></s:set> - <s:a action="%{formNoteListUrl}"><s:text name="vradi.search.formNoteEdit"/></s:a> - </displaytag:column> - </displaytag:table> + <sj:div id="activeQueryPanel" href="/fragment/activeQuery.action" indicator="indicator-activeQuery"> + <img id="indicator-activeQuery" src="/img/indicator.gif" alt="Loading..." style="display:none"/> + </sj:div> + <s:set id="searchText"> + <s:text name="vradi.search.submit"/> + </s:set> + + <sj:submit id="search" + value="%{#searchText}" + indicator="indicator-grid" + targets="resultPanel" + button="true"/> + </div> + </form> </div> + <sj:div id="resultPanel" href="/fragment/search.action" indicator="indicator-grid"> + <img id="indicator-grid" src="/img/indicator.gif" alt="Loading..." style="display:none"/> + </sj:div> </div> </div> </body> Added: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/thesaurusFilter.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/thesaurusFilter.jsp (rev 0) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/thesaurusFilter.jsp 2011-06-15 12:46:25 UTC (rev 87) @@ -0,0 +1,21 @@ +<%@page import="com.opensymphony.xwork2.ActionContext"%> +<%@ page import="org.chorem.vradi.actions.ThesaurusAction" %> +<%@page contentType="text/html" pageEncoding="UTF-8"%> + +<%@taglib prefix="s" uri="/struts-tags"%> +<%@ taglib prefix="sjt" uri="/struts-jquery-tree-tags" %> + +<% +ThesaurusAction action = ThesaurusAction.getAction(); +String thesaurusNameRequest = action.getThesaurusNameRequest(); +ActionContext.getContext().put("thesaurusNameRequest", thesaurusNameRequest); +%> + +<s:url id="thesaurusDataUrl" action="thesaurus"> + <s:param name="thesaurusNameRequest"> + <s:property value="thesaurusNameRequest"/> + </s:param> +</s:url> +<sjt:tree id="thesaurus" + href="%{thesaurusDataUrl}" + onClickTopics="treeClicked"/> \ No newline at end of file Modified: trunk/vradi-web/src/main/webapp/css/search.css =================================================================== --- trunk/vradi-web/src/main/webapp/css/search.css 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/webapp/css/search.css 2011-06-15 12:46:25 UTC (rev 87) @@ -1,6 +1,7 @@ /* Layout */ + div.left{ - width: 20%; + /*width: 20%;*/ float:left; } @@ -8,6 +9,10 @@ float:right; } +.left{ + float:left; +} + .button{ margin-top:20px; height:31px; @@ -18,12 +23,20 @@ padding:2px; } +#queriesPanel { + width: 70%; +} + +#thesaurusForm { + height: 5%; +} + #searchActionPanel { float:right; } #searchPanel { - height: 20%; + height: 150px; } #contentPanel { @@ -33,51 +46,9 @@ #queryPanel { float:left; - width: 80%; + width: 70%; } textarea { width: 100%; } - -/* Tableau */ -table {border-collapse:collapse; width: 100%;} -.subTable th {font-weight: normal;} - -td { - border: 1px solid black; - padding:5px;} -td.action {text-align: right; white-space:nowrap;} -th { - background-color: #eee; - border: 1px solid black; - padding: 4px; -} - -th a:hover {color: black;} -th a,th a:visited { - text-decoration: none; - font-weight:bold; - color: black; - background-repeat: no-repeat; -} - -/* Tri sur une table */ -th.sorted a,th.sortable a {background-position: right; display: block;} -th.sortable a {background-image: url(../img/arrow_off.png);} -th.order1 a {background-image: url(../img/arrow_down.png);} -th.order2 a {background-image: url(../img/arrow_up.png);} -tr.odd:hover, tr.even:hover { background-color:#deecf1; cursor: pointer;} - -/* Pagination sur une table */ -span.pagebanner, span.pagelinks { - background-color: #eee; - border: 1px solid black; - padding: 2px; - display: block; - text-align: center; -} - -span.pagebanner{margin-top: 10px; border-bottom: none;} -span.pagelinks {border-top: none; margin-bottom: 10px;} -span.pagelinks a, span.pagelinks a:visited{color:black;} Modified: trunk/vradi-web/src/main/webapp/index.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/index.jsp 2011-06-08 16:45:16 UTC (rev 86) +++ trunk/vradi-web/src/main/webapp/index.jsp 2011-06-15 12:46:25 UTC (rev 87) @@ -1,3 +1,3 @@ <% -response.sendRedirect("search.action"); +response.sendRedirect("searchView.action"); %> \ No newline at end of file