Author: bpoussin Date: 2011-08-16 20:19:34 +0200 (Tue, 16 Aug 2011) New Revision: 304 Url: http://chorem.org/repositories/revision/bow/304 Log: Evolution #438: Refactore source code and simplify all - utilisation de BaseAction de nuiton-web - utilisation de struts I18n de nuiton-web - simplification de tous le concept de recherche et de page Home - modification du modele pour utilise WikittyAuthorisation pour faire le lien entre les bookmarks et ceux qui peuvent y acceder - ajout de la migration vers ce nouveau modele - l'action de migration a ete rendu generic pour supporter les migrations de n'importe quelle version - suppression de certain action en double (redirectToUrl-> alias) et qui ne servent plus (search,fulltextsearch,order->home) - debug de preference action qui faisait des exceptions ou qui ne fonctionnait pas (manque de tag dans la liste d'admin) Added: trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration06To11.java trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.java trunk/bow-ui/src/main/webapp/jsp/home.jsp trunk/src/site/rst/developper/bow-model.rst Removed: trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java trunk/bow-ui/src/main/java/org/chorem/bow/BowSearch.java trunk/bow-ui/src/main/java/org/chorem/bow/action/FullTextSearchAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/Migrate04To05Action.java trunk/bow-ui/src/main/java/org/chorem/bow/action/RedirectToUrlAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/SearchAction.java trunk/bow-ui/src/main/webapp/jsp/home.jsp trunk/bow-ui/src/main/webapp/jsp/inc/popupPublicAlias.jsp trunk/bow-ui/src/main/webapp/jsp/search.jsp Modified: trunk/bow-ui/pom.xml trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java trunk/bow-ui/src/main/java/org/chorem/bow/BowConfig.java trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration04To05.java trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java trunk/bow-ui/src/main/java/org/chorem/bow/action/AddUrlAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/AliasAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/BowBaseAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/HomeAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/LoginAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchResultAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchSuggestionAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/OrderAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/RegisterAction.java trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties trunk/bow-ui/src/main/resources/log4j.properties trunk/bow-ui/src/main/resources/struts.xml trunk/bow-ui/src/main/webapp/jsp/admin.jsp trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp trunk/bow-ui/src/main/webapp/jsp/inc/tagsCloud.jsp trunk/bow-ui/src/main/webapp/jsp/preferences.jsp trunk/bow-ui/src/main/xmi/bow.zargo trunk/pom.xml Modified: trunk/bow-ui/pom.xml =================================================================== --- trunk/bow-ui/pom.xml 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/pom.xml 2011-08-16 18:19:34 UTC (rev 304) @@ -41,6 +41,11 @@ </dependency> <dependency> + <groupId>org.nuiton.web</groupId> + <artifactId>nuiton-struts2</artifactId> + </dependency> + + <dependency> <groupId>org.nuiton.i18n</groupId> <artifactId>nuiton-i18n</artifactId> </dependency> Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java 2011-08-16 18:19:34 UTC (rev 304) @@ -30,6 +30,7 @@ import org.apache.commons.lang.StringUtils; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.search.FacetTopic; +import org.nuiton.wikitty.search.PagedResult; /** * @@ -45,7 +46,13 @@ protected int tmax = -1; protected int tmin = -1; - + public BookmarkActions() { + } + + public BookmarkActions(PagedResult<BowBookmark> booklist) { + List<FacetTopic> topics = booklist.getTopic(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); + } + public void createTagCloud(List<FacetTopic> cpy) { setTagCloud(cpy); deleteTagBySearch(); @@ -85,15 +92,10 @@ } public void addTags(String str) { - if (str != null) { - if (!str.isEmpty()) { - str = str.trim(); - String[] tags = str.split("\\s+"); - for (String tag : tags) { - if (!tagsSearch.contains(tag)) { - tagsSearch.add(tag); - } - } + List<String> tags = BowUtils.getWords(str); + for (String tag : tags) { + if (!tagsSearch.contains(tag)) { + tagsSearch.add(tag); } } } @@ -135,7 +137,10 @@ } public void setTagSearch(List<String> cpy) { - tagsSearch = cpy; + tagsSearch = new ArrayList<String>(); + if (cpy != null) { + tagsSearch.addAll(cpy); + } } public String getSearchLine() { Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java 2011-08-16 18:19:34 UTC (rev 304) @@ -24,11 +24,17 @@ package org.chorem.bow; import java.text.ParseException; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -48,22 +54,70 @@ */ public static Log log = LogFactory.getLog(BookmarkUtils.class); - static public Criteria getBookmarkListCriteriaByUser(BowPreference user, String searchLine) { - Criteria criteria = null; - if (user != null) { - if (searchLine != null && !searchLine.isEmpty()) { - String[] words = searchLine.split("\\s+"); //Puts the tags in an array - List<String> tags = new ArrayList<String>(Arrays.asList(words)); - criteria = Search.query() - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()) - .eq(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS, tags).criteria() - .addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); - } else { - criteria = Search.query().eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()). - criteria().addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); - } - criteria.setEndIndex(user.getBookmarks()); + static public Search addEqUser(Search search, String userId) { + Search result = search.or(); + result = result.eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId); + result = result.eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_READER, userId); + result = result.eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_WRITER, userId); + result = result.eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_ADMIN, userId); + return search; + } + + static public Criteria getBookmarkListCriteriaByUser(BowPreference user) { + Criteria criteria = getBookmarkListCriteriaByUser(user, null, null, null); + return criteria; + } + + static public Criteria getBookmarkListCriteriaByUser( + BowPreference user, String searchLine, String fullTextLine, String order) { + Search search = Search.query(); + BookmarkUtils.addEqUser(search, user.getWikittyId()); + + if (StringUtils.isNotBlank(fullTextLine)) { + search.keyword(fullTextLine); } + + if (StringUtils.isNotBlank(searchLine)) { + List<String> tags = BowUtils.getWords(searchLine); + search.eq(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS, tags); + } + + Criteria criteria = search.criteria(); + criteria.addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); + // on fixe le nombre de tag max souhaite par l'utilisateur + criteria.setFacetLimit(user.getTags()); + + // on fixe le nombre max d'element a ce qu'a defini l'utilisateur + criteria.setEndIndex(user.getBookmarks()); + + boolean sortOrderAscending = StringUtils.startsWith(order, "asc"); + String sortOrderField = null; + if (StringUtils.equals(order,"ascName")) { + sortOrderField = BowBookmark.FQ_FIELD_BOWBOOKMARK_DESCRIPTION; + } else if (StringUtils.equals(order,"ascDate")) { + sortOrderField = BowBookmark.FQ_FIELD_BOWBOOKMARK_CREATIONDATE; + } else if (StringUtils.equals(order,"ascClick")) { + sortOrderField = BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK; + } else if (StringUtils.equals(order,"descName")) { + sortOrderField = BowBookmark.FQ_FIELD_BOWBOOKMARK_DESCRIPTION; + } else if (StringUtils.equals(order,"descDate")) { + sortOrderField = BowBookmark.FQ_FIELD_BOWBOOKMARK_CREATIONDATE; + } else if (StringUtils.equals(order,"descClick")) { + sortOrderField = BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK; + } + if (sortOrderField == null) { + // default sort order + // TODO poussin 20110815 rendre configurable par l'utilisateur l'ordre par defaut qu'il prefere + sortOrderField = BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK; + sortOrderAscending = false; + } + + if (sortOrderAscending) { + criteria.setSortAscending(sortOrderField); + } else { + criteria.setSortDescending(sortOrderField); + } + return criteria; } @@ -78,13 +132,16 @@ bookmarkActions.setBookmarks(bookList); } if (fullText == null || fullText.isEmpty()) { - if (searchLine != null && searchLine.isEmpty()) { + if (StringUtils.isEmpty(searchLine)) { bookmarkActions.emptySearchline(); } else { bookmarkActions.addTags(searchLine); //Adds the new tags } } List<FacetTopic> topics = result.getTopic(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); + if (log.isDebugEnabled()) { + log.debug(String.format("There are %s tag in cloud", CollectionUtils.isEmpty(topics)?0:topics.size())); + } bookmarkActions.createTagCloud(topics); return bookmarkActions; } @@ -94,7 +151,7 @@ WikittyProxy proxy = session.getProxy(); Criteria criteria = Search.query() .eq(Element.ELT_EXTENSION, BowImport.EXT_BOWIMPORT) - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria() + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, user.getWikittyId()).criteria() .addFacetField(BowImport.FQ_FIELD_BOWIMPORT_IMPORTDATE) .setFirstIndex(0).setEndIndex(0); @@ -231,10 +288,11 @@ if (nameIndex >= 0) { tags = nameAndTags.substring(nameIndex + 1); // get tags, +1 because of '|' } - addTagsToBookmark(tags, bookmark); + addTagsToBookmark(BowUtils.getWords(tags), bookmark); addUrlToBookmark(url, bookmark); bookmark.setClick(0); - bookmark.setBowUser(user.getWikittyId()); // set the email (user name) + bookmark.setOwner(user.getWikittyId()); + bookmark.addReader(user.getWikittyId()); // only owner can read it bookmark.setCreationDate(new Date()); // set the date return bookmark; } @@ -251,18 +309,10 @@ } } - public static void addTagsToBookmark(String tags, BowBookmark bookmark) { - if (tags != null && !tags.isEmpty()) { - String[] tagsTab = tags.split("\\s+"); // put the tags in an array - List<String> tagList = Arrays.asList(tagsTab); - addTagsToBookmark(tagList, bookmark); - } - } - public static void addTagsToBookmark(List<String> tagList, BowBookmark bookmark) { if (tagList != null) { for (String tag : tagList) { - if (tag != null && !tag.isEmpty()) { + if (StringUtils.isNotEmpty(tag)) { // on peut ajouter plusieurs fois le meme tag, car on les // stocke dans un Set bookmark.addLabels(tag); @@ -293,13 +343,14 @@ bookmark.setDescription(""); } - addTagsToBookmark(tags, bookmark); + addTagsToBookmark(BowUtils.getWords(tags), bookmark); addUrlToBookmark(url, bookmark); bookmark.setClick(0); - bookmark.setBowUser(user.getWikittyId()); // set the email (user name) + bookmark.setOwner(user.getWikittyId()); + bookmark.addReader(user.getWikittyId()); // only owner can read it if (date == null) { date = new Date(); } @@ -334,7 +385,7 @@ } addUrlToBookmark(link, bookmark); bookmark.clearLabels(); - addTagsToBookmark(tags, bookmark); + addTagsToBookmark(BowUtils.getWords(tags), bookmark); if (privateAlias != null) { privateAlias = privateAlias.trim(); } Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowConfig.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowConfig.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowConfig.java 2011-08-16 18:19:34 UTC (rev 304) @@ -47,7 +47,12 @@ /** Singleton instance. */ protected static ApplicationConfig config; - private BowConfig() { + /** + * constructeur public seulement pour pouvoir mettre une variable de ce + * type dans BowBaseAction et acceder facilement au donnees dans les jsp + * en ognl + */ + public BowConfig() { } public static ApplicationConfig getConfig(String... args) { Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java 2011-08-16 18:19:34 UTC (rev 304) @@ -1,136 +0,0 @@ -/* - * #%L - * bow - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2010 - 2011 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% - */ -package org.chorem.bow; - -import org.nuiton.wikitty.WikittyProxy; -import org.nuiton.wikitty.search.Criteria; -import org.nuiton.wikitty.search.PagedResult; - -import javax.servlet.http.HttpServletRequest; -import java.util.List; -import org.nuiton.wikitty.search.Search; - -public class BowInit { - - protected static final int MAX_ELEMENT_NUMBER = 10; - - private static final String ALIAS_SERVLET_URL = "aliasServletUrl"; - -// static public void checkAdmin(Map<String, Object> session, String login) { -// String[] admins = BowConfig.getInstance().getAdmins(); -// -// boolean isAdmin = false; -// if (admins != null) { -// for (String admin : admins) { -// if (login.equals(admin)) { -// isAdmin = true; -// break; -// } -// } -// } -// BowSession bowSession = BowSession.getBowSession(session); -// bowSession.setAdmin(isAdmin); -// } -// -// /** -// * load token if not already loaded, or create new bow token if token not -// * found in data -// * -// * @param session -// * @param login -// * @throws NoSuchAlgorithmException -// */ -// static public void initializeToken(Map<String, Object> session, User login) -// throws NoSuchAlgorithmException { -// BowSession bowSession = BowSession.getBowSession(session); -// BowToken bowToken = bowSession.getBowToken(); -// if (bowToken == null) { -// WikittyProxy proxy = bowSession.getProxy(); -// Criteria criteria = Search.query().eq(Token.FQ_FIELD_TOKEN_EMAIL, login.getEmail()).criteria(); -// Token token = proxy.findByCriteria(Token.class, criteria); -// bowToken = new BowToken(); -// -// if (token == null) { -// token = new TokenImpl(); -// String newToken = bowToken.generateToken(); -// token.setToken(newToken); -// token.setEmail(login.getEmail()); -// proxy.store(token); -// } -// bowToken.setPermanentToken(token.getToken()); -// String temporaryToken = bowToken.generateToken(); -// bowToken.setTemporaryToken(temporaryToken); -// bowSession.setBowToken(bowToken); -// } -// } - -// static public void initSession(Map<String, Object> session, User user) throws NoSuchAlgorithmException { -// BowSession bowSession = BowSession.getBowSession(session); -//// WikittyProxy proxy = bowSession.getProxy(); -// -// if (user != null) { -// bowSession.setUser(user); -// -// // pas ajouter dans bowSession car, en a t on vraiment besoin ? -//// session.put("version", config.getVersion()); -//// session.put("bowUrl", config.getBowUrl()); -//// initializeToken(session, user); -//// checkAdmin(session, user.getEmail()); -// } -// } -// - static public void initHomePage(HttpServletRequest request, BowPreference user) { - BowSession session = BowSession.getBowSession(request); - BowPreference pref = session.getPreference(); - - WikittyProxy proxy = session.getProxy(); - Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, null); - - if (criteria != null) { - Criteria sortCriteria = Search.query(criteria).criteria() - .addSortDescending(BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK) - .setEndIndex(MAX_ELEMENT_NUMBER); - PagedResult<BowBookmark> result = proxy.findAllByCriteria(BowBookmark.class, sortCriteria); //Selects all bookmarks by user - sortCriteria =Search.query(criteria).criteria() - .addSortDescending(BowBookmark.FQ_FIELD_BOWBOOKMARK_CREATIONDATE) - .setEndIndex(MAX_ELEMENT_NUMBER); - List<BowBookmark> lastBookmarks = - proxy.findAllByCriteria(BowBookmark.class, sortCriteria).getAll(); - BookmarkActions bookmarkActions = - BookmarkUtils.createBookmarkActions(request, result, null); - bookmarkActions.setTagSearch(null); - List<BowBookmark> bookList = bookmarkActions.getBookmarks(); - - if (bookList.size() > MAX_ELEMENT_NUMBER) { - bookList = bookmarkActions.getBookmarks().subList(0, MAX_ELEMENT_NUMBER); - bookmarkActions.setBookmarks(bookList); - } - if (lastBookmarks != null) { - bookmarkActions.setLastBookmarks(lastBookmarks); - } - request.setAttribute("bookmarkActions", bookmarkActions); - } - request.setAttribute(ALIAS_SERVLET_URL, BowConfig.getServletAliasUrl()); - } -} Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration04To05.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration04To05.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration04To05.java 2011-08-16 18:19:34 UTC (rev 304) @@ -140,7 +140,8 @@ result.add(bowBookmark); // copie du bookmark - bowBookmark.setBowUser(user.getWikittyId()); + bowBookmark.setOwner(user.getWikittyId()); + bowBookmark.addReader(user.getWikittyId()); bowBookmark.setClick(bookmark.getClick()); bowBookmark.setCreationDate(bookmark.getDate()); bowBookmark.setDescription(bookmark.getDescription()); Copied: trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration06To11.java (from rev 302, trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration04To05.java) =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration06To11.java (rev 0) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration06To11.java 2011-08-16 18:19:34 UTC (rev 304) @@ -0,0 +1,125 @@ +/* + * #%L + * BOW UI + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 - 2011 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% + */ +package org.chorem.bow; + + +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyUtil; +import org.nuiton.wikitty.entities.Wikitty; +import org.nuiton.wikitty.entities.WikittyAuthorisationHelper; +import org.nuiton.wikitty.entities.WikittyExtension; +import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.PagedResult; +import org.nuiton.wikitty.search.Search; +import org.nuiton.wikitty.services.WikittyExtensionMigration; +import org.nuiton.wikitty.services.WikittyExtensionMigrationRename; + +/** + * Migre les données depuis la version 0.6 vers la version 1.1. + * On suppose que les données sont convenablement indexee. + * + * <li> ajout du champs BowBookmark.authentificationInfo (rien a faire pour la migration) + * <li> suppression de BowBookmark.bowUser + * <li> BowBookmark depend de WikittyAuthorisation + * + * la valeur de BowBookmark.bowUser est maintenant stockee dans + * WikittyAuthorisation.owner et WikittyAuthorisation.reader + * pour que par defaut seul le owner est les droits de lecture sur l'item + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class BowMigration06To11 extends WikittyExtensionMigrationRename { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(BowMigration06To11.class); + + /** nombre d'objet a charger en 1 fois */ + final static public int MAX = 1000; + + /** + * Point d'entree de la migration + * + * @param proxy + */ + @Override + public Wikitty migrate(WikittyService service, Wikitty wikitty, + WikittyExtension oldExt, WikittyExtension newExt) { + // on laisse l'implantation par defaut migrer tout ce qu'il faut + // nouvelle dependance, ... + Wikitty result = super.migrate(service, wikitty, oldExt, newExt); + + // On met juste a jour les données avec le champs supprimer bowUser + String bookId = wikitty.getId(); + String userId = (String)wikitty.getFqField( + BowBookmark.EXT_BOWBOOKMARK + WikittyUtil.FQ_FIELD_NAME_SEPARATOR + + "bowUser"); + if (userId == null) { + log.error(String.format("BowBookmark without bowUser info: %s", bookId)); + } else { + WikittyAuthorisationHelper.setOwner(result, userId); + WikittyAuthorisationHelper.addReader(result, userId); + } + + return result; + } + + static public void migrate(WikittyProxy proxy) { + log.info("Migration 0.5 to 0.6 started"); + // on enregistre la classe qui fera la migration des données + WikittyExtensionMigration.migrationRegistry.put( + BowBookmark.EXT_BOWBOOKMARK, new BowMigration06To11()); + + // une simple lecture puis ecrire fera automatiquement la migration + // grace a la classe enregistree pour. + Criteria criteria = + Search.query().exteq(BowBookmark.EXT_BOWBOOKMARK).criteria(); + int i = 0; + int count = 0; + PagedResult<Wikitty> wikitties; + do { + criteria.setFirstIndex(i); + criteria.setEndIndex(i += MAX); + wikitties = proxy.findAllByCriteria(criteria); + List<Wikitty> books = wikitties.getAll(); + proxy.storeWikitty(books); + count += books.size(); + } while (wikitties.size() >= MAX); + log.info(String.format("Migration of %s BowBookmark done", count)); + } + + // only here to simplify test and debug of migration, this permit to migrate + // datas in developpement environnement directly without launch bow web app + public static void main(String ... args) { + BowProxy proxy = BowProxy.getInstance(null); + migrate(proxy); + } +} Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/BowSearch.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowSearch.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowSearch.java 2011-08-16 18:19:34 UTC (rev 304) @@ -1,94 +0,0 @@ -/* - * #%L - * bow - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2010 - 2011 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% - */ -package org.chorem.bow; - -import javax.servlet.http.HttpServletRequest; - -import org.nuiton.wikitty.search.Criteria; -import org.nuiton.wikitty.search.PagedResult; -import org.nuiton.wikitty.WikittyProxy; -import org.nuiton.wikitty.search.Search; - -public class BowSearch { - - static public void search(HttpServletRequest request, BowPreference user) { - String searchLine = request.getParameter("searchLine"); - - if (searchLine == null) { - searchLine = ""; - } - String fulltext = request.getParameter("fullTextLine"); - - if (fulltext != null && !fulltext.isEmpty() && searchLine.isEmpty()) { - fullText(request, user); - } else { - String tag = request.getParameter("addTag"); - - if (tag != null && !tag.isEmpty()) { - if (searchLine.isEmpty()) { - searchLine = tag; - } else { - searchLine += " " + tag; - } - } - BowSession session = BowSession.getBowSession(request); - WikittyProxy proxy = session.getProxy(); - Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, searchLine); - - if (criteria != null ) { - criteria = criteria.addSortDescending(BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK); - - if (criteria != null) { - PagedResult<BowBookmark> result = - proxy.findAllByCriteria(BowBookmark.class, criteria); //Selects all bookmarks by user - BookmarkActions bookmarkActions = BookmarkUtils.createBookmarkActions(request, result, searchLine); - request.setAttribute("bookmarkActions", bookmarkActions); - } - } - } - } - - static public void fullText(HttpServletRequest request, BowPreference user) { - String fullText = request.getParameter("fullTextLine"); - - if (fullText == null || fullText.isEmpty()) { - search(request, user); - } else { - BowSession session = BowSession.getBowSession(request); - WikittyProxy proxy = session.getProxy(); - Criteria criteria; - - if (!fullText.isEmpty()) { - criteria = Search.query().keyword(fullText). - eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria(). - addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); - } else { - criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, null); - } - PagedResult<BowBookmark> result = proxy.findAllByCriteria(BowBookmark.class, criteria); - BookmarkActions bookmarkActions = BookmarkUtils.createBookmarkActions(request, result, null); - request.setAttribute("bookmarkActions", bookmarkActions); - } - } -} Copied: trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java (from rev 302, trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java) =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java (rev 0) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java 2011-08-16 18:19:34 UTC (rev 304) @@ -0,0 +1,202 @@ +/* + * #%L + * bow + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 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% + */ +package org.chorem.bow; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import org.apache.commons.collections.CollectionUtils; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.StringUtil; +import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.FacetTopic; +import org.nuiton.wikitty.search.PagedResult; + +/** + * Cette classe permet de stocker le resutlat d'une recherche + * - la liste des tags qui ont servi pour la recherche + * - la chaine fulltext de recherche + * - la liste des bookmarks + * - la liste des tags + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class BowSearchResult { + + private static final Log log = LogFactory.getLog(BowSearchResult.class); + + /** la ligne contenant les tags a rechercher */ + protected String searchLine; + /** la ligne contenant le fulltext a recherche */ + protected String fullTextLine; + /** l'ordre souhaite pour l'affichage */ + protected String order; + /** nombre total de bookmark trouve */ + protected int bookmarkCount = 0; + protected List<BowBookmark> bookmarks; + protected List<FacetTopic> tagsCloud; + protected int tmax = -1; + protected int tmin = -1; + + /** + * Construit l'objet en passant en parametre tout ce qu'il faut pour faire + * la recherche + * + * @param session la session de l'utilisateur sur lequel on peut recuperer + * le proxy et les preferences + * @param searchLine (optionel) le liste des tags a rechercher + * @param fullTextLine (optionel) la chaine fulltext a rechercher + * @param order (optionnel) l'ordre d'affichage du resultat + */ + public BowSearchResult(BowSession session, + String searchLine, String fullTextLine, String order) { + this.searchLine = StringUtils.defaultString(searchLine); + this.fullTextLine = StringUtils.defaultString(fullTextLine); + this.order = StringUtils.defaultString(order); + + BowPreference user = session.getPreference(); + BowProxy proxy = session.getProxy(); + + Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser( + user, searchLine, fullTextLine, order); + PagedResult<BowBookmark> result = + proxy.findAllByCriteria(BowBookmark.class, criteria); + + bookmarkCount = result.getNumFound(); + if (log.isDebugEnabled()) { + log.debug(String.format("Find %s items, used %s", + bookmarkCount, result.size())); + } + + setBookmarks(result.getAll()); + + List<FacetTopic> topics = result.getTopic(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); + if (log.isDebugEnabled()) { + log.debug(String.format("There are %s tag in cloud", + CollectionUtils.isEmpty(topics)?0:topics.size())); + } + setTagCloud(topics); + } + + public void setTagCloud(List<FacetTopic> cpy) { + tagsCloud = new ArrayList<FacetTopic>(); + if (cpy != null) { + tagsCloud.addAll(cpy); + + // on ne met pas dans le cloud les tags qui ont servi pour la recherche + List<FacetTopic> save = new ArrayList<FacetTopic>(tagsCloud); + // on met dans un Set pour optimiser la recherche + Set<String> tagsSearch = + new HashSet<String>(BowUtils.getWords(getSearchLine())); + + for(Iterator<FacetTopic> i=tagsCloud.iterator(); i.hasNext();) { + FacetTopic topic = i.next(); + String name = topic.getTopicName(); + if (tagsSearch.contains(name)) { + i.remove(); + } + } + + // on calcul la frequence pour le calcul de la taille dans le cloud + tmax = -1; // correspond to the most tag frequency in the tag cloud + tmin = -1; // correspond to the less tag frequency in the tag cloud + for (FacetTopic tag : tagsCloud) { + int value = tag.getCount(); + if (tmax < value) { // search the most tag frequancy + tmax = value; + } + if (tmin == -1) { + tmin = value; + } else if (tmin > value) { // search less tag frequency + tmin = value; + } + } + + } + } + + public String getSearchLine() { + return searchLine; + } + + public int getFont(int ti) { + int font = 1; + if (tmax > tmin) { + font = 30 * (ti - tmin) / (tmax - tmin); // get the font size for a tag frequency + } + if (font < 10) { + font = 10; + } + return font; + } + + public List<FacetTopic> getTagsCloud() { + return tagsCloud; + } + + public List<String> getTagsSearch() { + return BowUtils.getWords(getSearchLine()); + } + + public List<BowBookmark> getBookmarks() { + return bookmarks; + } + + public void setBookmarks(List<BowBookmark> bookmarks) { + this.bookmarks = new ArrayList<BowBookmark>(); + if (bookmarks != null) { + this.bookmarks.addAll(bookmarks); + } + } + + public int getTmin() { + return tmin; + } + + public int getTmax() { + return tmax; + } + + public String getFullTextLine() { + return fullTextLine; + } + + public int getBookmarkCount() { + return bookmarkCount; + } + + public String getOrder() { + return order; + } + +} Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java 2011-08-16 18:19:34 UTC (rev 304) @@ -23,7 +23,9 @@ */ package org.chorem.bow; +import java.util.Arrays; import java.util.Date; +import java.util.List; import org.apache.commons.lang.StringUtils; import org.nuiton.util.StringUtil; @@ -32,6 +34,7 @@ import org.nuiton.wikitty.search.Search; import java.util.UUID; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.time.DateFormatUtils; public class BowUtils { @@ -41,6 +44,21 @@ private BowUtils() { } + /** + * Donne la liste des mots de la chaine passee en parametre. + * Si tags est null ou vide, le tableau retourne sera vide + * + * @param tags + * @return + */ + static public List<String> getWords(String tags) { + String [] words = StringUtils.split(tags); + words = ArrayUtils.nullToEmpty(words); + + List<String> result = Arrays.asList(words); + return result; + } + static public String formatDate(Date date) { String result = DateFormatUtils.format(date, BOW_DATE_SHORT_PATTERN); return result; Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/AddUrlAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/AddUrlAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/AddUrlAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -201,7 +201,7 @@ if (privateAlias != null && !privateAlias.isEmpty()) { privateAliasCriteria = Search.query() .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_PRIVATEALIAS, privateAlias) - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, userId) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId) .criteria().setEndIndex(0); } if (publicAlias != null && !publicAlias.isEmpty()) { @@ -242,13 +242,13 @@ // si on a reussi a creer le bookmark, on regarde s'il ne faut pas // le fusionner avec un deja existant if (bookmark != null && !bookmark.getDescription().isEmpty() - && !bookmark.getBowUser().isEmpty()) { + && !bookmark.getOwner().isEmpty()) { // looking for already bookmark with same url, to fusion them String link = bookmark.getLink(); Criteria criteria = Search.query() .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_LINK, link) - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, userId) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId) .criteria(); BowBookmark oldBookmark = proxy.findByCriteria(BowBookmark.class, criteria); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/AliasAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/AliasAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/AliasAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -69,7 +69,7 @@ } String result = SUCCESS; try { - if (!StringUtils.isEmpty(alias)) { + if (StringUtils.isNotEmpty(alias)) { WikittyProxy proxy = getBowProxy(); Criteria criteria = Search.query().eq( @@ -85,9 +85,8 @@ bookmark.setClick(clicks); proxy.store(bookmark); } else { - log.debug(getText(n_("bow.alias.bookmarkId.unknown"), new String[]{alias})); - addActionError(getText(n_("bow.alias.bookmarkId.unknown"), new String[]{alias})); - log.debug("No bookmark with alias or id " + alias); + log.error(String.format("No bookmark with alias or id '%s'", alias)); + addActionError(_("bow.alias.bookmarkId.unknown", alias)); result = ERROR; } } Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/BowBaseAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/BowBaseAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/BowBaseAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -23,16 +23,14 @@ */ package org.chorem.bow.action; -import com.opensymphony.xwork2.ActionSupport; -import com.opensymphony.xwork2.util.ValueStack; -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.util.List; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; +import org.chorem.bow.BowConfig; import org.chorem.bow.BowProxy; import org.chorem.bow.BowSession; +import org.nuiton.web.struts2.BaseAction; /** * Base class which must be extended by every action @@ -40,7 +38,7 @@ * the missing i18n translations * Allows access to the session and the proxy */ -public class BowBaseAction extends ActionSupport implements SessionAware { +public class BowBaseAction extends BaseAction implements SessionAware { private static final long serialVersionUID = 1L; @@ -49,9 +47,19 @@ final static protected String CONTEXT_ACTION_KEY = "action"; public static final String UNTRANSLATED_MARKER = "???"; - + + protected BowConfig config = null; protected Map<String, Object> session; + protected String searchLine; + protected String fullTextLine; + public BowConfig getConfig() { + if (config == null) { + config = new BowConfig(); + } + return config; + } + public BowSession getBowSession() { BowSession result = BowSession.getBowSession(session); return result; @@ -67,72 +75,31 @@ this.session = session; } - @Override - public String getText(String aTextName) { - String value = super.getText(aTextName); - return getSafeText(aTextName, value); + /** + * @return the searchLine + */ + public String getSearchLine() { + return searchLine; } - @Override - public String getText(String aTextName, String defaultValue) { - String value = super.getText(aTextName, defaultValue); - return getSafeText(aTextName, value); + /** + * @param searchLine the searchLine to set + */ + public void setSearchLine(String searchLine) { + this.searchLine = searchLine; } - @Override - public String getText(String aTextName, String defaultValue, String obj) { - String value = super.getText(aTextName, defaultValue, obj); - return getSafeText(aTextName, value); + /** + * @return the fullTextLine + */ + public String getFullTextLine() { + return fullTextLine; } - @Override - public String getText(String aTextName, List<?> args) { - String value = super.getText(aTextName, args); - return getSafeText(aTextName, value); - } - - @Override - public String getText(String key, String[] args) { - String value = super.getText(key, args); - return getSafeText(key, value); - } - - @Override - public String getText(String aTextName, String defaultValue, List<?> args) { - String value = super.getText(aTextName, defaultValue, args); - return getSafeText(aTextName, value); - } - - @Override - public String getText(String key, String defaultValue, String[] args) { - String value = super.getText(key, defaultValue, args); - return getSafeText(key, value); - } - - @Override - public String getText(String key, String defaultValue, List<?> args, - ValueStack stack) { - String value = super.getText(key, defaultValue, args, stack); - return getSafeText(key, value); - } - - @Override - public String getText(String key, String defaultValue, String[] args, - ValueStack stack) { - String value = super.getText(key, defaultValue, args, stack); - return getSafeText(key, value); - } - /** - * Surrounds the non translated keys with a marker to make them visible + * @param fullTextLine the fullTextLine to set */ - protected String getSafeText(String key, String value) { - if (StringUtils.isEmpty(value)) { - if (log.isWarnEnabled()) { - log.warn("Key [" + key + "] is not translated"); - } - return UNTRANSLATED_MARKER + key + UNTRANSLATED_MARKER; - } - return value; + public void setFullTextLine(String fullTextLine) { + this.fullTextLine = fullTextLine; } } \ No newline at end of file Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -66,7 +66,7 @@ WikittyProxy proxy = getBowProxy(); BowUser user = getBowSession().getUser(); Criteria criteria = Search.query() - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, user.getWikittyId()) .eq(BowImport.FQ_FIELD_BOWIMPORT_IMPORTDATE, date).criteria(); List<BowImport> bookmarks = proxy.findAllByCriteria(BowImport.class, criteria).getAll(); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.chorem.bow.BowBookmark; import org.chorem.bow.BookmarkUtils; @@ -45,67 +46,21 @@ public class DeleteSearchResultsAction extends BowBaseAction { private static final long serialVersionUID = -3903724044644625507L; - protected String searchLine; - protected String fullTextLine; /** - * @return the searchLine - */ - public String getSearchLine() { - return searchLine; - } - - /** - * @param searchLine the searchLine to set - */ - public void setSearchLine(String searchLine) { - this.searchLine = searchLine; - } - - /** - * @return the fullTextLine - */ - public String getFullTextLine() { - return fullTextLine; - } - - /** - * @param fullTextLine the fullTextLine to set - */ - public void setFullTextLine(String fullTextLine) { - this.fullTextLine = fullTextLine; - } - - /** * Deletes the search results */ public String execute() { try { - if (searchLine != null && fullTextLine != null) { - WikittyProxy proxy = getBowProxy(); - Criteria criteria; + if (StringUtils.isNotBlank(searchLine) + || StringUtils.isNotBlank(fullTextLine)) { BowPreference user = getBowSession().getPreference(); + Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser( + user, searchLine, fullTextLine, null); - if (fullTextLine.isEmpty()) { - criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, searchLine); - } else { - criteria = Search.query().keyword(fullTextLine) - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria() - .addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); - } - List<BowBookmark> bookmarks = proxy.findAllByCriteria(BowBookmark.class, criteria).getAll(); - List<String> ids = new ArrayList<String>(); + WikittyProxy proxy = getBowProxy(); + List<String> ids = proxy.findAllIdByCriteria(criteria).getAll(); - // TODO poussin 20110216 a revoir, incomprehensible :( - for (BowBookmark bookmark : bookmarks) { - if (bookmark != null) { - if (searchLine.isEmpty() && bookmark.getLabels() == null || - !searchLine.isEmpty() || fullTextLine.isEmpty() && - bookmark.getLabels() == null || !fullTextLine.isEmpty()) { - ids.add(bookmark.getWikittyId()); - } - } - } proxy.delete(ids); addActionMessage(getText(n_("bow.search.results.deleted"))); } Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -72,7 +72,7 @@ // Get all bookmark for user Criteria criteria = Search.query() - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria(); + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, user.getWikittyId()).criteria(); List<BowBookmark> bookmarks = proxy.findAllByCriteria(BowBookmark.class, criteria).getAll(); // Export all Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/action/FullTextSearchAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/FullTextSearchAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/FullTextSearchAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -1,94 +0,0 @@ -/* - * #%L - * bow - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2010 - 2011 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% - */ -package org.chorem.bow.action; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.bow.BowPreference; -import org.chorem.bow.BowSearch; -import org.chorem.bow.BowSession; - -import static org.nuiton.i18n.I18n.n_; - -/** - * Fait la recherche fulltext - * - * @author poussin - */ -public class FullTextSearchAction extends BowBaseAction implements ServletRequestAware { - private static final long serialVersionUID = -7736099487284993426L; - protected String searchLine; - protected String fullTextLine; - protected HttpServletRequest request; - - @Override - public void setServletRequest(HttpServletRequest request) { - this.request = request; - } - - /** - * @return the searchLine - */ - public String getSearchLine() { - return searchLine; - } - - /** - * @param searchLine the searchLine to set - */ - public void setSearchLine(String searchLine) { - this.searchLine = searchLine; - } - - /** - * @return the fullTextLine - */ - public String getFullTextLine() { - return fullTextLine; - } - - /** - * @param fullTextLine the fullTextLine to set - */ - public void setFullTextLine(String fullTextLine) { - this.fullTextLine = fullTextLine; - } - - /** - * Fulltext search - */ - public String execute() { - try { - BowSession session = getBowSession(); - BowPreference user = session.getPreference(); - - BowSearch.fullText(request, user); - } catch (Exception e) { - addActionError(getText(n_("bow.error.internal"))); - log.error(e.getMessage(), e); - } - return SUCCESS; - } -} Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/HomeAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/HomeAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/HomeAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -23,11 +23,24 @@ */ package org.chorem.bow.action; -import javax.servlet.http.HttpServletRequest; +import com.opensymphony.xwork2.ActionContext; +import java.util.Arrays; +import java.util.List; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.bow.BowInit; +import org.chorem.bow.BookmarkUtils; +import org.chorem.bow.BowBookmark; +import org.chorem.bow.BowConfig; import org.chorem.bow.BowPreference; +import org.chorem.bow.BowSearchResult; +import org.chorem.bow.BowSession; +import org.nuiton.util.TimeLog; +import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.PagedResult; import static org.nuiton.i18n.I18n.n_; @@ -36,41 +49,81 @@ * * @author poussin */ -public class HomeAction extends BowBaseAction implements ServletRequestAware { +public class HomeAction extends BowBaseAction { + + private static final Log log = LogFactory.getLog(HomeAction.class); + private static final TimeLog timeLog = new TimeLog(HomeAction.class); + private static final long serialVersionUID = -3735250067223062719L; - protected String token; - protected HttpServletRequest request; - - /** - * @return the token - */ - public String getToken() { - return token; + + private static final String ALIAS_SERVLET_URL = "aliasServletUrl"; + + static public HomeAction getAction() { + Object action = ActionContext.getContext().get(CONTEXT_ACTION_KEY); + return (HomeAction) action; } - /** - * @param token the token to set - */ - public void setToken(String token) { - this.token = token; + + protected String order; + protected String addTag; + final static protected List<String> possibleOrder = Arrays.asList( + "ascName", "descName", "ascClick", "descClick", "ascDate", "descDate"); + + protected BowSearchResult searchResult; + + public static List<String> getPossibleOrder() { + return possibleOrder; } + + public String getOrder() { + return order; + } + + public void setOrder(String order) { + this.order = order; + } - @Override - public void setServletRequest(HttpServletRequest request) { - this.request = request; + public String getAddTag() { + return addTag; } + public void setAddTag(String addTag) { + this.addTag = addTag; + } + + public BowSearchResult getSearchResult() { + return searchResult; + } + + public void setSearchResult(BowSearchResult searchResult) { + this.searchResult = searchResult; + } + /** * Initializes everything before displaying the home page */ + @Override public String execute() { + long start = TimeLog.getTime(); try { - BowPreference user = getBowSession().getPreference(); - - BowInit.initHomePage(request, user); - } catch (Exception e) { + // on ajoute les tags qui doivent faire parti de ne nouvelle recherche + // on restocke dans searchLine pour que la bonne info reapparaisse + // a l'utilisateur + searchLine = StringUtils.join(new String[]{searchLine, addTag}, " ").trim(); + + // si l'ordre souhaite n'existe pas, on utilise l'ordre par defaut + if (!getPossibleOrder().contains(order)) { + // default sort order + // TODO poussin 20110815 rendre configurable par l'utilisateur l'ordre par defaut qu'il prefere + order = "descClick"; + } + + BowSession s = getBowSession(); + searchResult = new BowSearchResult(s, searchLine, fullTextLine, order); + } catch (Exception eee) { addActionError(getText(n_("bow.error.internal"))); - log.error(e.getMessage(), e); + log.error(eee.getMessage(), eee); } + timeLog.log(start, "execute"); return SUCCESS; } } \ No newline at end of file Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -30,11 +30,12 @@ import java.util.Date; import java.util.List; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang.StringUtils; import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.bow.*; +import org.chorem.bow.BookmarkUtils; +import org.chorem.bow.BowBookmark; +import org.chorem.bow.BowImportHelper; +import org.chorem.bow.BowPreference; +import org.chorem.bow.BowUser; import org.htmlparser.Node; import org.htmlparser.Parser; import org.htmlparser.util.NodeList; @@ -58,10 +59,6 @@ protected File upfile; protected String upfileContentType; protected String upfileFileName; - protected String searchLine; - protected String fullTextLine; - protected String redirectTo; - protected HttpServletRequest request; /** * @return the upfile @@ -108,48 +105,6 @@ this.upfileFileName = upfileFileName; } - /** - * @return the searchLine - */ - public String getSearchLine() { - return searchLine; - } - - /** - * @param searchLine - * the searchLine to set - */ - public void setSearchLine(String searchLine) { - this.searchLine = searchLine; - } - - /** - * @return the fullTextLine - */ - public String getFullTextLine() { - return fullTextLine; - } - - /** - * @param fullTextLine - * the fullTextLine to set - */ - public void setFullTextLine(String fullTextLine) { - this.fullTextLine = fullTextLine; - } - - /** - * @return the redirectTo - */ - public String getRedirectTo() { - return redirectTo; - } - - @Override - public void setServletRequest(HttpServletRequest request) { - this.request = request; - } - protected void parseHtmlToBookmarks(NodeList list, BowUser user, Date date, List<BowBookmark> bookmarks, List<String> tagList) throws ParserException { @@ -219,33 +174,34 @@ new ArrayList<String>()); proxy.store(bookmarks); - redirectTo = BowUtils.redirectTo(searchLine, fullTextLine); - if (StringUtils.isEmpty(searchLine)) { - BowInit.initHomePage(request, user); - } else { - BowSearch.search(request, user); - } +// redirectTo = BowUtils.redirectTo(searchLine, fullTextLine); +// if (StringUtils.isEmpty(searchLine)) { +// BowInit.initHomePage(request, user); +// } else { +// BowSearch.search(request, user); +// } addActionMessage(getText(n_("bow.bookmark.import.successful"))); - } catch (ParserException e) { + } catch (ParserException eee) { + log.error(String.format("Can't parse imported file '%s'", getUpfileFileName()), eee); addActionError(getText(n_("bow.bookmark.badFileFormat"))); - if (searchLine == null || searchLine.isEmpty()) { - BowInit.initHomePage(request, user); - } else { - BowSearch.search(request, user); - } - } catch (IOException e2) { +// if (searchLine == null || searchLine.isEmpty()) { +// BowInit.initHomePage(request, user); +// } else { +// BowSearch.search(request, user); +// } + } catch (IOException eee) { + log.error(String.format("Can't read imported file '%s'", getUpfileFileName()), eee); addActionError(getText(n_("bow.error.internal"))); - log.error(e2.getMessage(), e2); return ERROR; } } else { addActionError(getText(n_("bow.bookmark.badFileFormat"))); return ERROR; } - } catch (Exception e) { + } catch (Exception eee) { addActionError(getText(n_("bow.error.internal"))); - log.error(e.getMessage(), e); + log.error(eee.getMessage(), eee); return ERROR; } return SUCCESS; Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/LoginAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/LoginAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/LoginAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -29,8 +29,6 @@ import org.apache.struts2.interceptor.ServletRequestAware; import org.chorem.bow.BowConfig; import org.chorem.bow.BowUser; -import org.chorem.bow.BowInit; -import org.chorem.bow.BowPreference; import org.chorem.bow.BowUserImpl; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.search.Criteria; @@ -126,8 +124,8 @@ user = checkLogin(email, md5); if (user != null) { getBowSession().setUser(user); - BowPreference pref = getBowSession().getPreference(); - BowInit.initHomePage(servletRequest, pref); +// BowPreference pref = getBowSession().getPreference(); +// BowInit.initHomePage(servletRequest, pref); result = SUCCESS; } } Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/action/Migrate04To05Action.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/Migrate04To05Action.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/Migrate04To05Action.java 2011-08-16 18:19:34 UTC (rev 304) @@ -1,65 +0,0 @@ -/* - * #%L - * BOW UI - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2010 - 2011 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% - */ -package org.chorem.bow.action; - - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.chorem.bow.BowMigration04To05; -import org.chorem.bow.BowSession; -import org.nuiton.wikitty.WikittyProxy; - -import static org.nuiton.i18n.I18n.n_; - -/** - * Lance la migration des données de la version 0.4 vers 0.5 - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class Migrate04To05Action extends BowBaseAction { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(Migrate04To05Action.class); - - public String execute() { - try { - BowSession session = getBowSession(); - if (session.isAdmin()) { //If is admin - WikittyProxy proxy = getBowProxy(); - - BowMigration04To05.migrate(proxy); - addActionMessage(getText(n_("bow.admin.dataMigration.success"))); - } - } catch (Exception e) { - addActionError(getText(n_("bow.error.internal"))); - log.error(e.getMessage(), e); - } - return SUCCESS; - } - -} Copied: trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.java (from rev 302, trunk/bow-ui/src/main/java/org/chorem/bow/action/Migrate04To05Action.java) =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.java (rev 0) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -0,0 +1,95 @@ +/* + * #%L + * BOW UI + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2010 - 2011 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% + */ +package org.chorem.bow.action; + + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.chorem.bow.BowMigration04To05; +import org.chorem.bow.BowMigration06To11; +import org.chorem.bow.BowSession; +import org.nuiton.util.VersionUtil; +import org.nuiton.wikitty.WikittyProxy; + +import static org.nuiton.i18n.I18n.n_; + +/** + * Lance la migration des données de la version 0.4 vers 0.5 + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class MigrateDataAction extends BowBaseAction { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(MigrateDataAction.class); + + /** Version must be real version, like 0.4, 0.5 or 0.6 */ + protected String versionFrom; + protected String versionTo; + + public void setVersionFrom(String versionFrom) { + this.versionFrom = versionFrom; + } + + public void setVersionTo(String versionTo) { + this.versionTo = versionTo; + } + + public String execute() { + try { + if (StringUtils.isBlank(versionFrom) || StringUtils.isBlank(versionTo)) { + log.error("Migration action must have to parameter: versionFrom and versionTo"); + } else { + BowSession session = getBowSession(); + if (session.isAdmin()) { //If is admin + WikittyProxy proxy = getBowProxy(); + + if (VersionUtil.equals(versionFrom, "0.4") + && VersionUtil.equals(versionTo, "0.5")) { + BowMigration04To05.migrate(proxy); + addActionMessage(getText(n_("bow.admin.dataMigration.success"))); + } else if (VersionUtil.equals(versionFrom, "0.6") + && VersionUtil.equals(versionTo, "1.1")) { + BowMigration06To11.migrate(proxy); + addActionMessage(getText(n_("bow.admin.dataMigration.success"))); + } else { + addActionMessage(String.format( + "No migration found for %s to %s", + versionFrom, versionTo)); + } + } + } + } catch (Exception e) { + addActionError(getText(n_("bow.error.internal"))); + log.error(e.getMessage(), e); + } + return SUCCESS; + } + +} Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchResultAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchResultAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchResultAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -49,27 +49,13 @@ public class OpenSearchResultAction extends BowBaseAction implements ServletRequestAware, ServletResponseAware { private static final long serialVersionUID = -1691325797986483856L; - protected String searchLine; + protected String token; protected String redirectTo; protected HttpServletRequest request; protected HttpServletResponse response; /** - * @return the searchLine - */ - public String getSearchLine() { - return searchLine; - } - - /** - * @param searchLine the searchLine to set - */ - public void setSearchLine(String searchLine) { - this.searchLine = searchLine; - } - - /** * @return the token */ public String getToken() { @@ -113,10 +99,13 @@ searchLine = searchLine.substring(index + 1); //Suppresses first ":" WikittyProxy proxy = getBowProxy(); - Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, searchLine); + Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser( + user, searchLine, null, null); criteria = criteria.addSortDescending(BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK); - PagedResult<BowBookmark> result = proxy.findAllByCriteria(BowBookmark.class, criteria); //Retrieves bookmarks by search - BookmarkActions bookmarkActions = BookmarkUtils.createBookmarkActions(request, result, searchLine); + PagedResult<BowBookmark> result = proxy.findAllByCriteria( + BowBookmark.class, criteria); //Retrieves bookmarks by search + BookmarkActions bookmarkActions = BookmarkUtils.createBookmarkActions( + request, result, searchLine); request.setAttribute("bookmarkActions", bookmarkActions); request.setAttribute("token", token); redirectTo = BowUtils.redirectTo(searchLine, null); @@ -125,13 +114,8 @@ String fullText = searchLine.substring(2); WikittyProxy proxy = getBowProxy(); Criteria criteria; - if (!fullText.isEmpty()) { - criteria = Search.query().keyword(fullText). - eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria(). - addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); - } else { - criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, null); - } + criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, null, searchLine, null); + PagedResult<BowBookmark> result = proxy.findAllByCriteria(BowBookmark.class, criteria); BookmarkActions bookmarkActions = BookmarkUtils.createBookmarkActions(request, result, null); request.setAttribute("bookmarkActions", bookmarkActions); @@ -142,7 +126,7 @@ String privateAlias = searchLine.substring(2); WikittyProxy proxy = getBowProxy(); Criteria criteria = Search.query() - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, user.getWikittyId()) .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_PRIVATEALIAS, privateAlias) .criteria(); String bookmarkId = proxy.findIdByCriteria(criteria); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchSuggestionAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchSuggestionAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchSuggestionAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -33,6 +33,7 @@ import org.chorem.bow.BowBookmark; import org.chorem.bow.OpenSearchActions; import org.chorem.bow.BowUser; +import org.chorem.bow.BowUtils; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.FacetTopic; import org.nuiton.wikitty.search.PagedResult; @@ -47,37 +48,23 @@ */ public class OpenSearchSuggestionAction extends BowBaseAction implements ServletRequestAware { private static final long serialVersionUID = 3973618635494129146L; - protected String searchLine; + protected HttpServletRequest request; - /** - * @return the searchLine - */ - public String getSearchLine() { - return searchLine; - } - - /** - * @param searchLine the searchLine to set - */ - public void setSearchLine(String searchLine) { - this.searchLine = searchLine; - } - @Override public void setServletRequest(HttpServletRequest request) { - this.request = request; + this.request = request; } public String execute() { - BowUser user = getBowSession().getUser(); + BowUser user = getBowSession().getUser(); if (searchLine != null) { OpenSearchActions openSearchActions = new OpenSearchActions(); WikittyProxy proxy = getBowProxy(); - String[] words = searchLine.split("\\s+"); - List<String> searchLineList = new ArrayList<String>(Arrays.asList(words)); + List<String> searchLineList = BowUtils.getWords(searchLine); + if (searchLine.charAt(searchLine.length() - 1) == ' ') { searchLineList.add(""); //If the user doesn't type anything, we have to propose suggestions } @@ -87,13 +74,13 @@ List<String> cpy = new ArrayList<String>(searchLineList); cpy.remove(cpy.size() - 1); criteria = Search.query() - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, user.getWikittyId()) // TODO poussin 20110216 eq n'est sans doute pas bon, plutot un contains ? .eq(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS, cpy).criteria() .addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); } else { criteria = Search.query() - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria() + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, user.getWikittyId()).criteria() .addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); } PagedResult<BowBookmark> result = proxy.findAllByCriteria(BowBookmark.class, criteria); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/OrderAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/OrderAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/OrderAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -45,37 +45,17 @@ */ public class OrderAction extends BowBaseAction implements ServletRequestAware { private static final long serialVersionUID = 203690999710176818L; - protected String type; - protected String searchLine; + + protected String order; protected HttpServletRequest request; - - /** - * @return the type - */ - public String getType() { - return type; - } - /** - * @param type the type to set - */ - public void setType(String type) { - this.type = type; + public String getOrder() { + return order; } - /** - * @return the searchLine - */ - public String getSearchLine() { - return searchLine; + public void setOrder(String order) { + this.order = order; } - - /** - * @param searchLine the searchLine to set - */ - public void setSearchLine(String searchLine) { - this.searchLine = searchLine; - } @Override public void setServletRequest(HttpServletRequest request) { @@ -88,38 +68,39 @@ public String execute() { try { BowPreference user = getBowSession().getPreference(); - Criteria baseCriteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, searchLine); + Criteria baseCriteria = BookmarkUtils.getBookmarkListCriteriaByUser( + user, searchLine, fullTextLine, order); - if (type != null && baseCriteria != null && !type.isEmpty()) { + if (order != null && baseCriteria != null && !order.isEmpty()) { WikittyProxy proxy = getBowProxy(); PagedResult<BowBookmark> result = null; - if (type.equals("ascName")) { + if (order.equals("ascName")) { Criteria criteria = baseCriteria.addSortAscending( BowBookmark.FQ_FIELD_BOWBOOKMARK_DESCRIPTION); result = proxy.findAllByCriteria(BowBookmark.class, criteria); addActionMessage(getText(n_("bow.search.order.ascName"))); - } else if (type.equals("ascDate")) { + } else if (order.equals("ascDate")) { Criteria criteria = baseCriteria.addSortAscending( BowBookmark.FQ_FIELD_BOWBOOKMARK_CREATIONDATE); result = proxy.findAllByCriteria(BowBookmark.class, criteria); addActionMessage(getText(n_("bow.search.order.ascDate"))); - } else if (type.equals("ascClick")) { + } else if (order.equals("ascClick")) { Criteria criteria = baseCriteria.addSortAscending( BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK); result = proxy.findAllByCriteria(BowBookmark.class, criteria); addActionMessage(getText(n_("bow.search.order.ascClick"))); - } else if (type.equals("descName")) { + } else if (order.equals("descName")) { Criteria criteria = baseCriteria.addSortDescending( BowBookmark.FQ_FIELD_BOWBOOKMARK_DESCRIPTION); result = proxy.findAllByCriteria(BowBookmark.class, criteria); addActionMessage(getText(n_("bow.search.order.descName"))); - } else if (type.equals("descDate")) { + } else if (order.equals("descDate")) { Criteria criteria = baseCriteria.addSortDescending( BowBookmark.FQ_FIELD_BOWBOOKMARK_CREATIONDATE); result = proxy.findAllByCriteria(BowBookmark.class, criteria); addActionMessage(getText(n_("bow.search.order.descDate"))); - } else if (type.equals("descClick")) { + } else if (order.equals("descClick")) { Criteria criteria = baseCriteria.addSortDescending( BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK); result = proxy.findAllByCriteria(BowBookmark.class, criteria); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -25,7 +25,6 @@ import org.chorem.bow.BookmarkUtils; import org.chorem.bow.BowBookmark; -import org.chorem.bow.BowInit; import org.chorem.bow.BowPreference; import org.chorem.bow.BowProxy; import org.chorem.bow.BowUser; @@ -296,7 +295,7 @@ } protected BowUser changeUser(BowUser newUser) { - if (email != null && !email.isEmpty()) { + if (email != null && !email.isEmpty()) { newUser.setLogin(email); } if (newPassword != null && confirmNewPassword != null && currentPassword != null) { @@ -325,8 +324,9 @@ Criteria c = Search.query() .exteq(BowBookmark.EXT_WIKITTYLABEL) - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, userId) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId) .criteria().setEndIndex(0) + .setFacetMinCount(0) .addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS); PagedResult<Wikitty> result = proxy.findAllByCriteria(c); List<FacetTopic> topics = result.getTopic( @@ -360,7 +360,7 @@ Criteria c = Search.query() .in(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS, selectedLabelsList) - .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, userId) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId) .criteria(); PagedResult<WikittyLabel> searchResult = proxy.findAllByCriteria(WikittyLabel.class, c); @@ -389,7 +389,7 @@ } /** - * Changes the user preferences + * Action executer lorsque l'utilisateur demande la page */ public String execute() { String result = SUCCESS; @@ -400,36 +400,48 @@ BowPreference preference = getBowSession().getPreference(); loadLabels(proxy); - Map<String,Integer> bookmarksByImportDate = BookmarkUtils.getBookmarksByImportDate(request, preference); + Map<String,Integer> bookmarksByImportDate = + BookmarkUtils.getBookmarksByImportDate(request, preference); if (log.isDebugEnabled()) { log.debug("bookmarksByImportDate found : " + (bookmarksByImportDate == null ? "null" : bookmarksByImportDate.size())); } setBookmarksImportDate(bookmarksByImportDate.isEmpty() ? null : bookmarksByImportDate); - if (update != null) { //If the user submitted the form - preference = changePreference(preference); - preference = proxy.store(preference); - getBowSession().setPreference(preference); - Criteria criteria = Search.query().eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria(); - BowUser find = proxy.findByCriteria(BowUser.class, criteria); + if (update != null) { - //If this email address isn't already used (or if it hasn't changed) - if (find == null || find.getLogin().equals(preference.getLogin())) { - BowUser newUser = changeUser(preference); - if (newUser == null) { + // modification des preferences du site + if ("site".equals(update)) { //If the user submitted the form + preference = changePreference(preference); + preference = proxy.store(preference); + getBowSession().setPreference(preference); + } + + // modification des preferences user (email, password) + if ("user".equals(update)) { + Criteria criteria = Search.query().eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria(); + if (log.isDebugEnabled()) { + log.debug(String.format("Try to find user with email: '%s'", email)); + } + BowUser find = proxy.findByCriteria(BowUser.class, criteria); + + //If this email address isn't already used (or if it hasn't changed) + if (find == null || find.getLogin().equals(preference.getLogin())) { + BowUser newUser = changeUser(preference); + if (newUser == null) { + result = ERROR; + } else { + newUser = proxy.store(newUser); + getBowSession().setUser(newUser); + result = "update"; + addActionMessage(getText(n_("bow.preferences.update.successful"))); + } + } else { + // this email address is already used by someone else + setEmail(preference.getLogin()); + addActionError(getText("bow.preferences.emailAldyExists")); result = ERROR; - } else { - newUser = proxy.store(newUser); - getBowSession().setUser(newUser); - result = "update"; - addActionMessage(getText(n_("bow.preferences.update.successful"))); } - } else { - // this email address is already used by someone else - setEmail(preference.getLogin()); - addActionError(getText("bow.preferences.emailAldyExists")); - result = ERROR; } } else { // If the user didn't submit the form, the fields are filled with @@ -441,9 +453,9 @@ setSearchEngineUrlSuggestions(preference.getSearchEngineUrlSuggestions()); setSearchEngineUrlResults(preference.getSearchEngineUrlResults()); } - // retrieve last reference - preference = getBowSession().getPreference(); - BowInit.initHomePage(request, preference); +// // retrieve last reference +// preference = getBowSession().getPreference(); +// BowInit.initHomePage(request, preference); } catch (Exception e) { addActionError(getText(n_("bow.error.internal"))); log.error(e.getMessage(), e); Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/action/RedirectToUrlAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/RedirectToUrlAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/RedirectToUrlAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -1,94 +0,0 @@ -/* - * #%L - * bow - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2010 - 2011 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% - */ -package org.chorem.bow.action; - -import org.chorem.bow.BowBookmark; -import org.nuiton.wikitty.WikittyProxy; - -import static org.nuiton.i18n.I18n.n_; - -/** - * Retrieves the bookmark URL (where the user will be redirected) and increments - * the click counter for this bookmark - * - */ -public class RedirectToUrlAction extends BowBaseAction { - - private static final long serialVersionUID = 8579081104294143087L; - - protected String bookmarkId; - protected String link; - - /** - * @return the bookmarkId - */ - public String getBookmarkId() { - return bookmarkId; - } - /** - * @param bookmarkId the bookmarkId to set - */ - public void setBookmarkId(String bookmarkId) { - this.bookmarkId = bookmarkId; - } - - /** - * @return the link - */ - public String getLink() { - return link; - } - /** - * @param link the link to set - */ - public void setLink(String link) { - this.link = link; - } - - /** - * Increments the click counter and sets the link (retrieved by Struts2) - * where the user will be redirected - */ - public String execute() { - String result = ERROR; - - try { - if (bookmarkId != null && !bookmarkId.isEmpty()) { - WikittyProxy proxy = getBowProxy(); - BowBookmark bookmark = proxy.restore(BowBookmark.class, bookmarkId); - if (bookmark != null) { - bookmark.setClick(bookmark.getClick() + 1); - proxy.store(bookmark); - setLink(bookmark.getLink()); - result = SUCCESS; - } - } - } catch (Exception e) { - addActionError(getText(n_("bow.error.internal"))); - log.error(e.getMessage(), e); - } - return result; - } - -} \ No newline at end of file Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/RegisterAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/RegisterAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/RegisterAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -31,8 +31,6 @@ import org.chorem.bow.BowMail; import org.chorem.bow.BowUser; import org.chorem.bow.BowUserImpl; -import org.chorem.bow.BowInit; -import org.chorem.bow.BowPreference; import org.chorem.bow.BowUtils; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.search.Criteria; @@ -155,8 +153,8 @@ addFieldError("email", getText(n_("bow.register.invalidLogin"))); } else { getBowSession().setUser(login); - BowPreference pref = getBowSession().getPreference(); - BowInit.initHomePage(request, pref); +// BowPreference pref = getBowSession().getPreference(); +// BowInit.initHomePage(request, pref); try { String mailContent; Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/action/SearchAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/SearchAction.java 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/SearchAction.java 2011-08-16 18:19:34 UTC (rev 304) @@ -1,107 +0,0 @@ -/* - * #%L - * bow - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2010 - 2011 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% - */ -package org.chorem.bow.action; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.bow.BowPreference; -import org.chorem.bow.BowSearch; - -import static org.nuiton.i18n.I18n.n_; - -/** - * gere les recherches de bookmark - * - * @author poussin - */ -public class SearchAction extends BowBaseAction implements ServletRequestAware { - private static final long serialVersionUID = -2161661766242362907L; - protected String searchLine; - protected String fullTextLine; - protected String addTag; - protected HttpServletRequest request; - - /** - * @return the searchLine - */ - public String getSearchLine() { - return searchLine; - } - - /** - * @param searchLine the searchLine to set - */ - public void setSearchLine(String searchLine) { - this.searchLine = searchLine; - } - - /** - * @return the fullTextLine - */ - public String getFullTextLine() { - return fullTextLine; - } - - /** - * @param fullTextLine the fullTextLine to set - */ - public void setFullTextLine(String fullTextLine) { - this.fullTextLine = fullTextLine; - } - - /** - * @return the addTag - */ - public String getAddTag() { - return addTag; - } - - /** - * @param addTag the addTag to set - */ - public void setAddTag(String addTag) { - this.addTag = addTag; - } - - @Override - public void setServletRequest(HttpServletRequest request) { - this.request = request; - } - - /** - * Searches a bookmark - */ - public String execute() { - try { - BowPreference user = getBowSession().getPreference(); - BowSearch.search(request, user); - } catch (Exception e) { - addActionError(getText(n_("bow.error.internal"))); - log.error(e.getMessage(), e); - } - return SUCCESS; - - } -} \ No newline at end of file Modified: trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties =================================================================== --- trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties 2011-08-16 18:19:34 UTC (rev 304) @@ -1,8 +1,9 @@ alias= bow.action.locale.english=English bow.action.locale.french=Fran\u00E7ais -bow.admin.dataMigration=Migrate all data from 0.4 to 0.5 bow.admin.dataMigration.success=Data migration successful +bow.admin.dataMigration04to05=Migrate all data from 0.4 to 0.5 +bow.admin.dataMigration05to06=Migrate all data from 0.5 to 0.6 bow.admin.dataReindexation=All data reindexation bow.admin.forbidden=You don't have admin rights \! bow.admin.home=Return to the home page @@ -122,6 +123,7 @@ bow.search.descclick=Desc. clicks nb bow.search.descdate=Desc. date bow.search.descname=Desc. name +bow.search.found=Total\: bow.search.order.ascClick=Your search results have been sorted by ascendant clicks number bow.search.order.ascDate=Your search results have been sorted by ascendant date bow.search.order.ascName=Your search results have been sorted by ascendant name Modified: trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties =================================================================== --- trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties 2011-08-16 18:19:34 UTC (rev 304) @@ -1,8 +1,9 @@ alias= bow.action.locale.english=English bow.action.locale.french=Fran\u00E7ais -bow.admin.dataMigration=Migrer toutes les donn\u00E9es de la version 0.4 \u00E0 0.5 bow.admin.dataMigration.success=Les donn\u00E9es ont \u00E9t\u00E9 migr\u00E9es avec succ\u00E8s +bow.admin.dataMigration04to05=Migrer toutes les donn\u00E9es de la version 0.4 \u00E0 0.5 +bow.admin.dataMigration05to06=Migrer toutes les donn\u00E9es de la version 0.5 \u00E0 0.6 bow.admin.dataReindexation=R\u00E9indexation des donn\u00E9es bow.admin.forbidden=Vous n'\u00EAtes pas administrateur \! bow.admin.home=Retour sur la page d''accueil @@ -122,6 +123,7 @@ bow.search.descclick=Nb clics desc. bow.search.descdate=Date desc. bow.search.descname=Nom desc. +bow.search.found=Total\: bow.search.order.ascClick=Les r\u00E9sultats de votre recherche ont \u00E9t\u00E9 tri\u00E9s par nombre de clics ascendants bow.search.order.ascDate=Les r\u00E9sultats de votre recherche ont \u00E9t\u00E9 tri\u00E9s par date ascendante bow.search.order.ascName=Les r\u00E9sultats de votre recherche ont \u00E9t\u00E9 tri\u00E9s par nom ascendant Modified: trunk/bow-ui/src/main/resources/log4j.properties =================================================================== --- trunk/bow-ui/src/main/resources/log4j.properties 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/resources/log4j.properties 2011-08-16 18:19:34 UTC (rev 304) @@ -22,14 +22,18 @@ # #L% ### # Global logging configuration -log4j.rootLogger=FATAL, stdout +log4j.rootLogger=INFO, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) %M - %m%n +log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%30.30c) %m%n # package level log4j.logger.org.chorem.bow=DEBUG -#log4j.logger.org.nuiton.util.TimeLog=WARN +log4j.logger.org.chorem.bow.web.time=DEBUG +log4j.logger.org.nuiton.wikitty.WikittyProxy.TimeLog=DEBUG +log4j.logger.org.nuiton.wikitty.services.WikittyServiceSecurity.TimeLog=DEBUG log4j.logger.org.apache.struts2.dispatcher.mapper=DEBUG +log4j.logger.org.apache.solr=WARN +log4j.logger.org.apache.jcs=WARN Modified: trunk/bow-ui/src/main/resources/struts.xml =================================================================== --- trunk/bow-ui/src/main/resources/struts.xml 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/resources/struts.xml 2011-08-16 18:19:34 UTC (rev 304) @@ -27,6 +27,14 @@ "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> + + <bean class="org.nuiton.web.struts2.I18nTextProvider" name="i18nTextProvider" + type="com.opensymphony.xwork2.TextProvider" /> + <constant name="struts.xworkTextProvider" value="i18nTextProvider" /> + + <!-- pour ne pas remettre tous les parametres deja existant sur + les url construite avec s:url --> + <constant name="struts.url.includeParams" value="none" /> <constant name="struts.devMode" value="true"/> <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> <constant name="struts.enable.SlashesInActionNames" value="true"/> @@ -38,6 +46,10 @@ <package name="publicArea" extends="struts-default"> <interceptors> <interceptor-stack name="publicAreaStack"> + <interceptor-ref name="timer"> + <param name="logLevel">debug</param> + <param name="logCategory">org.chorem.bow.web.time.render</param> + </interceptor-ref> <interceptor-ref name="defaultStack"> <param name="store.operationMode">AUTOMATIC</param> <param name="fileUpload.allowedExtensions">.html</param> @@ -74,6 +86,10 @@ <interceptor-stack name="restrictedAreaStack"> <interceptor-ref name="login"/> <interceptor-ref name="publicAreaStack"/> + <interceptor-ref name="timer"> + <param name="logLevel">debug</param> + <param name="logCategory">org.chorem.bow.web.time.action</param> + </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="restrictedAreaStack"/> @@ -83,7 +99,7 @@ <action name="alias/*" class="org.chorem.bow.action.AliasAction"> <param name="alias">{1}</param> <result name="success" type="redirect">${redirectTo}</result> - <result name="error" type="redirectAction">home</result> + <result name="error">/jsp/error.jsp</result> </action> </package> @@ -130,12 +146,6 @@ </package> <package name="search" extends="restrictedArea"> - <action name="search" class="org.chorem.bow.action.SearchAction"> - <result>/jsp/search.jsp</result> - </action> - <action name="fullText" class="org.chorem.bow.action.FullTextSearchAction"> - <result>/jsp/search.jsp</result> - </action> <action name="order" class="org.chorem.bow.action.OrderAction"> <result>/jsp/search.jsp</result> </action> @@ -161,10 +171,6 @@ <action name="regenPermToken" class="org.chorem.bow.action.GenerateTokenAction"> <result type="redirectAction">preferences</result> </action> - <action name="redirectToUrl" class="org.chorem.bow.action.RedirectToUrlAction"> - <result name="error" type="redirectAction">home</result> - <result type="redirect">${link}</result> - </action> <action name="*Xml"> <result>/jsp/{1}Xml.jsp</result> </action> @@ -185,7 +191,7 @@ <action name="reIndexation" class="org.chorem.bow.action.ReIndexationAction"> <result>/jsp/admin.jsp</result> </action> - <action name="migrate04To05" class="org.chorem.bow.action.Migrate04To05Action"> + <action name="migrateData" class="org.chorem.bow.action.MigrateDataAction"> <result>/jsp/admin.jsp</result> </action> <action name="editBookmark" class="org.chorem.bow.action.EditBookmarkAction"> Modified: trunk/bow-ui/src/main/webapp/jsp/admin.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/admin.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/admin.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -43,7 +43,8 @@ <s:if test="#session.BowSession.isAdmin()"> <ul id="adminActions"> <li><s:a action="reIndexation"><s:text name="bow.admin.dataReindexation" /></s:a></li> - <li><s:a action="migrate04To05"><s:text name="bow.admin.dataMigration" /></s:a></li> + <li><s:a action="migrateData?versionFrom=0.4&versionTo=0.5"><s:text name="bow.admin.dataMigration04to05" /></s:a></li> + <li><s:a action="migrateData?versionFrom=0.6&versionTo=1.1"><s:text name="bow.admin.dataMigration05to06" /></s:a></li> <li><s:a action="home" id="homePage"><s:text name="bow.admin.home" /></s:a></li> </ul> </s:if> Deleted: trunk/bow-ui/src/main/webapp/jsp/home.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/home.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/home.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -1,99 +0,0 @@ -<!-- - #%L - bow - - $Id$ - $HeadURL$ - %% - Copyright (C) 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% - --> -<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@taglib prefix="s" uri="/struts-tags" %> -<%@page import="org.chorem.bow.BookmarkActions" %> -<%@page import="org.chorem.bow.BowSession" %> -<%@page import="org.chorem.bow.BowBookmark" %> -<%@page import="org.chorem.bow.BowPreference" %> -<%@page import="java.util.List" %> -<% -BowSession bowSession = BowSession.getBowSession(session); -BookmarkActions bookmarkActions = (BookmarkActions) request.getAttribute("bookmarkActions"); -BowPreference preference = bowSession.getPreference(); - -if (bookmarkActions != null) { -%> -<html xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" - xmlns:jsp="http://java.sun.com/JSP/Page"> - <head> - <title><s:text name="bow.home.title" /></title> - <s:url var="css" value="/css/bookmark.css" /> - <link href="${css}" rel="stylesheet" type="text/css" /> - <s:head /> - </head> - <body> - <div class="menu clearfix"> - <h2><s:text name="bow.home.mostUsedBookmarks" /></h2> - </div> - <div class="content"> - <% - int nbBookmarks = preference.getBookmarks(); - - List<BowBookmark> bookmarkList = bookmarkActions.getBookmarks(); - if (!bookmarkList.isEmpty()) { - int count = 0; - for (BowBookmark bookmark : bookmarkList) { - request.setAttribute("bookmark", bookmark); - %> - <s:include value="inc/bookmark.jsp" /> - <% - ++count; - if (count >= nbBookmarks) { - break; - } - } - } else { %> - <p class="nobookmarks"><s:text name="bow.bookmarks.noBookmarks" /></p> - <% } %> - </div> - - <div class="menu clearfix"> - <h2><s:text name="bow.home.latestBookmarks" /></h2> - </div> - <div class="content"> - <% - List<BowBookmark> lastBookmarks = bookmarkActions.getLastBookmarks(); - - if (!lastBookmarks.isEmpty()) { - int count = 0; - for (BowBookmark bookmark : lastBookmarks) { - request.setAttribute("bookmark", bookmark); - %> - <s:include value="inc/bookmark.jsp" /> - <% - ++count; - if (count >= nbBookmarks) { - break; - } - } - } else { %> - <p class="nobookmarks"><s:text name="bow.bookmarks.noBookmarks" /></p> - <% } %> - </div> - - <s:include value="inc/popupPublicAlias.jsp" /> - </body> -</html> -<% } %> Copied: trunk/bow-ui/src/main/webapp/jsp/home.jsp (from rev 302, trunk/bow-ui/src/main/webapp/jsp/search.jsp) =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/home.jsp (rev 0) +++ trunk/bow-ui/src/main/webapp/jsp/home.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -0,0 +1,84 @@ +<%@page import="org.chorem.bow.BowSearchResult"%> +<%@page import="org.chorem.bow.action.HomeAction"%> +<%@page import="org.chorem.bow.BowConfig"%> +<!-- + #%L + bow + + $Id$ + $HeadURL$ + %% + Copyright (C) 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% + --> +<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@taglib prefix="s" uri="/struts-tags" %> +<%@page import="org.chorem.bow.BowBookmark" %> +<%@page import="org.chorem.bow.BookmarkActions" %> +<%@page import="java.text.SimpleDateFormat" %> +<%@page import="java.util.List" %> + +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" + xmlns:jsp="http://java.sun.com/JSP/Page"> + + <head> + <title><s:text name="bow.search.title" /></title> + <s:url var="css" value="/css/bookmark.css" /> + <link href="${css}" rel="stylesheet" type="text/css" /> + <s:head /> + </head> + <body> + <div class="menu clearfix"> + <h2> + <s:text name="bow.search.found" /> + <s:property value="%{searchResult.bookmarkCount}"/> + </h2> + + <s:set name="bookmarksToDelete" value="%{searchResult.bookmarkCount}" /> + <s:if test="%{#bookmarksToDelete > 0}"> + <s:url var="deleteSearchResults" action="deleteSearchResults" escapeAmp="false"> + <s:param name="searchLine"><s:property value="searchResult.searchLine" /></s:param> + <s:param name="fullTextLine"><s:property value="searchResult.fullTextLine" /></s:param> + </s:url> + <s:a id="deleteSearchResultsButton" title="delete all" href="" onclick="deleteConfirmation('%{deleteSearchResults}', %{#bookmarksToDelete}); return(false);"></s:a> + </s:if> + <s:form action="home" method="get"> + <p> + <label for="order"><s:text name="bow.search.orderby" /></label> + <s:select id="order" name="order" list="possibleOrder"/> + </p> + <s:submit key="bow.search.submit" name="submit" /> + <s:hidden name="searchLine" value="%{searchResult.searchLine}" /> + <s:hidden name="fullTextLine" value="%{searchResult.fullTextLine}" /> + </s:form> + </div> + <div class="content"> + <s:if test="searchResult.bookmarks.empty"> + <p class="nobookmarks"><s:text name="bow.bookmarks.noBookmarks" /></p> + </s:if> + <s:else> + <s:iterator value="searchResult.bookmarks" var="bookmark"> + <s:set name="bookmark" value="bookmark"/> + <jsp:include page="inc/bookmark.jsp" flush="true"> + <jsp:param name="searchLine" value="%{searchResult.searchLine}" /> + <jsp:param name="fullTextLine" value="%{searchResult.fullTextLine}" /> + </jsp:include> + </s:iterator> + </s:else> + </div> + </body> +</html> Modified: trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -31,107 +31,57 @@ xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" xmlns:jsp="http://java.sun.com/JSP/Page"> - <s:if test="%{#request.bookmark != null}"> - <% - BowBookmark bookmark = (BowBookmark)request.getAttribute("bookmark"); - String bookmarkDescription = bookmark.getDescription(); - if (bookmarkDescription == null) { - bookmarkDescription = ""; - } else { - bookmarkDescription = bookmarkDescription.replaceAll("\n", "<br/>"); - } - %> - - <s:set var="searchLine" value="%{#request.searchLine}" /> - <s:set var="fullTextLine" value="%{#request.fullTextLine}" /> - <s:set var="wikittyId" value="%{#request.bookmark.getWikittyId()}" /> - <s:set var="bookmarkLink" value="%{#request.bookmark.getLink()}" /> - <s:set var="bookmarkAlias" value="%{#request.bookmark.getPrivateAlias()}" /> - <s:set var="bookmarkDescription" value="%{#request.bookmark.getDescription()}" /> - <s:set var="bookmarkClicks" value="%{#request.bookmark.getClick()}" /> - <s:set var="formBookmarkId" value="%{#request.formBookmarkId}" /> - <s:set var="privateAlias" value="%{#bookmarkAlias}" /> - <s:set var="aliasServlet" value="%{#request.aliasServletUrl}" /> - <s:set var="publicAliasUrl" value="%{#request.bookmark.getPublicAlias()}" /> - <s:set var="aliasUrl" value="%{#request.aliasServletUrl + #bookmarkAlias}" /> - <div class="bookmarkhead"> - <p class="date"><%=BowUtils.formatDate(bookmark.getCreationDate())%></p> - <s:a cssClass="alias" href="%{#aliasServlet + #wikittyId}.action" title="%{#bookmarkLink}" onclick="window.open(this.href); return false;"> - a:<s:property value="%{#privateAlias}" /> + <p class="date"><s:property value="#bookmark.creationDate"/></p> + <s:a cssClass="alias" href="%{config.servletAliasUrl + #bookmark.wikittyId}.action" + title="%{#bookmark.link}" target="_blank"> + a:<s:property value="%{#bookmark.privateAlias}" /> </s:a> -<%-- - // Pour l'instant on affiche pas l'alias automatique, car il est trop long - // et on peut recuperer son url en allant sur l'alias privé - <s:a cssClass="alias" href="%{#aliasServlet + #wikittyId}.action" title="%{#bookmarkLink}" onclick="window.open(this.href); return false;"> - <s:property value="%{#wikittyId}" /> - </s:a> ---%> - <s:url var="editBookmark" action="editBookmark"> - <s:param name="id" value="%{#wikittyId}"/> - </s:url> - <s:if test="%{!#publicAliasUrl.empty}"> - <s:a cssClass="alias" href="%{#aliasServlet + #publicAliasUrl}.action" title="%{#bookmarkLink}" onclick="window.open(this.href); return false;"> - <s:property value="%{#publicAliasUrl}" /> + <s:if test="%{!#bookmark.publicAlias.empty}"> + <s:a cssClass="alias" href="%{config.servletAliasUrl + #bookmark.publicAlias}.action" + title="%{#bookmark.link}" target="_blank"> + <s:property value="%{#bookmark.publicAlias}" /> </s:a> </s:if> - <s:else> - <s:url var="addAlias" action="createAlias"> - <s:param name="bookmarkId"><s:property value="%{#wikittyId}" /></s:param> - <s:param name="alias">irock</s:param> - </s:url> - <s:a cssClass="addAlias" href="%{editBookmark}" onclick="return openPublicAliasForm('%{#wikittyId}')"> - <img style="border:none;" src="img/add.png" alt="Set alias" title="Set alias" /> - </s:a> - </s:else> - <s:url var="editBookmarkModify" action="modifyBookmark" escapeAmp="false"> - <s:param name="bookmarkId"><s:property value="%{#wikittyId}" /></s:param> - <s:param name="searchLine"><s:property value="%{#searchLine}" /></s:param> - <s:param name="fullTextLine"><s:property value="%{#fullTextLine}" /></s:param> - </s:url> <s:url var="editBookmark" action="modifyBookmark" escapeAmp="true"> - <s:param name="bookmarkId"><s:property value="%{#wikittyId}" /></s:param> - <s:param name="searchLine"><s:property value="%{#searchLine}" /></s:param> - <s:param name="fullTextLine"><s:property value="%{#fullTextLine}" /></s:param> + <s:param name="bookmarkId"><s:property value="%{#bookmark.wikittyId}" /></s:param> + <s:param name="searchLine"><s:property value="%{searchLine}" /></s:param> + <s:param name="fullTextLine"><s:property value="%{fullTextLine}" /></s:param> </s:url> -<!-- - <s:a cssClass="edit" href="%{editBookmark}" onclick="return modify('%{#bookmarkDescription}', '%{#bookmarkAlias}', '%{@org.chorem.bow.BookmarkUtils@getBookmarkTagsString(#request.bookmark)}', '%{#bookmarkLink}', '%{editBookmarkModify}', '%{#wikittyId}');"></s:a> ---> <s:a cssClass="edit" href="%{editBookmark}" - onclick="return openPopupAddUrl('%{#wikittyId}', '%{#bookmarkLink}', '%{@org.apache.commons.lang.StringEscapeUtils@escapeJavaScript(#request.bookmark.description)}', '%{#bookmarkAlias}', '%{#publicAliasUrl}', '%{@org.chorem.bow.BookmarkUtils@getBookmarkTagsString(#request.bookmark)}');"> + onclick="return openPopupAddUrl('%{#bookmark.wikittyId}', '%{#bookmark.link}', '%{@org.apache.commons.lang.StringEscapeUtils@escapeJavaScript(#bookmark.description)}', '%{#bookmark.privateAlias}', '%{#bookmark.publicAlias}', '%{@org.chorem.bow.BookmarkUtils@getBookmarkTagsString(#bookmark)}');"> </s:a> <s:url var="removeBookmark" action="removeBookmark" escapeAmp="true"> - <s:param name="bookmarkId"><s:property value="%{#wikittyId}" /></s:param> - <s:param name="searchLine"><s:property value="%{#searchLine}" /></s:param> - <s:param name="fullTextLine"><s:property value="%{#fullTextLine}" /></s:param> + <s:param name="bookmarkId"><s:property value="%{#bookmark.wikittyId}" /></s:param> + <s:param name="searchLine"><s:property value="%{searchLine}" /></s:param> + <s:param name="fullTextLine"><s:property value="%{fullTextLine}" /></s:param> </s:url> <s:a cssClass="supprim" href="%{removeBookmark}" - onclick="return deleteConfirmation('%{#removeBookmark}','%{#bookmarkAlias}');"></s:a> + onclick="return deleteConfirmation('%{#removeBookmark}','%{#bookmark.privateAlias}');"></s:a> </div> + <div class="bookmarkcontenu"> - <div class="screenshot"></div> - <div class="click"><s:property value="%{#bookmarkClicks}" /></div> + <s:a title="%{#bookmark.link}" href="alias/%{#bookmark.wikittyId}.action" target="_blank"> + <div class="screenshot"></div> + </s:a> + <div class="click"><s:property value="%{#bookmark.click}" /></div> <div class="description"> <h3><s:text name="bow.bookmark.description" /> :</h3> <p> - <s:url var="redirectTo" action="redirectToUrl"> - <s:param name="bookmarkId"><s:property value="%{#wikittyId}" /></s:param> - </s:url> - <s:a title="%{#bookmarkLink}" href="%{redirectTo}" - onclick="window.open(this.href); return false;"> - <%=bookmarkDescription%> - </s:a> + <s:property value="%{#bookmark.description}"/> </p> <p class="tags"> <strong><s:text name="bow.bookmark.tags" /> :</strong> - <s:iterator value="#request.bookmark.labels"> - <s:url var="search" action="search"> - <s:param name="searchLine"><s:property /></s:param> + <s:iterator value="#bookmark.labels" var="tag"> + <s:url var="search" action="home"> + <s:param name="searchLine" value="%{searchLine}"/> + <s:param name="addTag" value="%{#tag}"/> + <s:param name="fullTextLine" value="%{fullTextLine}"/> </s:url> - <s:a href="%{search}" cssClass="tag"><s:property /></s:a> + <s:a href="%{search}" cssClass="tag"><s:property value="%{#tag}"/></s:a> </s:iterator> </p> </div> </div> - </s:if> + </div> Modified: trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -40,35 +40,17 @@ <div class="recherche right"> <h3>Recherche</h3> <div class="input"> - <s:form action="search" theme="simple"> + <s:form action="home" theme="simple"> <s:textfield name="searchLine" labelSeparator="" /> <s:submit key="bow.rightMenu.search.tags" name="submit" /> </s:form> </div> <div class="input"> - <s:form action="fullText" theme="simple"> + <s:form action="home" theme="simple"> <s:textfield name="fullTextLine" labelSeparator="" /> <s:submit key="bow.rightMenu.fullTextSearch" name="submit" /> </s:form> </div> - <%-- - <div class="right"> - <s:form action="search"> - <div class="input"> - <s:textfield key="bow.rightMenu.search" name="searchLine" labelSeparator="" /> - <s:submit key="bow.rightMenu.find.submit" name="submit" /> - </div> - </s:form> - </div> - <div class="left"> - <s:form action="fullText"> - <div class="input"> - <s:textfield key="bow.rightMenu.fullTextSearch" name="fullTextLine" labelSeparator="" /> - <s:submit key="bow.rightMenu.find.submit" name="submit" /> - </div> - </s:form> - </div> - --%> </div> </s:if> <div id="msg"> Deleted: trunk/bow-ui/src/main/webapp/jsp/inc/popupPublicAlias.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/inc/popupPublicAlias.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/inc/popupPublicAlias.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -1,81 +0,0 @@ -<!-- - #%L - BOW UI - - $Id$ - $HeadURL$ - %% - Copyright (C) 2010 - 2011 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% - --> -<%-- - Document : popupPublicAlias - Created on : 20 avr. 2011, 17:03:37 - Author : poussin ---%> - -<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@taglib prefix="s" uri="/struts-tags" %> - -<script> - function openPublicAliasForm(bookmarkId) { - $("#publicAliasFormBookmarkId")[0].value = bookmarkId; - $("#setPublicAliasPopup").dialog("open"); - return false; - } - - $(function() { - $( "#setPublicAliasPopup" ).dialog({ - autoOpen: false, - width: 300, - modal: true, -// buttons: { -// "Validate": function() { -// $("#setPublicAliasForm").submit(); -// $( this ).dialog( "close" ); -// }, -// Cancel: function() { -// $( this ).dialog( "close" ); -// } -// }, - close: function() { - //allFields.val( "" ).removeClass( "ui-state-error" ); - } - }); - }); - function submitPublicAlias() { - $("#setPublicAliasForm").submit(); - closePopupAddUrl(); - } - - function closePopupPublicAlias() { - $( "#setPublicAliasPopup" ).dialog( "close" ) - } -</script> - -<s:set id="title"> - <s:text name="popup.setPublicAliasPopup.title"/> -</s:set> - -<div xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" - id="setPublicAliasPopup" title="${title}"> - <s:form id="setPublicAliasForm" action="createAlias"> - <s:textfield key="bow.rightMenu.bookmark.alias" name="alias" class="text ui-widget-content ui-corner-all" /> - <s:hidden id="publicAliasFormBookmarkId" name="bookmarkId" /> - </s:form> - <a class="button" onclick="submitPublicAlias()"><s:text name="popup.commons.submit"/></a> - <a class="button" onclick="closePopupPublicAlias()"><s:text name="popup.commons.cancel"/></a> -</div> Modified: trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -59,14 +59,9 @@ </li> </ul> <!--div id="nuage"--> - <s:if test="%{searchLine != null}"> - <jsp:include page="tagsCloud.jsp" flush="true"> - <jsp:param name="searchLine" value="%{searchLine}" /> - </jsp:include> - </s:if> - <s:else> - <jsp:include page="tagsCloud.jsp" flush="true" /> - </s:else> + <jsp:include page="tagsCloud.jsp" flush="true"> + <jsp:param name="searchLine" value="%{searchLine}" /> + </jsp:include> <!--/div--> <div class="colonnebas"> <img src="img/piedmenu.jpg" width="401" height="77" alt="Pied de menu" /> Modified: trunk/bow-ui/src/main/webapp/jsp/inc/tagsCloud.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/inc/tagsCloud.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/inc/tagsCloud.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -28,22 +28,13 @@ <div id="nuage" xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" xmlns:jsp="http://java.sun.com/JSP/Page"> - <s:if test="#request.bookmarkActions != null"> - <s:if test="%{#session.BowSession.preference.tags > #request.bookmarkActions.getTagsCloud().size()}"> - <s:set var="maxTags" value="#request.bookmarkActions.getTagsCloud().size()" /> - </s:if> - <s:else> - <s:set var="maxTags" value="#session.BowSession.preference.tags" /> - </s:else> - <s:iterator value="%{#request.bookmarkActions.tagsCloud}" status="tag" begin="0" end="%{#maxTags - 1}"> - <s:url var="search" action="search" escapeAmp="true"> - <s:param name="addTag"><s:property value="topicName" /></s:param> - <s:if test="%{request.searchLine != null}"> - <s:param name="searchLine">&searchLine=<s:property value="%{request.searchLine}" /></s:param> - </s:if> - </s:url> - <!-- --> - <s:a href="%{search}" title="%{count} results" cssClass="tag" cssStyle="font-size: %{#request.bookmarkActions.getFont(count)}px"><s:property value="topicName" /></s:a> + <s:iterator value="%{searchResult.tagsCloud}" status="tagStatus" var="tag"> + <s:url var="search" action="home" escapeAmp="true"> + <s:param name="searchLine" value="%{searchLine}"/> + <s:param name="addTag" value="%{#tag.topicName}"/> + <s:param name="fullTextLine" value="%{fullTextLine}"/> + </s:url> + <!-- --> + <s:a href="%{search}" title="%{#tag.count} results" cssClass="tag" cssStyle="font-size: %{searchResult.getFont(#tag.count)}px"><s:property value="%{#tag.topicName}" /></s:a> </s:iterator> - </s:if> </div> \ No newline at end of file Modified: trunk/bow-ui/src/main/webapp/jsp/preferences.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/preferences.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/preferences.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -104,6 +104,7 @@ <s:text name="bow.preferences.confirmNewPassword"/><br/> <s:password name="confirmNewPassword" labelposition="top"/><br/> + <s:hidden name="update" value="user"/> <s:submit key="bow.preferences.submit" name="submit"/> </s:form> </div> @@ -126,7 +127,7 @@ size="50" labelposition="top"/><br/> - <s:hidden name="update" value="1"/> + <s:hidden name="update" value="site"/> <s:submit key="bow.preferences.submit" name="submit"/> </s:form> </div> Deleted: trunk/bow-ui/src/main/webapp/jsp/search.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/search.jsp 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/bow-ui/src/main/webapp/jsp/search.jsp 2011-08-16 18:19:34 UTC (rev 304) @@ -1,99 +0,0 @@ -<!-- - #%L - bow - - $Id$ - $HeadURL$ - %% - Copyright (C) 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% - --> -<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@taglib prefix="s" uri="/struts-tags" %> -<%@page import="org.chorem.bow.BowBookmark" %> -<%@page import="org.chorem.bow.BookmarkActions" %> -<%@page import="java.text.SimpleDateFormat" %> -<%@page import="java.util.List" %> -<% -BookmarkActions bookmarkActions = (BookmarkActions) request.getAttribute("bookmarkActions"); - -if (bookmarkActions != null) { -%> - - -<html xmlns="http://www.w3.org/1999/xhtml" - xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" - xmlns:jsp="http://java.sun.com/JSP/Page"> - - <s:set var="searchLine" value="%{#request.bookmarkActions.getSearchLine()}" /> - <s:set var="fullText" value="%{#request.bookmarkActions.getFullTextLine()}" /> - - <head> - <title><s:text name="bow.search.title" /></title> - <s:url var="css" value="/css/bookmark.css" /> - <link href="${css}" rel="stylesheet" type="text/css" /> - <s:head /> - </head> - <body> - <div class="menu clearfix"> - <h2><s:text name="bow.search.title" /></h2> - <s:form action="order"> - <p> - <label for="type"><s:text name="bow.search.orderby" /></label> - <select id="type" name="type"> - <option value="ascName"><s:text name="bow.search.ascname" /></option> - <option value="descName"><s:text name="bow.search.descname" /></option> - <option value="ascClick"><s:text name="bow.search.ascclick" /></option> - <option value="descClick"><s:text name="bow.search.descclick" /></option> - <option value="ascDate"><s:text name="bow.search.ascdate" /></option> - <option value="descDate"><s:text name="bow.search.descdate" /></option> - </select> - <s:submit key="bow.search.submit" name="submit" /> - <s:set name="bookmarksToDelete" value="%{#request.bookmarkActions.getBookmarks().size()}" /> - <s:if test="%{#bookmarksToDelete > 0}"> - <s:url var="deleteSearchResults" action="deleteSearchResults" escapeAmp="false"> - <s:param name="searchLine"><s:property value="%{#searchLine}" /></s:param> - <s:param name="fullTextLine"><s:property value="%{#fullText}" /></s:param> - </s:url> - <s:a id="deleteSearchResultsButton" href="" onclick="deleteConfirmation('%{deleteSearchResults}', %{#bookmarksToDelete}); return(false);"></s:a> - </s:if> - <s:hidden name="searchLine" value="%{#searchLine}" /> - <s:hidden name="fullTextLine" value="%{#fullText}" /> - </p> - </s:form> - </div> - <div class="content"> - <% - List<BowBookmark> bookmarkList = bookmarkActions.getBookmarks(); - - if (!bookmarkList.isEmpty()) { - for (BowBookmark bookmark : bookmarkList) { - request.setAttribute("bookmark", bookmark); - %> - <jsp:include page="inc/bookmark.jsp" flush="true"> - <jsp:param name="searchLine" value="%{#searchLine}" /> - <jsp:param name="fullTextLine" value="%{#fullText}" /> - </jsp:include> - <% - } - } else { %> - <p class="nobookmarks"><s:text name="bow.bookmarks.noBookmarks" /></p> - <% - } %> - </div> - </body> -</html> -<% } %> Modified: trunk/bow-ui/src/main/xmi/bow.zargo =================================================================== (Binary files differ) Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-08-13 01:00:21 UTC (rev 303) +++ trunk/pom.xml 2011-08-16 18:19:34 UTC (rev 304) @@ -121,8 +121,9 @@ <eugenePluginVersion>2.3.2</eugenePluginVersion> <nuitonUtilsVersion>2.1.2</nuitonUtilsVersion> + <nuitonWebVersion>1.3</nuitonWebVersion> <nuitonI18nVersion>2.3.1</nuitonI18nVersion> - <wikittyVersion>3.1.2</wikittyVersion> + <wikittyVersion>3.2-SNAPSHOT</wikittyVersion> <slf4jVersion>1.6.1</slf4jVersion> <struts2Version>2.2.3</struts2Version> <htmlParserVersion>1.6</htmlParserVersion> @@ -148,6 +149,12 @@ </dependency> <dependency> + <groupId>org.nuiton.web</groupId> + <artifactId>nuiton-struts2</artifactId> + <version>${nuitonWebVersion}</version> + </dependency> + + <dependency> <groupId>org.nuiton.i18n</groupId> <artifactId>nuiton-i18n</artifactId> <version>${nuitonI18nVersion}</version> Added: trunk/src/site/rst/developper/bow-model.rst =================================================================== --- trunk/src/site/rst/developper/bow-model.rst (rev 0) +++ trunk/src/site/rst/developper/bow-model.rst 2011-08-16 18:19:34 UTC (rev 304) @@ -0,0 +1,38 @@ +================================ +Explication du modèle de données +================================ + +BowUser +======= + +BowUser depend de WikittyUser et ajoute le permanentToken de l'utilisateur. +Le permanentToken sert à authentifier l'utilisateur sans sont login/password. +Cela est utile pour la bookmarklet qui permet d'ajouter des entrées. + +BowPreference +============= +BowPreference depend BowUser et sert à conserver toutes les préférences +utilisateurs + +BowBookmark +=========== + +BowBookmark est une entrée à conserver, elle contient l'URL, la description, +la date d'ajout, le nombre de click, et les alias public et privé. +BowBookmark depend de WikittyLabel pour pouvoir ajouter des labels sur les +BowBookmark. + +BowImport +========= + +BowImport est une extension que l'on ajoute a un BowBookmark pour montrer que +ce bookmark à été importé, on peut retrouver tous les bookmarks importer en +meme temps en recherchant ceux qui ont la meme date. + +WikittyAuthorisation +==================== + +On utilise WikittyAuthorisation pour partager les BowBookmarks. S'il ont veut +partager avec quelqu'un un BowBookmark, on ajoute a ce bookmark l'extension +WikittyAuthorisation et on mes l'id du user dans reader ou writer si l'on veut +que l'utilisateur puisse seulement utiliser le lien ou aussi le modifier.