r76 - in trunk: vradi-entities/src/main/xmi vradi-services/src/main/java/org/chorem/vradi vradi-services/src/main/java/org/chorem/vradi/beans vradi-services/src/main/java/org/chorem/vradi/services vradi-services/src/main/java/org/chorem/vradi/services/managers vradi-services/src/test/java/org/chorem/vradi vradi-services/src/test/java/org/chorem/vradi/services vradi-services/src/test/java/org/chorem/vradi/services/managers vradi-services-web/src/main/resources vradi-services-web/src/test/reso
Author: sletellier Date: 2011-05-30 19:11:34 +0200 (Mon, 30 May 2011) New Revision: 76 Url: http://chorem.org/repositories/revision/vradi/76 Log: - Add query entity - Depreciate QueryBean - Refactor Services - Refactor Swing ui query selection - Refactor web query selection Added: trunk/vradi-services-web/src/main/resources/vradi-services.properties Removed: trunk/vradi-services/src/test/java/org/chorem/vradi/beans/ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestListUI.jaxx Modified: trunk/vradi-entities/src/main/xmi/vradi.zargo trunk/vradi-services-web/src/test/resources/vradi-services.properties trunk/vradi-services/src/main/java/org/chorem/vradi/VradiServiceConfiguration.java trunk/vradi-services/src/main/java/org/chorem/vradi/beans/QueryBean.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/ServiceMigration.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataService.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataServiceImpl.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageService.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageServiceImpl.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ClientManager.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/FormManager.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/SearchManager.java trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ThesaurusManager.java trunk/vradi-services/src/test/java/org/chorem/vradi/services/VradiStorageServiceTest.java trunk/vradi-services/src/test/java/org/chorem/vradi/services/managers/SearchManagerTest.java trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/AdminHandler.java trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminGroupUI.jaxx trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminThesaurusHandler.java trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestSelectUI.jaxx trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/popups/ThesaurusQueryChangesHandler.java trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/QueryCellEditor.java trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/ThesaurusChangesTreeTableModel.java trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/offer/RequestFormViewHandler.java trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/search/SearchHandler.java trunk/vradi-swing/src/main/resources/vradi.properties trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties trunk/vradi-web/src/main/resources/struts.xml trunk/vradi-web/src/main/webapp/WEB-INF/jsp/inc/footer.jsp trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp Modified: trunk/vradi-entities/src/main/xmi/vradi.zargo =================================================================== (Binary files differ) Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/VradiServiceConfiguration.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/VradiServiceConfiguration.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/VradiServiceConfiguration.java 2011-05-30 17:11:34 UTC (rev 76) @@ -178,12 +178,12 @@ SERVLET_PORT( "vradi.remote.servlet.port", _("vradi.config.remote.servlet.port.description"), - "0", Integer.class, false, false), + "9000", Integer.class, false, false), SERVICE_PORT( "vradi.remote.service.port", _("vradi.config.remote.service.port.description"), - "0", Integer.class, false, false), + "9000", Integer.class, false, false), DATA_DIR( "vradi.data.dir", Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/beans/QueryBean.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/beans/QueryBean.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/beans/QueryBean.java 2011-05-30 17:11:34 UTC (rev 76) @@ -25,10 +25,12 @@ import au.com.bytecode.opencsv.CSVParser; import au.com.bytecode.opencsv.CSVWriter; +import org.chorem.vradi.entities.Query; +import org.chorem.vradi.entities.QueryImpl; +import org.nuiton.wikitty.WikittyProxy; import java.io.IOException; import java.io.Serializable; -import java.io.StringWriter; /** * Query bean. @@ -40,131 +42,71 @@ * @see CSVWriter * @see CSVParser * @since 16 mars 2010 14:25:12 + * @deprecated prefer use directly {@link org.chorem.vradi.entities.Query} */ +@Deprecated public final class QueryBean implements Serializable { private static final long serialVersionUID = 2L; - protected final String queryLine; + // Group id + protected Query query; + protected String id; + protected String name; + protected String content; + protected String description; - protected final String[] queryArray; - - protected final String id; - public QueryBean() { - id = null; - queryLine = ""; - queryArray = new String[3]; } /** * Decode the specified <code>queryLine</code>. The queryLine must be CSV formatted. * - * @param queryLine the formatted query. + * @param queryId is now Query WikittyId * @throws IOException if <code>queryLine</code> is badly formatted. */ - public QueryBean(String queryLine) throws IOException { - this(queryLine, null); + public QueryBean(WikittyProxy proxy, String queryId) { + this(proxy, queryId, null); } - public QueryBean(String queryLine, String id) throws IOException { - this.id = id; - this.queryLine = queryLine; - queryArray = decode(queryLine, 3); - } - - /** - * Creates a CSV formatted query from the specified <code>queryArray</code>. - * - * @param queryArray the string composing the query - */ - private QueryBean(String[] queryArray, String id) { - if (queryArray.length < 3) { - throw new IllegalArgumentException("queryArray length is less than 3"); + public QueryBean(WikittyProxy proxy, String queryId, String groupId) { + this.id = groupId; + if(queryId != null) { + Query query = proxy.restore(Query.class, queryId); + fromQuery(query); } - - this.id = id; - this.queryArray = queryArray.clone(); - queryLine = encode(queryArray); } - public String getQueryLine() { - return queryLine; - } + // Was "request, name, desc" +// public String getQueryLine() { +// return queryLine; +// } public String getQuery() { - return queryArray[0]; + return content; } public String getName() { - return queryArray[1]; + return name; } public String getDescription() { - return queryArray[2]; + return description; } - public String getCSVQuery() { - return queryLine; + public void setQuery(String value) { + this.content = value; } - public String[] toArray() { - return queryArray; + public void setName(String value) { + this.name = name; } - public QueryBean setQuery(String value) { - return create(value, 0); + public void setDescription(String value) { + this.description = value; } - public QueryBean setName(String value) { - return create(value, 1); - } - - public QueryBean setDescription(String value) { - return create(value, 2); - } - - private QueryBean create(String value, int pos) { - String[] newArray = queryArray.clone(); - newArray[pos] = value; - return new QueryBean(newArray, id); - } - /** - * Parse the specified line and returns a string array of the specified size. - * - * @param line the string to parse - * @return the comma-tokenized list of elements - * @throws IOException - */ - static String[] decode(String line, int size) throws IOException { - CSVParser csvParser = new CSVParser(); - String[] parseLine = csvParser.parseLine(line); - - String[] result = new String[size]; - for (int i = 0; i < parseLine.length; i++) { - result[i] = parseLine[i]; - } - - return result; - } - - /** - * Escape each columns of the specified array and return a valid CSV line. - * - * @param columns columns composing the CVS string - * @return a CSV formatted string - */ - static String encode(String[] columns) { - StringWriter writer = new StringWriter(); - // creates a CSVWriter with all default options but with no line end - CSVWriter csvwriter = new CSVWriter(writer, CSVWriter.DEFAULT_SEPARATOR, - CSVWriter.DEFAULT_QUOTE_CHARACTER, CSVWriter.DEFAULT_ESCAPE_CHARACTER, ""); - csvwriter.writeNext(columns); - return writer.toString(); - } - - /** * Additionnal attribute. It does not belongs to the query definition. * * @return query id @@ -173,45 +115,27 @@ return id; } - @Override - public int hashCode() { - int prime = 31; - int result = 1; - result = prime * result + (id == null ? 0 : id.hashCode()); - result = prime * result - + (queryLine == null ? 0 : queryLine.hashCode()); - return result; + public Query toQuery() { + return toQuery(query); } - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; + public Query toQuery(Query query) { + if (query == null) { + query = new QueryImpl(); } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } + query.setName(name); + query.setContent(content); + query.setDescription(description); - QueryBean other = (QueryBean) obj; - if (id == null) { - if (other.id != null) { - return false; - } - } else if (!id.equals(other.id)) { - return false; - } + return query; + } - if (queryLine == null) { - if (other.queryLine != null) { - return false; - } - } else if (!queryLine.equals(other.queryLine)) { - return false; - } + public Query fromQuery(Query query) { + this.query = query; + this.name = query.getName(); + this.content = query.getContent(); + this.description = query.getDescription(); - return true; + return query; } } Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/ServiceMigration.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/ServiceMigration.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/ServiceMigration.java 2011-05-30 17:11:34 UTC (rev 76) @@ -34,7 +34,7 @@ import org.chorem.vradi.entities.GroupImpl; import org.chorem.vradi.entities.InfogeneImpl; import org.chorem.vradi.entities.ModificationTagImpl; -import org.chorem.vradi.entities.QueryMakerImpl; +import org.chorem.vradi.entities.QueryImpl; import org.chorem.vradi.entities.RootThesaurusImpl; import org.chorem.vradi.entities.Sending; import org.chorem.vradi.entities.SendingImpl; @@ -523,7 +523,7 @@ GroupImpl.extensionGroup, InfogeneImpl.extensionInfogene, ModificationTagImpl.extensionModificationTag, - QueryMakerImpl.extensionQueryMaker, + QueryImpl.extensionQuery, RootThesaurusImpl.extensionRootThesaurus, SendingImpl.extensionSending, SessionImpl.extensionSession, Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataService.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataService.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataService.java 2011-05-30 17:11:34 UTC (rev 76) @@ -30,12 +30,14 @@ import org.chorem.vradi.entities.Client; import org.chorem.vradi.entities.Form; import org.chorem.vradi.entities.Group; +import org.chorem.vradi.entities.Query; import org.chorem.vradi.entities.RootThesaurus; import org.chorem.vradi.entities.Sending; import org.chorem.vradi.entities.Session; import org.chorem.vradi.entities.Status; import org.chorem.vradi.entities.Thesaurus; import org.chorem.vradi.entities.User; +import org.chorem.vradi.entities.VradiUser; import org.chorem.vradi.entities.WebHarvestStream; import org.chorem.vradi.entities.XmlFieldBinding; import org.chorem.vradi.entities.XmlStream; @@ -147,7 +149,7 @@ /** * Delete group * - * @param groupId to delete + * @param id to delete */ void deleteXmlStream(String id) throws VradiException; @@ -215,7 +217,7 @@ * Creates or Update a form type. * * @param extension the extension designing the form type - * @param template name + * @param templateName * @return a <code>WikittyExtension</code> * @throws VradiException */ @@ -366,7 +368,7 @@ * @return a map containing the query makers and their queries which contains * the thesaurus node name */ - Map<Group, List<QueryBean>> getQueriesToModifyAfterThesaurusModification( + Map<Group, List<Query>> getQueriesToModifyAfterThesaurusModification( String rootThesaurusName, String thesaurusName); /** @@ -552,4 +554,34 @@ /** Get form type template name */ String getFormTypeTemplateName(WikittyExtension extension); + + /** + * Used to check if user have activate this query or not + * + * @param user of query + * @param queryName to check + * @return true if request is active + */ + boolean checkRequestIsActive(VradiUser user, String queryName); + + /** + * 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. + * + * @param user concerned + * @param queryName to switch + * @param queryContent to switch + * @return if is active + */ + boolean switchUserQueryActivation(VradiUser user, String queryName, String queryContent); + + /** + * Save query on vradi user + * + * @param user concerned + * @param queryName name of query to save + * @param query content + * @return user updated + */ + VradiUser saveQuery(VradiUser user, String queryName, String query); } Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataServiceImpl.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataServiceImpl.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiDataServiceImpl.java 2011-05-30 17:11:34 UTC (rev 76) @@ -35,12 +35,15 @@ import org.chorem.vradi.entities.Client; import org.chorem.vradi.entities.Form; import org.chorem.vradi.entities.Group; +import org.chorem.vradi.entities.Query; +import org.chorem.vradi.entities.QueryImpl; import org.chorem.vradi.entities.RootThesaurus; import org.chorem.vradi.entities.Sending; import org.chorem.vradi.entities.Session; import org.chorem.vradi.entities.Status; import org.chorem.vradi.entities.Thesaurus; import org.chorem.vradi.entities.User; +import org.chorem.vradi.entities.VradiUser; import org.chorem.vradi.entities.WebHarvestStream; import org.chorem.vradi.entities.XmlFieldBinding; import org.chorem.vradi.entities.XmlStream; @@ -69,6 +72,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; /** * Vradi data service implementation (on a local wikiity proxy). @@ -422,7 +426,7 @@ } @Override - public Map<Group, List<QueryBean>> getQueriesToModifyAfterThesaurusModification( + public Map<Group, List<Query>> getQueriesToModifyAfterThesaurusModification( String rootThesaurusName, String thesaurusName) { return thesaurusManager.getQueriesToModifyAfterThesaurusModification(rootThesaurusName, thesaurusName); } @@ -752,4 +756,42 @@ public String getFormTypeTemplateName(WikittyExtension extension) { return formTypeManager.getFormTypeTemplateName(extension); } + + @Override + public boolean checkRequestIsActive(VradiUser user, String queryName) { + return clientManager.checkRequestIsActive(user, queryName); + } + + @Override + public boolean switchUserQueryActivation(VradiUser user, String queryName, String queryContent) { + return clientManager.switchUserQueryActivation(user, queryName, queryContent); + } + + @Override + public VradiUser saveQuery(VradiUser user, String queryName, String content) { + + Set<String> queries = user.getQueries(); + + Query query = null; + + if (queries != null) { + Criteria criteria = Search.query() + .in(Element.ELT_ID, queries) + .eq(Query.FQ_FIELD_QUERY_NAME, queryName) + .criteria(); + + query = wikittyProxy.findByCriteria(Query.class, criteria); + } + if (query == null) { + query = new QueryImpl(); + query.setName(queryName); + } + query.setContent(content); + + user.addQueries(query.getWikittyId()); + wikittyProxy.store(query); + + return wikittyProxy.store(user); + + } } Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageService.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageService.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageService.java 2011-05-30 17:11:34 UTC (rev 76) @@ -26,7 +26,6 @@ import org.chorem.vradi.beans.XmlStreamImportResult; import org.chorem.vradi.entities.Form; import org.chorem.vradi.entities.Group; -import org.chorem.vradi.entities.QueryMaker; import org.chorem.vradi.entities.Sending; import org.chorem.vradi.entities.Session; import org.chorem.vradi.entities.Status; @@ -80,7 +79,7 @@ /** * Create new Sending * - * @param session + * @param sessionId * @param group * @param formsIdsToBind * @return @@ -91,7 +90,7 @@ /** * Create new Sending * - * @param session + * @param sessionId * @param user * @param formsIdsToBind * @return @@ -236,7 +235,7 @@ * @param queryMaker the query maker whose queries are archived * @throws VradiException */ - void archiveQueries(QueryMaker queryMaker) throws VradiException; + void archiveQueries(Group queryMaker) throws VradiException; /** * Save association between template fields and extensions fields. @@ -261,9 +260,9 @@ /** * Remove all sending corresponding with form and group from session * - * @param session concerned + * @param sessionId concerned * @param formsIds concerned - * @param queryMaker concerned + * @param group concerned * @return List of sending after deletion */ List<Sending> removeAllSending(String sessionId, List<String> formsIds, Group group) throws VradiException; @@ -271,9 +270,9 @@ /** * Remove sending corresponding with form and user from session * - * @param session concerned + * @param sessionId concerned * @param formsIds concerned - * @param queryMaker concerned + * @param user concerned * @return sending after deletion */ Sending removeSending(String sessionId, List<String> formsIds, User user) throws VradiException; Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageServiceImpl.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageServiceImpl.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/VradiStorageServiceImpl.java 2011-05-30 17:11:34 UTC (rev 76) @@ -31,7 +31,6 @@ import org.chorem.vradi.entities.Client; import org.chorem.vradi.entities.Form; import org.chorem.vradi.entities.Group; -import org.chorem.vradi.entities.QueryMaker; import org.chorem.vradi.entities.Sending; import org.chorem.vradi.entities.Session; import org.chorem.vradi.entities.Status; @@ -383,7 +382,7 @@ } @Override - public void archiveQueries(QueryMaker queryMaker) + public void archiveQueries(Group queryMaker) throws VradiException { clientManager.archiveQueries(queryMaker); } Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ClientManager.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ClientManager.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ClientManager.java 2011-05-30 17:11:34 UTC (rev 76) @@ -37,15 +37,21 @@ import org.chorem.vradi.VradiServiceConfigurationHelper; import org.chorem.vradi.beans.QueryBean; import org.chorem.vradi.entities.Client; +import org.chorem.vradi.entities.ClientImpl; import org.chorem.vradi.entities.Group; +import org.chorem.vradi.entities.GroupImpl; import org.chorem.vradi.entities.ModificationTag; -import org.chorem.vradi.entities.QueryMaker; +import org.chorem.vradi.entities.Query; +import org.chorem.vradi.entities.QueryImpl; import org.chorem.vradi.entities.Sending; import org.chorem.vradi.entities.Session; import org.chorem.vradi.entities.User; +import org.chorem.vradi.entities.UserImpl; +import org.chorem.vradi.entities.VradiUser; import org.chorem.vradi.services.VradiException; import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.entities.BusinessEntity; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.PagedResult; import org.nuiton.wikitty.search.Search; @@ -300,67 +306,18 @@ /** * Archives the queries of a user, client or group in a RSS file. * - * @param queryMaker the query maker whose queries are archived + * @param group the query maker whose queries are archived * @throws VradiException throw vradiException if exception is occured */ - public void archiveQueries(QueryMaker queryMaker) throws VradiException { + public void archiveQueries(Group group) throws VradiException { if (log.isDebugEnabled()) { - log.debug("archiveQueries(id:" + queryMaker.getWikittyId() + - "; version:" + queryMaker.getWikittyVersion() + ")"); + log.debug("archiveQueries(id:" + group.getWikittyId() + + "; version:" + group.getWikittyVersion() + ")"); } try { - String wikittyId = queryMaker.getWikittyId(); - Criteria criteria = Search.query().eq(Element.ELT_ID, wikittyId).criteria(); - QueryMaker restored = wikittyProxy.findByCriteria(QueryMaker.class, criteria); + String wikittyId = group.getWikittyId(); - if (restored != null && restored.getQueries() != null) { - Set<String> restoredQueries = restored.getQueries(); - Set<String> updatedQueries = queryMaker.getQueries(); - - if (updatedQueries != null) { - Collection disjunction = CollectionUtils.disjunction(restoredQueries, updatedQueries); - if (disjunction.isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("Disjunction between new and old queryMaker is empty"); - } - return; - } - } - } else { - boolean restoredQueriesEmpty = restored == null - || restored.getQueries() == null - || restored.getQueries().isEmpty(); - - Set<String> updatedQueries = queryMaker.getQueries(); - boolean updatedQueriesEmpty = updatedQueries == null - || updatedQueries.isEmpty(); - - if (restoredQueriesEmpty && updatedQueriesEmpty) { - if (log.isDebugEnabled()) { - log.debug("Restored query and updated query are empty"); - } - return; - } - } - - String extName; - if (queryMaker instanceof Client) { - extName = Client.EXT_CLIENT; - - } else if (queryMaker instanceof User) { - extName = User.EXT_USER; - - } else if (queryMaker instanceof Group) { - extName = Group.EXT_GROUP; - - } else { - if (log.isDebugEnabled()) { - log.debug("Extention not found, stopping archiving queries"); - } - return; - } - File queryHistoryDir = VradiServiceConfigurationHelper.getQueryHistoryDir(config); File feedFile = new File(queryHistoryDir, wikittyId + ".rss"); @@ -373,7 +330,7 @@ } else { feedFile.getParentFile().mkdirs(); feedFile.createNewFile(); - Object queryMakerName = queryMaker.getField(extName, "name"); + String queryMakerName = group.getName(); // creates new feed feed = new SyndFeedImpl(); @@ -389,19 +346,19 @@ SyndEntry entry = new SyndEntryImpl(); entry.setPublishedDate(new Date()); - if (queryMaker.getExtensionNames().contains(ModificationTag.EXT_MODIFICATIONTAG)) { - entry.setAuthor((String) queryMaker.getField( + if (group.getExtensionNames().contains(ModificationTag.EXT_MODIFICATIONTAG)) { + entry.setAuthor((String) group.getField( ModificationTag.EXT_MODIFICATIONTAG, ModificationTag.FIELD_MODIFICATIONTAG_LASTMODIFIER)); } // add queries StringBuffer sb = new StringBuffer("<ul>"); - Set<String> queries = queryMaker.getQueries(); + Set<String> queries = group.getQueries(); if (queries != null) { for (String query : queries) { try { - QueryBean queryBean = new QueryBean(query); + QueryBean queryBean = new QueryBean(wikittyProxy, query); sb.append("<li>") .append("<name><![CDATA[").append(queryBean.getName()).append("]]</name>") .append("<description><![CDATA[").append(queryBean.getDescription()).append("]]</description>") @@ -458,4 +415,137 @@ return filePath; } + public boolean checkRequestIsActive(VradiUser vradiUser, String queryName) { + + Group group = getGroupCorresponding(vradiUser); + Query query = getQueryIfExist(group, queryName); + return query != null; + } + + public boolean switchUserQueryActivation(VradiUser vradiUser, String queryName, String queryContent) { + Group group = getGroupCorresponding(vradiUser); + Query query = getQueryIfExist(group, queryName); + if (query != null) { + + // Desable request + group.removeQueries(query.getWikittyId()); + wikittyProxy.store(group); + + if (log.isDebugEnabled()) { + log.debug("Desable request '" + query + "' for user " + vradiUser.getLogin()); + } + return false; + } else { + + // Enable request + group = createRealUserIfDontExist(vradiUser); + + // Creating query + query = new QueryImpl(); + query.setName(queryName); + query.setContent(queryContent); + query = wikittyProxy.store(query); + + group.addQueries(query.getWikittyId()); + if (log.isDebugEnabled()) { + log.debug("Enabled request '" + query + "' for user " + vradiUser.getLogin()); + } + wikittyProxy.store(group); + return true; + } + } + + protected Group createRealUserIfDontExist(VradiUser vradiUser) { + String login = vradiUser.getLogin(); + Criteria criteria = Search.query().eq(Group.FQ_FIELD_GROUP_NAME, login).criteria(); + + // Must be unique + Group group = wikittyProxy.findByCriteria(Group.class, criteria); + + if (group != null) { + if (log.isDebugEnabled()) { + log.debug("Group '" + login + "' exist"); + } + return group; + } + + // Creating group user and client + Date creationDate = new Date(); + + List<BusinessEntity> toStore = new ArrayList<BusinessEntity>(); + + // Extract ...@(...) to make a client + int i = login.indexOf('@'); + String clientName = login.substring(i + 1, login.length()); + + // Search if client with same name exist + criteria = Search.query().eq(Client.FQ_FIELD_CLIENT_NAME, clientName).criteria(); + Client client = wikittyProxy.findByCriteria(Client.class, criteria); + + // Creating one if not found + if (client == null) { + if (log.isDebugEnabled()) { + log.debug("Creating client '" + clientName + "'"); + } + client = new ClientImpl(); + client.setName(clientName); + client.setCreationDate(creationDate); + toStore.add(client); + } + + // Creating user corresponding to email + // email = vradiUser.login = user.name = group.name + User user = new UserImpl(); + user.setName(login); + user.setEmail(login); + user.setClient(client.getWikittyId()); + user.setCreationDate(creationDate); + user.setBeginSearchDate(creationDate); + user.setEnable(true); + toStore.add(user); + + // Store + wikittyProxy.store(toStore); + + // Creating group + group = new GroupImpl(); + group.setName(login); + group.addUser(user.getWikittyId()); + + if (log.isDebugEnabled()) { + log.debug("Creating group and user '" + login + "'"); + } + + // Dont save, will be save after + return group; + } + + protected Query getQueryIfExist(Group group, String queryName) { + + if (group == null || queryName == null) { + return null; + } + + Set<String> queriesIds = group.getQueries(); + if (queriesIds != null) { + Set<Query> queries = wikittyProxy.restore(Query.class, queriesIds); + for (Query query : queries) { + if (query.getName().equalsIgnoreCase(queryName)) { + return query; + } + } + } + + return null; + } + + protected Group getGroupCorresponding(VradiUser user) { + + Criteria criteria = Search.query().eq(Group.FQ_FIELD_GROUP_NAME, user.getLogin()).criteria(); + + // Must be unique + Group group = wikittyProxy.findByCriteria(Group.class, criteria); + + return group; + } } Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/FormManager.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/FormManager.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/FormManager.java 2011-05-30 17:11:34 UTC (rev 76) @@ -484,13 +484,13 @@ // normalement c'est pas null, sinon la requette findGroupsWithQueries // marche pas - Set<String> queries = group.getQueries(); + Set<String> queriesIds = group.getQueries(); - for (String queryEntry : queries) { + for (String queryId : queriesIds) { try { // Get query - QueryBean queryBean = new QueryBean(queryEntry); + QueryBean queryBean = new QueryBean(wikittyProxy, queryId); String query = queryBean.getQuery(); // Create filter @@ -526,9 +526,6 @@ } formsIdsToBind.addAll(resultFormsIds); - } catch (IOException eee) { - throw new VradiException("Can't parse group query", eee); - } catch (UnsupportedQueryException eee) { throw new VradiException("Can't execute group query", eee); 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-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/SearchManager.java 2011-05-30 17:11:34 UTC (rev 76) @@ -33,7 +33,6 @@ import org.chorem.vradi.entities.Group; import org.chorem.vradi.entities.Infogene; import org.chorem.vradi.entities.ModificationTag; -import org.chorem.vradi.entities.QueryMaker; import org.chorem.vradi.entities.RootThesaurus; import org.chorem.vradi.entities.Status; import org.chorem.vradi.entities.Thesaurus; @@ -253,14 +252,14 @@ Map<Group, List<QueryBean>> results = new HashMap<Group, List<QueryBean>>(); for (Group group : groups) { - Set<String> queries = group.getQueries(); + Set<String> queriesIds = group.getQueries(); - for (String query : queries) { + for (String queryId : queriesIds) { if (log.isDebugEnabled()) { - log.debug("Searching with query : " + query); + log.debug("Searching with queryId : " + queryId); } try { - QueryBean bean = new QueryBean(query, group.getWikittyId()); + QueryBean bean = new QueryBean(wikittyProxy, queryId, group.getWikittyId()); String realQuery = bean.getQuery(); FilterList filter = VradiQueryParser.parse(realQuery); @@ -305,7 +304,7 @@ */ public List<Group> findGroupsWithQueries() { // find QueryMaker which do have queries defined - Criteria criteria = Search.query().bw(QueryMaker.FQ_FIELD_QUERYMAKER_QUERIES, "*", "*").criteria(); + Criteria criteria = Search.query().isNotNull(Group.FQ_FIELD_GROUP_QUERIES).criteria(); PagedResult<Group> pagedResult = wikittyProxy.findAllByCriteria(Group.class, criteria); List<Group> all = pagedResult.getAll(); return all; Modified: trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ThesaurusManager.java =================================================================== --- trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ThesaurusManager.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/main/java/org/chorem/vradi/services/managers/ThesaurusManager.java 2011-05-30 17:11:34 UTC (rev 76) @@ -29,6 +29,7 @@ import org.chorem.vradi.beans.QueryBean; import org.chorem.vradi.entities.Form; import org.chorem.vradi.entities.Group; +import org.chorem.vradi.entities.Query; import org.chorem.vradi.entities.RootThesaurus; import org.chorem.vradi.entities.RootThesaurusImpl; import org.chorem.vradi.entities.Thesaurus; @@ -36,6 +37,7 @@ import org.chorem.vradi.services.search.CompareFilter; import org.chorem.vradi.services.search.Filter; import org.chorem.vradi.services.search.FilterList; +import org.chorem.vradi.services.search.UnsupportedQueryException; import org.chorem.vradi.services.search.VradiQueryParser; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.entities.Wikitty; @@ -299,12 +301,12 @@ * @return a map containing the query makers and their queries which contains * the thesaurus node name */ - public Map<Group, List<QueryBean>> getQueriesToModifyAfterThesaurusModification( + public Map<Group, List<Query>> getQueriesToModifyAfterThesaurusModification( String rootThesaurusName, String thesaurusName) { if (log.isDebugEnabled()) { log.debug("getQueriesToModifyAfterThesaurusModification(" + rootThesaurusName + ", " + thesaurusName + ")"); } - Map<Group, List<QueryBean>> results = new HashMap<Group, List<QueryBean>>(); + Map<Group, List<Query>> results = new HashMap<Group, List<Query>>(); if (rootThesaurusName == null) { return results; @@ -312,36 +314,39 @@ String requestPart = rootThesaurusName + ":" + (thesaurusName == null ? "" : thesaurusName); Criteria criteria = Search.query() - .eq(Element.ELT_EXTENSION, Group.EXT_GROUP) - .like(Group.FQ_FIELD_QUERYMAKER_QUERIES, requestPart, Like.SearchAs.AsText) + .eq(Element.ELT_EXTENSION, Query.EXT_QUERY) + .like(Query.FQ_FIELD_QUERY_CONTENT, requestPart, Like.SearchAs.AsText) .criteria(); - PagedResult<Group> pagedResult = wikittyProxy.findAllByCriteria(Group.class, criteria); - List<Group> groups = pagedResult.getAll(); + PagedResult<Query> pagedResult = wikittyProxy.findAllByCriteria(Query.class, criteria); + List<Query> queries = pagedResult.getAll(); if (log.isDebugEnabled()) { - log.debug("[getQueriesToModifyAfterThesaurusModification] " + groups.size() + - "Groups found for request part requestPart : " + requestPart); + log.debug("[getQueriesToModifyAfterThesaurusModification] " + queries.size() + + "Queries found for request part requestPart : " + requestPart); } - for (Group group : groups) { + for (Query query : queries) { - Set<String> queries = group.getQueries(); - List<QueryBean> queriesToModify = new ArrayList<QueryBean>(); + criteria = Search.query().contains(Group.FQ_FIELD_GROUP_QUERIES, query.getWikittyId()).criteria(); + Group group = wikittyProxy.findByCriteria(Group.class, criteria); - for (String query : queries) { - try { - QueryBean queryBean = new QueryBean(query, group.getWikittyId()); - FilterList filter = VradiQueryParser.parse(queryBean.getQuery()); + // Init list in maps + List<Query> queriesToModify = results.get(group); + if (queriesToModify == null) { + queriesToModify = new ArrayList<Query>(); + } - if (isThesaurusInQuery(filter, rootThesaurusName, thesaurusName)) { - queriesToModify.add(queryBean); - } + FilterList filter = null; + String content = query.getContent(); + try { + filter = VradiQueryParser.parse(content); + } catch (UnsupportedQueryException eee) { + log.error("Failled to parse query" + content, eee); + } - } catch (Exception e) { - // ignored exception - log.warn(e.getMessage(), e); - } + if (isThesaurusInQuery(filter, rootThesaurusName, thesaurusName)) { + queriesToModify.add(query); } if (!queriesToModify.isEmpty()) { Modified: trunk/vradi-services/src/test/java/org/chorem/vradi/services/VradiStorageServiceTest.java =================================================================== --- trunk/vradi-services/src/test/java/org/chorem/vradi/services/VradiStorageServiceTest.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/test/java/org/chorem/vradi/services/VradiStorageServiceTest.java 2011-05-30 17:11:34 UTC (rev 76) @@ -46,7 +46,8 @@ import org.chorem.vradi.entities.Infogene; import org.chorem.vradi.entities.ModificationTag; import org.chorem.vradi.entities.ModificationTagImpl; -import org.chorem.vradi.entities.QueryMakerImpl; +import org.chorem.vradi.entities.Query; +import org.chorem.vradi.entities.QueryImpl; import org.chorem.vradi.entities.RootThesaurus; import org.chorem.vradi.entities.RootThesaurusImpl; import org.chorem.vradi.entities.Sending; @@ -59,7 +60,6 @@ import org.chorem.vradi.entities.UserImpl; import org.chorem.vradi.entities.XmlFieldBinding; import org.chorem.vradi.entities.XmlStream; -import org.chorem.vradi.services.managers.FormTypeManager; import org.chorem.vradi.services.managers.MailingManager; import org.junit.Assert; import org.junit.Ignore; @@ -595,7 +595,7 @@ wikittyProxy.storeExtension(ClientImpl.extensionClient); wikittyProxy.storeExtension(UserImpl.extensionUser); wikittyProxy.storeExtension(ModificationTagImpl.extensionModificationTag); - wikittyProxy.storeExtension(QueryMakerImpl.extensionQueryMaker); + wikittyProxy.storeExtension(QueryImpl.extensionQuery); // Import clients URL importURL = VradiStorageServiceTest.class.getResource("/csv/clients.csv"); @@ -1508,14 +1508,18 @@ Group group = new GroupImpl(); group.setName("Groupe de test"); - QueryBean bean = new QueryBean("titi,tata,ALONZEAU"); + Query query = new QueryImpl(); + query.setContent("titi"); + query.setName("tata"); + query.setDescription("ALONZEAU"); - group.addQueries(bean.getCSVQuery()); + query = wikittyProxy.store(query); + group.addQueries(query.getWikittyId()); + storageService.archiveQueries(group); //String url = fileService.getRequestHistoryURL(group.getWikittyId() + ".rss"); - File history = fileService.downloadRequestHistory(group.getWikittyId() + ".rss"); Assert.assertTrue(history.exists()); @@ -1570,8 +1574,15 @@ // Create a group with query Group testGroup = new GroupImpl(); testGroup.setName("Zahia fans"); - QueryBean bean = new QueryBean("ALONZEAU,tata,titi"); - testGroup.addQueries(bean.getCSVQuery()); + + Query query = new QueryImpl(); + query.setContent("ALONZEAU"); + query.setName("tata"); + query.setDescription("titi"); + + query = wikittyProxy.store(query); + + testGroup.addQueries(query.getWikittyId()); testGroup.addUser(testUser.getWikittyId()); wikittyProxy.store(testGroup); @@ -1687,8 +1698,16 @@ // Create a group with query Group testGroup = new GroupImpl(); testGroup.setName("Zahia fans"); - QueryBean bean = new QueryBean("ALONZEAU,tata,titi"); - testGroup.addQueries(bean.getCSVQuery()); + + Query query = new QueryImpl(); + query.setContent("ALONZEAU"); + query.setName("tata"); + query.setDescription("titi"); + + query = wikittyProxy.store(query); + + testGroup.addQueries(query.getWikittyId()); + testGroup.addUser(testUser.getWikittyId()); wikittyProxy.store(testGroup); @@ -1762,8 +1781,15 @@ // Create a group with query Group testGroup = new GroupImpl(); testGroup.setName("Zahia fans"); - QueryBean bean = new QueryBean("ALONZEAU,tata,titi"); - testGroup.addQueries(bean.getCSVQuery()); + + Query query = new QueryImpl(); + query.setContent("ALONZEAU"); + query.setName("tata"); + query.setDescription("titi"); + + query = wikittyProxy.store(query); + + testGroup.addQueries(query.getWikittyId()); testGroup.addUser(testUser.getWikittyId()); wikittyProxy.store(testGroup); @@ -1844,8 +1870,15 @@ // Create a group with query Group testGroup = new GroupImpl(); testGroup.setName("Zahia fans"); - QueryBean bean = new QueryBean("ALONZEAU,tata,titi"); - testGroup.addQueries(bean.getCSVQuery()); + + Query query = new QueryImpl(); + query.setContent("ALONZEAU"); + query.setName("tata"); + query.setDescription("titi"); + + query = wikittyProxy.store(query); + + testGroup.addQueries(query.getWikittyId()); testGroup.addUser(testUser.getWikittyId()); wikittyProxy.store(testGroup); @@ -1921,9 +1954,16 @@ //Create the group Group group = new GroupImpl(); - QueryBean bean = new QueryBean("*,*,*"); - group.addQueries(bean.getCSVQuery()); + Query query = new QueryImpl(); + query.setContent("*"); + query.setName("*"); + query.setDescription("*"); + + query = wikittyProxy.store(query); + + group.addQueries(query.getWikittyId()); + //Create the users Date now = new Date(); Date beginSearchDate = DateUtils.addDays(now, -10); Modified: trunk/vradi-services/src/test/java/org/chorem/vradi/services/managers/SearchManagerTest.java =================================================================== --- trunk/vradi-services/src/test/java/org/chorem/vradi/services/managers/SearchManagerTest.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services/src/test/java/org/chorem/vradi/services/managers/SearchManagerTest.java 2011-05-30 17:11:34 UTC (rev 76) @@ -27,6 +27,8 @@ import org.chorem.vradi.VradiTestAbstract; import org.chorem.vradi.entities.Group; import org.chorem.vradi.entities.GroupImpl; +import org.chorem.vradi.entities.Query; +import org.chorem.vradi.entities.QueryImpl; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -59,15 +61,22 @@ Group groupCodeLutin = new GroupImpl(); groupCodeLutin.setName("codelutin"); - groupCodeLutin.addQueries("queryname, querydescription, queryquery"); - groupCodeLutin.addQueries("queryname2, querydescription2, queryquery2"); + Query query = new QueryImpl(); + query.setContent("query"); + query.setName("name"); + query.setDescription("desc"); + + query = wikittyProxy.store(query); + + groupCodeLutin.addQueries(query.getWikittyId()); + Group groupSun = new GroupImpl(); groupSun.setName("sun"); Group groupFFF = new GroupImpl(); groupSun.setName("equipe de france"); - groupSun.addQueries("footname1, footdescription1, footquery2"); + groupSun.addQueries(query.getWikittyId()); List<Group> groups = new ArrayList<Group>(); groups.add(groupCodeLutin); Added: trunk/vradi-services-web/src/main/resources/vradi-services.properties =================================================================== --- trunk/vradi-services-web/src/main/resources/vradi-services.properties (rev 0) +++ trunk/vradi-services-web/src/main/resources/vradi-services.properties 2011-05-30 17:11:34 UTC (rev 76) @@ -0,0 +1,73 @@ +### +# #%L +# Vradi :: Services +# +# $Id: vradi-services.properties 21 2011-05-09 16:43:58Z sletellier $ +# $HeadURL: http://svn.chorem.org/svn/vradi/trunk/vradi-services-web/src/test/resources/... $ +# %% +# Copyright (C) 2009 - 2010 Codelutin +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# #L% +### +application.name=${project.name} +application.version=${project.version} +vradi.service.version=${project.version} + +vradi.objectStore.dir=${vradi.data.dir}/objectStore +vradi.data.dir=target/vradi +vradi.temp.dir=target/vradi/tmp +vradi.queryHistory.dir=target/vradi/queryHistory +vradi.embeddedFiles.dir=target/vradi/embeddedFiles +vradi.templates.dir=target/vradi/templates +vradi.pdf.dir=target/vradi/pdf +solr.data.dir=${wikitty.searchengine.solr.directory.data} + +wikitty.data.directory=${vradi.data.dir}/wikitty +oOo.exec.folder=/usr/bin + +wikitty.storage.jdbc.queryfile=wikitty-jdbc-query.properties +wikitty.storage.jdbc.driver=org.h2.Driver +wikitty.storage.jdbc.host=jdbc:h2:file:${wikitty.data.directory}/data/db +wikitty.storage.jdbc.login=sa +wikitty.storage.jdbc.password= +wikitty.storage.jdbc.xadatasource=org.h2.jdbcx.JdbcDataSource +wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.URL=${wikitty.storage.jdbc.host} +wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.user=${wikitty.storage.jdbc.login} +wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password=${wikitty.storage.jdbc.password} +wikitty.searchengine.solr.directory.data=${wikitty.data.directory}/solr +wikitty.searchengine.solr.directory.factory=solr.StandardDirectoryFactory +wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\ +org.nuiton.wikitty.services.WikittyServiceNotifier,\ +org.nuiton.wikitty.services.WikittyServiceCached,\ +org.nuiton.wikitty.services.WikittyServiceSecurity +wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\ +org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\ +org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr +wikitty.transaction.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceInMemory +wikitty.service.cache.allwaysRestoreCopies=false +wikitty.service.event.propagate=true +wikitty.service.event.listen=false +wikitty.service.event.propagate.transporter=org.nuiton.wikitty.services.XMPPNotifierTransporter +wikitty.service.event.transporter.xmpp.server=im.codelutin.com +wikitty.service.event.transporter.xmpp.room=slave@conference.im.codelutin.com +wikitty.service.slave.async.store=false +wikitty.service.slave.master.xmpp.server=im.codelutin.com +wikitty.service.slave.master.xmpp.room=test@conference.im.codelutin.com +wikitty.addon.export.threadnumber=1 +wikitty.WikittyServiceCached.components=org.nuiton.wikitty.services.WikittyCacheJCS +#wikitty.service.cache.priority.extensions=Thesaurus +jcs.default= +jcs.default.cacheattributes.MaxObjects=10000 +#jcs.priority.cacheattributes.MaxObjects=10000 Modified: trunk/vradi-services-web/src/test/resources/vradi-services.properties =================================================================== --- trunk/vradi-services-web/src/test/resources/vradi-services.properties 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-services-web/src/test/resources/vradi-services.properties 2011-05-30 17:11:34 UTC (rev 76) @@ -1,7 +1,7 @@ ### # #%L # Vradi :: Services -# +# # $Id$ # $HeadURL$ # %% @@ -11,12 +11,12 @@ # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # #L% @@ -37,6 +37,10 @@ wikitty.data.directory=${vradi.data.dir}/wikitty oOo.exec.folder=/usr/bin +vradi.remote.service.port=9000 +vradi.remote.servlet.port=9000 +vradi.remote.endpoint=http\://localhost\:9000 + wikitty.storage.jdbc.queryfile=wikitty-jdbc-query.properties wikitty.storage.jdbc.driver=org.h2.Driver wikitty.storage.jdbc.host=jdbc:h2:file:${wikitty.data.directory}/data/db Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/AdminHandler.java =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/AdminHandler.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/AdminHandler.java 2011-05-30 17:11:34 UTC (rev 76) @@ -44,6 +44,7 @@ import org.chorem.vradi.entities.Group; import org.chorem.vradi.entities.Infogene; import org.chorem.vradi.entities.ModificationTag; +import org.chorem.vradi.entities.Query; import org.chorem.vradi.entities.Status; import org.chorem.vradi.entities.Thesaurus; import org.chorem.vradi.entities.User; @@ -727,18 +728,20 @@ // Creating request bean String request = ThesaurusDataHelper.getRequestName(thesaurus); - QueryBean requestBean = null; - try { - // FIXME EC20100930 a voir pourquoi il faut la quoter pour opencsv - requestBean = new QueryBean("\"" + request + "\""); - } catch (IOException eee) { - log.error("Cant parse query : " + request, eee); - } + QueryBean requestBean = new QueryBean(); + requestBean.setQuery(request); + // Open request ui openRequest(rootContext, requestBean, thesaurus, true); } + public void openRequest(JAXXContext rootContext, Query query) { + QueryBean queryBean = new QueryBean(); + queryBean.fromQuery(query); + openRequest(rootContext, queryBean); + } + public void openRequest(JAXXContext rootContext, QueryBean request) { openRequest(rootContext, request, null, false); } @@ -764,8 +767,9 @@ public void propertyChange(PropertyChangeEvent evt) { String newValue = (String) evt.getNewValue(); RequestSelectUI ui = (RequestSelectUI) rootContext; - QueryBean bean = ui.getBean(); - ui.setBean(bean.setQuery(newValue)); + Query bean = ui.getBean(); + bean.setContent(newValue); + ui.setBean(bean); } }); } Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminGroupUI.jaxx =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminGroupUI.jaxx 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminGroupUI.jaxx 2011-05-30 17:11:34 UTC (rev 76) @@ -27,6 +27,8 @@ <style source='../../VradiMainUI.css'/> <import> + java.awt.Component + org.chorem.vradi.ui.admin.AdminHandler java.beans.PropertyChangeListener java.beans.PropertyChangeEvent java.text.DateFormat @@ -50,6 +52,8 @@ org.chorem.vradi.ui.renderers.EntityRenderer org.chorem.vradi.ui.helpers.VradiComparators org.chorem.vradi.ui.admin.widget.UserListSelectorHandler + org.chorem.vradi.entities.Query + org.chorem.vradi.entities.QueryImpl </import> <!-- validators --> @@ -66,6 +70,16 @@ <script><![CDATA[ +protected List<RequestSelectUI> queriesSelect = new ArrayList<RequestSelectUI>(); + +public List<Query> getQueries() { + List<Query> queries = new ArrayList<Query>(); + for (RequestSelectUI querySelect : queriesSelect) { + queries.add(querySelect.getBean()); + } + return queries; +} + void $afterCompleteSetup() { AutoCompleteDecorator.decorate(groupUsers.getCombo(), EntityRenderer.getInstance()); @@ -94,16 +108,12 @@ createButton.setEnabled(!isInCreation()); - requestListUI.setBean(bean); groupUserHandler.setBean(bean); if (bean == null) { // Clear all user groupUsers.init(Collections.EMPTY_LIST, Collections.EMPTY_LIST); - // Clear all requests - requestListUI.init(); - return; } @@ -123,8 +133,17 @@ groupUsers.init(toUserCombo, toUserList); - requestListUI.setBean(bean); - requestListUI.init(); + content.setVisible(false); + content.removeAll(); + queriesSelect.clear(); + content.setAlignmentY(TOP_ALIGNMENT); + + if (bean != null && bean.getQueries() != null) { + for (String query : bean.getQueries()) { + createRequest(query); + } + } + content.setVisible(true); groupUserHandler.setBean(bean); } @@ -132,16 +151,15 @@ public void save() { setModified(false); + // Store queries + VradiService.getWikittyProxy().store(getQueries()); + //Use new list to avoid empty queries after clearing - Group bean = requestListUI.getBean(); - java.util.List<String> queries = null; - if (bean.getQueries()!=null){ - queries = new java.util.ArrayList<String>(requestListUI.getBean().getQueries()); - } + Set<String> queries = getBean().getQueries(); //Store queries bean.clearQueries(); - if (queries!=null){ + if (queries != null){ for (String query : queries) { bean.addQueries(query); } @@ -178,6 +196,41 @@ return _("vradi.adminGroup.title", getStringValue(name)); } +protected void createRequest(final String queryId) { + RequestSelectUI requestUI = new RequestSelectUI(this); + queriesSelect.add(requestUI); + requestUI.setAlignmentY(TOP_ALIGNMENT); + + if (log.isDebugEnabled()){ + log.debug("Open query " + queryId); + } + + Query query; + if (queryId == null) { + query = new QueryImpl(); + } else { + query = VradiService.getWikittyProxy().restore(Query.class, queryId); + } + getBean().addQueries(query.getWikittyId()); + requestUI.setBean(query); + + query.addPropertyChangeListener(new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + setModified(true); + } + }); + requestUI.setAlignmentY(Component.TOP_ALIGNMENT); + content.add(requestUI); + validate(); +} + + +protected void showHistory() { + AdminHandler handler = getContextValue(AdminHandler.class); + handler.showHistory(bean.getWikittyId()); +} ]]> </script> @@ -232,8 +285,31 @@ </row> <row> <cell columns='2' fill='both' weightx='1' weighty='3'> - <RequestListUI id='requestListUI' constructorParams='this' - bean='{getBean()}'/> + <JPanel layout='{new GridLayout(0,1)}'> + <Table id="header" insets='0'> + <row> + <cell fill='horizontal' weightx='1' anchor="west"> + <JLabel text='vradi.adminRequest.title'/> + </cell> + <cell anchor='east'> + <JButton text='vradi.adminRequest.history.show' + actionIcon="history" + enabled='{isEnabled()}' + onActionPerformed='showHistory()'/> + </cell> + <cell anchor='east'> + <JButton text='vradi.adminRequest.new' + enabled='{isEnabled()}' + onActionPerformed='createRequest(null)'/> + </cell> + </row> + </Table> + + <JScrollPane id='contentScroll' constraints='BorderLayout.CENTER' + columnHeaderView='{header}'> + <JPanel id='content' layout='{new BoxLayout(content, BoxLayout.Y_AXIS)}'/> + </JScrollPane> + </JPanel> </cell> </row> </Table> Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminThesaurusHandler.java =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminThesaurusHandler.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/AdminThesaurusHandler.java 2011-05-30 17:11:34 UTC (rev 76) @@ -32,6 +32,7 @@ import org.chorem.vradi.VradiHelper; import org.chorem.vradi.beans.QueryBean; import org.chorem.vradi.entities.Group; +import org.chorem.vradi.entities.Query; import org.chorem.vradi.entities.RootThesaurus; import org.chorem.vradi.entities.Thesaurus; import org.chorem.vradi.entities.ThesaurusImpl; @@ -668,7 +669,7 @@ String thesaurusBefore, String thesaurusAfter) { - Map<Group, List<QueryBean>> queryMakers = VradiService + Map<Group, List<Query>> queryMakers = VradiService .getVradiDataService() .getQueriesToModifyAfterThesaurusModification(rootThesaurusBefore, thesaurusBefore); @@ -702,10 +703,10 @@ // retrieve updated groups ThesaurusChangesTreeTableModel model = thesaurusChangesUI .getContextValue(ThesaurusChangesTreeTableModel.class); - List<Group> updatedQueryMakers = model.getUpdatedQueryMakers(); + List<Query> updatedQueries = model.getUpdatedQueryMakers(); // save updated groups - VradiService.getWikittyProxy().store(updatedQueryMakers); + VradiService.getWikittyProxy().store(updatedQueries); if (log.isDebugEnabled()) { log.debug("[ModifyQueries] Store modifications"); Deleted: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestListUI.jaxx =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestListUI.jaxx 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestListUI.jaxx 2011-05-30 17:11:34 UTC (rev 76) @@ -1,135 +0,0 @@ -<!-- - #%L - Vradi :: Swing - - $Id$ - $HeadURL$ - %% - Copyright (C) 2009 - 2010 Codelutin - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - #L% - --> -<JPanel layout='{new GridLayout(0,1)}'> - - <style source='../../VradiMainUI.css'/> - - <import> - java.awt.Component - java.beans.PropertyChangeListener - java.beans.PropertyChangeEvent - java.io.IOException - javax.swing.BoxLayout - - org.chorem.vradi.entities.Group - org.chorem.vradi.beans.QueryBean - org.chorem.vradi.ui.admin.AdminHandler - </import> - - <!-- bean property --> - <Group id='bean' javaBean='null'/> - - <script><![CDATA[ - -public void init() { - content.setVisible(false); - content.removeAll(); - content.setAlignmentY(TOP_ALIGNMENT); - - if (bean != null && bean.getQueries() != null) { - for (String query : bean.getQueries()) { - createRequest(query); - } - } - content.setVisible(true); -} - -protected void createRequest(final String query) { - RequestSelectUI requestUI = new RequestSelectUI(RequestListUI.this); - requestUI.setAlignmentY(TOP_ALIGNMENT); - - if (log.isDebugEnabled()){ - log.debug("Open query " + query); - } - - try { - requestUI.setBean(new QueryBean(query)); - } catch (IOException e) { - log.error(e.getMessage(), e); - return; - } - - requestUI.addPropertyChangeListener(PROPERTY_BEAN, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - RequestSelectUI query = (RequestSelectUI) evt.getSource(); - - QueryBean oldValue = (QueryBean) evt.getOldValue(); - QueryBean newValue = (QueryBean) evt.getNewValue(); - - if (log.isDebugEnabled() - && oldValue != null - && newValue != null) { - log.debug("Update query from '" + oldValue.getQueryLine() + "' to '" + newValue.getQueryLine() + "'"); - } - - bean.removeQueries(oldValue.getQueryLine()); - - if (newValue == null) { - // this means remove - content.setVisible(false); - content.remove(query); - content.setVisible(true); - } else { - // this means update - bean.addQueries(newValue.getQueryLine()); - } - } - }); - requestUI.setAlignmentY(Component.TOP_ALIGNMENT); - content.add(requestUI); - validate(); -} - -protected void showHistory() { - AdminHandler handler = getContextValue(AdminHandler.class); - handler.showHistory(bean.getWikittyId()); -} - -]]></script> - <Table id="header" insets='0'> - <row> - <cell fill='horizontal' weightx='1' anchor="west"> - <JLabel text='vradi.adminRequest.title'/> - </cell> - <cell anchor='east'> - <JButton text='vradi.adminRequest.history.show' - actionIcon="history" - enabled='{isEnabled()}' - onActionPerformed='showHistory()'/> - </cell> - <cell anchor='east'> - <JButton text='vradi.adminRequest.new' - enabled='{isEnabled()}' - onActionPerformed='createRequest("")'/> - </cell> - </row> - </Table> - - <JScrollPane id='contentScroll' constraints='BorderLayout.CENTER' - columnHeaderView='{header}'> - <JPanel id='content' layout='{new BoxLayout(content, BoxLayout.Y_AXIS)}'/> - </JScrollPane> - -</JPanel> Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestSelectUI.jaxx =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestSelectUI.jaxx 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/content/RequestSelectUI.jaxx 2011-05-30 17:11:34 UTC (rev 76) @@ -32,8 +32,7 @@ </import> <!-- bean property --> - <org.chorem.vradi.beans.QueryBean id='bean' - javaBean='new org.chorem.vradi.beans.QueryBean()'/> + <org.chorem.vradi.entities.Query id='bean' javaBean='null'/> <script><![CDATA[ @@ -41,10 +40,10 @@ return getContextValue(AdminHandler.class); } public void confirmDeletion() { - org.chorem.vradi.beans.QueryBean queryBean = getBean(); + Query queryBean = getBean(); if (StringUtils.isBlank(queryBean.getName()) && StringUtils.isBlank(queryBean.getDescription()) - && StringUtils.isBlank(queryBean.getQuery())) { + && StringUtils.isBlank(queryBean.getContent())) { setBean(null); } else { @@ -71,21 +70,21 @@ <row fill='both' anchor='north'> <cell fill='horizontal' weightx='0.3' weighty='0' anchor='north'> <JTextField id='queryName' text='{getBean().getName()}' - onKeyReleased='setBean(getBean().setName(queryName.getText()))' - toolTipText='{getBean().getQuery()}'/> + onKeyReleased='getBean().setName(queryName.getText())' + toolTipText='{getBean().getContent()}'/> </cell> <cell fill='horizontal' weightx='0.5' weighty='0' anchor='north'> <JScrollPane> <JTextArea id='queryDescription' text='{getBean().getDescription()}' rows='2' - onKeyReleased='setBean(getBean().setDescription(queryDescription.getText()))' - toolTipText='{getBean().getQuery()}'/> + onKeyReleased='getBean().setDescription(queryDescription.getText())' + toolTipText='{getBean().getContent()}'/> </JScrollPane> </cell> <cell fill='horizontal' weightx='0.1' weighty='0' anchor='north'> <JButton text='vradi.adminRequest.edit' onActionPerformed='getHandler().openRequest(this, getBean())' - toolTipText='{getBean().getQuery()}'/> + toolTipText='{getBean().getContent()}'/> </cell> <cell fill='horizontal' weightx='0.1' weighty='0' anchor='north'> <JButton actionIcon='delete' Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/popups/ThesaurusQueryChangesHandler.java =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/popups/ThesaurusQueryChangesHandler.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/popups/ThesaurusQueryChangesHandler.java 2011-05-30 17:11:34 UTC (rev 76) @@ -27,6 +27,7 @@ import jaxx.runtime.context.JAXXInitialContext; import org.chorem.vradi.beans.QueryBean; import org.chorem.vradi.entities.Group; +import org.chorem.vradi.entities.Query; import org.chorem.vradi.ui.admin.query.QueryCellEditor; import org.chorem.vradi.ui.admin.query.QueryCheckCellRenderer; import org.chorem.vradi.ui.admin.query.ThesaurusChangesTreeTableModel; @@ -59,7 +60,7 @@ public static final String THESAURUS_AFTER_MODIF = "thesaurusAfterModif"; - public ThesaurusQueryChangesUI initUI(JAXXContext rootContext, Map<Group, List<QueryBean>> queries, + public ThesaurusQueryChangesUI initUI(JAXXContext rootContext, Map<Group, List<Query>> queries, String rootThesaurusBefore, String rootThesaurusAfter, String thesaurusBefore, String thesaurusAfter) { JAXXInitialContext context = new JAXXInitialContext().add(rootContext).add(this); @@ -102,7 +103,7 @@ public TreeTableModel getResultTreeTableModel(ThesaurusQueryChangesUI context) { ThesaurusChangesTreeTableModel treeTableModel = context.getContextValue(ThesaurusChangesTreeTableModel.class); if (treeTableModel == null) { - Map<Group, List<QueryBean>> queries = context.getContextValue(Map.class, QUERY); + Map<Group, List<Query>> queries = context.getContextValue(Map.class, QUERY); String rootThesaurusBefore = context.getContextValue(String.class, ROOT_BEFORE_MODIF); String rootThesaurusAfter = context.getContextValue(String.class, ROOT_AFTER_MODIF); String thesaurusBefore = context.getContextValue(String.class, THESAURUS_BEFORE_MODIF); Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/QueryCellEditor.java =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/QueryCellEditor.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/QueryCellEditor.java 2011-05-30 17:11:34 UTC (rev 76) @@ -102,7 +102,7 @@ context.setContextValue(parentContext); QueryBean query = new QueryBean(); - query = query.setQuery(currentQuery); + query.setQuery(currentQuery); AdminHandler adminHandler = UIHelper.getHandler(context, AdminHandler.class); Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/ThesaurusChangesTreeTableModel.java =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/ThesaurusChangesTreeTableModel.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/admin/query/ThesaurusChangesTreeTableModel.java 2011-05-30 17:11:34 UTC (rev 76) @@ -28,6 +28,7 @@ import org.apache.commons.logging.LogFactory; import org.chorem.vradi.beans.QueryBean; import org.chorem.vradi.entities.Group; +import org.chorem.vradi.entities.Query; import org.chorem.vradi.services.VradiService; import org.chorem.vradi.services.VradiStorageService; import org.chorem.vradi.ui.helpers.VradiComparators; @@ -64,33 +65,40 @@ final HashMap<String, List<QueryBean>> queryBeanMap = new HashMap<String, List<QueryBean>>(); /** key:before, value:after */ - final HashMap<QueryBean, QueryBean> modifiedBeanMap = new HashMap<QueryBean, QueryBean>(); + final List<QueryBean> modifiedBean = new ArrayList<QueryBean>(); /** queries validation state */ final HashMap<QueryBean, Boolean> queryBeanValidate = new HashMap<QueryBean, Boolean>(); - public ThesaurusChangesTreeTableModel(Map<Group, List<QueryBean>> queryMap, String rootThesaurusBefore, + public ThesaurusChangesTreeTableModel(Map<Group, List<Query>> queryMap, String rootThesaurusBefore, String rootThesaurusAfter, String thesaurusBefore, String thesaurusAfter) { super(1L); HashMap<String, Group> groupMap = new HashMap<String, Group>(); - for (Map.Entry<Group, List<QueryBean>> entry : queryMap.entrySet()) { + for (Map.Entry<Group, List<Query>> entry : queryMap.entrySet()) { // queryMaker Group group = entry.getKey(); // original queries for queryMaker - List<QueryBean> queries = entry.getValue(); + List<Query> queries = entry.getValue(); + List<QueryBean> queryBeans = new ArrayList<QueryBean>(); + for (Query query : queries) { + QueryBean queryBean = new QueryBean(); + queryBean.fromQuery(query); + queryBeans.add(queryBean); + } + String wikittyId = group.getWikittyId(); // index queries by wikittyId - queryBeanMap.put(wikittyId, queries); + queryBeanMap.put(wikittyId, queryBeans); // group groupMap.put(wikittyId, group); // index queries by original:modified - for (QueryBean original : queries) { + for (QueryBean original : queryBeans) { String query = original.getQuery(); // If root thesaurus modif @@ -106,9 +114,9 @@ } } - QueryBean modified = original.setQuery(query); + original.setQuery(query); - modifiedBeanMap.put(original, modified); + modifiedBean.add(original); queryBeanValidate.put(original, Boolean.TRUE); } } @@ -122,32 +130,13 @@ groupsMap.putAll(groupMap); } - public List<Group> getUpdatedQueryMakers() throws IOException { - List<Group> list = new ArrayList<Group>(); + public List<Query> getUpdatedQueryMakers() throws IOException { - for (Group queryMaker : groupsMap.values()) { - list.add(queryMaker); - Set<String> queries = new HashSet<String>(); - Set<String> initialQueries = queryMaker.getQueries(); - if (initialQueries != null) { - queries.addAll(initialQueries); - } - queryMaker.clearQueries(); - - for (String query : queries) { - QueryBean original = new QueryBean(query, queryMaker.getWikittyId()); - - if (queryBeanValidate.containsKey(original) && queryBeanValidate.get(original)) { - QueryBean modified = modifiedBeanMap.get(original); - queryMaker.addQueries(modified.getQueryLine()); - - } else { - queryMaker.addQueries(query); - } - } - + List<Query> queries = new ArrayList<Query>(); + for (QueryBean queryBean : modifiedBean) { + queries.add(queryBean.toQuery()); } - return list; + return queries; } @Override @@ -175,8 +164,7 @@ return bean.getQuery(); } else if (column == 3) { - QueryBean modifiedBean = modifiedBeanMap.get(bean); - return modifiedBean.getQuery(); + return bean.getQuery(); } else if (column == 4) { boolean validate = queryBeanValidate.get(bean); @@ -205,14 +193,11 @@ return; } - QueryBean initialBean = modifiedBeanMap.get(bean); - QueryBean modifiedBean = initialBean.setQuery(String.valueOf(value)); + bean.setQuery(String.valueOf(value)); - if (!initialBean.equals(modifiedBean)) { - modifiedBeanMap.put(bean, modifiedBean); - queryBeanValidate.put(bean, Boolean.TRUE); - fireQueryChanged(bean); - } + modifiedBean.add(bean); + queryBeanValidate.put(bean, Boolean.TRUE); + fireQueryChanged(bean); } else if (column == 4) { QueryBean bean = (QueryBean) node; Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/offer/RequestFormViewHandler.java =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/offer/RequestFormViewHandler.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/offer/RequestFormViewHandler.java 2011-05-30 17:11:34 UTC (rev 76) @@ -311,13 +311,13 @@ * 1 | description | name * 2 | query | description */ + QueryBean queryBean = queries[rowIndex]; - String[] queryArray = queryBean.toArray(); - if (columnIndex < 2) { - return queryArray[columnIndex + 1]; - } else { - return queryArray[0]; + switch (columnIndex) { + case 0 : return queryBean.getName(); + case 1 : return queryBean.getDescription(); + default: return queryBean.getQuery(); } } Modified: trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/search/SearchHandler.java =================================================================== --- trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/search/SearchHandler.java 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/java/org/chorem/vradi/ui/search/SearchHandler.java 2011-05-30 17:11:34 UTC (rev 76) @@ -495,13 +495,8 @@ List<QueryBean> queriesBean = new ArrayList<QueryBean>(); if (queries != null) { for (String query : queries) { - try { - QueryBean queryBean = new QueryBean(query); - queriesBean.add(queryBean); - } catch (IOException eee) { - log.error("Cant parse query : " + query, eee); - ErrorDialogUI.showError(eee); - } + QueryBean queryBean = new QueryBean(VradiService.getWikittyProxy(), query); + queriesBean.add(queryBean); } } Modified: trunk/vradi-swing/src/main/resources/vradi.properties =================================================================== --- trunk/vradi-swing/src/main/resources/vradi.properties 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-swing/src/main/resources/vradi.properties 2011-05-30 17:11:34 UTC (rev 76) @@ -31,10 +31,13 @@ application.organisation.url=${project.organization.url} # Wikitty -wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceHessianClient,\ +wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\ org.nuiton.wikitty.services.WikittyServiceNotifier,\ org.nuiton.wikitty.services.WikittyServiceCached,\ org.nuiton.wikitty.services.WikittyServiceSecurity +wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\ +org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\ +org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr wikitty.service.cache.allwaysRestoreCopies=false wikitty.service.event.propagate=false wikitty.service.event.listen=true 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-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/SearchAction.java 2011-05-30 17:11:34 UTC (rev 76) @@ -5,12 +5,15 @@ 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; import java.util.Collections; +import java.util.List; import java.util.Set; /** @@ -24,9 +27,39 @@ public static final String REQUEST_ATTRIBUTE_FORMS = "forms"; protected String query; + protected String queryName; protected HttpServletRequest request; - protected Set<String> lastQueries; + protected List<Query> lastQueries; + protected boolean queryActive; + // Name of submit + protected String switchUserQueryActivation; + protected String saveRequest; + + 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; + } + + public void setQueryName(String queryName) { + this.queryName = queryName; + } + public String getQuery() { return query; } @@ -35,9 +68,13 @@ this.query = query; } - public Set<String> getLastQueries() { + public boolean isQueryActive() { + return queryActive; + } + + public List<Query> getLastQueries() { if (lastQueries == null || lastQueries.isEmpty()) { - lastQueries = Collections.EMPTY_SET; + lastQueries = Collections.EMPTY_LIST; } return lastQueries; } @@ -52,6 +89,12 @@ */ 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(); + if (!StringUtils.isEmpty(switchUserQueryActivation)) { + queryActive = getVradiSession().getDataService().switchUserQueryActivation(user, queryName, query); + } FormPaginatedList paginatedList = new FormPaginatedList(getProxy()); // Retrive paginatedList and fill by request params @@ -72,15 +115,21 @@ } // Save request played - if (!StringUtils.isEmpty(query)) { - VradiUser user = getUser(); - user.addRequests(query); - user = getProxy().store(user); + if (!StringUtils.isEmpty(saveRequest) && !StringUtils.isEmpty(queryName)) { + + user = getVradiSession().getDataService().saveQuery(user, queryName, query); + setUser(user); + + // Check if request is active / inactive + this.queryActive = getVradiSession().getDataService().checkRequestIsActive(user, queryName); } // Retrieve last requests - this.lastQueries = getUser().getRequests(); + Set<String> queriesId = user.getQueries(); + if (queriesId != null) { + this.lastQueries = getProxy().restore(Query.class, new ArrayList<String>(queriesId)); + } request.setAttribute(REQUEST_ATTRIBUTE_FORMS, paginatedList); Modified: trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties =================================================================== --- trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-web/src/main/resources/i18n/vradi-web_en_GB.properties 2011-05-30 17:11:34 UTC (rev 76) @@ -32,4 +32,8 @@ vradi.footer.bugreport=Bug report vradi.footer.userSupport=User support vradi.action.locale.english=English -vradi.action.locale.french=French \ No newline at end of file +vradi.action.locale.french=French +vradi.search.unActivateQuery=Unactivate +vradi.search.activateQuery=activate +vradi.search.queryName=Request name +vradi.search.saveQuery=Sauvegarder la requ\u00eate \ No newline at end of file Modified: trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties =================================================================== --- trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-web/src/main/resources/i18n/vradi-web_fr_FR.properties 2011-05-30 17:11:34 UTC (rev 76) @@ -30,7 +30,12 @@ vradi.register.pwdDontMatch=Les mots de passe sont différents vradi.register.submit=S'enregistrer vradi.register.title=S'enregistrer +vradi.search.activateQuery=Activer vradi.search.formNoteEdit=Edition des notes +vradi.search.queryName=Nom de la requête +vradi.search.saveQuery=Sauvegarder la requête vradi.search.submit=Rechercher vradi.search.title=Recherche +vradi.search.unActivateQuery=Desactiver vradi.title=Vradi Web +vradi.user.noinfo= Modified: trunk/vradi-web/src/main/resources/struts.xml =================================================================== --- trunk/vradi-web/src/main/resources/struts.xml 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-web/src/main/resources/struts.xml 2011-05-30 17:11:34 UTC (rev 76) @@ -107,7 +107,15 @@ <result>/WEB-INF/jsp/search.jsp</result> <result name="input" type="redirectAction">search</result> </action> + <!-- + | Activate or not user request + +--> + <!--action name="switchUserQueryActivation" class="org.chorem.vradi.actions.SearchAction" method="switchUserQueryActivation"> + <result type="redirect">search.action</result> + </action--> + + <!-- | Affiche la liste des notes attachees a un formulaire | Permet de creer une nouvelle note +--> Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/inc/footer.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/inc/footer.jsp 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/inc/footer.jsp 2011-05-30 17:11:34 UTC (rev 76) @@ -12,14 +12,15 @@ <span title="Copyright">©2011</span> <a shape="rect" href="http://www.codelutin.com">Code Lutin</a> - <a shape="rect" href="http://www.chorem.org/projects/vradi/issues"><s:text name="vradi.footer.bugreport" /></a> - - <a shape="rect" href="http://list.chorem.org/cgi-bin/mailman/listinfo/vradi-users"><s:text name="vradi.footer.userSupport" /></a> - - <s:url var="localeEN"> - <s:param name="request_locale">en_GB</s:param> - </s:url> - <s:url var="localeFR"> - <s:param name="request_locale">fr_FR</s:param> - </s:url> + <a shape="rect" href="http://list.chorem.org/cgi-bin/mailman/listinfo/vradi-users"><s:text name="vradi.footer.userSupport" /></a> <%-- Dont work for moment --%> + <%-----%> + <%--<s:url var="localeEN">--%> + <%--<s:param name="request_locale">en_GB</s:param>--%> + <%--</s:url>--%> + <%--<s:url var="localeFR">--%> + <%--<s:param name="request_locale">fr_FR</s:param>--%> + <%--</s:url>--%> <%--<s:a href="%{localeEN}"><s:text name="vradi.action.locale.english" /></s:a> ---%> <%--<s:a href="%{localeFR}"><s:text name="vradi.action.locale.french" /></s:a>--%> </p> Modified: trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp 2011-05-30 11:13:08 UTC (rev 75) +++ trunk/vradi-web/src/main/webapp/WEB-INF/jsp/search.jsp 2011-05-30 17:11:34 UTC (rev 76) @@ -4,7 +4,6 @@ <%@page import="org.chorem.vradi.decorators.DateFormatColumnDecorator" %> <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> -<%@taglib prefix="sj" uri="/struts-jquery-tags"%> <%@taglib prefix="displaytag" uri="http://displaytag.sf.net"%> <html> @@ -15,14 +14,25 @@ <s:head /> </head> <body> - <s:select id="lastQueries" - list="lastQueries" - emptyOption="true" - onchange="$('#searchArea')[0].innerHTML = this.options[this.selectedIndex].value"/> - <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> <s:textarea id="searchArea" name="query"/> - <s:submit key="vradi.search.submit" name="submit"/> + <s:submit key="vradi.search.saveQuery" name="saveRequest"/> + <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> + <s:submit key="vradi.search.submit" name="search"/> </s:form> <displaytag:table name="forms" sort="list"
participants (1)
-
sletellier@users.chorem.org