Commit d86b66ef authored by Liang Ding's avatar Liang Ding

Merge remote-tracking branch 'refs/remotes/origin/2.0.0-dev'

parents 1326eddf 204f9cee
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
Description: Solo POM. Description: Solo POM.
Version: 3.15.1.32, Mar 19, 2017 Version: 3.16.1.35, Apr 11, 2017
Author: <a href="http://88250.b3log.org">Liang Ding</a> Author: <a href="http://88250.b3log.org">Liang Ding</a>
Author: <a href="http://www.annpeter.cn">Ann Peter</a> Author: <a href="http://www.annpeter.cn">Ann Peter</a>
Author: <a href="http://vanessa.b3log.org">Vanessa</a>
--> -->
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
...@@ -13,7 +14,7 @@ ...@@ -13,7 +14,7 @@
<artifactId>solo</artifactId> <artifactId>solo</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<name>Solo</name> <name>Solo</name>
<version>1.9.0</version> <version>2.0.0</version>
<description> <description>
A blogging system written in Java, feel free to create your or your team own blog. 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧。 A blogging system written in Java, feel free to create your or your team own blog. 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧。
</description> </description>
...@@ -106,7 +107,7 @@ ...@@ -106,7 +107,7 @@
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.b3log.latke.version>2.3.8</org.b3log.latke.version> <org.b3log.latke.version>2.3.10</org.b3log.latke.version>
<servlet.version>3.1.0</servlet.version> <servlet.version>3.1.0</servlet.version>
<slf4j.version>1.7.5</slf4j.version> <slf4j.version>1.7.5</slf4j.version>
...@@ -125,7 +126,7 @@ ...@@ -125,7 +126,7 @@
<maven-license-plugin.version>1.9.0</maven-license-plugin.version> <maven-license-plugin.version>1.9.0</maven-license-plugin.version>
<coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version> <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
<cobertura-maven-plugin.version>2.7</cobertura-maven-plugin.version> <cobertura-maven-plugin.version>2.7</cobertura-maven-plugin.version>
<maven-min-plugin.version>1.0.0</maven-min-plugin.version> <maven-min-plugin.version>1.0.3</maven-min-plugin.version>
<!-- Unit Test --> <!-- Unit Test -->
<testng.version>6.1.1</testng.version> <testng.version>6.1.1</testng.version>
<!-- JDBC Drivers --> <!-- JDBC Drivers -->
...@@ -383,6 +384,7 @@ ...@@ -383,6 +384,7 @@
<param>preference.js</param> <param>preference.js</param>
<param>pluginList.js</param> <param>pluginList.js</param>
<param>userList.js</param> <param>userList.js</param>
<param>categoryList.js</param>
<param>commentList.js</param> <param>commentList.js</param>
<param>plugin.js</param> <param>plugin.js</param>
<param>main.js</param> <param>main.js</param>
...@@ -428,5 +430,20 @@ ...@@ -428,5 +430,20 @@
<finalName>solo</finalName> <finalName>solo</finalName>
</build> </build>
<repositories>
<repository>
<id>aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</pluginRepository>
</pluginRepositories>
</project> </project>
...@@ -15,14 +15,6 @@ ...@@ -15,14 +15,6 @@
*/ */
package org.b3log.solo; package org.b3log.solo;
import java.util.ResourceBundle;
import java.util.Set;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletRequestEvent;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
...@@ -56,11 +48,20 @@ import org.b3log.solo.service.UpgradeService; ...@@ -56,11 +48,20 @@ import org.b3log.solo.service.UpgradeService;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletRequestEvent;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import java.util.ResourceBundle;
import java.util.Set;
/** /**
* Solo Servlet listener. * Solo Servlet listener.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.9.2.19, Feb 20, 2017 * @version 1.9.2.20, Apr 10, 2017
* @since 0.3.1 * @since 0.3.1
*/ */
public final class SoloServletListener extends AbstractServletListener { public final class SoloServletListener extends AbstractServletListener {
...@@ -68,7 +69,7 @@ public final class SoloServletListener extends AbstractServletListener { ...@@ -68,7 +69,7 @@ public final class SoloServletListener extends AbstractServletListener {
/** /**
* Solo version. * Solo version.
*/ */
public static final String VERSION = "1.9.0"; public static final String VERSION = "2.0.0";
/** /**
* Logger. * Logger.
......
...@@ -15,16 +15,7 @@ ...@@ -15,16 +15,7 @@
*/ */
package org.b3log.solo; package org.b3log.solo;
import java.awt.Desktop; import org.apache.commons.cli.*;
import java.io.File;
import java.net.URI;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.RuntimeMode; import org.b3log.latke.RuntimeMode;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
...@@ -35,6 +26,10 @@ import org.eclipse.jetty.util.log.Log; ...@@ -35,6 +26,10 @@ import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Slf4jLog; import org.eclipse.jetty.util.log.Slf4jLog;
import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jetty.webapp.WebAppContext;
import java.awt.*;
import java.io.File;
import java.net.URI;
/** /**
* Solo with embedded Jetty, <a href="https://github.com/b3log/solo/issues/12037">standalone mode</a>. * Solo with embedded Jetty, <a href="https://github.com/b3log/solo/issues/12037">standalone mode</a>.
* *
......
...@@ -15,19 +15,13 @@ ...@@ -15,19 +15,13 @@
*/ */
package org.b3log.solo.api.metaweblog; package org.b3log.solo.api.metaweblog;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
...@@ -43,17 +37,20 @@ import org.b3log.solo.model.Article; ...@@ -43,17 +37,20 @@ import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Tag; import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.ArticleRepository; import org.b3log.solo.repository.ArticleRepository;
import org.b3log.solo.service.ArticleMgmtService; import org.b3log.solo.service.*;
import org.b3log.solo.service.ArticleQueryService;
import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.TagQueryService;
import org.b3log.solo.service.UserQueryService;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.json.XML; import org.json.XML;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
/** /**
* <a href="http://www.xmlrpc.com/metaWeblogApi">MetaWeblog API</a> requests processing. * <a href="http://www.xmlrpc.com/metaWeblogApi">MetaWeblog API</a> requests processing.
* *
...@@ -423,7 +420,7 @@ public class MetaWeblogAPI { ...@@ -423,7 +420,7 @@ public class MetaWeblogAPI {
} }
} }
final boolean publish = 1 == params.getJSONObject(INDEX_PUBLISH).getJSONObject("value").getInt("boolean") ? true : false; final boolean publish = 1 == params.getJSONObject(INDEX_PUBLISH).getJSONObject("value").getInt("boolean");
ret.put(Article.ARTICLE_IS_PUBLISHED, publish); ret.put(Article.ARTICLE_IS_PUBLISHED, publish);
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package org.b3log.solo.api.symphony; package org.b3log.solo.api.symphony;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
...@@ -39,7 +40,6 @@ import org.json.JSONObject; ...@@ -39,7 +40,6 @@ import org.json.JSONObject;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist; import org.jsoup.safety.Whitelist;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
......
...@@ -15,16 +15,11 @@ ...@@ -15,16 +15,11 @@
*/ */
package org.b3log.solo.api.symphony; package org.b3log.solo.api.symphony;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.Transaction; import org.b3log.latke.repository.Transaction;
...@@ -52,6 +47,12 @@ import org.b3log.solo.util.Comments; ...@@ -52,6 +47,12 @@ import org.b3log.solo.util.Comments;
import org.b3log.solo.util.QueryResults; import org.b3log.solo.util.QueryResults;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
/** /**
* Comment receiver (from B3log Symphony). * Comment receiver (from B3log Symphony).
* *
...@@ -229,7 +230,7 @@ public class CommentReceiver { ...@@ -229,7 +230,7 @@ public class CommentReceiver {
comment.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, ""); comment.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, "");
comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, ""); comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, "");
LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]", LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]",
new String[]{originalCommentId, commentName, commentContent}); originalCommentId, commentName, commentContent);
} }
} else { } else {
comment.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, ""); comment.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, "");
......
...@@ -16,14 +16,10 @@ ...@@ -16,14 +16,10 @@
package org.b3log.solo.dev; package org.b3log.solo.dev;
import java.io.IOException;
import java.util.Date;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.RuntimeMode; import org.b3log.latke.RuntimeMode;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
...@@ -37,6 +33,11 @@ import org.b3log.solo.service.ArticleMgmtService; ...@@ -37,6 +33,11 @@ import org.b3log.solo.service.ArticleMgmtService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
/** /**
* Generates some dummy articles for development testing. * Generates some dummy articles for development testing.
......
...@@ -65,7 +65,7 @@ public final class ArticleCommentReplyNotifier extends AbstractEventListener<JSO ...@@ -65,7 +65,7 @@ public final class ArticleCommentReplyNotifier extends AbstractEventListener<JSO
LOGGER.log(Level.DEBUG, LOGGER.log(Level.DEBUG,
"Processing an event[type={0}, data={1}] in listener[className={2}]", "Processing an event[type={0}, data={1}] in listener[className={2}]",
new Object[]{event.getType(), eventData, ArticleCommentReplyNotifier.class.getName()}); event.getType(), eventData, ArticleCommentReplyNotifier.class.getName());
final String originalCommentId = comment.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID); final String originalCommentId = comment.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID);
if (Strings.isEmptyOrNull(originalCommentId)) { if (Strings.isEmptyOrNull(originalCommentId)) {
...@@ -144,7 +144,7 @@ public final class ArticleCommentReplyNotifier extends AbstractEventListener<JSO ...@@ -144,7 +144,7 @@ public final class ArticleCommentReplyNotifier extends AbstractEventListener<JSO
message.setHtmlBody(mailBody); message.setHtmlBody(mailBody);
LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]", LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]",
new Object[]{mailSubject, mailBody, originalCommentEmail}); mailSubject, mailBody, originalCommentEmail);
mailService.send(message); mailService.send(message);
} catch (final Exception e) { } catch (final Exception e) {
......
...@@ -65,7 +65,7 @@ public final class PageCommentReplyNotifier extends AbstractEventListener<JSONOb ...@@ -65,7 +65,7 @@ public final class PageCommentReplyNotifier extends AbstractEventListener<JSONOb
final JSONObject page = eventData.optJSONObject(Page.PAGE); final JSONObject page = eventData.optJSONObject(Page.PAGE);
LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]",
new Object[] {event.getType(), eventData, PageCommentReplyNotifier.class.getName()}); event.getType(), eventData, PageCommentReplyNotifier.class.getName());
final String originalCommentId = comment.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID); final String originalCommentId = comment.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID);
if (Strings.isEmptyOrNull(originalCommentId)) { if (Strings.isEmptyOrNull(originalCommentId)) {
...@@ -123,7 +123,7 @@ public final class PageCommentReplyNotifier extends AbstractEventListener<JSONOb ...@@ -123,7 +123,7 @@ public final class PageCommentReplyNotifier extends AbstractEventListener<JSONOb
message.setHtmlBody(mailBody); message.setHtmlBody(mailBody);
LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]", LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to [{2}]",
new Object[] {mailSubject, mailBody, originalCommentEmail}); mailSubject, mailBody, originalCommentEmail);
mailService.send(message); mailService.send(message);
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
......
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
package org.b3log.solo.event.ping; package org.b3log.solo.event.ping;
import java.net.URL;
import java.net.URLEncoder;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.AbstractEventListener; import org.b3log.latke.event.AbstractEventListener;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
...@@ -35,6 +33,9 @@ import org.b3log.solo.model.Option; ...@@ -35,6 +33,9 @@ import org.b3log.solo.model.Option;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import java.net.URL;
import java.net.URLEncoder;
/** /**
* This listener is responsible for pinging <a href="http://blogsearch.google.com"> * This listener is responsible for pinging <a href="http://blogsearch.google.com">
...@@ -93,7 +94,7 @@ public final class AddArticleGoogleBlogSearchPinger extends AbstractEventListene ...@@ -93,7 +94,7 @@ public final class AddArticleGoogleBlogSearchPinger extends AbstractEventListene
if (Latkes.getServePath().contains("localhost")) { if (Latkes.getServePath().contains("localhost")) {
LOGGER.log(Level.TRACE, LOGGER.log(Level.TRACE,
"Solo runs on local server, so should not ping " + "Google Blog Search Service for the article[title={0}]", "Solo runs on local server, so should not ping " + "Google Blog Search Service for the article[title={0}]",
new Object[] {article.getString(Article.ARTICLE_TITLE)}); article.getString(Article.ARTICLE_TITLE));
return; return;
} }
......
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
package org.b3log.solo.event.ping; package org.b3log.solo.event.ping;
import java.net.URL;
import java.net.URLEncoder;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.AbstractEventListener; import org.b3log.latke.event.AbstractEventListener;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
...@@ -35,6 +33,9 @@ import org.b3log.solo.model.Option; ...@@ -35,6 +33,9 @@ import org.b3log.solo.model.Option;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import java.net.URL;
import java.net.URLEncoder;
/** /**
* This listener is responsible for pinging <a href="http://blogsearch.google.com"> * This listener is responsible for pinging <a href="http://blogsearch.google.com">
...@@ -93,7 +94,7 @@ public final class UpdateArticleGoogleBlogSearchPinger extends AbstractEventList ...@@ -93,7 +94,7 @@ public final class UpdateArticleGoogleBlogSearchPinger extends AbstractEventList
if (Latkes.getServePath().contains("localhost")) { if (Latkes.getServePath().contains("localhost")) {
LOGGER.log(Level.TRACE, LOGGER.log(Level.TRACE,
"Solo runs on local server, so should not ping " + "Google Blog Search Service for the article[title={0}]", "Solo runs on local server, so should not ping " + "Google Blog Search Service for the article[title={0}]",
new Object[] {article.getString(Article.ARTICLE_TITLE)}); article.getString(Article.ARTICLE_TITLE));
return; return;
} }
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package org.b3log.solo.event.plugin; package org.b3log.solo.event.plugin;
import java.util.List;
import org.b3log.latke.event.AbstractEventListener; import org.b3log.latke.event.AbstractEventListener;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventException; import org.b3log.latke.event.EventException;
...@@ -31,6 +30,8 @@ import org.b3log.solo.repository.PluginRepository; ...@@ -31,6 +30,8 @@ import org.b3log.solo.repository.PluginRepository;
import org.b3log.solo.repository.impl.PluginRepositoryImpl; import org.b3log.solo.repository.impl.PluginRepositoryImpl;
import org.b3log.solo.service.PluginMgmtService; import org.b3log.solo.service.PluginMgmtService;
import java.util.List;
/** /**
* This listener is responsible for refreshing plugin after every loaded. * This listener is responsible for refreshing plugin after every loaded.
...@@ -51,7 +52,7 @@ public final class PluginRefresher extends AbstractEventListener<List<AbstractPl ...@@ -51,7 +52,7 @@ public final class PluginRefresher extends AbstractEventListener<List<AbstractPl
final List<AbstractPlugin> plugins = event.getData(); final List<AbstractPlugin> plugins = event.getData();
LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]",
new Object[] {event.getType(), plugins, PluginRefresher.class.getName()}); event.getType(), plugins, PluginRefresher.class.getName());
final LatkeBeanManager beanManager = Lifecycle.getBeanManager(); final LatkeBeanManager beanManager = Lifecycle.getBeanManager();
final PluginRepository pluginRepository = beanManager.getReference(PluginRepositoryImpl.class); final PluginRepository pluginRepository = beanManager.getReference(PluginRepositoryImpl.class);
......
...@@ -15,9 +15,6 @@ ...@@ -15,9 +15,6 @@
*/ */
package org.b3log.solo.event.rhythm; package org.b3log.solo.event.rhythm;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.AbstractEventListener; import org.b3log.latke.event.AbstractEventListener;
...@@ -40,6 +37,10 @@ import org.b3log.solo.model.Option; ...@@ -40,6 +37,10 @@ import org.b3log.solo.model.Option;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
/** /**
* This listener is responsible for sending article to B3log Rhythm. * This listener is responsible for sending article to B3log Rhythm.
* *
...@@ -83,7 +84,7 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> { ...@@ -83,7 +84,7 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
final JSONObject data = event.getData(); final JSONObject data = event.getData();
LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]",
new Object[]{event.getType(), data, ArticleSender.class.getName()}); event.getType(), data, ArticleSender.class.getName());
try { try {
final JSONObject originalArticle = data.getJSONObject(Article.ARTICLE); final JSONObject originalArticle = data.getJSONObject(Article.ARTICLE);
...@@ -108,7 +109,7 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> { ...@@ -108,7 +109,7 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
if (Latkes.getServePath().contains("localhost")) { if (Latkes.getServePath().contains("localhost")) {
LOGGER.log(Level.INFO, "Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm", LOGGER.log(Level.INFO, "Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm",
new Object[]{originalArticle.getString(Keys.OBJECT_ID), originalArticle.getString(Article.ARTICLE_TITLE)}); originalArticle.getString(Keys.OBJECT_ID), originalArticle.getString(Article.ARTICLE_TITLE));
return; return;
} }
......
...@@ -15,9 +15,6 @@ ...@@ -15,9 +15,6 @@
*/ */
package org.b3log.solo.event.rhythm; package org.b3log.solo.event.rhythm;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.AbstractEventListener; import org.b3log.latke.event.AbstractEventListener;
...@@ -40,6 +37,10 @@ import org.b3log.solo.model.Option; ...@@ -40,6 +37,10 @@ import org.b3log.solo.model.Option;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
/** /**
* This listener is responsible for updating article to B3log Rhythm. * This listener is responsible for updating article to B3log Rhythm.
* *
...@@ -82,7 +83,7 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> { ...@@ -82,7 +83,7 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> {
final JSONObject data = event.getData(); final JSONObject data = event.getData();
LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]",
new Object[]{event.getType(), data, ArticleUpdater.class.getName()}); event.getType(), data, ArticleUpdater.class.getName());
try { try {
final JSONObject originalArticle = data.getJSONObject(Article.ARTICLE); final JSONObject originalArticle = data.getJSONObject(Article.ARTICLE);
...@@ -107,7 +108,7 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> { ...@@ -107,7 +108,7 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> {
if (Latkes.getServePath().contains("localhost")) { if (Latkes.getServePath().contains("localhost")) {
LOGGER.log(Level.INFO, "Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm", LOGGER.log(Level.INFO, "Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm",
new Object[]{originalArticle.getString(Keys.OBJECT_ID), originalArticle.getString(Article.ARTICLE_TITLE)}); originalArticle.getString(Keys.OBJECT_ID), originalArticle.getString(Article.ARTICLE_TITLE));
return; return;
} }
......
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
package org.b3log.solo.event.symphony; package org.b3log.solo.event.symphony;
import java.net.MalformedURLException;
import java.net.URL;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.AbstractEventListener; import org.b3log.latke.event.AbstractEventListener;
...@@ -39,6 +37,9 @@ import org.b3log.solo.model.Option; ...@@ -39,6 +37,9 @@ import org.b3log.solo.model.Option;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
/** /**
* This listener is responsible for sending comment to B3log Symphony. * This listener is responsible for sending comment to B3log Symphony.
...@@ -78,7 +79,7 @@ public final class CommentSender extends AbstractEventListener<JSONObject> { ...@@ -78,7 +79,7 @@ public final class CommentSender extends AbstractEventListener<JSONObject> {
final JSONObject data = event.getData(); final JSONObject data = event.getData();
LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]", LOGGER.log(Level.DEBUG, "Processing an event[type={0}, data={1}] in listener[className={2}]",
new Object[] {event.getType(), data, ArticleSender.class.getName()}); event.getType(), data, ArticleSender.class.getName());
try { try {
final JSONObject originalComment = data.getJSONObject(Comment.COMMENT); final JSONObject originalComment = data.getJSONObject(Comment.COMMENT);
...@@ -93,7 +94,7 @@ public final class CommentSender extends AbstractEventListener<JSONObject> { ...@@ -93,7 +94,7 @@ public final class CommentSender extends AbstractEventListener<JSONObject> {
if (Latkes.getServePath().contains("localhost")) { if (Latkes.getServePath().contains("localhost")) {
LOGGER.log(Level.TRACE, "Solo runs on local server, so should not send this comment[id={0}] to Symphony", LOGGER.log(Level.TRACE, "Solo runs on local server, so should not send this comment[id={0}] to Symphony",
new Object[] {originalComment.getString(Keys.OBJECT_ID)}); originalComment.getString(Keys.OBJECT_ID));
return; return;
} }
......
...@@ -16,15 +16,6 @@ ...@@ -16,15 +16,6 @@
package org.b3log.solo.filter; package org.b3log.solo.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.ioc.LatkeBeanManager; import org.b3log.latke.ioc.LatkeBeanManager;
import org.b3log.latke.ioc.Lifecycle; import org.b3log.latke.ioc.Lifecycle;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
...@@ -35,6 +26,11 @@ import org.b3log.solo.service.UserMgmtService; ...@@ -35,6 +26,11 @@ import org.b3log.solo.service.UserMgmtService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** /**
* Authentication filter. * Authentication filter.
......
...@@ -15,15 +15,6 @@ ...@@ -15,15 +15,6 @@
*/ */
package org.b3log.solo.filter; package org.b3log.solo.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.LatkeBeanManager; import org.b3log.latke.ioc.LatkeBeanManager;
...@@ -37,6 +28,11 @@ import org.b3log.latke.servlet.HttpControl; ...@@ -37,6 +28,11 @@ import org.b3log.latke.servlet.HttpControl;
import org.b3log.latke.servlet.renderer.HTTP500Renderer; import org.b3log.latke.servlet.renderer.HTTP500Renderer;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** /**
* Checks initialization filter. * Checks initialization filter.
* *
......
...@@ -16,15 +16,6 @@ ...@@ -16,15 +16,6 @@
package org.b3log.solo.filter; package org.b3log.solo.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
...@@ -48,6 +39,11 @@ import org.b3log.solo.service.ArticleQueryService; ...@@ -48,6 +39,11 @@ import org.b3log.solo.service.ArticleQueryService;
import org.b3log.solo.service.PermalinkQueryService; import org.b3log.solo.service.PermalinkQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** /**
* Article/Page permalink filter. * Article/Page permalink filter.
......
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.solo.model;
/**
* This class defines all category model relevant keys.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.0, Mar 30, 2017
* @since 2.0.0
*/
public final class Category {
/**
* Category.
*/
public static final String CATEGORY = "category";
/**
* Categories.
*/
public static final String CATEGORIES = "categories";
/**
* Key of category title.
*/
public static final String CATEGORY_TITLE = "categoryTitle";
/**
* Key of category URI.
*/
public static final String CATEGORY_URI = "categoryURI";
/**
* Key of category description.
*/
public static final String CATEGORY_DESCRIPTION = "categoryDescription";
/**
* Key of category order.
*/
public static final String CATEGORY_ORDER = "categoryOrder";
/**
* Key of category tag count.
*/
public static final String CATEGORY_TAG_CNT = "categoryTagCnt";
//// Transient ////
/**
* Key of category tags.
*/
public static final String CATEGORY_T_TAGS = "categoryTags";
/**
* Private default constructor.
*/
private Category() {
}
}
...@@ -20,7 +20,7 @@ package org.b3log.solo.model; ...@@ -20,7 +20,7 @@ package org.b3log.solo.model;
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="mailto:dongxu.wang@acm.org">Dongxu Wang</a> * @author <a href="mailto:dongxu.wang@acm.org">Dongxu Wang</a>
* @version 1.4.5.1, Nov 1, 2015 * @version 1.5.5.1, Apr 8, 2017
* @since 0.3.1 * @since 0.3.1
*/ */
public final class Common { public final class Common {
...@@ -35,6 +35,11 @@ public final class Common { ...@@ -35,6 +35,11 @@ public final class Common {
*/ */
public static final String MOST_USED_TAGS = "mostUsedTags"; public static final String MOST_USED_TAGS = "mostUsedTags";
/**
* Most used categories.
*/
public static final String MOST_USED_CATEGORIES = "mostUsedCategories";
/** /**
* Most comment count articles. * Most comment count articles.
*/ */
......
...@@ -93,7 +93,7 @@ public enum PageTypes { ...@@ -93,7 +93,7 @@ public enum PageTypes {
* @param langLabel the specified language label * @param langLabel the specified language label
* @param typeName the specified type name * @param typeName the specified type name
*/ */
private PageTypes(final String langLabel, final String typeName) { PageTypes(final String langLabel, final String typeName) {
this.langLabel = langLabel; this.langLabel = langLabel;
this.typeName = typeName; this.typeName = typeName;
} }
......
...@@ -16,13 +16,10 @@ ...@@ -16,13 +16,10 @@
package org.b3log.solo.model.feed.atom; package org.b3log.solo.model.feed.atom;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.TimeZone;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import java.util.*;
/** /**
* Entry. * Entry.
......
...@@ -15,11 +15,12 @@ ...@@ -15,11 +15,12 @@
*/ */
package org.b3log.solo.model.feed.atom; package org.b3log.solo.model.feed.atom;
import org.apache.commons.lang.time.DateFormatUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone; import java.util.TimeZone;
import org.apache.commons.lang.time.DateFormatUtils;
/** /**
* Feed. * Feed.
......
...@@ -15,10 +15,11 @@ ...@@ -15,10 +15,11 @@
*/ */
package org.b3log.solo.model.feed.rss; package org.b3log.solo.model.feed.rss;
import org.apache.commons.lang.time.DateFormatUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import org.apache.commons.lang.time.DateFormatUtils;
/** /**
* RSS 2.0 channel. * RSS 2.0 channel.
......
...@@ -15,11 +15,12 @@ ...@@ -15,11 +15,12 @@
*/ */
package org.b3log.solo.model.feed.rss; package org.b3log.solo.model.feed.rss;
import org.apache.commons.lang.time.DateFormatUtils;
import java.util.Date; import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang.time.DateFormatUtils;
/** /**
* Item. * Item.
......
...@@ -16,14 +16,9 @@ ...@@ -16,14 +16,9 @@
package org.b3log.solo.plugin.broadcast; package org.b3log.solo.plugin.broadcast;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.Future;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
...@@ -46,6 +41,12 @@ import org.b3log.solo.service.UserQueryService; ...@@ -46,6 +41,12 @@ import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.QueryResults; import org.b3log.solo.util.QueryResults;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.Future;
/** /**
* Broadcast chance processor. * Broadcast chance processor.
......
...@@ -15,14 +15,6 @@ ...@@ -15,14 +15,6 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
...@@ -30,6 +22,7 @@ import org.b3log.latke.Latkes; ...@@ -30,6 +22,7 @@ import org.b3log.latke.Latkes;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventException; import org.b3log.latke.event.EventException;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
...@@ -45,12 +38,7 @@ import org.b3log.latke.servlet.renderer.JSONRenderer; ...@@ -45,12 +38,7 @@ import org.b3log.latke.servlet.renderer.JSONRenderer;
import org.b3log.latke.servlet.renderer.TextHTMLRenderer; import org.b3log.latke.servlet.renderer.TextHTMLRenderer;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.Dates; import org.b3log.latke.util.*;
import org.b3log.latke.util.Locales;
import org.b3log.latke.util.Paginator;
import org.b3log.latke.util.Requests;
import org.b3log.latke.util.Stopwatchs;
import org.b3log.latke.util.Strings;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.SoloServletListener;
import org.b3log.solo.event.EventTypes; import org.b3log.solo.event.EventTypes;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
...@@ -64,6 +52,14 @@ import org.json.JSONException; ...@@ -64,6 +52,14 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;
/** /**
* Article processor. * Article processor.
* *
...@@ -670,7 +666,7 @@ public class ArticleProcessor { ...@@ -670,7 +666,7 @@ public class ArticleProcessor {
final String authorId = getAuthorId(requestURI); final String authorId = getAuthorId(requestURI);
LOGGER.log(Level.DEBUG, "Request author articles[requestURI={0}, authorId={1}]", new Object[]{requestURI, authorId}); LOGGER.log(Level.DEBUG, "Request author articles[requestURI={0}, authorId={1}]", requestURI, authorId);
final int currentPageNum = getAuthorCurrentPageNum(requestURI, authorId); final int currentPageNum = getAuthorCurrentPageNum(requestURI, authorId);
...@@ -679,7 +675,7 @@ public class ArticleProcessor { ...@@ -679,7 +675,7 @@ public class ArticleProcessor {
return; return;
} }
LOGGER.log(Level.DEBUG, "Request author articles[authorId={0}, currentPageNum={1}]", new Object[]{authorId, currentPageNum}); LOGGER.log(Level.DEBUG, "Request author articles[authorId={0}, currentPageNum={1}]", authorId, currentPageNum);
final JSONObject preference = preferenceQueryService.getPreference(); final JSONObject preference = preferenceQueryService.getPreference();
...@@ -777,7 +773,7 @@ public class ArticleProcessor { ...@@ -777,7 +773,7 @@ public class ArticleProcessor {
return; return;
} }
LOGGER.log(Level.DEBUG, "Request archive date[string={0}, currentPageNum={1}]", new Object[]{archiveDateString, currentPageNum}); LOGGER.log(Level.DEBUG, "Request archive date[string={0}, currentPageNum={1}]", archiveDateString, currentPageNum);
final JSONObject result = archiveDateQueryService.getByArchiveDateString(archiveDateString); final JSONObject result = archiveDateQueryService.getByArchiveDateString(archiveDateString);
if (null == result) { if (null == result) {
......
...@@ -15,16 +15,10 @@ ...@@ -15,16 +15,10 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.net.URL;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.RuntimeEnv; import org.b3log.latke.RuntimeEnv;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
...@@ -43,14 +37,17 @@ import org.b3log.solo.model.Article; ...@@ -43,14 +37,17 @@ import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Statistic; import org.b3log.solo.model.Statistic;
import org.b3log.solo.model.Tag; import org.b3log.solo.model.Tag;
import org.b3log.solo.service.ArticleQueryService; import org.b3log.solo.service.*;
import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.StatisticQueryService;
import org.b3log.solo.service.TagQueryService;
import org.b3log.solo.service.UserQueryService;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URL;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/** /**
* Blog processor. * Blog processor.
* *
......
...@@ -16,19 +16,6 @@ ...@@ -16,19 +16,6 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.Random;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.RuntimeEnv; import org.b3log.latke.RuntimeEnv;
...@@ -44,6 +31,16 @@ import org.b3log.latke.servlet.annotation.RequestProcessor; ...@@ -44,6 +31,16 @@ import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.PNGRenderer; import org.b3log.latke.servlet.renderer.PNGRenderer;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.SoloServletListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.net.URL;
import java.util.Enumeration;
import java.util.Random;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/** /**
* Captcha processor. * Captcha processor.
...@@ -112,7 +109,7 @@ public class CaptchaProcessor { ...@@ -112,7 +109,7 @@ public class CaptchaProcessor {
final HttpSession httpSession = request.getSession(false); final HttpSession httpSession = request.getSession(false);
if (null != httpSession) { if (null != httpSession) {
LOGGER.log(Level.DEBUG, "Captcha[{0}] for session[id={1}]", new Object[] {captcha, httpSession.getId()}); LOGGER.log(Level.DEBUG, "Captcha[{0}] for session[id={1}]", captcha, httpSession.getId());
httpSession.setAttribute(CAPTCHA, captcha); httpSession.setAttribute(CAPTCHA, captcha);
} }
......
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.solo.processor;
import org.b3log.latke.Keys;
import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination;
import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.Requests;
import org.b3log.latke.util.Strings;
import org.b3log.solo.model.Article;
import org.b3log.solo.model.Category;
import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option;
import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.*;
import org.b3log.solo.util.Skins;
import org.json.JSONException;
import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
* Category processor.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.2, Apr 10, 2017
* @since 2.0.0
*/
@RequestProcessor
public class CategoryProcessor {
/**
* Logger.
*/
private static final Logger LOGGER = Logger.getLogger(CategoryProcessor.class);
/**
* Filler.
*/
@Inject
private Filler filler;
/**
* Language service.
*/
@Inject
private LangPropsService langPropsService;
/**
* Preference query service.
*/
@Inject
private PreferenceQueryService preferenceQueryService;
/**
* Article query service.
*/
@Inject
private ArticleQueryService articleQueryService;
/**
* User query service.
*/
@Inject
private UserQueryService userQueryService;
/**
* Category query service.
*/
@Inject
private CategoryQueryService categoryQueryService;
/**
* Statistic management service.
*/
@Inject
private StatisticMgmtService statisticMgmtService;
/**
* Gets the request page number from the specified request URI and category URI.
*
* @param requestURI the specified request URI
* @param categoryURI the specified category URI
* @return page number, returns {@code -1} if the specified request URI can not convert to an number
*/
private static int getCurrentPageNum(final String requestURI, final String categoryURI) {
if (Strings.isEmptyOrNull(categoryURI)) {
return -1;
}
final String pageNumString = requestURI.substring((Latkes.getContextPath() + "/category/" + categoryURI + "/").length());
return Requests.getCurrentPageNum(pageNumString);
}
/**
* Gets category URI from the specified URI.
*
* @param requestURI the specified request URI
* @return category URI
*/
private static String getCategoryURI(final String requestURI) {
final String path = requestURI.substring((Latkes.getContextPath() + "/category/").length());
if (path.contains("/")) {
return path.substring(0, path.indexOf("/"));
} else {
return path.substring(0);
}
}
/**
* Shows articles related with a category with the specified context.
*
* @param context the specified context
* @throws IOException io exception
*/
@RequestProcessing(value = "/category/**", method = HTTPRequestMethod.GET)
public void showCategoryArticles(final HTTPRequestContext context) throws IOException {
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer();
context.setRenderer(renderer);
renderer.setTemplateName("category-articles.ftl");
final Map<String, Object> dataModel = renderer.getDataModel();
final HttpServletRequest request = context.getRequest();
final HttpServletResponse response = context.getResponse();
try {
String requestURI = request.getRequestURI();
if (!requestURI.endsWith("/")) {
requestURI += "/";
}
String categoryURI = getCategoryURI(requestURI);
final int currentPageNum = getCurrentPageNum(requestURI, categoryURI);
if (-1 == currentPageNum) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
LOGGER.log(Level.DEBUG, "Category [URI={0}, currentPageNum={1}]", categoryURI, currentPageNum);
categoryURI = URLDecoder.decode(categoryURI, "UTF-8");
final JSONObject category = categoryQueryService.getByURI(categoryURI);
if (null == category) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
dataModel.put(Category.CATEGORY, category);
final JSONObject preference = preferenceQueryService.getPreference();
final int pageSize = preference.getInt(Option.ID_C_ARTICLE_LIST_DISPLAY_COUNT);
final String categoryId = category.optString(Keys.OBJECT_ID);
final JSONObject result = articleQueryService.getCategoryArticles(categoryId, currentPageNum, pageSize);
final List<JSONObject> articles = (List<JSONObject>) result.opt(Article.ARTICLES);
Skins.fillLangs(preference.optString(Option.ID_C_LOCALE_STRING), (String) request.getAttribute(Keys.TEMAPLTE_DIR_NAME), dataModel);
final boolean hasMultipleUsers = userQueryService.hasMultipleUsers();
if (hasMultipleUsers) {
filler.setArticlesExProperties(request, articles, preference);
} else {
// All articles composed by the same author
final JSONObject author = articleQueryService.getAuthor(articles.get(0));
filler.setArticlesExProperties(request, articles, author, preference);
}
final int pageCount = result.optJSONObject(Pagination.PAGINATION).optInt(Pagination.PAGINATION_PAGE_COUNT);
if (0 == pageCount) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
final List<Integer> pageNums = (List) result.optJSONObject(Pagination.PAGINATION).opt(Pagination.PAGINATION_PAGE_NUMS);
fillPagination(dataModel, pageCount, currentPageNum, articles, pageNums);
dataModel.put(Common.PATH, "/category/" + URLEncoder.encode(categoryURI, "UTF-8"));
filler.fillSide(request, dataModel, preference);
filler.fillBlogHeader(request, response, dataModel, preference);
filler.fillBlogFooter(request, dataModel, preference);
statisticMgmtService.incBlogViewCount(request, response);
} catch (final ServiceException | JSONException e) {
LOGGER.log(Level.ERROR, e.getMessage(), e);
try {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} catch (final IOException ex) {
LOGGER.error(ex.getMessage());
}
}
}
/**
* Fills pagination.
*
* @param dataModel the specified data model
* @param pageCount the specified page count
* @param currentPageNum the specified current page number
* @param articles the specified articles
* @param pageNums the specified page numbers
*/
private void fillPagination(final Map<String, Object> dataModel,
final int pageCount, final int currentPageNum,
final List<JSONObject> articles,
final List<Integer> pageNums) {
final String previousPageNum = Integer.toString(currentPageNum > 1 ? currentPageNum - 1 : 0);
dataModel.put(Pagination.PAGINATION_PREVIOUS_PAGE_NUM, "0".equals(previousPageNum) ? "" : previousPageNum);
if (pageCount == currentPageNum + 1) { // The next page is the last page
dataModel.put(Pagination.PAGINATION_NEXT_PAGE_NUM, "");
} else {
dataModel.put(Pagination.PAGINATION_NEXT_PAGE_NUM, currentPageNum + 1);
}
dataModel.put(Article.ARTICLES, articles);
dataModel.put(Pagination.PAGINATION_CURRENT_PAGE_NUM, currentPageNum);
dataModel.put(Pagination.PAGINATION_FIRST_PAGE_NUM, pageNums.get(0));
dataModel.put(Pagination.PAGINATION_LAST_PAGE_NUM, pageNums.get(pageNums.size() - 1));
dataModel.put(Pagination.PAGINATION_PAGE_COUNT, pageCount);
dataModel.put(Pagination.PAGINATION_PAGE_NUMS, pageNums);
}
}
...@@ -18,6 +18,7 @@ package org.b3log.solo.processor; ...@@ -18,6 +18,7 @@ package org.b3log.solo.processor;
import freemarker.template.Template; import freemarker.template.Template;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
...@@ -37,7 +38,6 @@ import org.b3log.solo.service.UserQueryService; ...@@ -37,7 +38,6 @@ import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.json.JSONObject; import org.json.JSONObject;
import javax.inject.Inject;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
......
...@@ -15,12 +15,8 @@ ...@@ -15,12 +15,8 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -37,6 +33,11 @@ import org.b3log.solo.processor.util.Filler; ...@@ -37,6 +33,11 @@ import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
/** /**
* Error processor. * Error processor.
* *
...@@ -90,7 +91,7 @@ public class ErrorProcessor { ...@@ -90,7 +91,7 @@ public class ErrorProcessor {
String templateName = StringUtils.substringAfterLast(requestURI, "/"); String templateName = StringUtils.substringAfterLast(requestURI, "/");
templateName = StringUtils.substringBefore(templateName, ".") + ".ftl"; templateName = StringUtils.substringBefore(templateName, ".") + ".ftl";
LOGGER.log(Level.DEBUG, "Shows error page[requestURI={0}, templateName={1}]", new Object[]{requestURI, templateName}); LOGGER.log(Level.DEBUG, "Shows error page[requestURI={0}, templateName={1}]", requestURI, templateName);
final ConsoleRenderer renderer = new ConsoleRenderer(); final ConsoleRenderer renderer = new ConsoleRenderer();
......
...@@ -15,26 +15,14 @@ ...@@ -15,26 +15,14 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringEscapeUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.repository.CompositeFilter; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.CompositeFilterOperator;
import org.b3log.latke.repository.Filter;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.HTTPRequestMethod; import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
...@@ -61,6 +49,13 @@ import org.b3log.solo.service.UserQueryService; ...@@ -61,6 +49,13 @@ import org.b3log.solo.service.UserQueryService;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* Feed (Atom/RSS) processor. * Feed (Atom/RSS) processor.
* *
......
...@@ -16,16 +16,9 @@ ...@@ -16,16 +16,9 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import freemarker.template.Template; import freemarker.template.Template;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
...@@ -52,6 +45,14 @@ import org.b3log.solo.service.StatisticMgmtService; ...@@ -52,6 +45,14 @@ import org.b3log.solo.service.StatisticMgmtService;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;
/** /**
* Index processor. * Index processor.
* *
......
...@@ -15,14 +15,9 @@ ...@@ -15,14 +15,9 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.util.Calendar;
import java.util.Locale;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
...@@ -48,6 +43,12 @@ import org.b3log.solo.util.QueryResults; ...@@ -48,6 +43,12 @@ import org.b3log.solo.util.QueryResults;
import org.b3log.solo.util.Thumbnails; import org.b3log.solo.util.Thumbnails;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Calendar;
import java.util.Locale;
import java.util.Map;
/** /**
* Solo initialization service. * Solo initialization service.
* *
......
...@@ -18,6 +18,7 @@ package org.b3log.solo.processor; ...@@ -18,6 +18,7 @@ package org.b3log.solo.processor;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.mail.MailService; import org.b3log.latke.mail.MailService;
...@@ -51,7 +52,6 @@ import org.b3log.solo.util.Randoms; ...@@ -51,7 +52,6 @@ import org.b3log.solo.util.Randoms;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
...@@ -367,7 +367,7 @@ public class LoginProcessor { ...@@ -367,7 +367,7 @@ public class LoginProcessor {
user.put(User.USER_PASSWORD, newPwd); user.put(User.USER_PASSWORD, newPwd);
userMgmtService.updateUser(user); userMgmtService.updateUser(user);
LOGGER.log(Level.DEBUG, "[{0}]'s password updated successfully.", new Object[] {userEmail}); LOGGER.log(Level.DEBUG, "[{0}]'s password updated successfully.", userEmail);
jsonObject.put("succeed", true); jsonObject.put("succeed", true);
jsonObject.put("to", Latkes.getServePath() + "/login?from=reset"); jsonObject.put("to", Latkes.getServePath() + "/login?from=reset");
...@@ -428,7 +428,7 @@ public class LoginProcessor { ...@@ -428,7 +428,7 @@ public class LoginProcessor {
jsonObject.put("to", Latkes.getServePath() + "/login?from=forgot"); jsonObject.put("to", Latkes.getServePath() + "/login?from=forgot");
jsonObject.put(Keys.MSG, langPropsService.get("resetPwdSuccessSend")); jsonObject.put(Keys.MSG, langPropsService.get("resetPwdSuccessSend"));
LOGGER.log(Level.DEBUG, "Sent a mail[mailSubject={0}, mailBody=[{1}] to [{2}]", new Object[] {mailSubject, mailBody, userEmail}); LOGGER.log(Level.DEBUG, "Sent a mail[mailSubject={0}, mailBody=[{1}] to [{2}]", mailSubject, mailBody, userEmail);
} }
/** /**
......
...@@ -15,14 +15,8 @@ ...@@ -15,14 +15,8 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -45,6 +39,12 @@ import org.b3log.solo.util.Markdowns; ...@@ -45,6 +39,12 @@ import org.b3log.solo.util.Markdowns;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/** /**
* Page processor. * Page processor.
* *
......
...@@ -15,22 +15,19 @@ ...@@ -15,22 +15,19 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.LatkeBeanManager; import org.b3log.latke.ioc.LatkeBeanManager;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.mail.MailService; import org.b3log.latke.mail.MailService;
import org.b3log.latke.mail.MailService.Message; import org.b3log.latke.mail.MailService.Message;
import org.b3log.latke.mail.MailServiceFactory; import org.b3log.latke.mail.MailServiceFactory;
import org.b3log.latke.repository.*; import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.Repositories;
import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.Transaction;
import org.b3log.latke.repository.annotation.Transactional; import org.b3log.latke.repository.annotation.Transactional;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.HTTPRequestMethod; import org.b3log.latke.servlet.HTTPRequestMethod;
...@@ -38,22 +35,14 @@ import org.b3log.latke.servlet.annotation.RequestProcessing; ...@@ -38,22 +35,14 @@ import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.TextHTMLRenderer; import org.b3log.latke.servlet.renderer.TextHTMLRenderer;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.*; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option;
import org.b3log.solo.model.Statistic;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.ArticleRepository; import org.b3log.solo.repository.ArticleRepository;
import org.b3log.solo.repository.TagArticleRepository; import org.b3log.solo.repository.TagArticleRepository;
import org.b3log.solo.repository.TagRepository; import org.b3log.solo.repository.TagRepository;
import org.b3log.solo.repository.impl.ArchiveDateArticleRepositoryImpl; import org.b3log.solo.repository.impl.*;
import org.b3log.solo.repository.impl.ArchiveDateRepositoryImpl;
import org.b3log.solo.repository.impl.ArticleRepositoryImpl;
import org.b3log.solo.repository.impl.CommentRepositoryImpl;
import org.b3log.solo.repository.impl.LinkRepositoryImpl;
import org.b3log.solo.repository.impl.OptionRepositoryImpl;
import org.b3log.solo.repository.impl.PageRepositoryImpl;
import org.b3log.solo.repository.impl.PluginRepositoryImpl;
import org.b3log.solo.repository.impl.StatisticRepositoryImpl;
import org.b3log.solo.repository.impl.TagArticleRepositoryImpl;
import org.b3log.solo.repository.impl.TagRepositoryImpl;
import org.b3log.solo.repository.impl.UserRepositoryImpl;
import org.b3log.solo.service.PreferenceMgmtService; import org.b3log.solo.service.PreferenceMgmtService;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.StatisticMgmtService; import org.b3log.solo.service.StatisticMgmtService;
...@@ -61,6 +50,13 @@ import org.b3log.solo.service.StatisticQueryService; ...@@ -61,6 +50,13 @@ import org.b3log.solo.service.StatisticQueryService;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;
/** /**
* Provides patches on some special issues. * Provides patches on some special issues.
* *
...@@ -163,7 +159,7 @@ public class RepairProcessor { ...@@ -163,7 +159,7 @@ public class RepairProcessor {
final JSONObject article = articles.getJSONObject(i); final JSONObject article = articles.getJSONObject(i);
final JSONArray names = article.names(); final JSONArray names = article.names();
final Set<String> nameSet = CollectionUtils.<String>jsonArrayToSet(names); final Set<String> nameSet = CollectionUtils.jsonArrayToSet(names);
if (nameSet.removeAll(keyNames)) { if (nameSet.removeAll(keyNames)) {
for (final String unusedName : nameSet) { for (final String unusedName : nameSet) {
...@@ -172,7 +168,7 @@ public class RepairProcessor { ...@@ -172,7 +168,7 @@ public class RepairProcessor {
articleRepository.update(article.getString(Keys.OBJECT_ID), article); articleRepository.update(article.getString(Keys.OBJECT_ID), article);
LOGGER.log(Level.INFO, "Found an article[id={0}] exists unused properties[{1}]", LOGGER.log(Level.INFO, "Found an article[id={0}] exists unused properties[{1}]",
new Object[]{article.getString(Keys.OBJECT_ID), nameSet}); article.getString(Keys.OBJECT_ID), nameSet);
} }
} }
...@@ -315,7 +311,7 @@ public class RepairProcessor { ...@@ -315,7 +311,7 @@ public class RepairProcessor {
tagRepository.update(tagId, tag); tagRepository.update(tagId, tag);
LOGGER.log(Level.INFO, "Repaired tag[title={0}, refCnt={1}, publishedTagRefCnt={2}]", LOGGER.log(Level.INFO, "Repaired tag[title={0}, refCnt={1}, publishedTagRefCnt={2}]",
new Object[]{tag.getString(Tag.TAG_TITLE), tagRefCnt, publishedTagRefCnt}); tag.getString(Tag.TAG_TITLE), tagRefCnt, publishedTagRefCnt);
} }
renderer.setContent("Repair sucessfully!"); renderer.setContent("Repair sucessfully!");
......
...@@ -16,14 +16,10 @@ ...@@ -16,14 +16,10 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Date;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.FilterOperator; import org.b3log.latke.repository.FilterOperator;
...@@ -49,6 +45,11 @@ import org.b3log.solo.service.PreferenceQueryService; ...@@ -49,6 +45,11 @@ import org.b3log.solo.service.PreferenceQueryService;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Date;
/** /**
* Site map (sitemap) processor. * Site map (sitemap) processor.
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import javax.inject.Inject; import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.HTTPRequestMethod; import org.b3log.latke.servlet.HTTPRequestMethod;
...@@ -64,6 +64,6 @@ public class StatProcessor { ...@@ -64,6 +64,6 @@ public class StatProcessor {
public void onlineVisitorCountRefresher(final HTTPRequestContext context) { public void onlineVisitorCountRefresher(final HTTPRequestContext context) {
context.setRenderer(new DoNothingRenderer()); context.setRenderer(new DoNothingRenderer());
statisticMgmtService.removeExpiredOnlineVisitor(); StatisticMgmtService.removeExpiredOnlineVisitor();
} }
} }
...@@ -15,17 +15,9 @@ ...@@ -15,17 +15,9 @@
*/ */
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
...@@ -45,16 +37,21 @@ import org.b3log.solo.model.Common; ...@@ -45,16 +37,21 @@ import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Tag; import org.b3log.solo.model.Tag;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.ArticleQueryService; import org.b3log.solo.service.*;
import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.StatisticMgmtService;
import org.b3log.solo.service.TagQueryService;
import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.b3log.solo.util.comparator.Comparators; import org.b3log.solo.util.comparator.Comparators;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/** /**
* Tag processor. * Tag processor.
* *
...@@ -145,7 +142,7 @@ public class TagProcessor { ...@@ -145,7 +142,7 @@ public class TagProcessor {
return; return;
} }
LOGGER.log(Level.DEBUG, "Tag[title={0}, currentPageNum={1}]", new Object[]{tagTitle, currentPageNum}); LOGGER.log(Level.DEBUG, "Tag[title={0}, currentPageNum={1}]", tagTitle, currentPageNum);
tagTitle = URLDecoder.decode(tagTitle, "UTF-8"); tagTitle = URLDecoder.decode(tagTitle, "UTF-8");
final JSONObject result = tagQueryService.getTagByTitle(tagTitle); final JSONObject result = tagQueryService.getTagByTitle(tagTitle);
...@@ -191,7 +188,7 @@ public class TagProcessor { ...@@ -191,7 +188,7 @@ public class TagProcessor {
final int pageCount = (int) Math.ceil((double) tagArticleCount / (double) pageSize); final int pageCount = (int) Math.ceil((double) tagArticleCount / (double) pageSize);
LOGGER.log(Level.TRACE, "Paginate tag-articles[currentPageNum={0}, pageSize={1}, pageCount={2}, windowSize={3}]", LOGGER.log(Level.TRACE, "Paginate tag-articles[currentPageNum={0}, pageSize={1}, pageCount={2}, windowSize={3}]",
new Object[]{currentPageNum, pageSize, pageCount, windowSize}); currentPageNum, pageSize, pageCount, windowSize);
final List<Integer> pageNums = Paginator.paginate(currentPageNum, pageSize, pageCount, windowSize); final List<Integer> pageNums = Paginator.paginate(currentPageNum, pageSize, pageCount, windowSize);
LOGGER.log(Level.TRACE, "tag-articles[pageNums={0}]", pageNums); LOGGER.log(Level.TRACE, "tag-articles[pageNums={0}]", pageNums);
......
...@@ -17,13 +17,9 @@ package org.b3log.solo.processor; ...@@ -17,13 +17,9 @@ package org.b3log.solo.processor;
import freemarker.template.Template; import freemarker.template.Template;
import java.io.IOException;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -42,6 +38,11 @@ import org.b3log.solo.service.StatisticMgmtService; ...@@ -42,6 +38,11 @@ import org.b3log.solo.service.StatisticMgmtService;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
/** /**
* User template processor. * User template processor.
...@@ -105,7 +106,7 @@ public class UserTemplateProcessor { ...@@ -105,7 +106,7 @@ public class UserTemplateProcessor {
String templateName = StringUtils.substringAfterLast(requestURI, "/"); String templateName = StringUtils.substringAfterLast(requestURI, "/");
templateName = StringUtils.substringBefore(templateName, ".") + ".ftl"; templateName = StringUtils.substringBefore(templateName, ".") + ".ftl";
LOGGER.log(Level.DEBUG, "Shows page[requestURI={0}, templateName={1}]", new Object[] {requestURI, templateName}); LOGGER.log(Level.DEBUG, "Shows page[requestURI={0}, templateName={1}]", requestURI, templateName);
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer();
......
...@@ -16,19 +16,6 @@ ...@@ -16,19 +16,6 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import com.qiniu.util.Auth; import com.qiniu.util.Auth;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import java.util.UUID;
import javax.inject.Inject;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jodd.io.ZipUtil; import jodd.io.ZipUtil;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
...@@ -38,6 +25,7 @@ import org.b3log.latke.RuntimeDatabase; ...@@ -38,6 +25,7 @@ import org.b3log.latke.RuntimeDatabase;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventException; import org.b3log.latke.event.EventException;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Plugin; import org.b3log.latke.model.Plugin;
...@@ -65,11 +53,20 @@ import org.b3log.solo.service.UserQueryService; ...@@ -65,11 +53,20 @@ import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.Thumbnails; import org.b3log.solo.util.Thumbnails;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.*;
/** /**
* Admin console render processing. * Admin console render processing.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.3.2.10, Nov 15, 2016 * @version 1.3.2.11, Mar 31, 2017
* @since 0.4.1 * @since 0.4.1
*/ */
@RequestProcessor @RequestProcessor
...@@ -215,13 +212,13 @@ public class AdminConsole { ...@@ -215,13 +212,13 @@ public class AdminConsole {
"/admin-others.do", "/admin-others.do",
"/admin-draft-list.do", "/admin-draft-list.do",
"/admin-user-list.do", "/admin-user-list.do",
"/admin-category-list.do",
"/admin-plugin-list.do", "/admin-plugin-list.do",
"/admin-main.do", "/admin-main.do",
"/admin-about.do"}, "/admin-about.do"},
method = HTTPRequestMethod.GET) method = HTTPRequestMethod.GET)
public void showAdminFunctions(final HttpServletRequest request, final HTTPRequestContext context) { public void showAdminFunctions(final HttpServletRequest request, final HTTPRequestContext context) {
final AbstractFreeMarkerRenderer renderer = new ConsoleRenderer(); final AbstractFreeMarkerRenderer renderer = new ConsoleRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
final String requestURI = request.getRequestURI(); final String requestURI = request.getRequestURI();
...@@ -235,11 +232,8 @@ public class AdminConsole { ...@@ -235,11 +232,8 @@ public class AdminConsole {
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
dataModel.put("isMySQL", RuntimeDatabase.MYSQL == Latkes.getRuntimeDatabase()); dataModel.put("isMySQL", RuntimeDatabase.MYSQL == Latkes.getRuntimeDatabase());
dataModel.putAll(langs); dataModel.putAll(langs);
Keys.fillRuntime(dataModel); Keys.fillRuntime(dataModel);
dataModel.put(Option.ID_C_LOCALE_STRING, locale.toString()); dataModel.put(Option.ID_C_LOCALE_STRING, locale.toString());
fireFreeMarkerActionEvent(templateName, dataModel); fireFreeMarkerActionEvent(templateName, dataModel);
......
...@@ -15,12 +15,10 @@ ...@@ -15,12 +15,10 @@
*/ */
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
...@@ -43,6 +41,9 @@ import org.b3log.solo.util.QueryResults; ...@@ -43,6 +41,9 @@ import org.b3log.solo.util.QueryResults;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* Article console request processing. * Article console request processing.
* *
...@@ -261,7 +262,7 @@ public class ArticleConsole { ...@@ -261,7 +262,7 @@ public class ArticleConsole {
path = path.substring((status + "/").length()); path = path.substring((status + "/").length());
final boolean published = "published".equals(status) ? true : false; final boolean published = "published".equals(status);
final JSONObject requestJSONObject = Requests.buildPaginationRequest(path); final JSONObject requestJSONObject = Requests.buildPaginationRequest(path);
......
...@@ -16,12 +16,9 @@ ...@@ -16,12 +16,9 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import java.util.List;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -38,6 +35,10 @@ import org.b3log.solo.service.UserQueryService; ...@@ -38,6 +35,10 @@ import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.QueryResults; import org.b3log.solo.util.QueryResults;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/** /**
* Comment console request processing. * Comment console request processing.
......
...@@ -16,11 +16,9 @@ ...@@ -16,11 +16,9 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -29,14 +27,17 @@ import org.b3log.latke.servlet.HTTPRequestMethod; ...@@ -29,14 +27,17 @@ import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JSONRenderer; import org.b3log.latke.servlet.renderer.JSONRenderer;
import org.b3log.latke.util.Requests;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.service.LinkMgmtService; import org.b3log.solo.service.LinkMgmtService;
import org.b3log.solo.service.LinkQueryService; import org.b3log.solo.service.LinkQueryService;
import org.b3log.solo.util.QueryResults;
import org.b3log.latke.util.Requests;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.QueryResults;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* Link console request processing. * Link console request processing.
......
...@@ -16,11 +16,9 @@ ...@@ -16,11 +16,9 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -40,6 +38,9 @@ import org.b3log.solo.util.QueryResults; ...@@ -40,6 +38,9 @@ import org.b3log.solo.util.QueryResults;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* Plugin console request processing. * Plugin console request processing.
......
...@@ -16,12 +16,9 @@ ...@@ -16,12 +16,9 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Plugin; import org.b3log.latke.model.Plugin;
...@@ -40,6 +37,10 @@ import org.b3log.solo.service.PluginQueryService; ...@@ -40,6 +37,10 @@ import org.b3log.solo.service.PluginQueryService;
import org.b3log.solo.util.QueryResults; import org.b3log.solo.util.QueryResults;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/** /**
* Plugin console request processing. * Plugin console request processing.
......
...@@ -15,12 +15,9 @@ ...@@ -15,12 +15,9 @@
*/ */
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import javax.inject.Inject;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -34,15 +31,15 @@ import org.b3log.latke.util.Requests; ...@@ -34,15 +31,15 @@ import org.b3log.latke.util.Requests;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Sign; import org.b3log.solo.model.Sign;
import org.b3log.solo.model.Skin; import org.b3log.solo.model.Skin;
import org.b3log.solo.service.OptionMgmtService; import org.b3log.solo.service.*;
import org.b3log.solo.service.OptionQueryService;
import org.b3log.solo.service.PreferenceMgmtService;
import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.QueryResults; import org.b3log.solo.util.QueryResults;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* Preference console request processing. * Preference console request processing.
* *
......
...@@ -16,13 +16,8 @@ ...@@ -16,13 +16,8 @@
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
...@@ -38,6 +33,12 @@ import org.b3log.solo.service.TagQueryService; ...@@ -38,6 +33,12 @@ import org.b3log.solo.service.TagQueryService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/** /**
* Tag console request processing. * Tag console request processing.
......
...@@ -15,11 +15,9 @@ ...@@ -15,11 +15,9 @@
*/ */
package org.b3log.solo.processor.console; package org.b3log.solo.processor.console;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
...@@ -39,12 +37,15 @@ import org.b3log.solo.service.UserQueryService; ...@@ -39,12 +37,15 @@ import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.QueryResults; import org.b3log.solo.util.QueryResults;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** /**
* User console request processing. * User console request processing.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="mailto:385321165@qq.com">DASHU</a> * @author <a href="mailto:385321165@qq.com">DASHU</a>
* @version 1.2.0.4, Nov 20, 2015 * @version 1.2.0.5, Mar 31, 2017
* @since 0.4.0 * @since 0.4.0
*/ */
@RequestProcessor @RequestProcessor
...@@ -81,7 +82,6 @@ public class UserConsole { ...@@ -81,7 +82,6 @@ public class UserConsole {
/** /**
* Updates a user by the specified request. * Updates a user by the specified request.
*
* <p> * <p>
* Renders the response with a json object, for example, * Renders the response with a json object, for example,
* <pre> * <pre>
...@@ -92,8 +92,7 @@ public class UserConsole { ...@@ -92,8 +92,7 @@ public class UserConsole {
* </pre> * </pre>
* </p> * </p>
* *
* @param request the specified http servlet request, for example, <pre> * @param request the specified http servlet request, for example,
* {
* "oId": "", * "oId": "",
* "userName": "", * "userName": "",
* "userEmail": "", * "userEmail": "",
...@@ -101,9 +100,6 @@ public class UserConsole { ...@@ -101,9 +100,6 @@ public class UserConsole {
* "userRole": "", // optional * "userRole": "", // optional
* "userURL": "", // optional * "userURL": "", // optional
* "userAvatar": "" // optional * "userAvatar": "" // optional
* }
* </pre>
*
* @param context the specified http request context * @param context the specified http request context
* @param response the specified http servlet response * @param response the specified http servlet response
* @throws Exception exception * @throws Exception exception
...@@ -143,7 +139,6 @@ public class UserConsole { ...@@ -143,7 +139,6 @@ public class UserConsole {
/** /**
* Adds a user with the specified request. * Adds a user with the specified request.
*
* <p> * <p>
* Renders the response with a json object, for example, * Renders the response with a json object, for example,
* <pre> * <pre>
...@@ -155,17 +150,13 @@ public class UserConsole { ...@@ -155,17 +150,13 @@ public class UserConsole {
* </pre> * </pre>
* </p> * </p>
* *
* @param request the specified http servlet request, for example, <pre> * @param request the specified http servlet request, for example,
* {
* "userName": "", * "userName": "",
* "userEmail": "", * "userEmail": "",
* "userPassword": "", * "userPassword": "",
* "userURL": "", // optional, uses 'servePath' instead if not specified * "userURL": "", // optional, uses 'servePath' instead if not specified
* "userRole": "", // optional, uses {@value org.b3log.latke.model.Role#DEFAULT_ROLE} instead if not specified * "userRole": "", // optional, uses {@value org.b3log.latke.model.Role#DEFAULT_ROLE} instead if not specified
* "userAvatar": "" // optional * "userAvatar": "" // optional
* }
* </pre>
*
* @param response the specified http servlet response * @param response the specified http servlet response
* @param context the specified http request context * @param context the specified http request context
* @throws Exception exception * @throws Exception exception
...@@ -218,7 +209,6 @@ public class UserConsole { ...@@ -218,7 +209,6 @@ public class UserConsole {
/** /**
* Removes a user by the specified request. * Removes a user by the specified request.
*
* <p> * <p>
* Renders the response with a json object, for example, * Renders the response with a json object, for example,
* <pre> * <pre>
...@@ -243,16 +233,12 @@ public class UserConsole { ...@@ -243,16 +233,12 @@ public class UserConsole {
} }
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
renderer.setJSONObject(jsonObject); renderer.setJSONObject(jsonObject);
try { try {
final String userId = request.getRequestURI().substring((Latkes.getContextPath() + "/console/user/").length()); final String userId = request.getRequestURI().substring((Latkes.getContextPath() + "/console/user/").length());
userMgmtService.removeUser(userId); userMgmtService.removeUser(userId);
jsonObject.put(Keys.STATUS_CODE, true); jsonObject.put(Keys.STATUS_CODE, true);
...@@ -271,7 +257,6 @@ public class UserConsole { ...@@ -271,7 +257,6 @@ public class UserConsole {
* The request URI contains the pagination arguments. For example, the request URI is /console/users/1/10/20, means * The request URI contains the pagination arguments. For example, the request URI is /console/users/1/10/20, means
* the current page is 1, the page size is 10, and the window size is 20. * the current page is 1, the page size is 10, and the window size is 20.
* </p> * </p>
*
* <p> * <p>
* Renders the response with a json object, for example, * Renders the response with a json object, for example,
* <pre> * <pre>
...@@ -287,7 +272,7 @@ public class UserConsole { ...@@ -287,7 +272,7 @@ public class UserConsole {
* "userPassword": "", * "userPassword": "",
* "roleName": "" * "roleName": ""
* }, ....] * }, ....]
* "sc": "GET_USERS_SUCC" * "sc": true
* } * }
* </pre> * </pre>
* </p> * </p>
...@@ -301,7 +286,6 @@ public class UserConsole { ...@@ -301,7 +286,6 @@ public class UserConsole {
public void getUsers(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context) public void getUsers(final HttpServletRequest request, final HttpServletResponse response, final HTTPRequestContext context)
throws Exception { throws Exception {
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
if (!userQueryService.isAdminLoggedIn(request)) { if (!userQueryService.isAdminLoggedIn(request)) {
...@@ -316,15 +300,12 @@ public class UserConsole { ...@@ -316,15 +300,12 @@ public class UserConsole {
final JSONObject requestJSONObject = Requests.buildPaginationRequest(path); final JSONObject requestJSONObject = Requests.buildPaginationRequest(path);
final JSONObject result = userQueryService.getUsers(requestJSONObject); final JSONObject result = userQueryService.getUsers(requestJSONObject);
result.put(Keys.STATUS_CODE, true); result.put(Keys.STATUS_CODE, true);
renderer.setJSONObject(result); renderer.setJSONObject(result);
} catch (final ServiceException e) { } catch (final ServiceException e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
final JSONObject jsonObject = QueryResults.defaultResult(); final JSONObject jsonObject = QueryResults.defaultResult();
renderer.setJSONObject(jsonObject); renderer.setJSONObject(jsonObject);
jsonObject.put(Keys.MSG, langPropsService.get("getFailLabel")); jsonObject.put(Keys.MSG, langPropsService.get("getFailLabel"));
} }
...@@ -332,7 +313,6 @@ public class UserConsole { ...@@ -332,7 +313,6 @@ public class UserConsole {
/** /**
* Gets a user by the specified request. * Gets a user by the specified request.
*
* <p> * <p>
* Renders the response with a json object, for example, * Renders the response with a json object, for example,
* <pre> * <pre>
...@@ -363,15 +343,12 @@ public class UserConsole { ...@@ -363,15 +343,12 @@ public class UserConsole {
} }
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
try { try {
final String requestURI = request.getRequestURI(); final String requestURI = request.getRequestURI();
final String userId = requestURI.substring((Latkes.getContextPath() + "/console/user/").length()); final String userId = requestURI.substring((Latkes.getContextPath() + "/console/user/").length());
final JSONObject result = userQueryService.getUser(userId); final JSONObject result = userQueryService.getUser(userId);
if (null == result) { if (null == result) {
renderer.setJSONObject(QueryResults.defaultResult()); renderer.setJSONObject(QueryResults.defaultResult());
...@@ -380,12 +357,10 @@ public class UserConsole { ...@@ -380,12 +357,10 @@ public class UserConsole {
renderer.setJSONObject(result); renderer.setJSONObject(result);
result.put(Keys.STATUS_CODE, true); result.put(Keys.STATUS_CODE, true);
} catch (final ServiceException e) { } catch (final ServiceException e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
final JSONObject jsonObject = QueryResults.defaultResult(); final JSONObject jsonObject = QueryResults.defaultResult();
renderer.setJSONObject(jsonObject); renderer.setJSONObject(jsonObject);
jsonObject.put(Keys.MSG, langPropsService.get("getFailLabel")); jsonObject.put(Keys.MSG, langPropsService.get("getFailLabel"));
} }
...@@ -393,7 +368,6 @@ public class UserConsole { ...@@ -393,7 +368,6 @@ public class UserConsole {
/** /**
* Change a user role. * Change a user role.
*
* <p> * <p>
* Renders the response with a json object, for example, * Renders the response with a json object, for example,
* <pre> * <pre>
...@@ -418,21 +392,16 @@ public class UserConsole { ...@@ -418,21 +392,16 @@ public class UserConsole {
} }
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
final JSONObject jsonObject = new JSONObject(); final JSONObject jsonObject = new JSONObject();
renderer.setJSONObject(jsonObject); renderer.setJSONObject(jsonObject);
try { try {
final String userId = request.getRequestURI().substring((Latkes.getContextPath() + "/console/changeRole/").length()); final String userId = request.getRequestURI().substring((Latkes.getContextPath() + "/console/changeRole/").length());
userMgmtService.changeRole(userId); userMgmtService.changeRole(userId);
jsonObject.put(Keys.STATUS_CODE, true); jsonObject.put(Keys.STATUS_CODE, true);
jsonObject.put(Keys.MSG, langPropsService.get("updateSuccLabel")); jsonObject.put(Keys.MSG, langPropsService.get("updateSuccLabel"));
} catch (final ServiceException e) { } catch (final ServiceException e) {
LOGGER.log(Level.ERROR, e.getMessage(), e); LOGGER.log(Level.ERROR, e.getMessage(), e);
......
...@@ -15,22 +15,20 @@ ...@@ -15,22 +15,20 @@
*/ */
package org.b3log.solo.processor.console.common; package org.b3log.solo.processor.console.common;
import java.io.IOException;
import java.util.Map;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.ioc.LatkeBeanManager; import org.b3log.latke.ioc.LatkeBeanManager;
import org.b3log.latke.ioc.Lifecycle; import org.b3log.latke.ioc.Lifecycle;
import org.b3log.latke.ioc.inject.Named;
import org.b3log.latke.ioc.inject.Singleton;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.advice.BeforeRequestProcessAdvice; import org.b3log.latke.servlet.advice.BeforeRequestProcessAdvice;
import org.b3log.latke.servlet.advice.RequestProcessAdviceException; import org.b3log.latke.servlet.advice.RequestProcessAdviceException;
import org.b3log.latke.servlet.advice.RequestReturnAdviceException; import org.b3log.latke.servlet.advice.RequestReturnAdviceException;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
/** /**
* The common auth check before advice for admin console. * The common auth check before advice for admin console.
......
...@@ -18,13 +18,14 @@ package org.b3log.solo.processor.renderer; ...@@ -18,13 +18,14 @@ package org.b3log.solo.processor.renderer;
import freemarker.template.Configuration; import freemarker.template.Configuration;
import freemarker.template.Template; import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler; import freemarker.template.TemplateExceptionHandler;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.SoloServletListener;
import javax.servlet.ServletContext;
import java.io.IOException;
/** /**
* <a href="http://freemarker.org">FreeMarker</a> HTTP response renderer for administrator console and initialization * <a href="http://freemarker.org">FreeMarker</a> HTTP response renderer for administrator console and initialization
* rendering. * rendering.
......
...@@ -16,19 +16,18 @@ ...@@ -16,19 +16,18 @@
package org.b3log.solo.processor.util; package org.b3log.solo.processor.util;
import freemarker.template.TemplateMethodModel; import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModelException; import freemarker.template.TemplateModelException;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.service.ServiceException;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.solo.model.Tag; import org.b3log.solo.model.Tag;
import org.b3log.solo.service.ArticleQueryService; import org.b3log.solo.service.ArticleQueryService;
import org.b3log.solo.service.TagQueryService; import org.b3log.solo.service.TagQueryService;
import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.inject.Inject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -37,39 +36,37 @@ import java.util.List; ...@@ -37,39 +36,37 @@ import java.util.List;
* Fill tag articles. * Fill tag articles.
* *
* @author <a href="mailto:385321165@qq.com">DASHU</a> * @author <a href="mailto:385321165@qq.com">DASHU</a>
* @version 0.0.0.1, Jul 1, 2013 * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.2, Apr 12, 2017
* @since 0.6.1 * @since 0.6.1
*/ */
@Service @Service
public class FillTagArticles implements TemplateMethodModel { public class FillTagArticles implements TemplateMethodModelEx {
/** /**
* Logger. * Logger.
*/ */
private static final Logger LOGGER = Logger.getLogger(FillTagArticles.class.getName()); private static final Logger LOGGER = Logger.getLogger(FillTagArticles.class);
/**
* Arg size.
*/
private static final int ARG_SIZE = 3;
/** /**
* Tag query service. * Tag query service.
*/ */
@Inject @Inject
private TagQueryService tagQueryService; private TagQueryService tagQueryService;
/** /**
* Article query service. * Article query service.
*/ */
@Inject @Inject
private ArticleQueryService articleQueryService; private ArticleQueryService articleQueryService;
/**
* Arg size.
*/
private static final int ARG_SIZE = 3;
@Override @Override
public Object exec(final List arguments) throws TemplateModelException { public Object exec(final List arguments) throws TemplateModelException {
if (arguments.size() != ARG_SIZE) { if (arguments.size() != ARG_SIZE) {
LOGGER.debug("FillTagArticles with wrong arguments!"); LOGGER.debug("FillTagArticles with wrong arguments!");
throw new TemplateModelException("Wrong arguments!"); throw new TemplateModelException("Wrong arguments!");
} }
...@@ -78,9 +75,7 @@ public class FillTagArticles implements TemplateMethodModel { ...@@ -78,9 +75,7 @@ public class FillTagArticles implements TemplateMethodModel {
final int pageSize = Integer.parseInt((String) arguments.get(2)); final int pageSize = Integer.parseInt((String) arguments.get(2));
try { try {
final JSONObject result = tagQueryService.getTagByTitle(tagTitle); final JSONObject result = tagQueryService.getTagByTitle(tagTitle);
if (null == result) { if (null == result) {
return new ArrayList<JSONObject>(); return new ArrayList<JSONObject>();
} }
...@@ -88,14 +83,11 @@ public class FillTagArticles implements TemplateMethodModel { ...@@ -88,14 +83,11 @@ public class FillTagArticles implements TemplateMethodModel {
final JSONObject tag = result.getJSONObject(Tag.TAG); final JSONObject tag = result.getJSONObject(Tag.TAG);
final String tagId = tag.getString(Keys.OBJECT_ID); final String tagId = tag.getString(Keys.OBJECT_ID);
final List<JSONObject> list = articleQueryService.getArticlesByTag(tagId, currentPageNum, pageSize); final List<JSONObject> ret = articleQueryService.getArticlesByTag(tagId, currentPageNum, pageSize);
return list;
} catch (final ServiceException e) { return ret;
e.printStackTrace(); } catch (final Exception e) {
} catch (final JSONException e) { LOGGER.log(Level.ERROR, "Fill tag articles failed", e);
e.printStackTrace();
} }
return null; return null;
......
...@@ -16,21 +16,13 @@ ...@@ -16,21 +16,13 @@
package org.b3log.solo.processor.util; package org.b3log.solo.processor.util;
import freemarker.template.Template; import freemarker.template.Template;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventException; import org.b3log.latke.event.EventException;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
...@@ -47,30 +39,26 @@ import org.b3log.latke.util.*; ...@@ -47,30 +39,26 @@ import org.b3log.latke.util.*;
import org.b3log.latke.util.freemarker.Templates; import org.b3log.latke.util.freemarker.Templates;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
import static org.b3log.solo.model.Article.ARTICLE_CONTENT; import org.b3log.solo.repository.*;
import org.b3log.solo.repository.ArchiveDateRepository; import org.b3log.solo.service.*;
import org.b3log.solo.repository.ArticleRepository;
import org.b3log.solo.repository.CommentRepository;
import org.b3log.solo.repository.LinkRepository;
import org.b3log.solo.repository.PageRepository;
import org.b3log.solo.repository.TagRepository;
import org.b3log.solo.repository.UserRepository;
import org.b3log.solo.service.ArticleQueryService;
import org.b3log.solo.service.OptionQueryService;
import org.b3log.solo.service.StatisticQueryService;
import org.b3log.solo.service.TagQueryService;
import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.Thumbnails; import org.b3log.solo.util.Thumbnails;
import org.b3log.solo.util.comparator.Comparators; import org.b3log.solo.util.comparator.Comparators;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import static org.b3log.solo.model.Article.ARTICLE_CONTENT;
/** /**
* Filler utilities. * Filler utilities.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.5.11.13, Feb 26, 2017 * @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 1.6.12.13, Apr 8, 2017
* @since 0.3.1 * @since 0.3.1
*/ */
@Service @Service
...@@ -80,101 +68,89 @@ public class Filler { ...@@ -80,101 +68,89 @@ public class Filler {
* Logger. * Logger.
*/ */
private static final Logger LOGGER = Logger.getLogger(Filler.class.getName()); private static final Logger LOGGER = Logger.getLogger(Filler.class.getName());
/**
* {@code true} for published.
*/
private static final boolean PUBLISHED = true;
/**
* User service.
*/
private static UserService userService = UserServiceFactory.getUserService();
/** /**
* Topbar utilities. * Topbar utilities.
*/ */
@Inject @Inject
private TopBars topBars; private TopBars topBars;
/** /**
* Article repository. * Article repository.
*/ */
@Inject @Inject
private ArticleRepository articleRepository; private ArticleRepository articleRepository;
/** /**
* Comment repository. * Comment repository.
*/ */
@Inject @Inject
private CommentRepository commentRepository; private CommentRepository commentRepository;
/** /**
* Archive date repository. * Archive date repository.
*/ */
@Inject @Inject
private ArchiveDateRepository archiveDateRepository; private ArchiveDateRepository archiveDateRepository;
/**
* Category repository.
*/
@Inject
private CategoryRepository categoryRepository;
/** /**
* Tag repository. * Tag repository.
*/ */
@Inject @Inject
private TagRepository tagRepository; private TagRepository tagRepository;
/** /**
* Link repository. * Link repository.
*/ */
@Inject @Inject
private LinkRepository linkRepository; private LinkRepository linkRepository;
/** /**
* Page repository. * Page repository.
*/ */
@Inject @Inject
private PageRepository pageRepository; private PageRepository pageRepository;
/** /**
* Statistic query service. * Statistic query service.
*/ */
@Inject @Inject
private StatisticQueryService statisticQueryService; private StatisticQueryService statisticQueryService;
/** /**
* User repository. * User repository.
*/ */
@Inject @Inject
private UserRepository userRepository; private UserRepository userRepository;
/** /**
* Option query service.. * Option query service..
*/ */
@Inject @Inject
private OptionQueryService optionQueryService; private OptionQueryService optionQueryService;
/** /**
* Article query service. * Article query service.
*/ */
@Inject @Inject
private ArticleQueryService articleQueryService; private ArticleQueryService articleQueryService;
/**
* {@code true} for published.
*/
private static final boolean PUBLISHED = true;
/** /**
* Tag query service. * Tag query service.
*/ */
@Inject @Inject
private TagQueryService tagQueryService; private TagQueryService tagQueryService;
/** /**
* User query service. * User query service.
*/ */
@Inject @Inject
private UserQueryService userQueryService; private UserQueryService userQueryService;
/** /**
* Fill tag article.. * Fill tag article..
*/ */
@Inject @Inject
private FillTagArticles fillTagArticles; private FillTagArticles fillTagArticles;
/**
* User service.
*/
private static UserService userService = UserServiceFactory.getUserService();
/** /**
* Event manager. * Event manager.
*/ */
...@@ -331,6 +307,31 @@ public class Filler { ...@@ -331,6 +307,31 @@ public class Filler {
Stopwatchs.end(); Stopwatchs.end();
} }
/**
* Fills most used categories.
*
* @param dataModel data model
* @param preference the specified preference
* @throws ServiceException service exception
*/
public void fillMostUsedCategories(final Map<String, Object> dataModel, final JSONObject preference) throws ServiceException {
Stopwatchs.start("Fill Most Used Categories");
try {
LOGGER.debug("Filling most used categories....");
final int mostUsedCategoryDisplayCnt = Integer.MAX_VALUE; // XXX: preference instead
final List<JSONObject> categories = categoryRepository.getMostUsedCategories(mostUsedCategoryDisplayCnt);
dataModel.put(Common.MOST_USED_CATEGORIES, categories);
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Fills most used categories failed", e);
throw new ServiceException(e);
} finally {
Stopwatchs.end();
}
}
/** /**
* Fills most used tags. * Fills most used tags.
* *
...@@ -755,6 +756,10 @@ public class Filler { ...@@ -755,6 +756,10 @@ public class Filler {
fillRecentComments(dataModel, preference); fillRecentComments(dataModel, preference);
} }
if (Templates.hasExpression(template, "<#list mostUsedCategories as category>")) {
fillMostUsedCategories(dataModel, preference);
}
if (Templates.hasExpression(template, "<#list mostUsedTags as tag>")) { if (Templates.hasExpression(template, "<#list mostUsedTags as tag>")) {
fillMostUsedTags(dataModel, preference); fillMostUsedTags(dataModel, preference);
} }
...@@ -806,6 +811,10 @@ public class Filler { ...@@ -806,6 +811,10 @@ public class Filler {
fillRecentComments(dataModel, preference); fillRecentComments(dataModel, preference);
} }
if (Templates.hasExpression(template, "<#list mostUsedCategories as category>")) {
fillMostUsedCategories(dataModel, preference);
}
if (Templates.hasExpression(template, "<#list mostUsedTags as tag>")) { if (Templates.hasExpression(template, "<#list mostUsedTags as tag>")) {
fillMostUsedTags(dataModel, preference); fillMostUsedTags(dataModel, preference);
} }
...@@ -890,7 +899,7 @@ public class Filler { ...@@ -890,7 +899,7 @@ public class Filler {
/** /**
* Sets some extra properties into the specified article with the specified author and preference, performs content * Sets some extra properties into the specified article with the specified author and preference, performs content
* and abstract editor processing. * and abstract editor processing.
* * <p>
* <p> * <p>
* Article ext properties: * Article ext properties:
* <pre> * <pre>
...@@ -953,7 +962,7 @@ public class Filler { ...@@ -953,7 +962,7 @@ public class Filler {
/** /**
* Sets some extra properties into the specified article with the specified preference, performs content and * Sets some extra properties into the specified article with the specified preference, performs content and
* abstract editor processing. * abstract editor processing.
* * <p>
* <p> * <p>
* Article ext properties: * Article ext properties:
* <pre> * <pre>
...@@ -1014,11 +1023,11 @@ public class Filler { ...@@ -1014,11 +1023,11 @@ public class Filler {
/** /**
* Sets some extra properties into the specified article with the specified author and preference. * Sets some extra properties into the specified article with the specified author and preference.
* * <p>
* <p> * <p>
* The batch version of method {@linkplain #setArticleExProperties(HttpServletRequest, JSONObject, JSONObject, JSONObject)}. * The batch version of method {@linkplain #setArticleExProperties(HttpServletRequest, JSONObject, JSONObject, JSONObject)}.
* </p> * </p>
* * <p>
* <p> * <p>
* Article ext properties: * Article ext properties:
* <pre> * <pre>
...@@ -1047,11 +1056,11 @@ public class Filler { ...@@ -1047,11 +1056,11 @@ public class Filler {
/** /**
* Sets some extra properties into the specified article with the specified preference. * Sets some extra properties into the specified article with the specified preference.
* * <p>
* <p> * <p>
* The batch version of method {@linkplain #setArticleExProperties(HttpServletRequest, JSONObject, JSONObject)}. * The batch version of method {@linkplain #setArticleExProperties(HttpServletRequest, JSONObject, JSONObject)}.
* </p> * </p>
* * <p>
* <p> * <p>
* Article ext properties: * Article ext properties:
* <pre> * <pre>
...@@ -1079,7 +1088,7 @@ public class Filler { ...@@ -1079,7 +1088,7 @@ public class Filler {
/** /**
* Processes the abstract of the specified article with the specified preference. * Processes the abstract of the specified article with the specified preference.
* * <p>
* <p> * <p>
* <ul> * <ul>
* <li>If the abstract is {@code null}, sets it with ""</li> * <li>If the abstract is {@code null}, sets it with ""</li>
......
...@@ -18,14 +18,8 @@ package org.b3log.solo.processor.util; ...@@ -18,14 +18,8 @@ package org.b3log.solo.processor.util;
import freemarker.template.Template; import freemarker.template.Template;
import freemarker.template.TemplateException; import freemarker.template.TemplateException;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
...@@ -45,6 +39,13 @@ import org.b3log.solo.service.UserQueryService; ...@@ -45,6 +39,13 @@ import org.b3log.solo.service.UserQueryService;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
/** /**
* Top bar utilities. * Top bar utilities.
...@@ -119,7 +120,7 @@ public class TopBars { ...@@ -119,7 +120,7 @@ public class TopBars {
topBarModel.put("mobileLabel", langPropsService.get("mobileLabel")); topBarModel.put("mobileLabel", langPropsService.get("mobileLabel"));
topBarModel.put("onlineVisitor1Label", langPropsService.get("onlineVisitor1Label")); topBarModel.put("onlineVisitor1Label", langPropsService.get("onlineVisitor1Label"));
topBarModel.put(Common.ONLINE_VISITOR_CNT, statisticQueryService.getOnlineVisitorCount()); topBarModel.put(Common.ONLINE_VISITOR_CNT, StatisticQueryService.getOnlineVisitorCount());
if (null == currentUser) { if (null == currentUser) {
topBarModel.put(Common.LOGIN_URL, userService.createLoginURL(Common.ADMIN_INDEX_URI)); topBarModel.put(Common.LOGIN_URL, userService.createLoginURL(Common.ADMIN_INDEX_URI));
......
...@@ -16,11 +16,12 @@ ...@@ -16,11 +16,12 @@
package org.b3log.solo.repository; package org.b3log.solo.repository;
import java.util.List;
import org.b3log.latke.repository.Repository; import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Archive date repository. * Archive date repository.
......
...@@ -16,11 +16,12 @@ ...@@ -16,11 +16,12 @@
package org.b3log.solo.repository; package org.b3log.solo.repository;
import java.util.List;
import org.b3log.latke.repository.Repository; import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Article repository. * Article repository.
......
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.solo.repository;
import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject;
import java.util.List;
/**
* Category repository.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.2.0.1, Apr 8, 2017
* @since 2.0.0
*/
public interface CategoryRepository extends Repository {
/**
* Gets a category by the specified category title.
*
* @param categoryTitle the specified category title
* @return a category, {@code null} if not found
* @throws RepositoryException repository exception
*/
JSONObject getByTitle(final String categoryTitle) throws RepositoryException;
/**
* Gets a category by the specified category URI.
*
* @param categoryURI the specified category URI
* @return a category, {@code null} if not found
* @throws RepositoryException repository exception
*/
JSONObject getByURI(final String categoryURI) throws RepositoryException;
/**
* Gets the maximum order.
*
* @return order number, returns {@code -1} if not found
* @throws RepositoryException repository exception
*/
int getMaxOrder() throws RepositoryException;
/**
* Gets the upper category of the category specified by the given id.
*
* @param id the given id
* @return upper category, returns {@code null} if not found
* @throws RepositoryException repository exception
*/
JSONObject getUpper(final String id) throws RepositoryException;
/**
* Gets the under category of the category specified by the given id.
*
* @param id the given id
* @return under category, returns {@code null} if not found
* @throws RepositoryException repository exception
*/
JSONObject getUnder(final String id) throws RepositoryException;
/**
* Gets a category by the specified order.
*
* @param order the specified order
* @return category, returns {@code null} if not found
* @throws RepositoryException repository exception
*/
JSONObject getByOrder(final int order) throws RepositoryException;
/**
* Gets most used categories (contains the most tags) with the specified number.
*
* @param num the specified number
* @return a list of most used categories, returns an empty list if not found
* @throws RepositoryException repository exception
*/
List<JSONObject> getMostUsedCategories(final int num) throws RepositoryException;
}
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.solo.repository;
import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject;
/**
* Category-Tag relation repository.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.1, Mar 31, 2017
* @since 2.0.0
*/
public interface CategoryTagRepository extends Repository {
/**
* Gets category-tag relations by the specified category id.
*
* @param categoryId the specified category id
* @param currentPageNum the specified current page number, MUST greater then {@code 0}
* @param pageSize the specified page size(count of a page contains objects), MUST greater then {@code 0}
* @return for example <pre>
* {
* "pagination": {
* "paginationPageCount": 88250
* },
* "rslts": [{
* "oId": "",
* "category_oId": categoryId,
* "tag_oId": ""
* }, ....]
* }
* </pre>
* @throws RepositoryException repository exception
*/
JSONObject getByCategoryId(final String categoryId, final int currentPageNum, final int pageSize)
throws RepositoryException;
/**
* Gets category-tag relations by the specified tag id.
*
* @param tagId the specified tag id
* @param currentPageNum the specified current page number, MUST greater then {@code 0}
* @param pageSize the specified page size(count of a page contains objects), MUST greater then {@code 0}
* @return for example <pre>
* {
* "pagination": {
* "paginationPageCount": 88250
* },
* "rslts": [{
* "oId": "",
* "category_oId": "",
* "tag_oId": tagId
* }, ....]
* }
* </pre>
* @throws RepositoryException repository exception
*/
JSONObject getByTagId(final String tagId, final int currentPageNum, final int pageSize)
throws RepositoryException;
/**
* Removes category-tag relations by the specified category id.
*
* @param categoryId the specified category id
* @throws RepositoryException repository exception
*/
void removeByCategoryId(final String categoryId) throws RepositoryException;
/**
* Removes category-tag relations by the specified tag id.
*
* @param tagId the specified tag id
* @throws RepositoryException repository exception
*/
void removeByTagId(final String tagId) throws RepositoryException;
}
...@@ -16,12 +16,12 @@ ...@@ -16,12 +16,12 @@
package org.b3log.solo.repository; package org.b3log.solo.repository;
import java.util.List;
import org.b3log.latke.repository.Repository; import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Comment repository. * Comment repository.
......
...@@ -16,11 +16,12 @@ ...@@ -16,11 +16,12 @@
package org.b3log.solo.repository; package org.b3log.solo.repository;
import java.util.List;
import org.b3log.latke.repository.Repository; import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Page repository. * Page repository.
......
...@@ -16,11 +16,12 @@ ...@@ -16,11 +16,12 @@
package org.b3log.solo.repository; package org.b3log.solo.repository;
import java.util.List;
import org.b3log.latke.repository.Repository; import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Tag-Article repository. * Tag-Article repository.
......
...@@ -16,11 +16,12 @@ ...@@ -16,11 +16,12 @@
package org.b3log.solo.repository; package org.b3log.solo.repository;
import java.util.List;
import org.b3log.latke.repository.Repository; import org.b3log.latke.repository.Repository;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Tag repository. * Tag repository.
......
...@@ -17,15 +17,10 @@ package org.b3log.solo.repository.impl; ...@@ -17,15 +17,10 @@ package org.b3log.solo.repository.impl;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.solo.model.Article;
import org.b3log.solo.model.ArchiveDate; import org.b3log.solo.model.ArchiveDate;
import org.b3log.solo.model.Article;
import org.b3log.solo.repository.ArchiveDateArticleRepository; import org.b3log.solo.repository.ArchiveDateArticleRepository;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
......
...@@ -16,19 +16,11 @@ ...@@ -16,19 +16,11 @@
package org.b3log.solo.repository.impl; package org.b3log.solo.repository.impl;
import java.text.ParseException;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.ArchiveDate; import org.b3log.solo.model.ArchiveDate;
...@@ -36,6 +28,10 @@ import org.b3log.solo.repository.ArchiveDateRepository; ...@@ -36,6 +28,10 @@ import org.b3log.solo.repository.ArchiveDateRepository;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import java.text.ParseException;
import java.util.Iterator;
import java.util.List;
/** /**
* Archive date repository. * Archive date repository.
...@@ -70,7 +66,7 @@ public class ArchiveDateRepositoryImpl extends AbstractRepository implements Arc ...@@ -70,7 +66,7 @@ public class ArchiveDateRepositoryImpl extends AbstractRepository implements Arc
throw new RepositoryException("Can not parse archive date [" + archiveDate + "]"); throw new RepositoryException("Can not parse archive date [" + archiveDate + "]");
} }
LOGGER.log(Level.TRACE, "Archive date [{0}] parsed to time [{1}]", new Object[] {archiveDate, time}); LOGGER.log(Level.TRACE, "Archive date [{0}] parsed to time [{1}]", archiveDate, time);
final Query query = new Query(); final Query query = new Query();
......
...@@ -15,19 +15,10 @@ ...@@ -15,19 +15,10 @@
*/ */
package org.b3log.solo.repository.impl; package org.b3log.solo.repository.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.CompositeFilterOperator;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
...@@ -36,6 +27,10 @@ import org.json.JSONArray; ...@@ -36,6 +27,10 @@ import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* Article repository. * Article repository.
* *
...@@ -233,7 +228,7 @@ public class ArticleRepositoryImpl extends AbstractRepository implements Article ...@@ -233,7 +228,7 @@ public class ArticleRepositoryImpl extends AbstractRepository implements Article
final JSONObject result1 = get(query); final JSONObject result1 = get(query);
final JSONArray array1 = result1.optJSONArray(Keys.RESULTS); final JSONArray array1 = result1.optJSONArray(Keys.RESULTS);
final List<JSONObject> list1 = CollectionUtils.<JSONObject>jsonArrayToList(array1); final List<JSONObject> list1 = CollectionUtils.jsonArrayToList(array1);
ret.addAll(list1); ret.addAll(list1);
...@@ -252,7 +247,7 @@ public class ArticleRepositoryImpl extends AbstractRepository implements Article ...@@ -252,7 +247,7 @@ public class ArticleRepositoryImpl extends AbstractRepository implements Article
final JSONObject result2 = get(query); final JSONObject result2 = get(query);
final JSONArray array2 = result2.optJSONArray(Keys.RESULTS); final JSONArray array2 = result2.optJSONArray(Keys.RESULTS);
final List<JSONObject> list2 = CollectionUtils.<JSONObject>jsonArrayToList(array2); final List<JSONObject> list2 = CollectionUtils.jsonArrayToList(array2);
ret.addAll(list2); ret.addAll(list2);
} }
......
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.solo.repository.impl;
import org.b3log.latke.Keys;
import org.b3log.latke.repository.*;
import org.b3log.latke.repository.annotation.Repository;
import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.Category;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.CategoryRepository;
import org.json.JSONArray;
import org.json.JSONObject;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* Category repository.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.1, Apr 8, 2017
* @since 2.0.0
*/
@Repository
public class CategoryRepositoryImpl extends AbstractRepository implements CategoryRepository {
/**
* Public constructor.
*/
public CategoryRepositoryImpl() {
super(Category.CATEGORY);
}
@Override
public JSONObject getByTitle(final String categoryTitle) throws RepositoryException {
final Query query = new Query().
setFilter(new PropertyFilter(Category.CATEGORY_TITLE, FilterOperator.EQUAL, categoryTitle)).
setPageCount(1);
final JSONObject result = get(query);
final JSONArray array = result.optJSONArray(Keys.RESULTS);
if (0 == array.length()) {
return null;
}
return array.optJSONObject(0);
}
@Override
public JSONObject getByURI(final String categoryURI) throws RepositoryException {
final Query query = new Query().
setFilter(new PropertyFilter(Category.CATEGORY_URI, FilterOperator.EQUAL, categoryURI)).
setPageCount(1);
final JSONObject result = get(query);
final JSONArray array = result.optJSONArray(Keys.RESULTS);
if (0 == array.length()) {
return null;
}
return array.optJSONObject(0);
}
@Override
public int getMaxOrder() throws RepositoryException {
final Query query = new Query();
query.addSort(Category.CATEGORY_ORDER, SortDirection.DESCENDING);
final JSONObject result = get(query);
final JSONArray array = result.optJSONArray(Keys.RESULTS);
if (0 == array.length()) {
return -1;
}
return array.optJSONObject(0).optInt(Category.CATEGORY_ORDER);
}
@Override
public JSONObject getByOrder(final int order) throws RepositoryException {
final Query query = new Query();
query.setFilter(new PropertyFilter(Category.CATEGORY_ORDER, FilterOperator.EQUAL, order));
final JSONObject result = get(query);
final JSONArray array = result.optJSONArray(Keys.RESULTS);
if (0 == array.length()) {
return null;
}
return array.optJSONObject(0);
}
@Override
public List<JSONObject> getMostUsedCategories(final int num) throws RepositoryException {
final Query query = new Query().addSort(Category.CATEGORY_TAG_CNT, SortDirection.DESCENDING).
setCurrentPageNum(1).setPageSize(num).setPageCount(1);
final JSONObject result = get(query);
final JSONArray array = result.optJSONArray(Keys.RESULTS);
final List<JSONObject> ret = CollectionUtils.jsonArrayToList(array);
sortJSONCategoryList(ret);
return ret;
}
@Override
public JSONObject getUpper(final String id) throws RepositoryException {
final JSONObject category = get(id);
if (null == category) {
return null;
}
final Query query = new Query();
query.setFilter(new PropertyFilter(Category.CATEGORY_ORDER, FilterOperator.LESS_THAN, category.optInt(Category.CATEGORY_ORDER))).
addSort(Category.CATEGORY_ORDER, SortDirection.DESCENDING);
query.setCurrentPageNum(1);
query.setPageSize(1);
final JSONObject result = get(query);
final JSONArray array = result.optJSONArray(Keys.RESULTS);
if (1 != array.length()) {
return null;
}
return array.optJSONObject(0);
}
@Override
public JSONObject getUnder(final String id) throws RepositoryException {
final JSONObject category = get(id);
if (null == category) {
return null;
}
final Query query = new Query();
query.setFilter(new PropertyFilter(Category.CATEGORY_ORDER, FilterOperator.GREATER_THAN, category.optInt(Category.CATEGORY_ORDER))).
addSort(Category.CATEGORY_ORDER, SortDirection.ASCENDING);
query.setCurrentPageNum(1);
query.setPageSize(1);
final JSONObject result = get(query);
final JSONArray array = result.optJSONArray(Keys.RESULTS);
if (1 != array.length()) {
return null;
}
return array.optJSONObject(0);
}
private void sortJSONCategoryList(final List<JSONObject> tagJoList) {
Collections.sort(tagJoList, new Comparator<JSONObject>() {
@Override
public int compare(final JSONObject o1, final JSONObject o2) {
return Collator.getInstance(java.util.Locale.CHINA).
compare(o1.optString(Tag.TAG_TITLE), o2.optString(Tag.TAG_TITLE));
}
});
}
}
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.solo.repository.impl;
import org.b3log.latke.Keys;
import org.b3log.latke.repository.*;
import org.b3log.latke.repository.annotation.Repository;
import org.b3log.solo.model.Category;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.CategoryTagRepository;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* Category-Tag relation repository.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.0, Mar 31, 2017
* @since 2.0.0
*/
@Repository
public class CategoryTagRepositoryImpl extends AbstractRepository implements CategoryTagRepository {
/**
* Public constructor.
*/
public CategoryTagRepositoryImpl() {
super(Category.CATEGORY + "_" + Tag.TAG);
}
@Override
public JSONObject getByCategoryId(final String categoryId, final int currentPageNum, final int pageSize)
throws RepositoryException {
final Query query = new Query().
setFilter(new PropertyFilter(Category.CATEGORY + "_" + Keys.OBJECT_ID, FilterOperator.EQUAL, categoryId)).
setCurrentPageNum(currentPageNum).setPageSize(pageSize).setPageCount(1);
return get(query);
}
@Override
public JSONObject getByTagId(final String tagId, final int currentPageNum, final int pageSize)
throws RepositoryException {
final Query query = new Query().
setFilter(new PropertyFilter(Tag.TAG + "_" + Keys.OBJECT_ID, FilterOperator.EQUAL, tagId)).
setCurrentPageNum(currentPageNum).setPageSize(pageSize).setPageCount(1);
return get(query);
}
@Override
public void removeByCategoryId(final String categoryId) throws RepositoryException {
final Query query = new Query().
setFilter(new PropertyFilter(Category.CATEGORY + "_" + Keys.OBJECT_ID, FilterOperator.EQUAL, categoryId));
final JSONArray relations = get(query).optJSONArray(Keys.RESULTS);
for (int i = 0; i < relations.length(); i++) {
final JSONObject rel = relations.optJSONObject(i);
remove(rel.optString(Keys.OBJECT_ID));
}
}
@Override
public void removeByTagId(final String tagId) throws RepositoryException {
final Query query = new Query().
setFilter(new PropertyFilter(Tag.TAG + "_" + Keys.OBJECT_ID, FilterOperator.EQUAL, tagId));
final JSONArray relations = get(query).optJSONArray(Keys.RESULTS);
for (int i = 0; i < relations.length(); i++) {
final JSONObject rel = relations.optJSONObject(i);
remove(rel.optString(Keys.OBJECT_ID));
}
}
}
...@@ -16,27 +16,23 @@ ...@@ -16,27 +16,23 @@
package org.b3log.solo.repository.impl; package org.b3log.solo.repository.impl;
import java.util.Iterator;
import java.util.List;
import javax.inject.Inject;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.solo.model.Comment;
import org.b3log.solo.repository.CommentRepository;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Comment;
import org.b3log.solo.repository.ArticleRepository; import org.b3log.solo.repository.ArticleRepository;
import org.b3log.solo.repository.CommentRepository;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.Iterator;
import java.util.List;
/** /**
* Comment repository. * Comment repository.
...@@ -76,7 +72,7 @@ public class CommentRepositoryImpl extends AbstractRepository implements Comment ...@@ -76,7 +72,7 @@ public class CommentRepositoryImpl extends AbstractRepository implements Comment
remove(commentId); remove(commentId);
} }
LOGGER.log(Level.DEBUG, "Removed comments[onId={0}, removedCnt={1}]", new Object[] {onId, comments.size()}); LOGGER.log(Level.DEBUG, "Removed comments[onId={0}, removedCnt={1}]", onId, comments.size());
return comments.size(); return comments.size();
} }
......
...@@ -17,12 +17,7 @@ package org.b3log.solo.repository.impl; ...@@ -17,12 +17,7 @@ package org.b3log.solo.repository.impl;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.solo.model.Link; import org.b3log.solo.model.Link;
import org.b3log.solo.repository.LinkRepository; import org.b3log.solo.repository.LinkRepository;
......
...@@ -16,14 +16,8 @@ ...@@ -16,14 +16,8 @@
package org.b3log.solo.repository.impl; package org.b3log.solo.repository.impl;
import java.util.List;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.Page; import org.b3log.solo.model.Page;
...@@ -31,6 +25,8 @@ import org.b3log.solo.repository.PageRepository; ...@@ -31,6 +25,8 @@ import org.b3log.solo.repository.PageRepository;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Page repository. * Page repository.
......
...@@ -16,22 +16,18 @@ ...@@ -16,22 +16,18 @@
package org.b3log.solo.repository.impl; package org.b3log.solo.repository.impl;
import java.util.List;
import org.b3log.solo.model.Article;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.TagArticleRepository;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.Article;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.TagArticleRepository;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Tag-Article relation repository. * Tag-Article relation repository.
......
...@@ -15,28 +15,24 @@ ...@@ -15,28 +15,24 @@
*/ */
package org.b3log.solo.repository.impl; package org.b3log.solo.repository.impl;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.inject.Inject;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.TagRepository;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.repository.FilterOperator; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.SortDirection;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.CollectionUtils;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.TagArticleRepository; import org.b3log.solo.repository.TagArticleRepository;
import org.b3log.solo.repository.TagRepository;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/** /**
* Tag repository. * Tag repository.
* *
......
...@@ -19,11 +19,7 @@ package org.b3log.solo.repository.impl; ...@@ -19,11 +19,7 @@ package org.b3log.solo.repository.impl;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.repository.AbstractRepository; import org.b3log.latke.repository.*;
import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.RepositoryException;
import org.b3log.latke.repository.annotation.Repository; import org.b3log.latke.repository.annotation.Repository;
import org.b3log.solo.repository.UserRepository; import org.b3log.solo.repository.UserRepository;
import org.json.JSONArray; import org.json.JSONArray;
......
...@@ -16,8 +16,7 @@ ...@@ -16,8 +16,7 @@
package org.b3log.solo.service; package org.b3log.solo.service;
import java.util.List; import org.b3log.latke.ioc.inject.Inject;
import javax.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
...@@ -27,6 +26,8 @@ import org.b3log.solo.model.ArchiveDate; ...@@ -27,6 +26,8 @@ import org.b3log.solo.model.ArchiveDate;
import org.b3log.solo.repository.ArchiveDateRepository; import org.b3log.solo.repository.ArchiveDateRepository;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.List;
/** /**
* Archive date query service. * Archive date query service.
......
...@@ -16,18 +16,13 @@ ...@@ -16,18 +16,13 @@
package org.b3log.solo.service; package org.b3log.solo.service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventException; import org.b3log.latke.event.EventException;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.RepositoryException; import org.b3log.latke.repository.RepositoryException;
...@@ -39,26 +34,21 @@ import org.b3log.latke.util.CollectionUtils; ...@@ -39,26 +34,21 @@ import org.b3log.latke.util.CollectionUtils;
import org.b3log.latke.util.Ids; import org.b3log.latke.util.Ids;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.event.EventTypes; import org.b3log.solo.event.EventTypes;
import org.b3log.solo.model.ArchiveDate; import org.b3log.solo.model.*;
import org.b3log.solo.model.Article; import org.b3log.solo.repository.*;
import static org.b3log.solo.model.Article.*;
import org.b3log.solo.model.Comment;
import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option;
import org.b3log.solo.model.Tag;
import org.b3log.solo.model.UserExt;
import org.b3log.solo.repository.ArchiveDateArticleRepository;
import org.b3log.solo.repository.ArchiveDateRepository;
import org.b3log.solo.repository.ArticleRepository;
import org.b3log.solo.repository.CommentRepository;
import org.b3log.solo.repository.TagArticleRepository;
import org.b3log.solo.repository.TagRepository;
import org.b3log.solo.repository.UserRepository;
import org.b3log.solo.util.Comments; import org.b3log.solo.util.Comments;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import static org.b3log.solo.model.Article.*;
/** /**
* Article management service. * Article management service.
...@@ -702,9 +692,8 @@ public class ArticleMgmtService { ...@@ -702,9 +692,8 @@ public class ArticleMgmtService {
} }
tagRepository.update(tagId, tag); tagRepository.update(tagId, tag);
LOGGER.log(Level.TRACE, "Deced tag[title={0}, refCnt={1}, publishedRefCnt={2}] of article[id={3}]", LOGGER.log(Level.TRACE, "Deced tag[title={0}, refCnt={1}, publishedRefCnt={2}] of article[id={3}]",
new Object[] {
tag.getString(Tag.TAG_TITLE), tag.getInt(Tag.TAG_REFERENCE_COUNT), tag.getInt(Tag.TAG_PUBLISHED_REFERENCE_COUNT), tag.getString(Tag.TAG_TITLE), tag.getInt(Tag.TAG_REFERENCE_COUNT), tag.getInt(Tag.TAG_PUBLISHED_REFERENCE_COUNT),
articleId}); articleId);
} }
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.log(Level.ERROR, "Decs tag references count of article[id" + articleId + "] failed", e); LOGGER.log(Level.ERROR, "Decs tag references count of article[id" + articleId + "] failed", e);
...@@ -967,7 +956,7 @@ public class ArticleMgmtService { ...@@ -967,7 +956,7 @@ public class ArticleMgmtService {
if (null == tag) { if (null == tag) {
LOGGER.log(Level.TRACE, "Found a new tag[title={0}] in article[title={1}]", LOGGER.log(Level.TRACE, "Found a new tag[title={0}] in article[title={1}]",
new Object[] {tagTitle, article.optString(Article.ARTICLE_TITLE)}); tagTitle, article.optString(Article.ARTICLE_TITLE));
tag = new JSONObject(); tag = new JSONObject();
tag.put(Tag.TAG_TITLE, tagTitle); tag.put(Tag.TAG_TITLE, tagTitle);
tag.put(Tag.TAG_REFERENCE_COUNT, 1); tag.put(Tag.TAG_REFERENCE_COUNT, 1);
...@@ -982,7 +971,7 @@ public class ArticleMgmtService { ...@@ -982,7 +971,7 @@ public class ArticleMgmtService {
} else { } else {
tagId = tag.optString(Keys.OBJECT_ID); tagId = tag.optString(Keys.OBJECT_ID);
LOGGER.log(Level.TRACE, "Found a existing tag[title={0}, id={1}] in article[title={2}]", LOGGER.log(Level.TRACE, "Found a existing tag[title={0}, id={1}] in article[title={2}]",
new Object[] {tag.optString(Tag.TAG_TITLE), tag.optString(Keys.OBJECT_ID), article.optString(Article.ARTICLE_TITLE)}); tag.optString(Tag.TAG_TITLE), tag.optString(Keys.OBJECT_ID), article.optString(Article.ARTICLE_TITLE));
final JSONObject tagTmp = new JSONObject(); final JSONObject tagTmp = new JSONObject();
tagTmp.put(Keys.OBJECT_ID, tagId); tagTmp.put(Keys.OBJECT_ID, tagId);
......
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.b3log.solo.service;
import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.*;
import org.b3log.latke.repository.annotation.Transactional;
import org.b3log.latke.service.ServiceException;
import org.b3log.latke.service.annotation.Service;
import org.b3log.solo.model.Category;
import org.b3log.solo.model.Tag;
import org.b3log.solo.repository.CategoryRepository;
import org.b3log.solo.repository.CategoryTagRepository;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* Category management service.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.2.0.0, Apr 1, 2017
* @since 2.0.0
*/
@Service
public class CategoryMgmtService {
/**
* Logger.
*/
private static final Logger LOGGER = Logger.getLogger(CategoryMgmtService.class);
/**
* Category repository.
*/
@Inject
private CategoryRepository categoryRepository;
/**
* Category tag repository.
*/
@Inject
private CategoryTagRepository categoryTagRepository;
/**
* Changes the order of a category specified by the given category id with the specified direction.
*
* @param categoryId the given category id
* @param direction the specified direction, "up"/"down"
* @throws ServiceException service exception
*/
public void changeOrder(final String categoryId, final String direction)
throws ServiceException {
final Transaction transaction = categoryRepository.beginTransaction();
try {
final JSONObject srcCategory = categoryRepository.get(categoryId);
final int srcCategoryOrder = srcCategory.getInt(Category.CATEGORY_ORDER);
JSONObject targetCategory;
if ("up".equals(direction)) {
targetCategory = categoryRepository.getUpper(categoryId);
} else { // Down
targetCategory = categoryRepository.getUnder(categoryId);
}
if (null == targetCategory) {
if (transaction.isActive()) {
transaction.rollback();
}
LOGGER.log(Level.WARN, "Cant not find the target category of source category [order={0}]", srcCategoryOrder);
return;
}
// Swaps
srcCategory.put(Category.CATEGORY_ORDER, targetCategory.getInt(Category.CATEGORY_ORDER));
targetCategory.put(Category.CATEGORY_ORDER, srcCategoryOrder);
categoryRepository.update(srcCategory.getString(Keys.OBJECT_ID), srcCategory);
categoryRepository.update(targetCategory.getString(Keys.OBJECT_ID), targetCategory);
transaction.commit();
} catch (final Exception e) {
if (transaction.isActive()) {
transaction.rollback();
}
LOGGER.log(Level.ERROR, "Changes category's order failed", e);
throw new ServiceException(e);
}
}
/**
* Removes a category-tag relation.
*
* @param categoryId the specified category id
* @param tagId the specified tag id
* @throws ServiceException service exception
*/
@Transactional
public void removeCategoryTag(final String categoryId, final String tagId) throws ServiceException {
try {
final JSONObject category = categoryRepository.get(categoryId);
category.put(Category.CATEGORY_TAG_CNT, category.optInt(Category.CATEGORY_TAG_CNT) - 1);
categoryRepository.update(categoryId, category);
final Query query = new Query().setFilter(
CompositeFilterOperator.and(
new PropertyFilter(Category.CATEGORY + "_" + Keys.OBJECT_ID, FilterOperator.EQUAL, categoryId),
new PropertyFilter(Tag.TAG + "_" + Keys.OBJECT_ID, FilterOperator.EQUAL, tagId)));
final JSONArray relations = categoryTagRepository.get(query).optJSONArray(Keys.RESULTS);
if (relations.length() < 1) {
return;
}
final JSONObject relation = relations.optJSONObject(0);
categoryTagRepository.remove(relation.optString(Keys.OBJECT_ID));
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Adds a category-tag relation failed", e);
throw new ServiceException(e);
}
}
/**
* Adds a category-tag relation.
*
* @param categoryTag the specified category-tag relation
* @throws ServiceException service exception
*/
@Transactional
public void addCategoryTag(final JSONObject categoryTag) throws ServiceException {
try {
final String categoryId = categoryTag.optString(Category.CATEGORY + "_" + Keys.OBJECT_ID);
final JSONObject category = categoryRepository.get(categoryId);
category.put(Category.CATEGORY_TAG_CNT, category.optInt(Category.CATEGORY_TAG_CNT) + 1);
categoryRepository.update(categoryId, category);
categoryTagRepository.add(categoryTag);
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Adds a category-tag relation failed", e);
throw new ServiceException(e);
}
}
/**
* Adds a category relation.
*
* @param category the specified category relation
* @return category id
* @throws ServiceException service exception
*/
@Transactional
public String addCategory(final JSONObject category) throws ServiceException {
try {
final JSONObject record = new JSONObject();
record.put(Category.CATEGORY_TAG_CNT, 0);
record.put(Category.CATEGORY_URI, category.optString(Category.CATEGORY_URI));
record.put(Category.CATEGORY_TITLE, category.optString(Category.CATEGORY_TITLE));
record.put(Category.CATEGORY_DESCRIPTION, category.optString(Category.CATEGORY_DESCRIPTION));
final int maxOrder = categoryRepository.getMaxOrder();
final int order = maxOrder + 1;
record.put(Category.CATEGORY_ORDER, order);
category.put(Category.CATEGORY_ORDER, order);
final String ret = categoryRepository.add(record);
return ret;
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Adds a category failed", e);
throw new ServiceException(e);
}
}
/**
* Updates the specified category by the given category id.
*
* @param categoryId the given category id
* @param category the specified category
* @throws ServiceException service exception
*/
@Transactional
public void updateCategory(final String categoryId, final JSONObject category) throws ServiceException {
try {
final JSONObject oldCategory = categoryRepository.get(categoryId);
category.put(Category.CATEGORY_ORDER, oldCategory.optInt(Category.CATEGORY_ORDER));
category.put(Category.CATEGORY_TAG_CNT, oldCategory.optInt(Category.CATEGORY_TAG_CNT));
categoryRepository.update(categoryId, category);
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Updates a category [id=" + categoryId + "] failed", e);
throw new ServiceException(e);
}
}
/**
* Removes the specified category by the given category id.
*
* @param categoryId the given category id
* @throws ServiceException service exception
*/
@Transactional
public void removeCategory(final String categoryId) throws ServiceException {
try {
categoryTagRepository.removeByCategoryId(categoryId);
categoryRepository.remove(categoryId);
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Remove a category [id=" + categoryId + "] failed", e);
throw new ServiceException(e);
}
}
/**
* Removes category-tag relations by the given category id.
*
* @param categoryId the given category id
* @throws ServiceException service exception
*/
@Transactional
public void removeCategoryTags(final String categoryId) throws ServiceException {
try {
categoryTagRepository.removeByCategoryId(categoryId);
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Remove category-tag [categoryId=" + categoryId + "] failed", e);
throw new ServiceException(e);
}
}
}
This diff is collapsed.
...@@ -15,17 +15,13 @@ ...@@ -15,17 +15,13 @@
*/ */
package org.b3log.solo.service; package org.b3log.solo.service;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.event.Event; import org.b3log.latke.event.Event;
import org.b3log.latke.event.EventManager; import org.b3log.latke.event.EventManager;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.mail.MailService; import org.b3log.latke.mail.MailService;
...@@ -35,7 +31,10 @@ import org.b3log.latke.repository.Transaction; ...@@ -35,7 +31,10 @@ import org.b3log.latke.repository.Transaction;
import org.b3log.latke.service.LangPropsService; import org.b3log.latke.service.LangPropsService;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.service.annotation.Service; import org.b3log.latke.service.annotation.Service;
import org.b3log.latke.urlfetch.*; import org.b3log.latke.urlfetch.HTTPRequest;
import org.b3log.latke.urlfetch.HTTPResponse;
import org.b3log.latke.urlfetch.URLFetchService;
import org.b3log.latke.urlfetch.URLFetchServiceFactory;
import org.b3log.latke.util.Ids; import org.b3log.latke.util.Ids;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.event.EventTypes; import org.b3log.solo.event.EventTypes;
...@@ -53,6 +52,11 @@ import org.json.JSONObject; ...@@ -53,6 +52,11 @@ import org.json.JSONObject;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist; import org.jsoup.safety.Whitelist;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
/** /**
* Comment management service. * Comment management service.
* *
...@@ -251,7 +255,7 @@ public class CommentMgmtService { ...@@ -251,7 +255,7 @@ public class CommentMgmtService {
message.setHtmlBody(mailBody); message.setHtmlBody(mailBody);
LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to admin[email={2}]", LOGGER.log(Level.DEBUG, "Sending a mail[mailSubject={0}, mailBody=[{1}] to admin[email={2}]",
new Object[]{mailSubject, mailBody, adminEmail}); mailSubject, mailBody, adminEmail);
mailService.send(message); mailService.send(message);
} }
...@@ -605,7 +609,7 @@ public class CommentMgmtService { ...@@ -605,7 +609,7 @@ public class CommentMgmtService {
ret.put(Common.IS_REPLY, true); ret.put(Common.IS_REPLY, true);
} else { } else {
LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]", LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]",
new String[]{originalCommentId, commentName, commentContent}); originalCommentId, commentName, commentContent);
} }
} }
setCommentThumbnailURL(comment); setCommentThumbnailURL(comment);
......
...@@ -15,13 +15,9 @@ ...@@ -15,13 +15,9 @@
*/ */
package org.b3log.solo.service; package org.b3log.solo.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Pagination; import org.b3log.latke.model.Pagination;
...@@ -45,6 +41,11 @@ import org.b3log.solo.util.Thumbnails; ...@@ -45,6 +41,11 @@ import org.b3log.solo.util.Thumbnails;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* Comment query service. * Comment query service.
* *
......
...@@ -15,19 +15,13 @@ ...@@ -15,19 +15,13 @@
*/ */
package org.b3log.solo.service; package org.b3log.solo.service;
import java.net.URL;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import javax.servlet.ServletContext;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.Latkes; import org.b3log.latke.Latkes;
import org.b3log.latke.RuntimeDatabase; import org.b3log.latke.RuntimeDatabase;
import org.b3log.latke.RuntimeEnv; import org.b3log.latke.RuntimeEnv;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.model.Role; import org.b3log.latke.model.Role;
...@@ -49,16 +43,7 @@ import org.b3log.latke.util.freemarker.Templates; ...@@ -49,16 +43,7 @@ import org.b3log.latke.util.freemarker.Templates;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.SoloServletListener;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
import org.b3log.solo.model.Option.DefaultPreference; import org.b3log.solo.model.Option.DefaultPreference;
import org.b3log.solo.repository.ArchiveDateArticleRepository; import org.b3log.solo.repository.*;
import org.b3log.solo.repository.ArchiveDateRepository;
import org.b3log.solo.repository.ArticleRepository;
import org.b3log.solo.repository.CommentRepository;
import org.b3log.solo.repository.LinkRepository;
import org.b3log.solo.repository.OptionRepository;
import org.b3log.solo.repository.StatisticRepository;
import org.b3log.solo.repository.TagArticleRepository;
import org.b3log.solo.repository.TagRepository;
import org.b3log.solo.repository.UserRepository;
import org.b3log.solo.util.Comments; import org.b3log.solo.util.Comments;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
import org.b3log.solo.util.Thumbnails; import org.b3log.solo.util.Thumbnails;
...@@ -67,6 +52,13 @@ import org.json.JSONArray; ...@@ -67,6 +52,13 @@ import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import javax.servlet.ServletContext;
import java.net.URL;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Set;
/** /**
* Solo initialization service. * Solo initialization service.
* *
...@@ -232,7 +224,7 @@ public class InitService { ...@@ -232,7 +224,7 @@ public class InitService {
final List<CreateTableResult> createTableResults = JdbcRepositories.initAllTables(); final List<CreateTableResult> createTableResults = JdbcRepositories.initAllTables();
for (final CreateTableResult createTableResult : createTableResults) { for (final CreateTableResult createTableResult : createTableResults) {
LOGGER.log(Level.DEBUG, "Create table result[tableName={0}, isSuccess={1}]", LOGGER.log(Level.DEBUG, "Create table result[tableName={0}, isSuccess={1}]",
new Object[]{createTableResult.getName(), createTableResult.isSuccess()}); createTableResult.getName(), createTableResult.isSuccess());
} }
} }
...@@ -478,7 +470,7 @@ public class InitService { ...@@ -478,7 +470,7 @@ public class InitService {
final JSONObject tag = new JSONObject(); final JSONObject tag = new JSONObject();
LOGGER.log(Level.TRACE, "Found a new tag[title={0}] in article[title={1}]", LOGGER.log(Level.TRACE, "Found a new tag[title={0}] in article[title={1}]",
new Object[]{tagTitle, article.optString(Article.ARTICLE_TITLE)}); tagTitle, article.optString(Article.ARTICLE_TITLE));
tag.put(Tag.TAG_TITLE, tagTitle); tag.put(Tag.TAG_TITLE, tagTitle);
tag.put(Tag.TAG_REFERENCE_COUNT, 1); tag.put(Tag.TAG_REFERENCE_COUNT, 1);
tag.put(Tag.TAG_PUBLISHED_REFERENCE_COUNT, 1); tag.put(Tag.TAG_PUBLISHED_REFERENCE_COUNT, 1);
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
package org.b3log.solo.service; package org.b3log.solo.service;
import javax.inject.Inject;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.ioc.inject.Inject;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
import org.b3log.latke.repository.Transaction; import org.b3log.latke.repository.Transaction;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment