Bow-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
August 2011
- 3 participants
- 38 discussions
r309 - in trunk/bow-ui/src/main: java/org/chorem/bow java/org/chorem/bow/action webapp/jsp xmi
by bpoussin@users.chorem.org 18 Aug '11
by bpoussin@users.chorem.org 18 Aug '11
18 Aug '11
Author: bpoussin
Date: 2011-08-18 12:15:48 +0200 (Thu, 18 Aug 2011)
New Revision: 309
Url: http://chorem.org/repositories/revision/bow/309
Log:
Evolution #438: Refactore source code and simplify all
- change model: user require preference (not the inverse) this is possible with current wikitty that accept multiple require
Modified:
trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java
trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration04To05.java
trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java
trunk/bow-ui/src/main/java/org/chorem/bow/BowSession.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchResultAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java
trunk/bow-ui/src/main/webapp/jsp/preferences.jsp
trunk/bow-ui/src/main/xmi/bow.zargo
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-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -60,13 +60,13 @@
return search;
}
- static public Criteria getBookmarkListCriteriaByUser(BowPreference user) {
+ static public Criteria getBookmarkListCriteriaByUser(BowUser user) {
Criteria criteria = getBookmarkListCriteriaByUser(user, null, null, null);
return criteria;
}
static public Criteria getBookmarkListCriteriaByUser(
- BowPreference user, String searchLine, String fullTextLine, String order) {
+ BowUser user, String searchLine, String fullTextLine, String order) {
Search search = Search.query();
BookmarkUtils.addEqUser(search, user.getWikittyId());
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-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowMigration04To05.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -94,7 +94,7 @@
static public List<BowUser> migrateUser(WikittyProxy proxy, List<UserImpl> users) {
List<BowUser> result = new ArrayList<BowUser>(users.size());
for (UserImpl user : users) {
- BowPreference bowUser = new BowPreferenceImpl();
+ BowUser bowUser = new BowUserImpl();
result.add(bowUser);
// copie des informations du user
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java 2011-08-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowSearchResult.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -33,7 +33,6 @@
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;
@@ -84,7 +83,7 @@
this.fullTextLine = StringUtils.defaultString(fullTextLine);
this.order = StringUtils.defaultString(order);
- BowPreference user = session.getPreference();
+ BowUser user = session.getUser();
BowProxy proxy = session.getProxy();
Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser(
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowSession.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/BowSession.java 2011-08-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowSession.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -26,6 +26,7 @@
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
+import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -48,8 +49,8 @@
static final private String BOW_SESSION_KEY = BowSession.class.getSimpleName();
protected BowProxy proxy;
- // preference herite de user, on ne stocke que preference
- protected BowPreference preference = null;
+ // user herite de preference, on ne stocke que user
+ protected BowUser user = null;
protected String temporaryToken = null;
protected boolean admin = false;
@@ -89,63 +90,28 @@
return proxy;
}
- public BowPreference getPreference() {
- return preference;
- }
-
- public void setPreference(BowPreference preference) {
- // si c'est le meme objet on ne fait rien
- if (this.preference == preference) {
- return;
- }
-
- if (preference != null) {
- checkPreference(preference);
-
- // check if this user is admin
- String login = preference.getLogin();
- String[] admins = BowConfig.getAdmins();
- boolean isAdmin = false;
- if (admins != null) {
- for (String admin : admins) {
- if (login.equals(admin)) {
- isAdmin = true;
- break;
- }
- }
- }
- setAdmin(isAdmin);
-
- // si c'est le meme user, on ne regenere pas le temporaryToken
- if (!ObjectUtils.equals(this.preference, preference)) {
- // generate temporary token
- String temporaryToken = BowUtils.generateToken();
- setTemporaryToken(temporaryToken);
- }
- }
- this.preference = preference;
- }
-
public BowUser getUser() {
- return preference;
+ return user;
}
public void setUser(BowUser user) {
- // si c'est le meme objet on ne fait rien
- if (this.preference == user) {
- return;
- }
+ // check if this user is admin
+ String login = user.getLogin();
+ String[] admins = BowConfig.getAdmins();
+ boolean isAdmin = ArrayUtils.contains(admins, login);
+ setAdmin(isAdmin);
- BowPreference preference = null;
if (user != null) {
- // load user preference
- preference = getProxy().restore(BowPreference.class, user.getWikittyId());
- if (preference == null) {
- Wikitty w = getProxy().getWikitty(user);
- preference = new BowPreferenceImpl(w);
- }
+ checkPreference(user);
}
- setPreference(preference);
+
+ // si c'est le meme user, on ne regenere pas le temporaryToken
+ if (!ObjectUtils.equals(this.user, user)) {
+ // generate temporary token
+ String temporaryToken = BowUtils.generateToken();
+ setTemporaryToken(temporaryToken);
+ }
+ this.user = user;
}
protected void checkPreference(BowPreference preference) {
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-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -27,7 +27,7 @@
import org.apache.commons.lang.StringUtils;
import org.chorem.bow.BookmarkUtils;
-import org.chorem.bow.BowPreference;
+import org.chorem.bow.BowUser;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.WikittyProxy;
@@ -47,7 +47,7 @@
try {
if (StringUtils.isNotBlank(searchLine)
|| StringUtils.isNotBlank(fullTextLine)) {
- BowPreference user = getBowSession().getPreference();
+ BowUser user = getBowSession().getUser();
// FIXME poussin 20110817 ATTENTION, la recherche remonte
// potentiellement des bookmarks qui ne nous appartiennent pas,
// dans ce cas, ne faudrait-il pas seulement ce supprimer des
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-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -33,7 +33,6 @@
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;
@@ -155,7 +154,7 @@
log.info("Importing boormarks : " + upfile);
try {
- BowPreference user = getBowSession().getPreference();
+ BowUser user = getBowSession().getUser();
// Struts limite to html files, is null if not one
if (upfile != null) {
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-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchResultAction.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -30,7 +30,7 @@
import org.chorem.bow.BowBookmark;
import org.chorem.bow.BowConfig;
import org.chorem.bow.BowUtils;
-import org.chorem.bow.BowPreference;
+import org.chorem.bow.BowUser;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Search;
@@ -76,7 +76,7 @@
@Override
public String execute() {
- BowPreference user = getBowSession().getPreference();
+ BowUser user = getBowSession().getUser();
if (searchLine != null && searchLine.matches("^http://[^ ]*")) {
redirectTo = searchLine;
@@ -116,7 +116,7 @@
}
} else {
// Search on the chosen search engine
- BowPreference pref = getBowSession().getPreference();
+ BowUser pref = getBowSession().getUser();
String searchEngineURL = pref.getSearchEngineUrlResults();
if (StringUtils.isEmpty(searchEngineURL)) {
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-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java 2011-08-18 10:15:48 UTC (rev 309)
@@ -39,7 +39,6 @@
import java.util.Set;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.DateUtils;
import org.chorem.bow.BowSession;
import org.nuiton.util.StringUtil;
@@ -291,7 +290,7 @@
}
}
- protected BowPreference changePreference(BowPreference preference) {
+ protected void changePreference(BowPreference preference) {
preference.setColors(colors);
if (StringUtils.isNotBlank(tagsNb)) {
preference.setTags(Integer.valueOf(tagsNb));
@@ -301,29 +300,60 @@
}
preference.setSearchEngineUrlSuggestions(searchEngineUrlSuggestions);
preference.setSearchEngineUrlResults(searchEngineUrlResults);
-
- return preference;
}
- protected BowUser changeUser(BowUser newUser) {
+ /**
+ * Modifie l'email et le password si necessaire. Si la modif est impossible
+ * email deja utilise, ou mauvais password, alors la methode return false
+ * Si tout ce passe bien, la methode retourne true
+ *
+ * @param user
+ * @return
+ */
+ protected boolean changeUser(BowUser user) {
+ boolean result = true;
+
if (StringUtils.isNotBlank(email)) {
- email = email.trim();
- newUser.setLogin(email);
+ 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 = getBowProxy().findByCriteria(BowUser.class, criteria);
+
+ //If this email address isn't already used (or if it hasn't changed)
+ if (find == null || find.getLogin().equals(user.getLogin())) {
+ email = email.trim();
+ user.setLogin(email);
+ } else {
+ // this email address is already used by someone else
+ setEmail(user.getLogin());
+
+ // TODO poussin 20110818 addFieldError don't work (no message on web page :(
+ // add addActionError to prevent addFieldError that don't work
+ addFieldError("email", _("bow.preferences.emailAldyExists"));
+ addActionError(_("bow.preferences.emailAldyExists"));
+ result = false;
+ }
}
- if (StringUtils.isNotBlank(newPassword)
+
+ if (result
+ && StringUtils.isNotBlank(newPassword)
&& StringUtils.isNotBlank(confirmNewPassword)
&& StringUtils.isNotBlank(currentPassword)) {
if (newPassword.equals(confirmNewPassword)) {
currentPassword = StringUtil.encodeMD5(currentPassword);
- if (currentPassword.equals(newUser.getPassword())) {
- newUser.setPassword(StringUtil.encodeMD5(newPassword));
+ if (currentPassword.equals(user.getPassword())) {
+ user.setPassword(StringUtil.encodeMD5(newPassword));
} else {
+ // TODO poussin 20110818 addFieldError don't work (no message on web page :(
+ // add addActionError to prevent addFieldError that don't work
addFieldError("currentPassword", _("bow.preferences.badCurrentPassword"));
- return null;
+ addActionError(_("bow.preferences.badCurrentPassword"));
+ result = false;
}
}
}
- return newUser;
+ return result;
}
/**
@@ -410,12 +440,12 @@
try {
BowSession session = getBowSession();
BowProxy proxy = session.getProxy();
- // BowPreference extends BowUser, donc on l'utilise pour tout
- BowPreference preference = getBowSession().getPreference();
+ // BowUser extends BowPreference, donc on l'utilise pour tout
+ BowUser user = session.getUser();
loadLabels(proxy);
Map<String,Integer> bookmarksByImportDate =
- BookmarkUtils.getBookmarksByImportDate(session, preference);
+ BookmarkUtils.getBookmarksByImportDate(session, user);
if (log.isDebugEnabled()) {
log.debug("bookmarksByImportDate found : " + (bookmarksByImportDate == null ? "null" : bookmarksByImportDate.size()));
@@ -426,47 +456,34 @@
// 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);
+ changePreference(user);
+ user = proxy.store(user);
+ getBowSession().setUser(user);
}
// 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(_("bow.preferences.update.successful"));
- }
+ if (changeUser(user)) {
+ user = proxy.store(user);
+ getBowSession().setUser(user);
+ result = "update";
+ addActionMessage(_("bow.preferences.update.successful"));
} else {
- // this email address is already used by someone else
- setEmail(preference.getLogin());
- addActionError(_("bow.preferences.emailAldyExists"));
result = ERROR;
}
}
- } else {
- // If the user didn't submit the form, the fields are filled with
- // the current preferences values
- setEmail(preference.getLogin());
- setColors(preference.getColors());
- setTagsNb(String.valueOf(preference.getTags()));
- setBookmarksHomePage(String.valueOf(preference.getBookmarks()));
- setSearchEngineUrlSuggestions(preference.getSearchEngineUrlSuggestions());
- setSearchEngineUrlResults(preference.getSearchEngineUrlResults());
}
+
+ // reload all time data (otherwize if submit user info, site info disappear)
+
+ // If the user didn't submit the form, the fields are filled with
+ // the current preferences values
+ setEmail(user.getLogin());
+ setColors(user.getColors());
+ setTagsNb(String.valueOf(user.getTags()));
+ setBookmarksHomePage(String.valueOf(user.getBookmarks()));
+ setSearchEngineUrlSuggestions(user.getSearchEngineUrlSuggestions());
+ setSearchEngineUrlResults(user.getSearchEngineUrlResults());
} catch (Exception eee) {
addActionError(_("bow.error.internal"));
log.error(eee.getMessage(), eee);
Modified: trunk/bow-ui/src/main/webapp/jsp/preferences.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/preferences.jsp 2011-08-18 06:46:15 UTC (rev 308)
+++ trunk/bow-ui/src/main/webapp/jsp/preferences.jsp 2011-08-18 10:15:48 UTC (rev 309)
@@ -40,8 +40,8 @@
<s:actionerror/>
<div class="formFrame fond">
- <s:set var="permanentToken" value="#session.BowSession.getPermanentToken()" />
- <s:set var="temporaryToken" value="#session.BowSession.getTemporaryToken()" />
+ <s:set var="permanentToken" value="bowSession.getPermanentToken()" />
+ <s:set var="temporaryToken" value="bowSession.getTemporaryToken()" />
<ul>
<li>
<s:a title="%{getText('bow.rightMenu.bookmark.temporaryLinkDescription')}"
Modified: trunk/bow-ui/src/main/xmi/bow.zargo
===================================================================
(Binary files differ)
1
0
Author: tchemit
Date: 2011-08-18 08:46:15 +0200 (Thu, 18 Aug 2011)
New Revision: 308
Url: http://chorem.org/repositories/revision/bow/308
Log:
mature project optimisation :(
Removed:
trunk/bow-extension-chromium/bow-extension-chromium.iml
trunk/bow-ui/bow-ui.iml
Modified:
trunk/bow-extension-chromium/
trunk/bow-ui/
Property changes on: trunk/bow-extension-chromium
___________________________________________________________________
Modified: svn:ignore
- target
.classpath
.project
.settings
+ target
.classpath
.project
.settings
*.iml
*.iws
*.ipr
Deleted: trunk/bow-extension-chromium/bow-extension-chromium.iml
===================================================================
--- trunk/bow-extension-chromium/bow-extension-chromium.iml 2011-08-18 06:42:25 UTC (rev 307)
+++ trunk/bow-extension-chromium/bow-extension-chromium.iml 2011-08-18 06:46:15 UTC (rev 308)
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/target/classes" />
- <output-test url="file://$MODULE_DIR$/target/test-classes" />
- <exclude-output />
- <content url="file://$MODULE_DIR$">
- <excludeFolder url="file://$MODULE_DIR$/target" />
- </content>
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- </component>
-</module>
-
Property changes on: trunk/bow-ui
___________________________________________________________________
Modified: svn:ignore
- target
PutObjectStoreDirHere
.classpath
.project
.settings
+ target
PutObjectStoreDirHere
.classpath
.project
.settings
*.iml
*.ipr
*.iws
Deleted: trunk/bow-ui/bow-ui.iml
===================================================================
--- trunk/bow-ui/bow-ui.iml 2011-08-18 06:42:25 UTC (rev 307)
+++ trunk/bow-ui/bow-ui.iml 2011-08-18 06:46:15 UTC (rev 308)
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/target/classes" />
- <output-test url="file://$MODULE_DIR$/target/test-classes" />
- <content url="file://$MODULE_DIR$">
- <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/resources" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/xmi" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/models" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/i18n" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/annotations" isTestSource="false" />
- <excludeFolder url="file://$MODULE_DIR$/target/bow-ui-0.5-SNAPSHOT" />
- <excludeFolder url="file://$MODULE_DIR$/target/classes" />
- <excludeFolder url="file://$MODULE_DIR$/target/extracted-sources" />
- <excludeFolder url="file://$MODULE_DIR$/target/i18n" />
- <excludeFolder url="file://$MODULE_DIR$/target/i18n-workdir" />
- <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver" />
- <excludeFolder url="file://$MODULE_DIR$/target/surefire" />
- <excludeFolder url="file://$MODULE_DIR$/target/test-classes" />
- <excludeFolder url="file://$MODULE_DIR$/target/work" />
- </content>
- <orderEntry type="inheritedJdk" />
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="library" name="Maven: org.nuiton:nuiton-utils:2.1-SNAPSHOT" level="project" />
- <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
- <orderEntry type="library" name="Maven: commons-primitives:commons-primitives:1.0" level="project" />
- <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
- <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
- <orderEntry type="library" name="Maven: org.nuiton.i18n:nuiton-i18n:2.3.1" level="project" />
- <orderEntry type="library" name="Maven: commons-io:commons-io:2.0.1" level="project" />
- <orderEntry type="library" name="Maven: org.nuiton.wikitty:wikitty-api:3.0.5-SNAPSHOT" level="project" />
- <orderEntry type="library" name="Maven: gnu.cajo:cajo:1.168" level="project" />
- <orderEntry type="library" name="Maven: org.apache.jcs:jcs:1.3" level="project" />
- <orderEntry type="library" name="Maven: concurrent:concurrent:1.0" level="project" />
- <orderEntry type="library" name="Maven: net.iharder:base64:2.3.8" level="project" />
- <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
- <orderEntry type="library" name="Maven: xpp3:xpp3:1.1.4c" level="project" />
- <orderEntry type="library" name="Maven: net.sf.opencsv:opencsv:2.1" level="project" />
- <orderEntry type="library" name="Maven: jboss.jbossts:jbossjta:4.9.0.GA" level="project" />
- <orderEntry type="library" name="Maven: javax.transaction:jta:1.1" level="project" />
- <orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.2.2" level="project" />
- <orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.3.4.O" level="project" />
- <orderEntry type="library" name="Maven: jivesoftware:smack:3.1.0" level="project" />
- <orderEntry type="library" name="Maven: jivesoftware:smackx:3.1.0" level="project" />
- <orderEntry type="library" name="Maven: org.apache.struts:struts2-core:2.1.8.1" level="project" />
- <orderEntry type="library" name="Maven: com.opensymphony:xwork-core:2.1.6" level="project" />
- <orderEntry type="library" name="Maven: org.springframework:spring-test:2.5.6" level="project" />
- <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.8.2" level="project" />
- <orderEntry type="library" name="Maven: ognl:ognl:2.7.3" level="project" />
- <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.15" level="project" />
- <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.2.1" level="project" />
- <orderEntry type="library" name="Maven: com.sun:tools:1.5.0" level="project" />
- <orderEntry type="library" name="Maven: org.htmlparser:htmlparser:1.6" level="project" />
- <orderEntry type="library" name="Maven: javax.mail:mail:1.4.3" level="project" />
- <orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
- <orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:servlet-api:2.5" level="project" />
- <orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:jsp-api:2.0" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: log4j:log4j:1.2.16" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.nuiton.wikitty:wikitty-jdbc-impl:3.0.5-SNAPSHOT" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.nuiton.wikitty:wikitty-solr-impl:3.0.5-SNAPSHOT" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.solr:solr-core:1.4.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.solr:solr-solrj:1.4.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.slf4j:slf4j-api:1.6.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: commons-codec:commons-codec:1.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.codehaus.woodstox:wstx-asl:3.2.7" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: stax:stax-api:1.0.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:1.0.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-analyzers:2.9.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-core:2.9.4" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-highlighter:2.9.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-memory:2.9.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-queries:2.9.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-snowball:2.9.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-misc:2.9.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-spellchecker:2.9.3" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.solr:solr-commons-csv:1.4.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: woodstox:wstx-asl:3.2.7" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: commons-dbcp:commons-dbcp:1.4" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: commons-pool:commons-pool:1.5.4" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.slf4j:slf4j-log4j12:1.6.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: com.h2database:h2:1.2.134" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.struts:struts2-spring-plugin:2.1.8.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-beans:2.5.6" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-core:2.5.6" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-context:2.5.6" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: aopalliance:aopalliance:1.0" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-web:2.5.6" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.struts:struts2-config-browser-plugin:2.1.8.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.struts:struts2-sitemesh-plugin:2.1.8.1" level="project" />
- <orderEntry type="library" scope="RUNTIME" name="Maven: opensymphony:sitemesh:2.4.2" level="project" />
- </component>
-</module>
-
1
0
r307 - in trunk: bow-extension-chromium bow-ui bow-ui/src/license
by tchemit@users.chorem.org 18 Aug '11
by tchemit@users.chorem.org 18 Aug '11
18 Aug '11
Author: tchemit
Date: 2011-08-18 08:42:25 +0200 (Thu, 18 Aug 2011)
New Revision: 307
Url: http://chorem.org/repositories/revision/bow/307
Log:
update third-parties
Added:
trunk/bow-extension-chromium/bow-extension-chromium.iml
trunk/bow-ui/bow-ui.iml
Modified:
trunk/bow-ui/src/license/THIRD-PARTY.properties
Added: trunk/bow-extension-chromium/bow-extension-chromium.iml
===================================================================
--- trunk/bow-extension-chromium/bow-extension-chromium.iml (rev 0)
+++ trunk/bow-extension-chromium/bow-extension-chromium.iml 2011-08-18 06:42:25 UTC (rev 307)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/target/classes" />
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <excludeFolder url="file://$MODULE_DIR$/target" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+</module>
+
Added: trunk/bow-ui/bow-ui.iml
===================================================================
--- trunk/bow-ui/bow-ui.iml (rev 0)
+++ trunk/bow-ui/bow-ui.iml 2011-08-18 06:42:25 UTC (rev 307)
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/target/classes" />
+ <output-test url="file://$MODULE_DIR$/target/test-classes" />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/resources" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/xmi" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/models" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/i18n" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/annotations" isTestSource="false" />
+ <excludeFolder url="file://$MODULE_DIR$/target/bow-ui-0.5-SNAPSHOT" />
+ <excludeFolder url="file://$MODULE_DIR$/target/classes" />
+ <excludeFolder url="file://$MODULE_DIR$/target/extracted-sources" />
+ <excludeFolder url="file://$MODULE_DIR$/target/i18n" />
+ <excludeFolder url="file://$MODULE_DIR$/target/i18n-workdir" />
+ <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver" />
+ <excludeFolder url="file://$MODULE_DIR$/target/surefire" />
+ <excludeFolder url="file://$MODULE_DIR$/target/test-classes" />
+ <excludeFolder url="file://$MODULE_DIR$/target/work" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" name="Maven: org.nuiton:nuiton-utils:2.1-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-primitives:commons-primitives:1.0" level="project" />
+ <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
+ <orderEntry type="library" name="Maven: org.nuiton.i18n:nuiton-i18n:2.3.1" level="project" />
+ <orderEntry type="library" name="Maven: commons-io:commons-io:2.0.1" level="project" />
+ <orderEntry type="library" name="Maven: org.nuiton.wikitty:wikitty-api:3.0.5-SNAPSHOT" level="project" />
+ <orderEntry type="library" name="Maven: gnu.cajo:cajo:1.168" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.jcs:jcs:1.3" level="project" />
+ <orderEntry type="library" name="Maven: concurrent:concurrent:1.0" level="project" />
+ <orderEntry type="library" name="Maven: net.iharder:base64:2.3.8" level="project" />
+ <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
+ <orderEntry type="library" name="Maven: xpp3:xpp3:1.1.4c" level="project" />
+ <orderEntry type="library" name="Maven: net.sf.opencsv:opencsv:2.1" level="project" />
+ <orderEntry type="library" name="Maven: jboss.jbossts:jbossjta:4.9.0.GA" level="project" />
+ <orderEntry type="library" name="Maven: javax.transaction:jta:1.1" level="project" />
+ <orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.2.2" level="project" />
+ <orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.3.4.O" level="project" />
+ <orderEntry type="library" name="Maven: jivesoftware:smack:3.1.0" level="project" />
+ <orderEntry type="library" name="Maven: jivesoftware:smackx:3.1.0" level="project" />
+ <orderEntry type="library" name="Maven: org.apache.struts:struts2-core:2.1.8.1" level="project" />
+ <orderEntry type="library" name="Maven: com.opensymphony:xwork-core:2.1.6" level="project" />
+ <orderEntry type="library" name="Maven: org.springframework:spring-test:2.5.6" level="project" />
+ <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.8.2" level="project" />
+ <orderEntry type="library" name="Maven: ognl:ognl:2.7.3" level="project" />
+ <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.15" level="project" />
+ <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.2.1" level="project" />
+ <orderEntry type="library" name="Maven: com.sun:tools:1.5.0" level="project" />
+ <orderEntry type="library" name="Maven: org.htmlparser:htmlparser:1.6" level="project" />
+ <orderEntry type="library" name="Maven: javax.mail:mail:1.4.3" level="project" />
+ <orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:servlet-api:2.5" level="project" />
+ <orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:jsp-api:2.0" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: log4j:log4j:1.2.16" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.nuiton.wikitty:wikitty-jdbc-impl:3.0.5-SNAPSHOT" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.nuiton.wikitty:wikitty-solr-impl:3.0.5-SNAPSHOT" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.solr:solr-core:1.4.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.solr:solr-solrj:1.4.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.slf4j:slf4j-api:1.6.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: commons-codec:commons-codec:1.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.codehaus.woodstox:wstx-asl:3.2.7" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: stax:stax-api:1.0.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.geronimo.specs:geronimo-stax-api_1.0_spec:1.0.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-analyzers:2.9.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-core:2.9.4" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-highlighter:2.9.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-memory:2.9.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-queries:2.9.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-snowball:2.9.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-misc:2.9.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.lucene:lucene-spellchecker:2.9.3" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.solr:solr-commons-csv:1.4.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: woodstox:wstx-asl:3.2.7" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: commons-dbcp:commons-dbcp:1.4" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: commons-pool:commons-pool:1.5.4" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.slf4j:slf4j-log4j12:1.6.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: com.h2database:h2:1.2.134" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.struts:struts2-spring-plugin:2.1.8.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-beans:2.5.6" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-core:2.5.6" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-context:2.5.6" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: aopalliance:aopalliance:1.0" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework:spring-web:2.5.6" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.struts:struts2-config-browser-plugin:2.1.8.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.struts:struts2-sitemesh-plugin:2.1.8.1" level="project" />
+ <orderEntry type="library" scope="RUNTIME" name="Maven: opensymphony:sitemesh:2.4.2" level="project" />
+ </component>
+</module>
+
Modified: trunk/bow-ui/src/license/THIRD-PARTY.properties
===================================================================
--- trunk/bow-ui/src/license/THIRD-PARTY.properties 2011-08-18 02:37:38 UTC (rev 306)
+++ trunk/bow-ui/src/license/THIRD-PARTY.properties 2011-08-18 06:42:25 UTC (rev 307)
@@ -1,7 +1,6 @@
# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
#-------------------------------------------------------------------------------
# Already used licenses in project :
-# - Apache 2
# - Apache License
# - Apache Software License, Version 1.1
# - Apache Software License, version 1.1
@@ -9,14 +8,15 @@
# - BSD style
# - BSD-style license
# - CDDL
+# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) v1.0
-# - Common Development and Distribution License (CDDL) v1.0
# - Common Public License
# - Common Public License Version 1.0
# - GPLv2+CE
# - Indiana University Extreme! Lab Software License, vesion 1.1.1
-# - LGPL 2.1
# - Lesser General Public License (LGPL) v 3.0
+# - Lesser General Public License (LPGL)
+# - Lesser General Public License (LPGL) v 2.1
# - MIT License
# - MPL 1.1
# - Public Domain
@@ -25,22 +25,23 @@
# - The Apache Software License, Version 1.1
# - The Apache Software License, Version 2.0
# - The H2 License, Version 1.0
+# - http://asm.ow2.org/license.html
#-------------------------------------------------------------------------------
# Please fill the missing licenses for dependencies :
#
#
-#Tue May 17 16:35:20 CEST 2011
-antlr--antlr--2.7.2--jar=BSD License
-asm--asm--3.1--jar=http://asm.ow2.org/license.html
-asm--asm-commons--3.1--jar=http://asm.ow2.org/license.html
-asm--asm-tree--3.1--jar=http://asm.ow2.org/license.html
-commons-primitives--commons-primitives--1.0--jar=The Apache Software License, Version 2.0
-concurrent--concurrent--1.0--jar=TECHNOLOGY LICENSE FROM SUN MICROSYSTEMS, INC.
-dom4j--dom4j--1.1--jar=BSD License
-jakarta-regexp--jakarta-regexp--1.4--jar=The Apache Software License, Version 2.0
-javax.servlet--jsp-api--2.0--jar=Common Development and Distribution License (CDDL) v1.0
-javax.servlet--servlet-api--2.5--jar=Common Development and Distribution License (CDDL) v1.0
-javax.transaction--jta--1.1--jar=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) v1.0
-org.apache.zookeeper--zookeeper--3.3.1--jar=The Apache Software License, Version 2.0
-oro--oro--2.0.8--jar=The Apache Software License, Version 2.0
-xpp3--xpp3_min--1.1.3.4.O--jar=Indiana University Extreme\! Lab Software License, vesion 1.1.1
+#Thu Aug 18 08:41:56 CEST 2011
+antlr--antlr--2.7.2=BSD License
+asm--asm--3.1=http\://asm.ow2.org/license.html
+asm--asm-commons--3.1=http\://asm.ow2.org/license.html
+asm--asm-tree--3.1=http\://asm.ow2.org/license.html
+commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0
+concurrent--concurrent--1.0=TECHNOLOGY LICENSE FROM SUN MICROSYSTEMS, INC.
+dom4j--dom4j--1.1=BSD License
+jakarta-regexp--jakarta-regexp--1.4=The Apache Software License, Version 2.0
+javax.servlet--jsp-api--2.0=Common Development and Distribution License (CDDL) v1.0
+javax.servlet--servlet-api--2.5=Common Development and Distribution License (CDDL) v1.0
+javax.transaction--jta--1.1=COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) v1.0
+org.apache.zookeeper--zookeeper--3.3.1=The Apache Software License, Version 2.0
+oro--oro--2.0.8=The Apache Software License, Version 2.0
+xpp3--xpp3_min--1.1.3.4.O=Indiana University Extreme\! Lab Software License, vesion 1.1.1
1
0
18 Aug '11
Author: bpoussin
Date: 2011-08-18 04:37:38 +0200 (Thu, 18 Aug 2011)
New Revision: 306
Url: http://chorem.org/repositories/revision/bow/306
Log:
Evolution #438: Refactore source code and simplify all
- continuation du nettoyage, le plus gros est fini, et tout semble refonctionner
- plus de popup pour l'edition pour l'instant
- suppression de tous les fichiers qui ne serve pas
- suppression de tous les getTexts et remplacement par _()
- suppression de presque toutes les utilisations de request
- nettoyage des imports
- nettoyage des jsp
- ...
Removed:
trunk/bow-ui/src/main/java/org/chorem/bow/AliasServlet.java
trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/OrderAction.java
trunk/bow-ui/src/main/webapp/js/jquery-1.5.2.min.js
trunk/bow-ui/src/main/webapp/js/jquery-ui-1.8.11.custom.min.js
trunk/bow-ui/src/main/webapp/jsp/inc/errorFrame.jsp
trunk/bow-ui/src/main/webapp/jsp/inc/popupAddUrl.jsp
Modified:
trunk/bow-ui/pom.xml
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/BowConfigOption.java
trunk/bow-ui/src/main/java/org/chorem/bow/BowMail.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/DeleteImportAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/EditBookmarkAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/ForgotPasswordAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/GenerateTokenAction.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/LocaleAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/LoginAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/LogoutAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.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/PreferencesAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/ReIndexationAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/RegisterAction.java
trunk/bow-ui/src/main/java/org/chorem/bow/action/RemoveBookmarkAction.java
trunk/bow-ui/src/main/resources/bow.properties
trunk/bow-ui/src/main/resources/org/chorem/bow/action/ForgotPasswordAction-validation.xml
trunk/bow-ui/src/main/resources/org/chorem/bow/action/LoginAction-validation.xml
trunk/bow-ui/src/main/resources/org/chorem/bow/action/RegisterAction-validation.xml
trunk/bow-ui/src/main/resources/struts.xml
trunk/bow-ui/src/main/webapp/WEB-INF/decorators.xml
trunk/bow-ui/src/main/webapp/WEB-INF/decorators/main.jsp
trunk/bow-ui/src/main/webapp/css/bookmark.css
trunk/bow-ui/src/main/webapp/js/bookmark.js
trunk/bow-ui/src/main/webapp/jsp/admin.jsp
trunk/bow-ui/src/main/webapp/jsp/editBookmark.jsp
trunk/bow-ui/src/main/webapp/jsp/error.jsp
trunk/bow-ui/src/main/webapp/jsp/home.jsp
trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp
trunk/bow-ui/src/main/webapp/jsp/inc/footer.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/webapp/jsp/suggestions.jsp
trunk/pom.xml
Modified: trunk/bow-ui/pom.xml
===================================================================
--- trunk/bow-ui/pom.xml 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/pom.xml 2011-08-18 02:37:38 UTC (rev 306)
@@ -66,6 +66,11 @@
</dependency>
<dependency>
+ <groupId>com.jgeppert.struts2.jquery</groupId>
+ <artifactId>struts2-jquery-plugin</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<scope>runtime</scope>
Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/AliasServlet.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/AliasServlet.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/AliasServlet.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -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%
- */
-package org.chorem.bow;
-
-import org.apache.commons.lang.StringUtils;
-import org.nuiton.wikitty.WikittyProxy;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * TODO poussin 20110216 a revoir avec le ticket http://www.chorem.org/issues/show/295
- *
- * @author bbrossaud
- * @deprecated transformed to struts action since 0.5
- */
-@Deprecated
-public class AliasServlet extends HttpServlet {
-
- private static final long serialVersionUID = 1L;
- protected String bowServletUrl = "";
-
- public AliasServlet() {
- bowServletUrl = BowConfig.getBowUrl() + BowConfig.getServletBow();
- }
-
- @Override
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- doPost(request, response);
- }
-
- /* @param request servlet request
- * @param response servlet response
- * @throws ServletException if a servlet error occurs
- */
- @Override
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException {
- try {
- String alias = request.getPathInfo();
- if (!StringUtils.isEmpty(alias)) {
- // remove first '/'
- alias = alias.substring(1);
- BowSession session = BowSession.getBowSession(request);
- WikittyProxy proxy = session.getProxy();
-
- /*Criteria criteria = Search.query().eq(
- BowAlias.FQ_FIELD_BOWALIAS_ALIAS, alias).criteria();
-
- BowAlias bowAlias = proxy.findByCriteria(BowAlias.class, criteria);
- String bookmarkId;
- if (bowAlias == null) {
- bookmarkId = alias;
- } else {
- bookmarkId = bowAlias.getBowBookmark();
- }
- BowBookmark bookmark = proxy.restore(BowBookmark.class, bookmarkId);
- if (bookmark != null) {
- String redirect = bookmark.getLink();
- int clicks = bookmark.getClick() + 1;
- bookmark.setClick(clicks);
- proxy.store(bookmark);
- response.sendRedirect(redirect);
- } else {
- response.sendRedirect(bowServletUrl);
- }*/
- } else {
- response.sendRedirect(bowServletUrl);
- }
- } catch (Exception eee) {
- request.getRequestDispatcher("error.jsp").forward(request, response);
- }
- }
-}
Deleted: trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkActions.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -1,194 +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%
- */
-package org.chorem.bow;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.commons.lang.StringUtils;
-import org.nuiton.util.StringUtil;
-import org.nuiton.wikitty.search.FacetTopic;
-import org.nuiton.wikitty.search.PagedResult;
-
-/**
- *
- * @author bbrossaud
- */
-public class BookmarkActions {
-
- protected String fullTextLine = "";
- protected List<BowBookmark> bookmarks = new ArrayList<BowBookmark>(); // bookmarks which contain the search tags
- protected List<BowBookmark> lastBookmarks = new ArrayList<BowBookmark>();
- protected List<FacetTopic> tagsCloud = new ArrayList<FacetTopic>(); // associate a tag with its frequency
- protected List<String> tagsSearch = new ArrayList<String>(); // contains the tags taped in the search field
- 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();
- defineTValues();
- }
-
- public void setTagCloud(List<FacetTopic> cpy) {
- if (cpy != null) {
- tagsCloud = new ArrayList<FacetTopic>(cpy);
- }
- }
-
- public void deleteTagBySearch() {
- List<FacetTopic> save = new ArrayList<FacetTopic>(tagsCloud);
- for (FacetTopic topic : save) {
- String name = topic.getTopicName();
- if (tagsSearch.contains(name)) {
- tagsCloud.remove(topic);
- }
- }
- }
-
- protected void defineTValues() {
- 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 void addTags(String str) {
- List<String> tags = BowUtils.getWords(str);
- for (String tag : tags) {
- if (!tagsSearch.contains(tag)) {
- tagsSearch.add(tag);
- }
- }
- }
-
- public void emptySearchline() {
- List<BowBookmark> bookmarkList = new ArrayList<BowBookmark>(bookmarks);
- for (BowBookmark bookmark : bookmarkList) {
- Set<String> tags = bookmark.getLabels();
- if (tags != null && !tags.isEmpty()) {
- bookmarks.remove(bookmark);
- }
- }
- }
-
- public void reset() {
- bookmarks.clear();
- tagsCloud.clear();
- tagsSearch.clear();
- tmax = -1;
- tmin = -1;
- }
-
- public void setFullTextLine(String line) {
- if (line == null) {
- fullTextLine = "";
- } else {
- fullTextLine = line;
- }
- }
-
- public void setBookmarks(List<BowBookmark> bookmarksList) {
- List<BowBookmark> newList = new ArrayList<BowBookmark>(bookmarksList);
- bookmarks = newList;
- }
-
- public void setLastBookmarks(List<BowBookmark> bookmarksList) {
- List<BowBookmark> newList = new ArrayList<BowBookmark>(bookmarksList);
- lastBookmarks = newList;
- }
-
- public void setTagSearch(List<String> cpy) {
- tagsSearch = new ArrayList<String>();
- if (cpy != null) {
- tagsSearch.addAll(cpy);
- }
- }
-
- public String getSearchLine() {
- if (tagsSearch != null) {
- return StringUtil.join(tagsSearch, " ", true); // return the search line created with the tags
- }
- return StringUtils.EMPTY;
- }
-
- 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 tagsSearch;
- }
-
- public List<BowBookmark> getBookmarks() {
- return bookmarks;
- }
-
- public List<BowBookmark> getLastBookmarks() {
- return lastBookmarks;
- }
-
- public int getTmin() {
- return tmin;
- }
-
- public int getTmax() {
- return tmax;
- }
-
- public String getFullTextLine() {
- if (fullTextLine == null) {
- return StringUtils.EMPTY;
- }
- return fullTextLine;
- }
-}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -32,8 +32,6 @@
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;
@@ -42,7 +40,6 @@
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.FacetTopic;
-import org.nuiton.wikitty.search.PagedResult;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.operators.Element;
import org.nuiton.wikitty.search.Search;
@@ -121,33 +118,7 @@
return criteria;
}
- static public BookmarkActions createBookmarkActions(HttpServletRequest request,
- PagedResult<BowBookmark> result, String searchLine) {
- String fullText = request.getParameter("fullTextLine");
- BookmarkActions bookmarkActions = new BookmarkActions();
- bookmarkActions.setFullTextLine(fullText);
- List<BowBookmark> bookList = result.getAll();
-
- if (bookList != null) {
- bookmarkActions.setBookmarks(bookList);
- }
- if (fullText == null || fullText.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;
- }
-
- static public Map<String, Integer> getBookmarksByImportDate(HttpServletRequest request, BowUser user) throws ParseException {
- BowSession session = BowSession.getBowSession(request);
+ static public Map<String, Integer> getBookmarksByImportDate(BowSession session, BowUser user) throws ParseException {
WikittyProxy proxy = session.getProxy();
Criteria criteria = Search.query()
.eq(Element.ELT_EXTENSION, BowImport.EXT_BOWIMPORT)
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowConfig.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,8 +23,6 @@
*/
package org.chorem.bow;
-import static org.nuiton.i18n.I18n._;
-
import org.apache.commons.lang.UnhandledException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -148,70 +146,6 @@
}
/**
- * Get bow servlet as string.
- * Default bow applicationConfig will be used
- *
- * @return servlet name
- */
- public static String getServletBow() {
- return getServletBow(getConfig());
- }
-
- /**
- * Get bow servlet as string.
- *
- * @param config bow configuration
- * @return servlet name
- */
- public static String getServletBow(ApplicationConfig config) {
- return config.getOption(BowConfigOption.SERVLET_BOW.key);
- }
-
- /**
- * Get alias servlet as string.
- * Default bow applicationConfig will be used
- *
- * @return servlet name
- */
- public static String getServletAlias() {
- return getServletAlias(getConfig());
- }
-
- /**
- * Get alias servlet as string.
- *
- * @param config bow configuration
- * @return servlet name
- */
- public static String getServletAlias(ApplicationConfig config) {
- return config.getOption(BowConfigOption.SERVLET_ALIAS.key);
- }
-
- /**
- * Get alias servlet url as string.
- * Default bow applicationConfig will be used
- *
- * @return servlet name
- */
- public static String getServletAliasUrl() {
- return getServletAliasUrl(getConfig());
- }
-
- /**
- * Get alias servlet url as string.
- *
- * @param config bow configuration
- * @return servlet name
- */
- public static String getServletAliasUrl(ApplicationConfig config) {
- String result = getAliasUrl(config) + getServletAlias(config);
- if (result != null && result.charAt(result.length() - 1) != '/') {
- result += '/';
- }
- return result;
- }
-
- /**
* Get bow smtp server as string.
* Default bow applicationConfig will be used
*
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowConfigOption.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/BowConfigOption.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowConfigOption.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -49,15 +49,6 @@
"alias.url",
_("bow.config.alias.url.description"),
"alias/", String.class, false, false),
- SERVLET_BOW(
- "servlet.bow",
- _("bow.config.servlet.bow.description"),
- null, String.class, false, false),
- // For apache url rewriting
- SERVLET_ALIAS(
- "servlet.alias",
- _("bow.config.servlet.bow.description"),
- null, String.class, false, false),
SEARCH_ENGINE(
"search.engine",
_("bow.config.search.engine.description"),
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowMail.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/BowMail.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowMail.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,8 +23,6 @@
*/
package org.chorem.bow;
-import org.nuiton.util.ApplicationConfig;
-
import java.util.Properties;
import javax.mail.Message;
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -84,16 +84,18 @@
*/
static public String redirectTo(String searchLine, String fullTextLine) {
String result = "home.action";
+ boolean searchLineNotBlank = StringUtils.isNotBlank(searchLine);
+ boolean fullTextLineNotBlank = StringUtils.isNotBlank(fullTextLine);
- if (!StringUtils.isEmpty(searchLine) || !StringUtils.isEmpty(fullTextLine)) {
- result = "search.action?";
- if (searchLine != null) {
+ if (searchLineNotBlank || fullTextLineNotBlank) {
+ result += "?";
+ if (searchLineNotBlank) {
result += "searchLine=" + searchLine;
}
- if (searchLine != null && fullTextLine != null) {
+ if (searchLineNotBlank && fullTextLineNotBlank) {
result += "&";
}
- if (fullTextLine != null) {
+ if (fullTextLineNotBlank) {
result += "fullTextLine=" + fullTextLine;
}
}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/AddUrlAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -28,7 +28,6 @@
import org.chorem.bow.BowBookmark;
import org.chorem.bow.BowUser;
import org.chorem.bow.BowUtils;
-import static org.nuiton.i18n.I18n.n_;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.PagedResult;
@@ -52,8 +51,6 @@
protected String tags;
protected String nameAndTags;
protected String redirectTo;
- protected String searchLine = "";
- protected String fullTextLine = "";
public String getBookmarkId() {
return bookmarkId;
@@ -148,34 +145,6 @@
return redirectTo;
}
- /**
- * @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;
- }
-
public String execute() {
try {
WikittyProxy proxy = getBowProxy();
@@ -184,7 +153,7 @@
BowUser user = getBowSession().getUser();
String userId = user.getWikittyId();
- if (bookmarkId != null && !StringUtils.isEmpty(bookmarkId)) {
+ if (StringUtils.isNotBlank(bookmarkId)) {
bookmarkToModify = proxy.restore(BowBookmark.class, bookmarkId);
}
if (log.isDebugEnabled()) {
@@ -198,13 +167,13 @@
// TODO sletellier 20110416 : return error message when public or private alias is already used
Criteria privateAliasCriteria = null;
Criteria publicAliasCriteria = null;
- if (privateAlias != null && !privateAlias.isEmpty()) {
+ if (StringUtils.isNotEmpty(privateAlias)) {
privateAliasCriteria = Search.query()
.eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_PRIVATEALIAS, privateAlias)
.eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId)
.criteria().setEndIndex(0);
}
- if (publicAlias != null && !publicAlias.isEmpty()) {
+ if (StringUtils.isNotEmpty(publicAlias)) {
publicAliasCriteria = Search.query()
.eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_PUBLICALIAS, publicAlias)
.criteria().setEndIndex(0);
@@ -278,15 +247,15 @@
if (bookmark != null || bookmarkToModify != null) {
proxy.store(bookmark, bookmarkToModify); //Stores the bookmark if everything is ok
- addActionMessage(getText(n_("bow.bookmark.add.successful")));
+ addActionMessage(_("bow.bookmark.add.successful"));
if (log.isDebugEnabled()) {
log.debug("Adding URL");
}
}
redirectTo = BowUtils.redirectTo(searchLine, fullTextLine);
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return SUCCESS;
}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/AliasAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -27,7 +27,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.chorem.bow.BowBookmark;
-import static org.nuiton.i18n.I18n.n_;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.Search;
@@ -91,7 +90,7 @@
}
}
} catch (Exception eee) {
- addActionError(getText(n_("bow.error.internal")));
+ addActionError(_("bow.error.internal"));
log.error(eee.getMessage(), eee);
result = ERROR;
}
@@ -109,7 +108,7 @@
BowBookmark bookmark = proxy.findByCriteria(BowBookmark.class, criteria);
if (bookmark != null) {
- addActionError(getText(n_("bow.alias.already.exists"), new String[]{alias}));
+ addActionError(_("bow.alias.already.exists", alias));
log.error("A bookmark already exists with alias " + alias);
result = ERROR;
@@ -119,14 +118,14 @@
bookmark.setPublicAlias(alias);
proxy.store(bookmark);
} else {
- addActionError(getText(n_("bow.alias.bookmarkId.unknown"), new String[]{bookmarkId}));
+ addActionError(_("bow.alias.bookmarkId.unknown", bookmarkId));
log.debug("No bookmark with id " + bookmarkId);
result = ERROR;
}
}
}
} catch (Exception eee) {
- addActionError(getText(n_("bow.error.internal")));
+ addActionError(_("bow.error.internal"));
log.error(eee.getMessage(), eee);
result = ERROR;
}
@@ -145,12 +144,12 @@
bookmark.setPublicAlias(null);
proxy.store(bookmark);
} else {
- addActionError(getText(n_("bow.alias.bookmarkId.unknown"), new String[]{bookmarkId}));
+ addActionError(_("bow.alias.bookmarkId.unknown", bookmarkId));
log.error("No bookmark with id " + bookmarkId);
result = ERROR;
}
} catch (Exception eee) {
- addActionError(getText(n_("bow.error.internal")));
+ addActionError(_("bow.error.internal"));
log.error(eee.getMessage(), eee);
result = ERROR;
}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -32,7 +32,6 @@
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Search;
-import static org.nuiton.i18n.I18n.n_;
/**
* Supprime un import de bookmark
@@ -76,10 +75,10 @@
proxy.delete(bookmarks);
- addActionMessage(getText(n_("bow.bookmark.import.delete.successful")));
+ addActionMessage(_("bow.bookmark.import.delete.successful"));
}
} catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
+ addActionError(_("bow.error.internal"));
log.error(e.getMessage(), e);
}
return SUCCESS;
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteSearchResultsAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,23 +23,16 @@
*/
package org.chorem.bow.action;
-import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
-import org.chorem.bow.BowBookmark;
import org.chorem.bow.BookmarkUtils;
import org.chorem.bow.BowPreference;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.WikittyProxy;
-import org.nuiton.wikitty.search.Search;
-import static org.nuiton.i18n.I18n.n_;
-
/**
- * Supprime des bookmarks qui satisfont le critere de recherche. Si fullTextLine
- * est non vide, alors elle est utilisee, pour la recherche, sinon on utilise
- * searchLine
+ * Supprime des bookmarks qui satisfont le critere de recherche.
*
* @author poussin
*/
@@ -55,18 +48,26 @@
if (StringUtils.isNotBlank(searchLine)
|| StringUtils.isNotBlank(fullTextLine)) {
BowPreference user = getBowSession().getPreference();
+ // FIXME poussin 20110817 ATTENTION, la recherche remonte
+ // potentiellement des bookmarks qui ne nous appartiennent pas,
+ // dans ce cas, ne faudrait-il pas seulement ce supprimer des
+ // reader/write/admin ?
Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser(
user, searchLine, fullTextLine, null);
WikittyProxy proxy = getBowProxy();
List<String> ids = proxy.findAllIdByCriteria(criteria).getAll();
+ if (log.isDebugEnabled()) {
+ log.debug("Will delete " + ids.size() + " bookmarks");
+ }
+
proxy.delete(ids);
- addActionMessage(getText(n_("bow.search.results.deleted")));
+ addActionMessage(_("bow.search.results.deleted"));
}
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return SUCCESS;
}
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/EditBookmarkAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/EditBookmarkAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/EditBookmarkAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -30,8 +30,6 @@
import org.nuiton.wikitty.search.Search;
import org.nuiton.wikitty.search.operators.Element;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Load a bookmark to display it on modification page, used when javascript
* is not available on client
@@ -66,11 +64,11 @@
try {
WikittyProxy proxy = getBowProxy();
Criteria criteria = Search.query()
- .eq(Element.ELT_ID, id).criteria();
+ .eq(Element.ELT_ID, id).criteria();
bookmark = proxy.findByCriteria(BowBookmark.class, criteria);
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return SUCCESS;
}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -64,6 +64,7 @@
/**
* Exports the bookmarks in HTML format
*/
+ @Override
public String execute() {
WikittyProxy proxy = getBowProxy();
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/ForgotPasswordAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/ForgotPasswordAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ForgotPasswordAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -27,6 +27,7 @@
import javax.mail.internet.AddressException;
import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang.StringUtils;
import org.chorem.bow.BowMail;
import org.chorem.bow.BowUser;
import org.nuiton.util.StringUtil;
@@ -34,8 +35,6 @@
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Search;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Genere un nouveau mot de passe pour l'utilisateur et lui envoie par mail
* TODO poussin 20110211 il faudrait ajouter une securite pour eviter que
@@ -64,73 +63,60 @@
this.email = email;
}
-// protected boolean passwordExists(String password) {
-// WikittyProxy proxy = getBowProxy();
-// Criteria criteria = Search.query().eq(User.FQ_FIELD_USER_PASSWORD, password).criteria();
-// List<User> users = proxy.findAllByCriteria(User.class, criteria).getAll();
-// if (users != null && users.size() > 0) {
-// return true;
-// }
-// return false;
-// }
-
/**
* Generates a new password and sends it to the user
*/
+ @Override
public String execute() {
String result = INPUT;
try {
- if (email != null) {
+ if (StringUtils.isNotBlank(email)) {
email = email.trim();
- if (!email.isEmpty()) {
- WikittyProxy proxy = getBowProxy();
- Criteria criteria = Search.query()
- .eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria();
- BowUser user = proxy.findByCriteria(BowUser.class, criteria);
+ WikittyProxy proxy = getBowProxy();
+ Criteria criteria = Search.query()
+ .eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria();
+ BowUser user = proxy.findByCriteria(BowUser.class, criteria);
- if (user != null) { //If the email address exists
- String password = "";
- String md5 = "";
+ if (user != null) { //If the email address exists
+ String password = "";
+ String md5 = "";
- password = RandomStringUtils.randomAlphanumeric(20);
- md5 = StringUtil.encodeMD5(password);
- try {
- String mailContent;
+ password = RandomStringUtils.randomAlphanumeric(20);
+ md5 = StringUtil.encodeMD5(password);
+ try {
+ String mailContent;
- mailContent = getText(n_("bow.register.mailHi")) +
- ",\n\n" + getText(n_("bow.register.mailPwd")) + ": " +
- password + "\n\n" + getText(n_("bow.register.mailEmail")) +
- ": " + email + "\n\n";
- BowMail.sendMail(email,
- getText(n_("bow.register.mailSubject")),
- mailContent);
+ mailContent = _("bow.register.mailHi") +
+ ",\n\n" + _("bow.register.mailPwd") + ": " +
+ password + "\n\n" + _("bow.register.mailEmail") +
+ ": " + email + "\n\n";
+ BowMail.sendMail(email,
+ _("bow.register.mailSubject"),
+ mailContent);
- //The password is changed only if the mail has been sent
- user.setPassword(md5);
- proxy.store(user);
- } catch (AddressException e) {
- //If the email address is invalid
- String message = getText("bow.mail.badFormat");
-
- addActionError(n_(message));
- log.error(message + " (email:" + email + ")", e);
- } catch (MessagingException e) {
- String message = getText("bow.mail.sendError");
-
- addActionError(n_(message));
- log.error(message + "(" + e.getMessage() + ")", e);
- }
- result = SUCCESS;
- } else { //If the email is not associated with an account
- addFieldError("email",
- getText(n_("bow.forgotPassword.emailDoesntExist")));
+ //The password is changed only if the mail has been sent
+ user.setPassword(md5);
+ proxy.store(user);
+ } catch (AddressException eee) {
+ //If the email address is invalid
+ addActionError(_("bow.mail.badFormat"));
+ log.error(String.format("Can't send message email to '%s'",
+ email), eee);
+ } catch (MessagingException eee) {
+ addActionError("bow.mail.sendError");
+ log.error(String.format("Can't send message email to '%s'",
+ email), eee);
}
+ result = SUCCESS;
+ } else { //If the email is not associated with an account
+ addFieldError("email",
+ _("bow.forgotPassword.emailDoesntExist"));
}
}
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return result;
}
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/GenerateTokenAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/GenerateTokenAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/GenerateTokenAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -27,8 +27,6 @@
import org.chorem.bow.BowUtils;
import org.nuiton.wikitty.WikittyProxy;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Force la regeneration de token permanent et temporaire
*
@@ -41,6 +39,7 @@
/**
* Generates a new permanent and temporary token
*/
+ @Override
public String execute() {
try {
BowUser user = getBowSession().getUser();
@@ -52,10 +51,10 @@
String temporaryToken = BowUtils.generateToken();
getBowSession().setTemporaryToken(temporaryToken);
- addActionMessage(getText(n_("bow.token.generate.successful")));
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ addActionMessage(_("bow.token.generate.successful"));
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/HomeAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -30,20 +30,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.struts2.interceptor.ServletRequestAware;
-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_;
-
/**
* Prepare l'affichage de la page d'accueil
*
@@ -120,7 +110,7 @@
BowSession s = getBowSession();
searchResult = new BowSearchResult(s, searchLine, fullTextLine, order);
} catch (Exception eee) {
- addActionError(getText(n_("bow.error.internal")));
+ addActionError(_("bow.error.internal"));
log.error(eee.getMessage(), eee);
}
timeLog.log(start, "execute");
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -30,7 +30,6 @@
import java.util.Date;
import java.util.List;
-import org.apache.struts2.interceptor.ServletRequestAware;
import org.chorem.bow.BookmarkUtils;
import org.chorem.bow.BowBookmark;
import org.chorem.bow.BowImportHelper;
@@ -44,15 +43,12 @@
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.entities.Wikitty;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Import un bookmark HTML
*
* @author poussin
*/
-public class ImportBookmarksAction extends PreferencesAction implements
- ServletRequestAware {
+public class ImportBookmarksAction extends PreferencesAction {
private static final long serialVersionUID = -5962680416570797028L;
@@ -154,6 +150,7 @@
}
}
+ @Override
public String execute() {
log.info("Importing boormarks : " + upfile);
@@ -174,33 +171,23 @@
new ArrayList<String>());
proxy.store(bookmarks);
-// 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")));
+ addActionMessage(_("bow.bookmark.import.successful"));
} 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);
-// }
+ log.error(String.format("Can't parse imported file '%s'",
+ getUpfileFileName()), eee);
+ addActionError(_("bow.bookmark.badFileFormat"));
} catch (IOException eee) {
- log.error(String.format("Can't read imported file '%s'", getUpfileFileName()), eee);
- addActionError(getText(n_("bow.error.internal")));
+ log.error(String.format("Can't read imported file '%s'",
+ getUpfileFileName()), eee);
+ addActionError(_("bow.error.internal"));
return ERROR;
}
} else {
- addActionError(getText(n_("bow.bookmark.badFileFormat")));
+ addActionError(_("bow.bookmark.badFileFormat"));
return ERROR;
}
} catch (Exception eee) {
- addActionError(getText(n_("bow.error.internal")));
+ addActionError(_("bow.error.internal"));
log.error(eee.getMessage(), eee);
return ERROR;
}
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/LocaleAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/LocaleAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/LocaleAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -26,7 +26,8 @@
public class LocaleAction extends BowBaseAction {
private static final long serialVersionUID = 9124549040894568467L;
+ @Override
public String execute() {
- return SUCCESS;
+ 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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/LoginAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -24,9 +24,8 @@
package org.chorem.bow.action;
-import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.interceptor.ServletRequestAware;
import org.chorem.bow.BowConfig;
import org.chorem.bow.BowUser;
import org.chorem.bow.BowUserImpl;
@@ -35,18 +34,17 @@
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Search;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* authentifie l'utilisateur et place son objet User dans la bow session
*
* @author poussin
*/
-public class LoginAction extends BowBaseAction implements ServletRequestAware {
+public class LoginAction extends BowBaseAction {
+
private static final long serialVersionUID = 6891064800288772246L;
+
protected String email;
protected String password;
- protected HttpServletRequest servletRequest;
public String getEmail() {
return email;
@@ -64,44 +62,37 @@
this.password = password;
}
- @Override
- public void setServletRequest(HttpServletRequest request) {
- this.servletRequest = request;
- }
-
/**
* Check password in solr index, if fail try to check password admin in config file
- *
- * @param email
- * @param password
+ *
+ * @param email non null et non vide email
+ * @param password non null et non vide email
* @return
*/
protected BowUser checkLogin(String email, String password) {
BowUser result = null;
- if (email != null && password != null) {
- if (!email.isEmpty() && !password.equals(StringUtil.encodeMD5(""))) {
- WikittyProxy proxy = getBowProxy();
- Criteria criteria = Search.query().eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).
- eq(BowUser.FQ_FIELD_WIKITTYUSER_PASSWORD, password).criteria();
- result = proxy.findByCriteria(BowUser.class, criteria);
- if (result == null) {
- // failback: try to authenticate admin with config info
- String configPassword = BowConfig.getAdminPassword(email);
- log.info("failback password: " + password + " configPassword: " + configPassword);
- if (password.equals(configPassword)) {
- // admin authenticate with config, this is possible when
- // solr index is corrupted or missed. Admin must go to admin
- // page en recreate index
- result = new BowUserImpl();
- result.setLogin(email);
- result.setPassword(configPassword);
- addActionMessage(getText(n_("bow.login.admin.failback")));
- log.warn(getText(n_("bow.login.admin.failback")));
- } else {
- addActionError(getText(n_("bow.login.authenticationFailure")));
- }
- }
+ WikittyProxy proxy = getBowProxy();
+ Criteria criteria = Search.query().eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).
+ eq(BowUser.FQ_FIELD_WIKITTYUSER_PASSWORD, password).criteria();
+ result = proxy.findByCriteria(BowUser.class, criteria);
+
+ if (result == null) {
+ // failback: try to authenticate admin with config info
+ String configPassword = BowConfig.getAdminPassword(email);
+ log.info(String.format("failback password: '%s' configPassword: '%s'",
+ password, configPassword));
+ if (password.equals(configPassword)) {
+ // admin authenticate with config, this is possible when
+ // solr index is corrupted or missed. Admin must go to admin
+ // page en recreate index
+ result = new BowUserImpl();
+ result.setLogin(email);
+ result.setPassword(configPassword);
+ addActionMessage(_("bow.login.admin.failback"));
+ log.warn(_("bow.login.admin.failback"));
+ } else {
+ addActionError(_("bow.login.authenticationFailure"));
}
}
return result;
@@ -110,29 +101,28 @@
/**
* Authenticates the user if his email and password are valid
*/
+ @Override
public String execute() {
String result = INPUT;
try {
- if (email != null) {
+ if (StringUtils.isNotBlank(email)) {
email = email.trim();
- if (password != null) {
+ if (StringUtils.isNotEmpty(password)) {
String md5 = StringUtil.encodeMD5(password);
BowUser user;
user = checkLogin(email, md5);
if (user != null) {
getBowSession().setUser(user);
-// BowPreference pref = getBowSession().getPreference();
-// BowInit.initHomePage(servletRequest, pref);
result = SUCCESS;
}
}
}
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return result;
}
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/LogoutAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/LogoutAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/LogoutAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -33,6 +33,7 @@
public class LogoutAction extends BowBaseAction {
private static final long serialVersionUID = 4806944250461551896L;
+ @Override
public String execute() {
BowSession.invalidate(session);
return SUCCESS;
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/MigrateDataAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -33,8 +33,6 @@
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
*
@@ -61,6 +59,7 @@
this.versionTo = versionTo;
}
+ @Override
public String execute() {
try {
if (StringUtils.isBlank(versionFrom) || StringUtils.isBlank(versionTo)) {
@@ -73,11 +72,11 @@
if (VersionUtil.equals(versionFrom, "0.4")
&& VersionUtil.equals(versionTo, "0.5")) {
BowMigration04To05.migrate(proxy);
- addActionMessage(getText(n_("bow.admin.dataMigration.success")));
+ addActionMessage(_("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")));
+ addActionMessage(_("bow.admin.dataMigration.success"));
} else {
addActionMessage(String.format(
"No migration found for %s to %s",
@@ -85,9 +84,9 @@
}
}
}
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchResultAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,20 +23,15 @@
*/
package org.chorem.bow.action;
-import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.chorem.bow.BowBookmark;
-import org.chorem.bow.BookmarkActions;
-import org.chorem.bow.BookmarkUtils;
import org.chorem.bow.BowConfig;
import org.chorem.bow.BowUtils;
import org.chorem.bow.BowPreference;
import org.nuiton.wikitty.search.Criteria;
-import org.nuiton.wikitty.search.PagedResult;
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Search;
@@ -46,13 +41,11 @@
*
* @author poussin
*/
-public class OpenSearchResultAction extends BowBaseAction implements ServletRequestAware,
-ServletResponseAware {
+public class OpenSearchResultAction extends BowBaseAction implements ServletResponseAware {
private static final long serialVersionUID = -1691325797986483856L;
protected String token;
protected String redirectTo;
- protected HttpServletRequest request;
protected HttpServletResponse response;
/**
@@ -77,20 +70,16 @@
}
@Override
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
- }
-
- @Override
public void setServletResponse(HttpServletResponse response) {
- this.response = response;
+ this.response = response;
}
+ @Override
public String execute() {
BowPreference user = getBowSession().getPreference();
if (searchLine != null && searchLine.matches("^http://[^ ]*")) {
- redirectTo = BowUtils.redirectTo(searchLine, null);
+ redirectTo = searchLine;
} else if (searchLine != null
&& (searchLine.startsWith(":") || searchLine.startsWith("t:"))) {
@@ -98,28 +87,10 @@
int index = searchLine.indexOf(":");
searchLine = searchLine.substring(index + 1); //Suppresses first ":"
- WikittyProxy proxy = getBowProxy();
- 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);
- request.setAttribute("bookmarkActions", bookmarkActions);
- request.setAttribute("token", token);
redirectTo = BowUtils.redirectTo(searchLine, null);
} else if (searchLine != null && searchLine.startsWith("f:")) {
// Fulltext search in bow
String fullText = searchLine.substring(2);
- WikittyProxy proxy = getBowProxy();
- Criteria criteria;
- 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);
- request.setAttribute("token", token);
redirectTo = BowUtils.redirectTo(null, fullText);
} else if (searchLine != null && searchLine.startsWith("a:")) {
// Redirects to the requested alias
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/OpenSearchSuggestionAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,13 +23,10 @@
*/
package org.chorem.bow.action;
+import com.opensymphony.xwork2.ActionContext;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.interceptor.ServletRequestAware;
import org.chorem.bow.BowBookmark;
import org.chorem.bow.OpenSearchActions;
import org.chorem.bow.BowUser;
@@ -46,21 +43,27 @@
*
* @author poussin
*/
-public class OpenSearchSuggestionAction extends BowBaseAction implements ServletRequestAware {
+public class OpenSearchSuggestionAction extends BowBaseAction {
+
private static final long serialVersionUID = 3973618635494129146L;
- protected HttpServletRequest request;
+ static public OpenSearchSuggestionAction getAction() {
+ Object action = ActionContext.getContext().get(CONTEXT_ACTION_KEY);
+ return (OpenSearchSuggestionAction) action;
+ }
- @Override
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
+ protected OpenSearchActions openSearchActions;
+
+ public OpenSearchActions getOpenSearchActions() {
+ return openSearchActions;
}
+ @Override
public String execute() {
BowUser user = getBowSession().getUser();
if (searchLine != null) {
- OpenSearchActions openSearchActions = new OpenSearchActions();
+ openSearchActions = new OpenSearchActions();
WikittyProxy proxy = getBowProxy();
List<String> searchLineList = BowUtils.getWords(searchLine);
@@ -90,7 +93,6 @@
openSearchActions.setBookmarkList(bookList);
openSearchActions.setSuggestionList(topics);
openSearchActions.findSuggestions(searchLineList);
- request.setAttribute("openSearchAction", openSearchActions);
}
return SUCCESS;
}
Deleted: 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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/OrderAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -1,119 +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.BowBookmark;
-import org.chorem.bow.BookmarkActions;
-import org.chorem.bow.BookmarkUtils;
-import org.chorem.bow.BowPreference;
-import org.nuiton.wikitty.search.Criteria;
-import org.nuiton.wikitty.search.PagedResult;
-import org.nuiton.wikitty.WikittyProxy;
-
-import static org.nuiton.i18n.I18n.n_;
-
-/**
- * Permet de modifie l'ordre de tri des bookmarks
- * TODO poussin 20110211 cette action n'est pas vraiment pertinente et devrait
- * etre des options de l'action de recherche
- *
- * @author poussin
- */
-public class OrderAction extends BowBaseAction implements ServletRequestAware {
- private static final long serialVersionUID = 203690999710176818L;
-
- protected String order;
- protected HttpServletRequest request;
-
- public String getOrder() {
- return order;
- }
-
- public void setOrder(String order) {
- this.order = order;
- }
-
- @Override
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
- }
-
- /**
- * Orders the bookmarks according to a criteria
- */
- public String execute() {
- try {
- BowPreference user = getBowSession().getPreference();
- Criteria baseCriteria = BookmarkUtils.getBookmarkListCriteriaByUser(
- user, searchLine, fullTextLine, order);
-
- if (order != null && baseCriteria != null && !order.isEmpty()) {
- WikittyProxy proxy = getBowProxy();
- PagedResult<BowBookmark> result = null;
-
- 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 (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 (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 (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 (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 (order.equals("descClick")) {
- Criteria criteria = baseCriteria.addSortDescending(
- BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK);
- result = proxy.findAllByCriteria(BowBookmark.class, criteria);
- addActionMessage(getText(n_("bow.search.order.descClick")));
- }
- BookmarkActions bookmarkActions =
- BookmarkUtils.createBookmarkActions(request, result, searchLine);
- request.setAttribute("bookmarkActions", bookmarkActions);
- }
- } 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/PreferencesAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -29,36 +29,35 @@
import org.chorem.bow.BowProxy;
import org.chorem.bow.BowUser;
import com.opensymphony.xwork2.ActionContext;
+import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeSet;
-import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.DateUtils;
+import org.chorem.bow.BowSession;
-import org.apache.struts2.interceptor.ServletRequestAware;
import org.nuiton.util.StringUtil;
import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyUtil;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyLabel;
import org.nuiton.wikitty.search.Criteria;
import org.nuiton.wikitty.search.FacetTopic;
-import org.nuiton.wikitty.search.FacetTopicNameComparator;
import org.nuiton.wikitty.search.PagedResult;
import org.nuiton.wikitty.search.Search;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Change les preferences de l'utilisateur (couleur, password, email, ...)
*
* @author poussin
*/
-public class PreferencesAction extends BowBaseAction implements ServletRequestAware {
+public class PreferencesAction extends BowBaseAction {
private static final long serialVersionUID = -58341106356599721L;
static public PreferencesAction getAction() {
@@ -77,9 +76,8 @@
protected String confirmNewPassword;
protected String update;
protected Map<String, Integer> bookmarksImportDate;
- protected HttpServletRequest request;
- protected Set<FacetTopic> labels;
+ protected List<FacetTopic> labels;
protected String[] selectedLabels;
protected String rename;
protected String delete;
@@ -263,7 +261,7 @@
this.bookmarksImportDate = bookmarksImportDate;
}
- public Set<FacetTopic> getLabels() {
+ public List<FacetTopic> getLabels() {
return labels;
}
@@ -274,18 +272,31 @@
public void setSelectedLabels(String[] selectedLabels) {
this.selectedLabels = selectedLabels;
}
-
- @Override
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
+
+ /**
+ * Date est une date mais au format String qui vient de Solr
+ * Elle est de la forme '2011-08-18T00:25:16.028Z'
+ * qui n'est pas presentable a l'utilisateur
+ * On la remet sous une vrai forme date
+ */
+ public Date stringToDate(String date) {
+ try {
+ Date result = WikittyUtil.parseDate(date);
+ return result;
+
+// String result = date.replaceAll("[^0-9:-]+", " ").trim();
+// result = result.substring(0, date.lastIndexOf(' '));
+ } catch (ParseException eee) {
+ return new Date(0);
+ }
}
protected BowPreference changePreference(BowPreference preference) {
preference.setColors(colors);
- if ((tagsNb != null && !tagsNb.isEmpty())) {
+ if (StringUtils.isNotBlank(tagsNb)) {
preference.setTags(Integer.valueOf(tagsNb));
}
- if (bookmarksHomePage != null && !bookmarksHomePage.isEmpty()) {
+ if (StringUtils.isNotBlank(bookmarksHomePage)) {
preference.setBookmarks(Integer.valueOf(bookmarksHomePage));
}
preference.setSearchEngineUrlSuggestions(searchEngineUrlSuggestions);
@@ -295,19 +306,20 @@
}
protected BowUser changeUser(BowUser newUser) {
- if (email != null && !email.isEmpty()) {
+ if (StringUtils.isNotBlank(email)) {
+ email = email.trim();
newUser.setLogin(email);
}
- if (newPassword != null && confirmNewPassword != null && currentPassword != null) {
- if (!newPassword.isEmpty() && !confirmNewPassword.isEmpty() && !currentPassword.isEmpty()) {
- if (newPassword.equals(confirmNewPassword)) {
- currentPassword = StringUtil.encodeMD5(currentPassword);
- if (currentPassword.equals(newUser.getPassword())) {
- newUser.setPassword(StringUtil.encodeMD5(newPassword));
- } else {
- addFieldError("currentPassword", getText(n_("bow.preferences.badCurrentPassword")));
- return null;
- }
+ if (StringUtils.isNotBlank(newPassword)
+ && StringUtils.isNotBlank(confirmNewPassword)
+ && StringUtils.isNotBlank(currentPassword)) {
+ if (newPassword.equals(confirmNewPassword)) {
+ currentPassword = StringUtil.encodeMD5(currentPassword);
+ if (currentPassword.equals(newUser.getPassword())) {
+ newUser.setPassword(StringUtil.encodeMD5(newPassword));
+ } else {
+ addFieldError("currentPassword", _("bow.preferences.badCurrentPassword"));
+ return null;
}
}
}
@@ -325,14 +337,14 @@
Criteria c = Search.query()
.exteq(BowBookmark.EXT_WIKITTYLABEL)
.eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId)
- .criteria().setEndIndex(0)
- .setFacetMinCount(0)
+ .criteria().setEndIndex(0) // on ne veut aucun resultat, c'est la facet dont on a besoin
+ .setFacetMinCount(1) // on demande meme les labels avec 1 seul item
+ .setFacetLimit(-1) // on demande tous les labels
.addFacetField(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS);
PagedResult<Wikitty> result = proxy.findAllByCriteria(c);
- List<FacetTopic> topics = result.getTopic(
- BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS);
- labels = new TreeSet<FacetTopic>(new FacetTopicNameComparator(true));
- labels.addAll(topics);
+ // lorsqu'on demande tout (facetLimit(-1)), les topics sont trie
+ // alphabetiquement pas besoin de les retrier
+ labels = result.getTopic(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS);
}
/**
@@ -381,7 +393,7 @@
}
proxy.store(toStore);
} catch (Exception eee) {
- addActionError(getText(n_("bow.error.internal")));
+ addActionError(_("bow.error.internal"));
log.error(eee.getMessage(), eee);
}
return result;
@@ -391,17 +403,19 @@
/**
* Action executer lorsque l'utilisateur demande la page
*/
+ @Override
public String execute() {
String result = SUCCESS;
try {
- BowProxy proxy = getBowSession().getProxy();
+ BowSession session = getBowSession();
+ BowProxy proxy = session.getProxy();
// BowPreference extends BowUser, donc on l'utilise pour tout
BowPreference preference = getBowSession().getPreference();
loadLabels(proxy);
Map<String,Integer> bookmarksByImportDate =
- BookmarkUtils.getBookmarksByImportDate(request, preference);
+ BookmarkUtils.getBookmarksByImportDate(session, preference);
if (log.isDebugEnabled()) {
log.debug("bookmarksByImportDate found : " + (bookmarksByImportDate == null ? "null" : bookmarksByImportDate.size()));
@@ -434,12 +448,12 @@
newUser = proxy.store(newUser);
getBowSession().setUser(newUser);
result = "update";
- addActionMessage(getText(n_("bow.preferences.update.successful")));
+ addActionMessage(_("bow.preferences.update.successful"));
}
} else {
// this email address is already used by someone else
setEmail(preference.getLogin());
- addActionError(getText("bow.preferences.emailAldyExists"));
+ addActionError(_("bow.preferences.emailAldyExists"));
result = ERROR;
}
}
@@ -453,12 +467,9 @@
setSearchEngineUrlSuggestions(preference.getSearchEngineUrlSuggestions());
setSearchEngineUrlResults(preference.getSearchEngineUrlResults());
}
-// // retrieve last reference
-// preference = getBowSession().getPreference();
-// BowInit.initHomePage(request, preference);
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return result;
}
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/ReIndexationAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/ReIndexationAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ReIndexationAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -26,8 +26,6 @@
import org.chorem.bow.BowSession;
import org.nuiton.wikitty.WikittyProxy;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Lance la reindexation solr
*
@@ -37,6 +35,7 @@
private static final long serialVersionUID = 6226574522402739559L;
+ @Override
public String execute() {
try {
BowSession session = getBowSession();
@@ -44,11 +43,11 @@
WikittyProxy proxy = getBowProxy();
proxy.getWikittyService().syncSearchEngine(proxy.getSecurityToken());
- addActionMessage(getText(n_("bow.admin.reIndexationDone")));
+ addActionMessage(_("bow.admin.reIndexationDone"));
}
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return SUCCESS;
}
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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/RegisterAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -25,9 +25,8 @@
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
-import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.interceptor.ServletRequestAware;
import org.chorem.bow.BowMail;
import org.chorem.bow.BowUser;
import org.chorem.bow.BowUserImpl;
@@ -37,19 +36,18 @@
import org.nuiton.wikitty.WikittyProxy;
import org.nuiton.wikitty.search.Search;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Enregistre un nouvel utilisateur
*
* @author poussin
*/
-public class RegisterAction extends BowBaseAction implements ServletRequestAware {
+public class RegisterAction extends BowBaseAction {
+
private static final long serialVersionUID = 2204772861770399542L;
+
protected String email;
protected String password;
protected String repeatPassword;
- protected HttpServletRequest request;
/**
* @return the email
@@ -92,54 +90,48 @@
public void setRepeatPassword(String repeatPassword) {
this.repeatPassword = repeatPassword;
}
-
- @Override
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
- }
-
+
/**
*
- * @param passwordMD5 the user password hashed in md5
+ * @param email non null and non blank email
* @return false if the email address isn't already registered, true
* otherwise
*/
- protected boolean alreadyRegistered(String passwordMD5) {
+ protected boolean alreadyRegistered(String email) {
boolean result = true;
- if (email != null && passwordMD5 != null) {
- if (!email.isEmpty() && !passwordMD5.equals(StringUtil.encodeMD5(""))) {
- WikittyProxy proxy = getBowProxy();
- Criteria criteria = Search.query().eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria(); //Retrieves user by user name (email)
+ WikittyProxy proxy = getBowProxy();
+ //Retrieves user by user name (email)
+ Criteria criteria = Search.query()
+ .eq(BowUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria();
- //If the user doesn't already exist
- if (proxy.findByCriteria(BowUser.class, criteria) == null) {
- result = false;
- } else { //The email address is already used by someone
- addFieldError("email", getText(n_("bow.register.emailAldyUsed")));
- }
- }
- }
- return result;
+ result = proxy.findByCriteria(BowUser.class, criteria) != null;
+ //If the user doesn't already exist
+ if (result) {
+ //The email address is already used by someone
+ addFieldError("email", _("bow.register.emailAldyUsed"));
+ }
+ return result;
}
/**
* Registers the new user and sends an email to confirm registration
*/
+ @Override
public String execute() {
String result = INPUT;
try {
- if (email != null) {
+ if (StringUtils.isNotBlank(email)) {
email = email.trim();
- if (password != null) {
+ if (StringUtils.isNotBlank(password)) {
if (!password.equals(repeatPassword)) {
- addActionError(getText(n_("bow.register.pwdDontMatch")));
+ addActionError(_("bow.register.pwdDontMatch"));
} else {
String md5 = StringUtil.encodeMD5(password);
//If the email address isn't already used
- if (!alreadyRegistered(md5)) {
+ if (!alreadyRegistered(email)) {
WikittyProxy proxy = getBowProxy();
BowUserImpl newUser = new BowUserImpl();
newUser.setPassword(md5);
@@ -150,28 +142,26 @@
//If there was an error when storing the user
if (login == null) {
- addFieldError("email", getText(n_("bow.register.invalidLogin")));
+ addFieldError("email", _("bow.register.invalidLogin"));
} else {
getBowSession().setUser(login);
-// BowPreference pref = getBowSession().getPreference();
-// BowInit.initHomePage(request, pref);
-
try {
String mailContent;
- mailContent = getText(n_("bow.register.mailHi")) + ",\n\n" + getText(n_("bow.register.mailPwd")) + ": " + password + "\n\n" + getText(n_("bow.register.mailEmail")) + ": " + email + "\n\n";
- BowMail.sendMail(email, getText(n_("bow.register.mailSubject")), mailContent);
- } catch (AddressException e) {
+ mailContent =
+ _("bow.register.mailHi") + ",\n\n" +
+ _("bow.register.mailPwd") + ": " + password + "\n\n" +
+ _("bow.register.mailEmail") + ": " + email + "\n\n";
+ BowMail.sendMail(email, _("bow.register.mailSubject"), mailContent);
+ } catch (AddressException eee) {
//If the email address is invalid
- String message = getText("bow.mail.badFormat");
-
- addActionError(n_(message));
- log.error(message + " (email:" + email + ")", e);
- } catch (MessagingException e) {
- String message = getText("bow.mail.sendError");
-
- addActionError(n_(message));
- log.error(message + "(" + e.getMessage() + ")", e);
+ addActionError(_("bow.mail.badFormat"));
+ log.error(String.format("Can't send message email to '%s'",
+ email), eee);
+ } catch (MessagingException eee) {
+ addActionError("bow.mail.sendError");
+ log.error(String.format("Can't send message email to '%s'",
+ email), eee);
}
result = SUCCESS;
}
@@ -179,9 +169,9 @@
}
}
}
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error(e.getMessage(), e);
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error(eee.getMessage(), eee);
}
return result;
}
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/RemoveBookmarkAction.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/action/RemoveBookmarkAction.java 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/action/RemoveBookmarkAction.java 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,22 +23,21 @@
*/
package org.chorem.bow.action;
+import org.apache.commons.lang.StringUtils;
import org.chorem.bow.BowBookmark;
import org.chorem.bow.BowUtils;
import org.nuiton.wikitty.WikittyProxy;
-import static org.nuiton.i18n.I18n.n_;
-
/**
* Supprime un bookmark
*
* @author poussin
*/
public class RemoveBookmarkAction extends BowBaseAction {
+
private static final long serialVersionUID = 820566716695285561L;
+
protected String bookmarkId;
- protected String searchLine;
- protected String fullTextLine;
protected String redirectTo;
/**
@@ -56,34 +55,6 @@
}
/**
- * @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() {
@@ -93,19 +64,16 @@
/**
* Removes a bookmark
*/
+ @Override
public String execute() {
- if (bookmarkId != null && !bookmarkId.isEmpty()) {
+ if (StringUtils.isNotEmpty(bookmarkId)) {
try {
WikittyProxy proxy = getBowProxy();
- BowBookmark bookmark = proxy.restore(BowBookmark.class, bookmarkId);
-
- if (bookmark != null) {
- proxy.delete(bookmarkId);
- addActionMessage(getText(n_("bow.bookmark.remove.successful")));
- }
- } catch (Exception e) {
- addActionError(getText(n_("bow.error.internal")));
- log.error("Can't do action", e);
+ proxy.delete(bookmarkId);
+ addActionMessage(_("bow.bookmark.remove.successful"));
+ } catch (Exception eee) {
+ addActionError(_("bow.error.internal"));
+ log.error("Can't do action", eee);
}
}
redirectTo = BowUtils.redirectTo(searchLine, fullTextLine);
Modified: trunk/bow-ui/src/main/resources/bow.properties
===================================================================
--- trunk/bow-ui/src/main/resources/bow.properties 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/resources/bow.properties 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,9 +23,7 @@
###
application.version=${project.version}
bow.url=http://localhost:8080/
-alias.url=http://localhost:8080/
-servlet.bow=bow
-servlet.alias=alias
+alias.url=http://localhost:8080/alias
bow.smtpServer=smtp
bow.addressFrom=bow(a)chorem.org
bow.admins=poussin(a)codelutin.com
Modified: trunk/bow-ui/src/main/resources/org/chorem/bow/action/ForgotPasswordAction-validation.xml
===================================================================
--- trunk/bow-ui/src/main/resources/org/chorem/bow/action/ForgotPasswordAction-validation.xml 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/resources/org/chorem/bow/action/ForgotPasswordAction-validation.xml 2011-08-18 02:37:38 UTC (rev 306)
@@ -22,15 +22,16 @@
#L%
-->
<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+ "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="email">
- <field-validator type="requiredstring">
- <message key="bow.login.email.required" />
- </field-validator>
- <field-validator type="email">
+ <field-validator type="requiredstring">
+ <message key="bow.login.email.required" />
+ </field-validator>
+ <field-validator type="regex">
+ <param name="expression">^[a-z0-9!#$%&'*+/=?^_`{|}~-]+((\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)?)+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$</param>
<message key="bow.login.email.wrongformat" />
</field-validator>
</field>
Modified: trunk/bow-ui/src/main/resources/org/chorem/bow/action/LoginAction-validation.xml
===================================================================
--- trunk/bow-ui/src/main/resources/org/chorem/bow/action/LoginAction-validation.xml 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/resources/org/chorem/bow/action/LoginAction-validation.xml 2011-08-18 02:37:38 UTC (rev 306)
@@ -22,15 +22,16 @@
#L%
-->
<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+ "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="email">
- <field-validator type="requiredstring">
- <message key="bow.login.email.required" />
- </field-validator>
- <field-validator type="email">
+ <field-validator type="requiredstring">
+ <message key="bow.login.email.required" />
+ </field-validator>
+ <field-validator type="regex">
+ <param name="expression">^[a-z0-9!#$%&'*+/=?^_`{|}~-]+((\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)?)+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$</param>
<message key="bow.login.email.wrongformat" />
</field-validator>
</field>
Modified: trunk/bow-ui/src/main/resources/org/chorem/bow/action/RegisterAction-validation.xml
===================================================================
--- trunk/bow-ui/src/main/resources/org/chorem/bow/action/RegisterAction-validation.xml 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/resources/org/chorem/bow/action/RegisterAction-validation.xml 2011-08-18 02:37:38 UTC (rev 306)
@@ -22,15 +22,16 @@
#L%
-->
<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+ "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="email">
- <field-validator type="requiredstring">
- <message key="bow.login.email.required" />
- </field-validator>
- <field-validator type="email">
+ <field-validator type="requiredstring">
+ <message key="bow.login.email.required" />
+ </field-validator>
+ <field-validator type="regex">
+ <param name="expression">^[a-z0-9!#$%&'*+/=?^_`{|}~-]+((\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)?)+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$</param>
<message key="bow.login.email.wrongformat" />
</field-validator>
</field>
@@ -40,13 +41,13 @@
</field-validator>
</field>
<field name="repeatPassword">
- <field-validator type="requiredstring">
- <message key="bow.login.repeatPassword.required" />
- </field-validator>
+ <field-validator type="requiredstring">
+ <message key="bow.login.repeatPassword.required" />
+ </field-validator>
</field>
<validator type="expression">
- <param name="expression">password.equals(repeatPassword)</param>
- <message key="bow.register.pwdDontMatch" />
+ <param name="expression">password.equals(repeatPassword)</param>
+ <message key="bow.register.pwdDontMatch" />
</validator>
</validators>
Modified: trunk/bow-ui/src/main/resources/struts.xml
===================================================================
--- trunk/bow-ui/src/main/resources/struts.xml 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/resources/struts.xml 2011-08-18 02:37:38 UTC (rev 306)
@@ -143,11 +143,21 @@
<action name="addUrl" class="org.chorem.bow.action.AddUrlAction">
<result type="redirect">${redirectTo}</result>
</action>
+ <action name="editBookmark" class="org.chorem.bow.action.EditBookmarkAction">
+ <result>/jsp/editBookmark.jsp</result>
+ </action>
</package>
+ <!-- Fragment: en prevision de faire un peu d'ajax si l'utilisateur le souhaite -->
+ <package name="fragment" namespace="/fragment" extends="restrictedArea">
+ <action name="editBookmark" class="org.chorem.bow.action.EditBookmarkAction">
+ <result>/jsp/editBookmark.jsp</result>
+ </action>
+ </package>
+
<package name="search" extends="restrictedArea">
- <action name="order" class="org.chorem.bow.action.OrderAction">
- <result>/jsp/search.jsp</result>
+ <action name="home" class="org.chorem.bow.action.HomeAction">
+ <result>/jsp/home.jsp</result>
</action>
<action name="openSearchResult" class="org.chorem.bow.action.OpenSearchResultAction">
<result type="redirect">${redirectTo}</result>
@@ -158,22 +168,18 @@
<action name="deleteSearchResults" class="org.chorem.bow.action.DeleteSearchResultsAction">
<result type="redirectAction">home</result>
</action>
+ <action name="*Xml">
+ <result>/jsp/{1}Xml.jsp</result>
+ </action>
</package>
- <package name="misc" extends="restrictedArea">
- <action name="home" class="org.chorem.bow.action.HomeAction">
- <result>/jsp/home.jsp</result>
- <result name="input" type="redirectAction">home</result>
- </action>
+ <package name="preference" extends="restrictedArea">
<action name="locale" class="org.chorem.bow.action.LocaleAction">
<result type="redirect">/jsp/login.jsp</result>
</action>
<action name="regenPermToken" class="org.chorem.bow.action.GenerateTokenAction">
<result type="redirectAction">preferences</result>
</action>
- <action name="*Xml">
- <result>/jsp/{1}Xml.jsp</result>
- </action>
<action name="adminlabels" class="org.chorem.bow.action.PreferencesAction" method="adminlabels">
<result type="redirectAction">preferences</result>
@@ -184,6 +190,9 @@
<result name="error">/jsp/preferences.jsp</result>
<result>/jsp/preferences.jsp</result>
</action>
+ </package>
+
+ <package name="admin" extends="restrictedArea">
<action name="admin">
<result name="error">/jsp/login.jsp</result>
<result>/jsp/admin.jsp</result>
@@ -194,8 +203,5 @@
<action name="migrateData" class="org.chorem.bow.action.MigrateDataAction">
<result>/jsp/admin.jsp</result>
</action>
- <action name="editBookmark" class="org.chorem.bow.action.EditBookmarkAction">
- <result>/jsp/editBookmark.jsp</result>
- </action>
</package>
</struts>
Modified: trunk/bow-ui/src/main/webapp/WEB-INF/decorators/main.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/WEB-INF/decorators/main.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/WEB-INF/decorators/main.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -29,6 +29,7 @@
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
<%@taglib prefix="s" uri="/struts-tags" %>
+<%@taglib prefix="sj" uri="/struts-jquery-tags" %>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
@@ -47,15 +48,15 @@
<link rel="search" type="application/opensearchdescription+xml" title="Bow (temporary)" href="${temporaryXml}" />
<link rel="search" type="application/opensearchdescription+xml" title="Bow (permanent)" href="${permanentXml}" />
</s:if>
+
+ <sj:head/>
+
<s:url var="jqueryUiCSS" value="/css/jquery-ui-1.8.11.custom.bow.css" />
<s:url var="globalCSS" value="/css/global.css" />
<link href="${jqueryUiCSS}" rel="stylesheet" type="text/css" media="all" />
<link href="${globalCSS}" rel="stylesheet" type="text/css" media="all" />
- <s:url var="jqueryJS" value="/js/jquery-1.5.2.min.js" />
- <s:url var="jqueryUiJS" value="/js/jquery-ui-1.8.11.custom.min.js" />
+
<s:url var="bookmarkJS" value="/js/bookmark.js" />
- <script type="text/javascript" src="${jqueryJS}"></script>
- <script type="text/javascript" src="${jqueryUiJS}"></script>
<script type="text/javascript" src="${bookmarkJS}"></script>
</head>
<body id="page-home">
@@ -63,7 +64,6 @@
<div id="page">
<%@include file="/jsp/inc/header.jsp" %>
<div id="main">
- <%@include file="/jsp/inc/errorFrame.jsp" %>
<decorator:body />
</div>
<s:if test="%{#session.BowSession.user != null}">
Modified: trunk/bow-ui/src/main/webapp/WEB-INF/decorators.xml
===================================================================
--- trunk/bow-ui/src/main/webapp/WEB-INF/decorators.xml 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/WEB-INF/decorators.xml 2011-08-18 02:37:38 UTC (rev 306)
@@ -27,6 +27,7 @@
<decorators defaultdir="/WEB-INF/decorators">
<!-- Any urls that are excluded will never be decorated by Sitemesh -->
<excludes>
+ <pattern>/fragment/*</pattern>
<pattern>/nodecorate/*</pattern>
<pattern>/styles/*</pattern>
<pattern>/scripts/*</pattern>
Modified: trunk/bow-ui/src/main/webapp/css/bookmark.css
===================================================================
--- trunk/bow-ui/src/main/webapp/css/bookmark.css 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/css/bookmark.css 2011-08-18 02:37:38 UTC (rev 306)
@@ -372,6 +372,8 @@
.formFrame{
+ float: left; /* pour que le contenu en float ne deborde pas du cadre */
+ width: 90%;
min-width:400px;
/* min-height: 315px; */
position:relative;
@@ -514,3 +516,17 @@
font-size:11px;
font-weight:bold;
}
+
+#labelsForm .list input{
+ float: left;
+ clear:left;
+}
+
+#labelsForm .list label {
+ float: left;
+}
+
+#labelsForm .action {
+ float: left;
+ clear:left;
+}
Modified: trunk/bow-ui/src/main/webapp/js/bookmark.js
===================================================================
--- trunk/bow-ui/src/main/webapp/js/bookmark.js 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/js/bookmark.js 2011-08-18 02:37:38 UTC (rev 306)
@@ -21,22 +21,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
-function modify(name, alias, tags, link, action, id) {
- var form = $("#bookmarkForm")[0];
- form.link.value = link;
- form.name.value = name;
- form.tags.value = tags;
- form.alias.value = alias;
- form.action = action;
-
- var tab = document.getElementsByName(id);
- for (var count = 0; count < tab.length; count++) {
- tab[count].style.display = 'inline';
- }
- return false;
-
-}
-
function deleteBookmarkConfirmation(goTo, bookmarkName) {
deleteConfirmation(goTo, bookmarkName, 0, undefined);
}
@@ -49,11 +33,11 @@
// TODO sletellier 20110516 : use i18n to translate this !
var confMsg = "Do you really want to delete ";
-
+
if (bookmarksNb > 1) {
confMsg += "these " + bookmarksNb + " bookmarks";
} else {
- confMsg += "bookmark '" + bookmarkName + "'";
+ confMsg += "bookmark:\n'" + bookmarkName + "'";
}
if (importDate !== undefined)
Deleted: trunk/bow-ui/src/main/webapp/js/jquery-1.5.2.min.js
===================================================================
--- trunk/bow-ui/src/main/webapp/js/jquery-1.5.2.min.js 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/js/jquery-1.5.2.min.js 2011-08-18 02:37:38 UTC (rev 306)
@@ -1,39 +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%
- */
-/*!
- * jQuery JavaScript Library v1.5.2
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu Mar 31 15:28:23 2011 -0400
- */
-(function(a,b){function ci(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cf(a){if(!b_[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";b_[a]=c}return b_[a]}function ce(a,b){var c={};d.each(cd.concat.apply([],cd.slice(0,b)),function(){c[this]=a});return c}function b$(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bZ(){try{return new a.XMLHttpRequest}catch(b){}}function bY(){d(a).unload(function(){for(var a in bW)bW[a](0,1)})}function bS(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==="string"&&(f[h.toLowerCase()]=a.converters[h]);l=k,k=e[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=f[m]||f["* "+k];if(!n){p=b;for(o in f){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=f[j[1]+" "+k];if(p){o=f[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&d.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bR(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bQ(a,b,c,e){if(d.isArray(b)&&b.length)d.each(b,function(b,f){c||bs.test(a)?e(a,f):bQ(a+"["+(typeof f==="object"||d.isArray(f)?b:"")+"]",f,c,e)});else if(c||b==null||typeof b!=="object")e(a,b);else if(d.isArray(b)||d.isEmptyObject(b))e(a,"");else for(var f in b)bQ(a+"["+f+"]",b[f],c,e)}function bP(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bJ,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bP(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bP(a,c,d,e,"*",g));return l}function bO(a){return function(b,c){typeof b!=="string"&&(c=b,b="*");if(d.isFunction(c)){var e=b.toLowerCase().split(bD),f=0,g=e.length,h,i,j;for(;f<g;f++)h=e[f],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bq(a,b,c){var e=b==="width"?bk:bl,f=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return f;d.each(e,function(){c||(f-=parseFloat(d.css(a,"padding"+this))||0),c==="margin"?f+=parseFloat(d.css(a,"margin"+this))||0:f-=parseFloat(d.css(a,"border"+this+"Width"))||0});return f}function bc(a,b){b.src?d.ajax({url:b.src,async:!1,dataType:"script"}):d.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function bb(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function ba(a,b){if(b.nodeType===1){var c=b.nodeName.toLowerCase();b.clearAttributes(),b.mergeAttributes(a);if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(d.expando)}}function _(a,b){if(b.nodeType===1&&d.hasData(a)){var c=d.expando,e=d.data(a),f=d.data(b,e);if(e=e[c]){var g=e.events;f=f[c]=d.extend({},e);if(g){delete f.handle,f.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)d.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function $(a,b){return d.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Q(a,b,c){if(d.isFunction(b))return d.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return d.grep(a,function(a,d){return a===b===c});if(typeof b==="string"){var e=d.grep(a,function(a){return a.nodeType===1});if(L.test(b))return d.filter(b,e,!c);b=d.filter(b,e)}return d.grep(a,function(a,e){return d.inArray(a,b)>=0===c})}function P(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function H(a,b){return(a&&a!=="*"?a+".":"")+b.replace(t,"`").replace(u,"&")}function G(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,p=[],q=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;i<t.length;i++)g=t[i],g.origType.replace(r,"")===a.type?q.push(g.selector):t.splice(i--,1);f=d(a.target).closest(q,a.currentTarget);for(j=0,k=f.length;j<k;j++){m=f[j];for(i=0;i<t.length;i++){g=t[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,e=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,e=d(a.relatedTarget).closest(g.selector)[0];(!e||e!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){f=p[j];if(c&&f.level>c)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function E(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function y(){return!0}function x(){return!1}function i(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function h(a,c,e){if(e===b&&a.nodeType===1){e=a.getAttribute("data-"+c);if(typeof e==="string"){try{e=e==="true"?!0:e==="false"?!1:e==="null"?null:d.isNaN(e)?g.test(e)?d.parseJSON(e):e:parseFloat(e)}catch(f){}d.data(a,c,e)}else e=b}return e}var c=a.document,d=function(){function G(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(G,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x,y,z=Object.prototype.toString,A=Object.prototype.hasOwnProperty,B=Array.prototype.push,C=Array.prototype.slice,D=String.prototype.trim,E=Array.prototype.indexOf,F={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.2",length:0,size:function(){return this.length},toArray:function(){return C.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?B.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),x.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(C.apply(this,arguments),"slice",C.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:B,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){e=i[c],f=a[c];if(i===f)continue;l&&f&&(d.isPlainObject(f)||(g=d.isArray(f)))?(g?(g=!1,h=e&&d.isArray(e)?e:[]):h=e&&d.isPlainObject(e)?e:{},i[c]=d.extend(l,h,f)):f!==b&&(i[c]=f)}return i},d.extend({noConflict:function(b){a.$=f,b&&(a.jQuery=e);return d},isReady:!1,readyWait:1,ready:function(a){a===!0&&d.readyWait--;if(!d.readyWait||a!==!0&&!d.isReady){if(!c.body)return setTimeout(d.ready,1);d.isReady=!0;if(a!==!0&&--d.readyWait>0)return;x.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=d._Deferred();if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",y,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",y),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&G()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):F[z.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!A.call(a,"constructor")&&!A.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||A.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g<h;)if(c.apply(a[g++],e)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(var j=a[0];g<h&&c.call(j,g,j)!==!1;j=a[++g]){}return a},trim:D?function(a){return a==null?"":D.call(a)}:function(a){return a==null?"":(a+"").replace(j,"").replace(k,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var e=d.type(a);a.length==null||e==="string"||e==="function"||e==="regexp"||d.isWindow(a)?B.call(c,a):d.merge(c,a)}return c},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,b,c){var d=[],e;for(var f=0,g=a.length;f<g;f++)e=b(a[f],f,c),e!=null&&(d[d.length]=e);return d.concat.apply([],d)},guid:1,proxy:function(a,c,e){arguments.length===2&&(typeof c==="string"?(e=a,a=e[c],c=b):c&&!d.isFunction(c)&&(e=c,c=b)),!c&&a&&(c=function(){return a.apply(e||this,arguments)}),a&&(c.guid=a.guid=a.guid||c.guid||d.guid++);return c},access:function(a,c,e,f,g,h){var i=a.length;if(typeof c==="object"){for(var j in c)d.access(a,j,c[j],f,g,e);return a}if(e!==b){f=!h&&f&&d.isFunction(e);for(var k=0;k<i;k++)g(a[k],c,f?e.call(a[k],k,g(a[k],c)):e,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){F["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),E&&(d.inArray=function(a,b){return E.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?y=function(){c.removeEventListener("DOMContentLoaded",y,!1),d.ready()}:c.attachEvent&&(y=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",y),d.ready())});return d}(),e="then done fail isResolved isRejected promise".split(" "),f=[].slice;d.extend({_Deferred:function(){var a=[],b,c,e,f={done:function(){if(!e){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"&&a.push(i);k&&f.resolveWith(k[0],k[1])}return this},resolveWith:function(d,f){if(!e&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(d,f)}finally{b=[d,f],c=0}}return this},resolve:function(){f.resolveWith(this,arguments);return this},isResolved:function(){return c||b},cancel:function(){e=1,a=[];return this}};return f},Deferred:function(a){var b=d._Deferred(),c=d._Deferred(),f;d.extend(b,{then:function(a,c){b.done(a).fail(c);return this},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,promise:function(a){if(a==null){if(f)return f;f=a={}}var c=e.length;while(c--)a[e[c]]=b[e[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?f.call(arguments,0):c,--g||h.resolveWith(h,f.call(b,0))}}var b=arguments,c=0,e=b.length,g=e,h=e<=1&&a&&d.isFunction(a.promise)?a:d.Deferred();if(e>1){for(;c<e;c++)b[c]&&d.isFunction(b[c].promise)?b[c].promise().then(i(c),h.reject):--g;g||h.resolveWith(h,b)}else h!==a&&h.resolveWith(h,e?[a]:[]);return h.promise()}}),function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0,reliableMarginRight:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e)}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(a.style.width="1px",a.style.marginRight="0",d.support.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(a,null).marginRight,10)||0)===0),b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function");return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}}();var g=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!i(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,g=b.nodeType,h=g?d.cache:b,j=g?b[d.expando]:d.expando;if(!h[j])return;if(c){var k=e?h[j][f]:h[j];if(k){delete k[c];if(!i(k))return}}if(e){delete h[j][f];if(!i(h[j]))return}var l=h[j][f];d.support.deleteExpando||h!=a?delete h[j]:h[j]=null,l?(h[j]={},g||(h[j].toJSON=d.noop),h[j][f]=l):g&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var f=this[0].attributes,g;for(var i=0,j=f.length;i<j;i++)g=f[i].name,g.indexOf("data-")===0&&(g=g.substr(5),h(this[0],g,e[g]))}}return e}if(typeof a==="object")return this.each(function(){d.data(this,a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(c===b){e=this.triggerHandler("getData"+k[1]+"!",[k[0]]),e===b&&this.length&&(e=d.data(this[0],a),e=h(this[0],a,e));return e===b&&k[1]?this.data(k[0]):e}return this.each(function(){var b=d(this),e=[k[0],c];b.triggerHandler("setData"+k[1]+"!",e),d.data(this,a,c),b.triggerHandler("changeData"+k[1]+"!",e)})},removeData:function(a){return this.each(function(){d.removeData(this,a)})}}),d.extend({queue:function(a,b,c){if(a){b=(b||"fx")+"queue";var e=d._data(a,b);if(!c)return e||[];!e||d.isArray(c)?e=d._data(a,b,d.makeArray(c)):e.push(c);return e}},dequeue:function(a,b){b=b||"fx";var c=d.queue(a,b),e=c.shift();e==="inprogress"&&(e=c.shift()),e&&(b==="fx"&&c.unshift("inprogress"),e.call(a,function(){d.dequeue(a,b)})),c.length||d.removeData(a,b+"queue",!0)}}),d.fn.extend({queue:function(a,c){typeof a!=="string"&&(c=a,a="fx");if(c===b)return d.queue(this[0],a);return this.each(function(b){var e=d.queue(this,a,c);a==="fx"&&e[0]!=="inprogress"&&d.dequeue(this,a)})},dequeue:function(a){return this.each(function(){d.dequeue(this,a)})},delay:function(a,b){a=d.fx?d.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){d.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var j=/[\n\t\r]/g,k=/\s+/,l=/\r/g,m=/^(?:href|src|style)$/,n=/^(?:button|input)$/i,o=/^(?:button|input|object|select|textarea)$/i,p=/^a(?:rea)?$/i,q=/^(?:radio|checkbox)$/i;d.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"},d.fn.extend({attr:function(a,b){return d.access(this,a,b,!0,d.attr)},removeAttr:function(a,b){return this.each(function(){d.attr(this,a,""),this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.addClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"){var b=(a||"").split(k);for(var c=0,e=this.length;c<e;c++){var f=this[c];if(f.nodeType===1)if(f.className){var g=" "+f.className+" ",h=f.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);f.className=d.trim(h)}else f.className=a}}return this},removeClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"||a===b){var c=(a||"").split(k);for(var e=0,f=this.length;e<f;e++){var g=this[e];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(j," ");for(var i=0,l=c.length;i<l;i++)h=h.replace(" "+c[i]+" "," ");g.className=d.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,e=typeof b==="boolean";if(d.isFunction(a))return this.each(function(c){var e=d(this);e.toggleClass(a.call(this,c,e.attr("class"),b),b)});return this.each(function(){if(c==="string"){var f,g=0,h=d(this),i=b,j=a.split(k);while(f=j[g++])i=e?i:!h.hasClass(f),h[i?"addClass":"removeClass"](f)}else if(c==="undefined"||c==="boolean")this.className&&d._data(this,"__className__",this.className),this.className=this.className||a===!1?"":d._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(j," ").indexOf(b)>-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var j=i?f:0,k=i?f+1:h.length;j<k;j++){var m=h[j];if(m.selected&&(d.support.optDisabled?!m.disabled:m.getAttribute("disabled")===null)&&(!m.parentNode.disabled||!d.nodeName(m.parentNode,"optgroup"))){a=d(m).val();if(i)return a;g.push(a)}}if(i&&!g.length&&h.length)return d(h[f]).val();return g}if(q.test(c.type)&&!d.support.checkOn)return c.getAttribute("value")===null?"on":c.value;return(c.value||"").replace(l,"")}return b}var n=d.isFunction(a);return this.each(function(b){var c=d(this),e=a;if(this.nodeType===1){n&&(e=a.call(this,b,c.val())),e==null?e="":typeof e==="number"?e+="":d.isArray(e)&&(e=d.map(e,function(a){return a==null?"":a+""}));if(d.isArray(e)&&q.test(this.type))this.checked=d.inArray(c.val(),e)>=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=m.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&n.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var k=a.getAttributeNode("tabIndex");return k&&k.specified?k.value:o.test(a.nodeName)||p.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var l=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return l===null?b:l}h&&(a[c]=e);return a[c]}});var r=/\.(.*)$/,s=/^(?:textarea|input|select)$/i,t=/\./g,u=/ /g,v=/[^\w\s.|`]/g,w=function(a){return a.replace(v,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=x;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(a){return typeof d!=="undefined"&&d.event.triggered!==a.type?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=x);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),w).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))d.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=d.event.special[h]||{};for(j=f||0;j<p.length;j++){q=p[j];if(e.guid===q.guid){if(l||n.test(q.namespace))f==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(f!=null)break}}if(p.length===0||f!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&d.removeEvent(a,h,s.handle),g=null,delete t[h]}if(d.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,d.isEmptyObject(s)&&d.removeData(a,b,!0)}}},trigger:function(a,c,e){var f=a.type||a,g=arguments[3];if(!g){a=typeof a==="object"?a[d.expando]?a:d.extend(d.Event(f),a):d.Event(f),f.indexOf("!")>=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(r,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=a.type,l[m]())}catch(p){}k&&(l["on"+m]=k),d.event.triggered=b}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l<m;l++){var n=f[l];if(e||h.test(n.namespace)){c.handler=n.handler,c.data=n.data,c.handleObj=n;var o=n.handler.apply(this,k);o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[d.expando])return a;var e=a;a=d.Event(e);for(var f=this.props.length,g;f;)g=this.props[--f],a[g]=e[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=c.documentElement,i=c.body;a.pageX=a.clientX+(h&&h.scrollLeft||i&&i.scrollLeft||0)-(h&&h.clientLeft||i&&i.clientLeft||0),a.pageY=a.clientY+(h&&h.scrollTop||i&&i.scrollTop||0)-(h&&h.clientTop||i&&i.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:d.proxy,special:{ready:{setup:d.bindReady,teardown:d.noop},live:{add:function(a){d.event.add(this,H(a.origType,a.selector),d.extend({},a,{handler:G,guid:a.handler.guid}))},remove:function(a){d.event.remove(this,H(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){d.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},d.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},d.Event=function(a){if(!this.preventDefault)return new d.Event(a);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?y:x):this.type=a,this.timeStamp=d.now(),this[d.expando]=!0},d.Event.prototype={preventDefault:function(){this.isDefaultPrevented=y;var a=this.originalEvent;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=y;var a=this.originalEvent;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=y,this.stopPropagation()},isDefaultPrevented:x,isPropagationStopped:x,isImmediatePropagationStopped:x};var z=function(a){var b=a.relatedTarget;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,d.event.handle.apply(this,arguments))}catch(e){}},A=function(a){a.type=a.data,d.event.handle.apply(this,arguments)};d.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){d.event.special[a]={setup:function(c){d.event.add(this,b,c&&c.selector?A:z,a)},teardown:function(a){d.event.remove(this,b,a&&a.selector?A:z)}}}),d.support.submitBubbles||(d.event.special.submit={setup:function(a,b){if(this.nodeName&&this.nodeName.toLowerCase()!=="form")d.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&d(b).closest("form").length&&E("submit",this,arguments)}),d.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&d(b).closest("form").length&&a.keyCode===13&&E("submit",this,arguments)});else return!1},teardown:function(a){d.event.remove(this,".specialSubmit")}});if(!d.support.changeBubbles){var B,C=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},D=function D(a){var c=a.target,e,f;if(s.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=C(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:D,beforedeactivate:D,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&D.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&D.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",C(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in B)d.event.add(this,c+".specialChange",B[c]);return s.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return s.test(this.nodeName)}},B=d.event.special.change.filters,B.focus=B.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function f(a){var c=d.event.fix(a);c.type=b,c.originalEvent={},d.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var e=0;d.event.special[b]={setup:function(){e++===0&&c.addEventListener(a,f,!0)},teardown:function(){--e===0&&c.removeEventListener(a,f,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i<j;i++)d.event.add(this[i],a,h,e);return this}}),d.fn.extend({unbind:function(a,b){if(typeof a!=="object"||a.preventDefault)for(var e=0,f=this.length;e<f;e++)d.event.remove(this[e],a,b);else for(var c in a)this.unbind(c,a[c]);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){d.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var c=d.Event(a);c.preventDefault(),c.stopPropagation(),d.event.trigger(c,b,this[0]);return c.result}},toggle:function(a){var b=arguments,c=1;while(c<b.length)d.proxy(a,b[c++]);return this.click(d.proxy(a,function(e){var f=(d._data(this,"lastToggle"+a.guid)||0)%c;d._data(this,"lastToggle"+a.guid,f+1),e.preventDefault();return b[f].apply(this,arguments)||!1}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var F={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};d.each(["live","die"],function(a,c){d.fn[c]=function(a,e,f,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:d(this.context);if(typeof a==="object"&&!a.preventDefault){for(var o in a)n[c](o,e,a[o],m);return this}d.isFunction(e)&&(f=e,e=b),a=(a||"").split(" ");while((h=a[i++])!=null){j=r.exec(h),k="",j&&(k=j[0],h=h.replace(r,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,h==="focus"||h==="blur"?(a.push(F[h]+k),h=h+k):h=(F[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)d.event.add(n[p],"live."+H(h,m),{data:e,selector:m,handler:f,origType:h,origHandler:f,preType:l});else n.unbind("live."+H(h,m),f)}return this}}),d.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){d.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!=="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!=="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(f){if(f===!0)continue}else g=o=!0}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b==="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1){}a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return"text"===c&&(b===c||b===null)},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};d.find=k,d.expr=k.selectors,d.expr[":"]=d.expr.filters,d.unique=k.uniqueSort,d.text=k.getText,d.isXMLDoc=k.isXML,d.contains=k.contains}();var I=/Until$/,J=/^(?:parents|prevUntil|prevAll)/,K=/,/,L=/^.[^:#\[\.,]*$/,M=Array.prototype.slice,N=d.expr.match.POS,O={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({find:function(a){var b=this.pushStack("","find",a),c=0;for(var e=0,f=this.length;e<f;e++){c=b.length,d.find(a,this[e],b);if(e>0)for(var g=c;g<b.length;g++)for(var h=0;h<c;h++)if(b[h]===b[g]){b.splice(g--,1);break}}return b},has:function(a){var b=d(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(d.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(Q(this,a,!1),"not",a)},filter:function(a){return this.pushStack(Q(this,a,!0),"filter",a)},is:function(a){return!!a&&d.filter(a,this).length>0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e<f;e++)i=a[e],j[i]||(j[i]=d.expr.match.POS.test(i)?d(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=N.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e<f;e++){g=this[e];while(g){if(l?l.index(g)>-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(P(c[0])||P(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=M.call(arguments);I.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!O[a]?d.unique(f):f,(this.length>1||K.test(e))&&J.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var R=/ jQuery\d+="(?:\d+|null)"/g,S=/^\s+/,T=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,U=/<([\w:]+)/,V=/<tbody/i,W=/<|&#?\w+;/,X=/<(?:script|object|embed|option|style)/i,Y=/checked\s*(?:[^=]|=\s*.checked.)/i,Z={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};Z.optgroup=Z.option,Z.tbody=Z.tfoot=Z.colgroup=Z.caption=Z.thead,Z.th=Z.td,d.support.htmlSerialize||(Z._default=[1,"div<div>","</div>"]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(R,""):null;if(typeof a!=="string"||X.test(a)||!d.support.leadingWhitespace&&S.test(a)||Z[(U.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(T,"<$1></$2>");try{for(var c=0,e=this.length;c<e;c++)this[c].nodeType===1&&(d.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(f){this.empty().append(a)}}return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(d.isFunction(a))return this.each(function(b){var c=d(this),e=c.html();c.replaceWith(a.call(this,b,e))});typeof a!=="string"&&(a=d(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;d(this).remove(),b?d(b).before(a):d(c).append(a)})}return this.length?this.pushStack(d(d.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,e){var f,g,h,i,j=a[0],k=[];if(!d.support.checkClone&&arguments.length===3&&typeof j==="string"&&Y.test(j))return this.each(function(){d(this).domManip(a,c,e,!0)});if(d.isFunction(j))return this.each(function(f){var g=d(this);a[0]=j.call(this,f,c?g.html():b),g.domManip(a,c,e)});if(this[0]){i=j&&j.parentNode,d.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?f={fragment:i}:f=d.buildFragment(a,this,k),h=f.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&d.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)e.call(c?$(this[l],g):this[l],f.cacheable||m>1&&l<n?d.clone(h,!0,!0):h)}k.length&&d.each(k,bc)}return this}}),d.buildFragment=function(a,b,e){var f,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]==="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!X.test(a[0])&&(d.support.checkClone||!Y.test(a[0]))&&(g=!0,h=d.fragments[a[0]],h&&(h!==1&&(f=h))),f||(f=i.createDocumentFragment(),d.clean(a,i,f,e)),g&&(d.fragments[a[0]]=h?f:1);return{fragment:f,cacheable:g}},d.fragments={},d.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){d.fn[a]=function(c){var e=[],f=d(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&f.length===1){f[b](this[0]);return this}for(var h=0,i=f.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){ba(a,e),f=bb(a),g=bb(e);for(h=0;f[h];++h)ba(f[h],g[h])}if(b){_(a,e);if(c){f=bb(a),g=bb(e);for(h=0;f[h];++h)_(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||W.test(i)){if(typeof i==="string"){i=i.replace(T,"<$1></$2>");var j=(U.exec(i)||["",""])[1].toLowerCase(),k=Z[j]||Z._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=V.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]==="<table>"&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&S.test(i)&&m.insertBefore(b.createTextNode(S.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bd=/alpha\([^)]*\)/i,be=/opacity=([^)]*)/,bf=/-([a-z])/ig,bg=/([A-Z]|^ms)/g,bh=/^-?\d+(?:px)?$/i,bi=/^-?\d/,bj={position:"absolute",visibility:"hidden",display:"block"},bk=["Left","Right"],bl=["Top","Bottom"],bm,bn,bo,bp=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bm(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bm)return bm(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bf,bp)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bq(a,b,e):d.swap(a,bj,function(){f=bq(a,b,e)});if(f<=0){f=bm(a,b,b),f==="0px"&&bo&&(f=bo(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bh.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return be.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bd.test(f)?f.replace(bd,e):c.filter+" "+e}}),d(function(){d.support.reliableMarginRight||(d.cssHooks.marginRight={get:function(a,b){var c;d.swap(a,{display:"inline-block"},function(){b?c=bm(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bn=function(a,c,e){var f,g,h;e=e.replace(bg,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bo=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bh.test(d)&&bi.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bm=bn||bo,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var br=/%20/g,bs=/\[\]$/,bt=/\r?\n/g,bu=/#.*$/,bv=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bw=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bx=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,by=/^(?:GET|HEAD)$/,bz=/^\/\//,bA=/\?/,bB=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bC=/^(?:select|textarea)/i,bD=/\s+/,bE=/([?&])_=[^&]*/,bF=/(^|\-)([a-z])/g,bG=function(a,b,c){return b+c.toUpperCase()},bH=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bI=d.fn.load,bJ={},bK={},bL,bM;try{bL=c.location.href}catch(bN){bL=c.createElement("a"),bL.href="",bL=bL.href}bM=bH.exec(bL.toLowerCase())||[],d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bI)return bI.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("<div>").append(c.replace(bB,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bC.test(this.nodeName)||bw.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(bt,"\r\n")}}):{name:b.name,value:c.replace(bt,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bL,isLocal:bx.test(bM[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bO(bJ),ajaxTransport:bO(bK),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bR(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bS(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bF,bG)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bv.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bu,"").replace(bz,bM[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bD),e.crossDomain==null&&(q=bH.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bM[1]||q[2]!=bM[2]||(q[3]||(q[1]==="http:"?80:443))!=(bM[3]||(bM[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bP(bJ,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!by.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(bA.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bE,"$1_="+w);e.url=x+(x===e.url?(bA.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bP(bK,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bQ(g,a[g],c,f);return e.join("&").replace(br,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bT=d.now(),bU=/(\=)\?(&|$)|\?\?/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bT++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bU.test(b.url)||f&&bU.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bU,l),b.url===j&&(f&&(k=k.replace(bU,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bV=d.now(),bW,bX;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bZ()||b$()}:bZ,bX=d.ajaxSettings.xhr(),d.support.ajax=!!bX,d.support.cors=bX&&"withCredentials"in bX,bX=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),!a.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bW[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bW||(bW={},bY()),h=bV++,g.onreadystatechange=bW[h]=c):c()},abort:function(){c&&c(0,1)}}}});var b_={},ca=/^(?:toggle|show|hide)$/,cb=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cc,cd=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(ce("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)e=this[g],f=e.style.display,!d._data(e,"olddisplay")&&f==="none"&&(f=e.style.display=""),f===""&&d.css(e,"display")==="none"&&d._data(e,"olddisplay",cf(e.nodeName));for(g=0;g<h;g++){e=this[g],f=e.style.display;if(f===""||f==="none")e.style.display=d._data(e,"olddisplay")||""}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ce("hide",3),a,b,c);for(var e=0,f=this.length;e<f;e++){var g=d.css(this[e],"display");g!=="none"&&!d._data(this[e],"olddisplay")&&d._data(this[e],"olddisplay",g)}for(e=0;e<f;e++)this[e].style.display="none";return this},_toggle:d.fn.toggle,toggle:function(a,b,c){var e=typeof a==="boolean";d.isFunction(a)&&d.isFunction(b)?this._toggle.apply(this,arguments):a==null||e?this.each(function(){var b=e?a:d(this).is(":hidden");d(this)[b?"show":"hide"]()}):this.animate(ce("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,e){var f=d.speed(b,c,e);if(d.isEmptyObject(a))return this.each(f.complete);return this[f.queue===!1?"each":"queue"](function(){var b=d.extend({},f),c,e=this.nodeType===1,g=e&&d(this).is(":hidden"),h=this;for(c in a){var i=d.camelCase(c);c!==i&&(a[i]=a[c],delete a[c],c=i);if(a[c]==="hide"&&g||a[c]==="show"&&!g)return b.complete.call(this);if(e&&(c==="height"||c==="width")){b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(d.css(this,"display")==="inline"&&d.css(this,"float")==="none")if(d.support.inlineBlockNeedsLayout){var j=cf(this.nodeName);j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)}else this.style.display="inline-block"}d.isArray(a[c])&&((b.specialEasing=b.specialEasing||{})[c]=a[c][1],a[c]=a[c][0])}b.overflow!=null&&(this.style.overflow="hidden"),b.curAnim=d.extend({},a),d.each(a,function(c,e){var f=new d.fx(h,b,c);if(ca.test(e))f[e==="toggle"?g?"show":"hide":e](a);else{var i=cb.exec(e),j=f.cur();if(i){var k=parseFloat(i[2]),l=i[3]||(d.cssNumber[c]?"":"px");l!=="px"&&(d.style(h,c,(k||1)+l),j=(k||1)/f.cur()*j,d.style(h,c,j+l)),i[1]&&(k=(i[1]==="-="?-1:1)*k+j),f.custom(j,k,l)}else f.custom(j,e,"")}});return!0})},stop:function(a,b){var c=d.timers;a&&this.queue([]),this.each(function(){for(var a=c.length-1;a>=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:ce("show",1),slideUp:ce("hide",1),slideToggle:ce("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!cc&&(cc=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||d.fx.stop()},interval:13,stop:function(){clearInterval(cc),cc=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){d.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),d.expr&&d.expr.filters&&(d.expr.filters.animated=function(a){return d.grep(d.timers,function(b){return a===b.elem}).length});var cg=/^t(?:able|d|h)$/i,ch=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?d.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,g=f.documentElement;if(!c||!d.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=f.body,i=ci(f),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||d.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||d.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:d.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);d.offset.initialize();var c,e=b.offsetParent,f=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(d.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===e&&(l+=b.offsetTop,m+=b.offsetLeft,d.offset.doesNotAddBorder&&(!d.offset.doesAddBorderForTableAndCells||!cg.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),f=e,e=b.offsetParent),d.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;d.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},d.offset={initialize:function(){var a=c.body,b=c.createElement("div"),e,f,g,h,i=parseFloat(d.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=(e==="absolute"||e==="fixed")&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=ch.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!ch.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=ci(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=ci(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window);
\ No newline at end of file
Deleted: trunk/bow-ui/src/main/webapp/js/jquery-ui-1.8.11.custom.min.js
===================================================================
--- trunk/bow-ui/src/main/webapp/js/jquery-ui-1.8.11.custom.min.js 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/js/jquery-ui-1.8.11.custom.min.js 2011-08-18 02:37:38 UTC (rev 306)
@@ -1,137 +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%
- */
-/*!
- * jQuery UI 1.8.11
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.11",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
-NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
-"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
-if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
-"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
-d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
-c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
-b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.11
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
-widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*
- * jQuery UI Position 1.8.11
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Button 1.8.11
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,f=a([]);if(c)f=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return f};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
-i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
-function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(f)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");
-b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var e=b.element[0];h(e).not(e).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");
-g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(e){if(c.disabled)return false;if(e.keyCode==a.ui.keyCode.SPACE||e.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",
-c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){var b=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(c);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(c);if(!this.buttonElement.length)this.buttonElement=b.find(c)}this.element.addClass("ui-helper-hidden-accessible");
-(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());
-this.hasTitle||this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
-true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){if(this.options.text)e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){e.push(f?"ui-button-icons-only":
-"ui-button-icon-only");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},
-destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.11
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.button.js
- * jquery.ui.draggable.js
- * jquery.ui.mouse.js
- * jquery.ui.position.js
- * jquery.ui.resizable.js
- */
-(function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&
-c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",
--1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role",
-"button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=
-b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&
-a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0]){e=c(this).css("z-index");
-isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);
-d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}});
-c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f,
-h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('<button type="button"></button>').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=
-d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,
-position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,
-h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===
-1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in
-l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");
-break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d,e=
-this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&&
-this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.11",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===
-0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
-function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;
\ No newline at end of file
Modified: trunk/bow-ui/src/main/webapp/jsp/admin.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/admin.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/admin.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -43,8 +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="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="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>
Modified: trunk/bow-ui/src/main/webapp/jsp/editBookmark.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/editBookmark.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/editBookmark.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,11 +23,7 @@
-->
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
-<%@page import="org.chorem.bow.BowBookmark"%>
-<%
-BowBookmark bookmark = 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"
@@ -46,12 +42,17 @@
<s:form id="popupAddUrlForm" action="addUrl" method="post">
<s:hidden name="searchLine" value="%{searchLine}" />
<s:hidden name="fullTextLine" value="%{fullTextLine}" />
- <input type="hidden" id="popupAddUrlFormBookmarkId" name="bookmarkId" value="<%=bookmark == null ? null : bookmark.getWikittyId()%>"/>
- <s:textfield key="popup.addurl.link" id="popupAddUrlFormLink" name="link" labelSeparator=" " value="%{bookmark.link}" />
- <s:textarea key="popup.addurl.name" id="popupAddUrlFormName" name="name" labelSeparator=" " value="%{bookmark.description}" />
- <s:textfield key="popup.addurl.alias.private" id="popupAddUrlFormPrivateAlias" name="privateAlias" labelSeparator=" " value="%{bookmark.privateAlias}" />
- <s:textfield key="popup.addurl.alias.public" id="popupAddUrlFormPublicAlias" name="publicAlias" labelSeparator=" " value="%{bookmark.publicAlias}" />
- <s:textfield key="popup.addurl.tags" id="popupAddUrlFormTags" name="tags" labelSeparator=" " value="%{@org.chorem.bow.BookmarkUtils@getBookmarkTagsString(#request.bookmark)}" />
+ <s:hidden name="bookmarkId" value="%{bookmark.wikittyId}"/>
+ <s:textfield name="link" labelSeparator=" " key="popup.addurl.link"
+ value="%{bookmark.link}" />
+ <s:textarea name="name" labelSeparator=" " key="popup.addurl.name"
+ value="%{bookmark.description}" />
+ <s:textfield name="privateAlias" labelSeparator=" " key="popup.addurl.alias.private"
+ value="%{bookmark.privateAlias}" />
+ <s:textfield name="publicAlias" labelSeparator=" " key="popup.addurl.alias.public"
+ value="%{bookmark.publicAlias}" />
+ <s:textfield name="tags" labelSeparator=" " key="popup.addurl.tags"
+ value="%{@org.chorem.bow.BookmarkUtils@getBookmarkTagsString(bookmark)}" />
<s:submit key="popup.commons.submit" name="submit" />
</s:form>
</div>
Modified: trunk/bow-ui/src/main/webapp/jsp/error.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/error.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/error.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -35,7 +35,14 @@
</head>
<body>
<div id="main">
- <jsp:include page="inc/errorFrame.jsp" flush="true" />
+ <div id="msg">
+ <div id="actionmessageHeader">
+ <s:actionmessage />
+ </div>
+ <div id="actionerrorHeader">
+ <s:actionerror />
+ </div>
+ </div>
</div>
</body>
</html>
Modified: trunk/bow-ui/src/main/webapp/jsp/home.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/home.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/home.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -1,6 +1,3 @@
-<%@page import="org.chorem.bow.BowSearchResult"%>
-<%@page import="org.chorem.bow.action.HomeAction"%>
-<%@page import="org.chorem.bow.BowConfig"%>
<!--
#%L
bow
@@ -27,9 +24,11 @@
<%@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" %>
+<%@page import="org.chorem.bow.BowSearchResult"%>
+<%@page import="org.chorem.bow.action.HomeAction"%>
+<%@page import="org.chorem.bow.BowConfig"%>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
@@ -56,11 +55,9 @@
</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:form action="home" method="get" theme="simple">
+ <label for="order"><s:text name="bow.search.orderby" /></label>
+ <s:select id="order" name="order" list="possibleOrder"/>
<s:submit key="bow.search.submit" name="submit" />
<s:hidden name="searchLine" value="%{searchResult.searchLine}" />
<s:hidden name="fullTextLine" value="%{searchResult.fullTextLine}" />
Modified: trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/inc/bookmark.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,9 +23,7 @@
-->
<%@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.BowUtils"%>
-<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
+<%@taglib prefix="sj" uri="/struts-jquery-tags" %>
<div class="bookmark"
xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
@@ -43,21 +41,20 @@
<s:property value="%{#bookmark.publicAlias}" />
</s:a>
</s:if>
- <s:url var="editBookmark" action="modifyBookmark" escapeAmp="true">
- <s:param name="bookmarkId"><s:property value="%{#bookmark.wikittyId}" /></s:param>
+ <s:url var="editBookmark" action="editBookmark" escapeAmp="true">
+ <s:param name="id"><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 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:a cssClass="edit" href="%{editBookmark}"/>
+
<s:url var="removeBookmark" action="removeBookmark" escapeAmp="true">
<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}','%{#bookmark.privateAlias}');"></s:a>
+ onclick="return deleteConfirmation('%{#removeBookmark}','%{#bookmark.link}');"></s:a>
</div>
<div class="bookmarkcontenu">
Deleted: trunk/bow-ui/src/main/webapp/jsp/inc/errorFrame.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/inc/errorFrame.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/inc/errorFrame.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -1,36 +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%
- -->
-<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-
- <%
- String userError = (String)request.getAttribute("errorMsgUser");
- String techError = (String)request.getAttribute("errorMsgTech");
-
- if (userError != null) {
- %>
- <div class="menu clearfix">
- <h2>Error</h2>
- </div>
- <pre class="error"><%=userError%><% if (techError != null) { %><br /><br />Detailed error :<br /><%=techError%><% } %></pre>
- <% } %>
Modified: trunk/bow-ui/src/main/webapp/jsp/inc/footer.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/inc/footer.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/inc/footer.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -27,21 +27,21 @@
<div id="footer"
xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
xmlns:jsp="http://java.sun.com/JSP/Page">
- <p>
- <a shape="rect" href="http://www.chorem.org/projects/show/bow">bow</a>
- <a shape="rect" href="http://www.chorem.org/projects/bow/files"></a> -
- <a shape="rect" href="http://www.gnu.org/licenses/agpl.html"><s:text name="bow.footer.license" /></a> -
- <span title="Copyright">©2011</span>
- <a shape="rect" href="http://www.codelutin.com">Code Lutin</a> -
- <a shape="rect" href="http://www.chorem.org/projects/bow/issues"><s:text name="bow.footer.bugreport" /></a> -
+ <p>
+ <a shape="rect" href="http://www.chorem.org/projects/show/bow">bow</a>
+ <a shape="rect" href="http://www.chorem.org/projects/bow/files"></a> -
+ <a shape="rect" href="http://www.gnu.org/licenses/agpl.html"><s:text name="bow.footer.license" /></a> -
+ <span title="Copyright">©2011</span>
+ <a shape="rect" href="http://www.codelutin.com">Code Lutin</a> -
+ <a shape="rect" href="http://www.chorem.org/projects/bow/issues"><s:text name="bow.footer.bugreport" /></a> -
<a shape="rect" href="http://list.chorem.org/cgi-bin/mailman/listinfo/bow-users"><s:text name="bow.footer.userSupport" /></a> -
- <s:url var="localeEN">
- <s:param name="request_locale">en_GB</s:param>
- </s:url>
- <s:url var="localeFR">
- <s:param name="request_locale">fr_FR</s:param>
- </s:url>
- <s:a href="%{localeEN}"><s:text name="bow.action.locale.english" /></s:a> -
- <s:a href="%{localeFR}"><s:text name="bow.action.locale.french" /></s:a>
- </p>
+ <s:url var="localeEN">
+ <s:param name="request_locale">en_GB</s:param>
+ </s:url>
+ <s:url var="localeFR">
+ <s:param name="request_locale">fr_FR</s:param>
+ </s:url>
+ <s:a href="%{localeEN}"><s:text name="bow.action.locale.english" /></s:a> -
+ <s:a href="%{localeFR}"><s:text name="bow.action.locale.french" /></s:a>
+ </p>
</div>
Deleted: trunk/bow-ui/src/main/webapp/jsp/inc/popupAddUrl.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/inc/popupAddUrl.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/inc/popupAddUrl.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -1,94 +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 : popupAddUrl
- 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 openPopupAddUrl(bookmarkId, link, name, privateAlias, publicAlias, tags) {
- $("#popupAddUrlFormBookmarkId")[0].value = bookmarkId;
- $("#popupAddUrlFormLink")[0].value = link;
- $("#popupAddUrlFormName")[0].innerHTML = name;
- $("#popupAddUrlFormPrivateAlias")[0].value = privateAlias;
- $("#popupAddUrlFormPublicAlias")[0].value = publicAlias;
- $("#popupAddUrlFormTags")[0].value = tags;
-
- $("#addUrlPopup").dialog("open");
- return false;
- }
-
- $(function() {
- $( "#addUrlPopup" ).dialog({
- autoOpen: false,
- width: 400,
- modal: true,
-// buttons: {
-// "Validate": function() {
-// $("#popupAddUrlForm").submit();
-// $( this ).dialog( "close" );
-// },
-// Cancel: function() {
-// $( this ).dialog( "close" );
-// }
-// },
- close: function() {
- //allFields.val( "" ).removeClass( "ui-state-error" );
- }
- });
- });
-
- function submitAddUrl() {
- $("#popupAddUrlForm").submit();
- closePopupAddUrl();
- }
-
- function closePopupAddUrl() {
- $( "#addUrlPopup" ).dialog( "close" )
- }
-</script>
-
-<s:set id="title">
- <s:text name="popup.addurl.title"/>
-</s:set>
-
-<div xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
- id="addUrlPopup" title="${title}">
- <s:form id="popupAddUrlForm" action="addUrl" method="post">
- <s:hidden id="popupAddUrlFormBookmarkId" name="bookmarkId" />
- <s:hidden name="searchLine" value="%{searchLine}" />
- <s:hidden name="fullTextLine" value="%{fullTextLine}" />
- <s:textfield key="popup.addurl.link" id="popupAddUrlFormLink" name="link" labelSeparator=" " />
- <s:textarea key="popup.addurl.name" id="popupAddUrlFormName" name="name" labelSeparator=" " />
- <s:textfield key="popup.addurl.alias.private" id="popupAddUrlFormPrivateAlias" name="privateAlias" labelSeparator=" " />
- <s:textfield key="popup.addurl.alias.public" id="popupAddUrlFormPublicAlias" name="publicAlias" labelSeparator=" " />
- <s:textfield key="popup.addurl.tags" id="popupAddUrlFormTags" name="tags" labelSeparator=" " />
- </s:form>
- <a class="button" onclick="submitAddUrl()"><s:text name="popup.commons.submit"/> </a>
- <a class="button" onclick="closePopupAddUrl()"><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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,14 +23,13 @@
-->
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
-<%@page import="org.chorem.bow.BowConfig" %>
-<%
-String bowUrl = BowConfig.getBowUrl();
+<%@taglib prefix="sj" uri="/struts-jquery-tags" %>
-if (request.getAttribute("formAction") == null) {
- request.setAttribute("formAction", "addUrl");
-}
-%>
+<sj:dialog id="editBookmark"
+ title="Ajout/Modification d'un bookmark"
+ modal="true"
+ autoOpen="false" />
+
<div id="logoutDiv" xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
xmlns:jsp="http://java.sun.com/JSP/Page">
<s:form action="logout" theme="simple">
@@ -38,22 +37,25 @@
<s:submit key="bow.rightMenu.logout" name="submit" />
</div>
</s:form>
- <a href="http://maven-site.chorem.org/bow/" class="help" onclick="window.open(this.href); return false;"><s:text name="bow.rightMenu.help" /></a>
+ <a href="http://maven-site.chorem.org/bow/" class="help" target="_blank">
+ <s:text name="bow.rightMenu.help" />
+ </a>
</div>
+
<div id="side" xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
xmlns:jsp="http://java.sun.com/JSP/Page">
- <s:include value="popupAddUrl.jsp" />
- <s:set var="searchLine" value="%{request.bookmarkActions.searchLine}" />
- <s:set var="fullTextLine" value="%{request.bookmarkActions.fullTextLine}" />
<div id="colonneD">
<ul class="droite">
- <s:if test="#session.BowSession.isAdmin()">
+ <s:if test="bowSession.admin">
<li><s:a action="admin"><s:text name="bow.rightMenu.admin" /></s:a></li>
</s:if>
<li><s:a action="preferences"><s:text name="bow.preferences.title" /></s:a></li>
<li>
- <s:url var="editBookmark" action="editBookmark"/>
- <s:a href="%{editBookmark}" onclick="return openPopupAddUrl('', '', '', '', '', '');">
+ <s:url var="editBookmark" action="editBookmark" escapeAmp="true">
+ <s:param name="searchLine"><s:property value="%{searchLine}" /></s:param>
+ <s:param name="fullTextLine"><s:property value="%{fullTextLine}" /></s:param>
+ </s:url>
+ <s:a href="%{editBookmark}">
<s:text name="bow.rightMenu.addUrl.link" />
</s:a>
</li>
@@ -61,6 +63,7 @@
<!--div id="nuage"-->
<jsp:include page="tagsCloud.jsp" flush="true">
<jsp:param name="searchLine" value="%{searchLine}" />
+ <jsp:param name="fullTextLine" value="%{fullTextLine}"/>
</jsp:include>
<!--/div-->
<div class="colonnebas">
Modified: trunk/bow-ui/src/main/webapp/jsp/inc/tagsCloud.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/inc/tagsCloud.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/inc/tagsCloud.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -23,7 +23,6 @@
-->
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@taglib prefix="s" uri="/struts-tags" %>
-<%@page import="org.chorem.bow.BookmarkActions"%>
<div id="nuage"
xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
@@ -35,6 +34,9 @@
<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: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>
</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-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/preferences.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -22,16 +22,8 @@
#L%
-->
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
-<%@page import="org.chorem.bow.BowConfig"%>
-<%@page import="org.nuiton.wikitty.search.FacetTopic"%>
-<%@page import="org.chorem.bow.action.PreferencesAction"%>
<%@taglib prefix="s" uri="/struts-tags" %>
-<%
- PreferencesAction action = PreferencesAction.getAction();
- String bowUrl = BowConfig.getBowUrl();
-%>
-
<html xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
xmlns:jsp="http://java.sun.com/JSP/Page">
<head>
@@ -52,16 +44,16 @@
<s:set var="temporaryToken" value="#session.BowSession.getTemporaryToken()" />
<ul>
<li>
- <a title="%{getText('bow.rightMenu.bookmark.temporaryLinkDescription')}"
- href="javascript:var%20url=location.href;var%20nameAndTags=prompt('Entrez%20le%20nom%20du%20lien%20et%20la%20liste%20des%20tags%20sous%20la%20forme:%20name|tag1%20tag2%20tag3',%20document.title+'|');if%20(nameAndTags!=(document.title+'|')){var%20link='<%=bowUrl%>addUrl.action?token=${temporaryToken}&url='+encodeURIComponent(url)+'&nameAndTags='+encodeURIComponent(nameAndTags);var%20script=document.createElement('script');script.src=link;script.type='text/javascript';document.body.appendChild(script);}void(0);">
+ <s:a title="%{getText('bow.rightMenu.bookmark.temporaryLinkDescription')}"
+ href="javascript:var%20url=location.href;var%20nameAndTags=prompt('Entrez%20le%20nom%20du%20lien%20et%20la%20liste%20des%20tags%20sous%20la%20forme:%20name|tag1%20tag2%20tag3',%20document.title+'|');if%20(nameAndTags!=(document.title+'|')){var%20link='%{config.bowUrl}addUrl.action?token=%{temporaryToken}&url='+encodeURIComponent(url)+'&nameAndTags='+encodeURIComponent(nameAndTags);var%20script=document.createElement('script');script.src=link;script.type='text/javascript';document.body.appendChild(script);}void(0);">
<s:text name="bow.rightMenu.bookmark.temporaryLink" />
- </a>
+ </s:a>
</li>
<li>
- <a title="%{getText('bow.rightMenu.bookmark.permanentLinkDescription')}"
- href="javascript:var%20url=location.href;var%20nameAndTags=prompt('Entrez%20le%20nom%20du%20lien%20et%20la%20liste%20des%20tags%20sous%20la%20forme:%20name|tag1%20tag2%20tag3',%20document.title+'|');if%20(nameAndTags!=(document.title+'|')){var%20link='<%=bowUrl%>addUrl.action?token=${permanentToken}&url='+encodeURIComponent(url)+'&nameAndTags='+encodeURIComponent(nameAndTags);var%20script=document.createElement('script');script.src=link;script.type='text/javascript';document.body.appendChild(script);}void(0);">
+ <s:a title="%{getText('bow.rightMenu.bookmark.permanentLinkDescription')}"
+ href="javascript:var%20url=location.href;var%20nameAndTags=prompt('Entrez%20le%20nom%20du%20lien%20et%20la%20liste%20des%20tags%20sous%20la%20forme:%20name|tag1%20tag2%20tag3',%20document.title+'|');if%20(nameAndTags!=(document.title+'|')){var%20link='%{config.bowUrl}addUrl.action?token=%{permanentToken}&url='+encodeURIComponent(url)+'&nameAndTags='+encodeURIComponent(nameAndTags);var%20script=document.createElement('script');script.src=link;script.type='text/javascript';document.body.appendChild(script);}void(0);">
<s:text name="bow.rightMenu.bookmark.permanentLink" />
- </a>
+ </s:a>
</li>
<li>
<a href="extensions/bow4chromium.crx">
@@ -137,27 +129,18 @@
</div>
<div class="formFrame fond">
- <h3><s:text name="bow.preferences.labels"/></h3>
+ <h3><s:text name="bow.preferences.labels"/>(<s:property value="labels.size()"/>)</h3>
<br/>
<s:form id="labelsForm" action="adminlabels" method="post" theme="simple">
- <ul>
- <% for (FacetTopic topic : action.getLabels()) { %>
- <div>
- <%-- impossible de mettre un <s:checkbox, a priori erreur soit
- disant que la tld ne permet pas d'expression :(. Comme
- ca marche tres bien en HTML pure, vive le HTML :) --%>
- <input type="checkbox" name="selectedLabels"
- value="<%=topic.getTopicName()%>">
- <%=topic.getTopicName()%>(<%=topic.getCount()%>)
- </input>
- </div>
- <% } %>
- <div>
- <s:text name="bow.preferences.labels.name.field"/><s:textfield name="newLabel" />
- <s:submit name="rename" key="bow.preferences.labels.rename.submit" />
- <s:submit name="delete" key="bow.preferences.labels.delete.submit" />
- </div>
- </ul>
+ <div class="list">
+ <s:checkboxlist name="selectedLabels" list="labels"
+ listKey="topicName" listValue="%{topicName+'('+count+')'}"/>
+ </div>
+ <div class="action">
+ <s:text name="bow.preferences.labels.name.field"/><s:textfield name="newLabel" />
+ <s:submit name="rename" key="bow.preferences.labels.rename.submit" />
+ <s:submit name="delete" key="bow.preferences.labels.delete.submit" />
+ </div>
</s:form>
</div>
@@ -181,23 +164,17 @@
<s:if test="bookmarksImportDate != null">
<s:iterator value="bookmarksImportDate">
+ <s:set name="date" value="%{key}"/>
+ <s:set name="nb" value="%{value}"/>
+ <s:date name="%{stringToDate(#date)}" var="dateString"/>
<div class="deleteImport">
- <%
- String date = (String) request.getAttribute("key");
- String dateSave = date;
-
- date = date.replaceAll("[^0-9:-]+", " ").trim();
- date = date.substring(0, date.lastIndexOf(' '));
- %>
- <span><%=date%> (<s:property value="value"/> bookmarks)</span>
+ <span><s:property value="dateString"/> (<s:property value="#nb"/> bookmarks)</span>
<s:url var="deleteImport" action="deleteImport">
- <s:param name="date"><%=dateSave%>
- </s:param>
+ <s:param name="date" value="#date"/>
</s:url>
- <s:set name="date" value="%{key}"/>
- <s:set name="count" value="%{value}"/>
- <a class="deleteImportButton" href="%{deleteImport}"
- onclick="return deleteConfirmation('${deleteImport}','${count}','<%=date%>');"></a>
+ <s:a cssClass="deleteImportButton" href="%{deleteImport}"
+ onclick="return deleteConfirmation('%{deleteImport}','%{nb}','%{dateString}');">
+ </s:a>
</div>
</s:iterator>
</s:if>
Modified: trunk/bow-ui/src/main/webapp/jsp/suggestions.jsp
===================================================================
--- trunk/bow-ui/src/main/webapp/jsp/suggestions.jsp 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/bow-ui/src/main/webapp/jsp/suggestions.jsp 2011-08-18 02:37:38 UTC (rev 306)
@@ -24,18 +24,20 @@
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="org.chorem.bow.OpenSearchActions" %>
<%@page import="org.nuiton.wikitty.search.FacetTopic" %>
+<%@page import="org.chorem.bow.action.OpenSearchSuggestionAction"%>
<%@page import="java.util.List" %>
<%
-OpenSearchActions osa = (OpenSearchActions) request.getAttribute("openSearchAction");
+OpenSearchSuggestionAction action = OpenSearchSuggestionAction.getAction();
+OpenSearchActions osa = action.getOpenSearchActions();
if (osa != null) {
String[] word = osa.getSearch();
if (word != null) {
List<FacetTopic> suggestions = osa.getSuggestionList();
if (suggestions != null) {
- %>
- <%=osa.getJsonResult()%>
- <%
+%>
+<%=osa.getJsonResult()%>
+<%
}
}
}
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-08-16 23:13:25 UTC (rev 305)
+++ trunk/pom.xml 2011-08-18 02:37:38 UTC (rev 306)
@@ -126,6 +126,7 @@
<wikittyVersion>3.2-SNAPSHOT</wikittyVersion>
<slf4jVersion>1.6.1</slf4jVersion>
<struts2Version>2.2.3</struts2Version>
+ <struts2jqueryVersion>3.1.0</struts2jqueryVersion>
<htmlParserVersion>1.6</htmlParserVersion>
<javaxMailVersion>1.4.3</javaxMailVersion>
<servletApiVersion>2.5</servletApiVersion>
@@ -179,6 +180,12 @@
</dependency>
<dependency>
+ <groupId>com.jgeppert.struts2.jquery</groupId>
+ <artifactId>struts2-jquery-plugin</artifactId>
+ <version>${struts2jqueryVersion}</version>
+ </dependency>
+
+ <dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version>
1
0
Author: tchemit
Date: 2011-08-17 01:13:25 +0200 (Wed, 17 Aug 2011)
New Revision: 305
Url: http://chorem.org/repositories/revision/bow/305
Log:
Update mavenpom4redmine to 3.0.1.
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-08-16 18:19:34 UTC (rev 304)
+++ trunk/pom.xml 2011-08-16 23:13:25 UTC (rev 305)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>3.0</version>
+ <version>3.0.1</version>
</parent>
<groupId>org.chorem</groupId>
1
0
r304 - in trunk: . bow-ui bow-ui/src/main/java/org/chorem/bow bow-ui/src/main/java/org/chorem/bow/action bow-ui/src/main/resources bow-ui/src/main/resources/i18n bow-ui/src/main/webapp/jsp bow-ui/src/main/webapp/jsp/inc bow-ui/src/main/xmi src/site/rst/developper
by bpoussin@users.chorem.org 16 Aug '11
by bpoussin@users.chorem.org 16 Aug '11
16 Aug '11
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.
1
0
Author: bpoussin
Date: 2011-08-13 03:00:21 +0200 (Sat, 13 Aug 2011)
New Revision: 303
Url: http://chorem.org/repositories/revision/bow/303
Log:
Anomalie #431: Bad sort order for last added bookmark
Modified:
trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java
Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java
===================================================================
--- trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java 2011-08-04 09:52:39 UTC (rev 302)
+++ trunk/bow-ui/src/main/java/org/chorem/bow/BowInit.java 2011-08-13 01:00:21 UTC (rev 303)
@@ -29,6 +29,7 @@
import javax.servlet.http.HttpServletRequest;
import java.util.List;
+import org.nuiton.wikitty.search.Search;
public class BowInit {
@@ -107,12 +108,12 @@
Criteria criteria = BookmarkUtils.getBookmarkListCriteriaByUser(user, null);
if (criteria != null) {
- Criteria sortCriteria =
- criteria.addSortDescending(BowBookmark.FQ_FIELD_BOWBOOKMARK_CLICK)
+ 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 =
- criteria.addSortDescending(BowBookmark.FQ_FIELD_BOWBOOKMARK_CREATIONDATE)
+ sortCriteria =Search.query(criteria).criteria()
+ .addSortDescending(BowBookmark.FQ_FIELD_BOWBOOKMARK_CREATIONDATE)
.setEndIndex(MAX_ELEMENT_NUMBER);
List<BowBookmark> lastBookmarks =
proxy.findAllByCriteria(BowBookmark.class, sortCriteria).getAll();
1
0
Author: tchemit
Date: 2011-08-04 11:52:39 +0200 (Thu, 04 Aug 2011)
New Revision: 302
Url: http://chorem.org/repositories/revision/bow/302
Log:
Update mavenpom4redmine to 3.0.
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-06-20 15:22:50 UTC (rev 301)
+++ trunk/pom.xml 2011-08-04 09:52:39 UTC (rev 302)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.5.5</version>
+ <version>3.0</version>
</parent>
<groupId>org.chorem</groupId>
1
0