Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
solo-1
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
solo-1
Commits
a2102828
Commit
a2102828
authored
Jun 26, 2017
by
Liang Ding
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'refs/remotes/origin/2.2.0-dev'
parents
786c176b
b73917dc
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
71 additions
and
55 deletions
+71
-55
src/main/java/org/b3log/solo/event/rhythm/ArticleSender.java
src/main/java/org/b3log/solo/event/rhythm/ArticleSender.java
+8
-11
src/main/java/org/b3log/solo/event/rhythm/ArticleUpdater.java
...main/java/org/b3log/solo/event/rhythm/ArticleUpdater.java
+8
-11
src/main/java/org/b3log/solo/service/ImportService.java
src/main/java/org/b3log/solo/service/ImportService.java
+55
-33
No files found.
src/main/java/org/b3log/solo/event/rhythm/ArticleSender.java
View file @
a2102828
...
...
@@ -43,14 +43,13 @@ import java.util.Date;
/**
* This listener is responsible for sending article to B3log Rhythm.
*
* <p>
* The B3log Rhythm article update interface: http://rhythm.b3log.org/article (POST).
* </p>
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author ArmstrongCN
* @version 1.0.2.
8, Nov 20, 2015
* @version 1.0.2.
9, Jun 26, 2017
* @since 0.3.1
*/
public
final
class
ArticleSender
extends
AbstractEventListener
<
JSONObject
>
{
...
...
@@ -58,12 +57,7 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleSender
.
class
.
getName
());
/**
* URL fetch service.
*/
private
final
URLFetchService
urlFetchService
=
URLFetchServiceFactory
.
getURLFetchService
();
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleSender
.
class
);
/**
* URL of adding article to Rhythm.
...
...
@@ -79,6 +73,11 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
}
}
/**
* URL fetch service.
*/
private
final
URLFetchService
urlFetchService
=
URLFetchServiceFactory
.
getURLFetchService
();
@Override
public
void
action
(
final
Event
<
JSONObject
>
event
)
throws
EventException
{
final
JSONObject
data
=
event
.
getData
();
...
...
@@ -87,7 +86,6 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
event
.
getType
(),
data
,
ArticleSender
.
class
.
getName
());
try
{
final
JSONObject
originalArticle
=
data
.
getJSONObject
(
Article
.
ARTICLE
);
if
(!
originalArticle
.
getBoolean
(
Article
.
ARTICLE_IS_PUBLISHED
))
{
LOGGER
.
log
(
Level
.
DEBUG
,
"Ignores post article[title={0}] to Rhythm"
,
originalArticle
.
getString
(
Article
.
ARTICLE_TITLE
));
...
...
@@ -98,7 +96,6 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
final
PreferenceQueryService
preferenceQueryService
=
beanManager
.
getReference
(
PreferenceQueryService
.
class
);
final
JSONObject
preference
=
preferenceQueryService
.
getPreference
();
if
(
null
==
preference
)
{
throw
new
EventException
(
"Not found preference"
);
}
...
...
@@ -108,7 +105,7 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
}
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
.
TRACE
,
"Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm"
,
originalArticle
.
getString
(
Keys
.
OBJECT_ID
),
originalArticle
.
getString
(
Article
.
ARTICLE_TITLE
));
return
;
}
...
...
src/main/java/org/b3log/solo/event/rhythm/ArticleUpdater.java
View file @
a2102828
...
...
@@ -43,13 +43,12 @@ import java.util.Date;
/**
* This listener is responsible for updating article to B3log Rhythm.
*
* <p>
* The B3log Rhythm article update interface: http://rhythm.b3log.org/article (PUT).
* </p>
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.
2, Nov 20, 2015
* @version 1.0.0.
3, Jun 26, 2017
* @since 0.6.0
*/
public
final
class
ArticleUpdater
extends
AbstractEventListener
<
JSONObject
>
{
...
...
@@ -57,12 +56,7 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> {
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleUpdater
.
class
.
getName
());
/**
* URL fetch service.
*/
private
final
URLFetchService
urlFetchService
=
URLFetchServiceFactory
.
getURLFetchService
();
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
ArticleUpdater
.
class
);
/**
* URL of updating article to Rhythm.
...
...
@@ -78,6 +72,11 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> {
}
}
/**
* URL fetch service.
*/
private
final
URLFetchService
urlFetchService
=
URLFetchServiceFactory
.
getURLFetchService
();
@Override
public
void
action
(
final
Event
<
JSONObject
>
event
)
throws
EventException
{
final
JSONObject
data
=
event
.
getData
();
...
...
@@ -86,7 +85,6 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> {
event
.
getType
(),
data
,
ArticleUpdater
.
class
.
getName
());
try
{
final
JSONObject
originalArticle
=
data
.
getJSONObject
(
Article
.
ARTICLE
);
if
(!
originalArticle
.
getBoolean
(
Article
.
ARTICLE_IS_PUBLISHED
))
{
LOGGER
.
log
(
Level
.
DEBUG
,
"Ignores post article[title={0}] to Rhythm"
,
originalArticle
.
getString
(
Article
.
ARTICLE_TITLE
));
...
...
@@ -97,7 +95,6 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> {
final
PreferenceQueryService
preferenceQueryService
=
beanManager
.
getReference
(
PreferenceQueryService
.
class
);
final
JSONObject
preference
=
preferenceQueryService
.
getPreference
();
if
(
null
==
preference
)
{
throw
new
EventException
(
"Not found preference"
);
}
...
...
@@ -107,7 +104,7 @@ public final class ArticleUpdater extends AbstractEventListener<JSONObject> {
}
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
.
TRACE
,
"Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm"
,
originalArticle
.
getString
(
Keys
.
OBJECT_ID
),
originalArticle
.
getString
(
Article
.
ARTICLE_TITLE
));
return
;
}
...
...
src/main/java/org/b3log/solo/service/ImportService.java
View file @
a2102828
...
...
@@ -8,6 +8,7 @@ import org.b3log.latke.logging.Level;
import
org.b3log.latke.logging.Logger
;
import
org.b3log.latke.model.User
;
import
org.b3log.latke.service.annotation.Service
;
import
org.b3log.latke.util.Strings
;
import
org.b3log.solo.SoloServletListener
;
import
org.b3log.solo.model.Article
;
import
org.json.JSONObject
;
...
...
@@ -30,7 +31,7 @@ public class ImportService {
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
Upgrade
Service
.
class
);
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
Import
Service
.
class
);
/**
* Default tag.
...
...
@@ -50,45 +51,66 @@ public class ImportService {
private
UserQueryService
userQueryService
;
public
void
importMarkdowns
()
{
final
ServletContext
servletContext
=
SoloServletListener
.
getServletContext
();
final
String
markdownsPath
=
servletContext
.
getRealPath
(
"markdowns"
);
LOGGER
.
debug
(
"Import directory ["
+
markdownsPath
+
"]"
);
new
Thread
(()
->
{
final
ServletContext
servletContext
=
SoloServletListener
.
getServletContext
();
final
String
markdownsPath
=
servletContext
.
getRealPath
(
"markdowns"
);
LOGGER
.
debug
(
"Import directory ["
+
markdownsPath
+
"]"
);
JSONObject
admin
;
try
{
admin
=
userQueryService
.
getAdmin
();
}
catch
(
final
Exception
e
)
{
return
;
}
if
(
null
==
admin
)
{
// Not init yet
return
;
}
final
String
adminEmail
=
admin
.
optString
(
User
.
USER_EMAIL
);
JSONObject
admin
;
try
{
admin
=
userQueryService
.
getAdmin
();
}
catch
(
final
Exception
e
)
{
return
;
}
final
Collection
<
File
>
mds
=
FileUtils
.
listFiles
(
new
File
(
markdownsPath
),
new
String
[]{
"md"
},
true
);
for
(
final
File
md
:
mds
)
{
final
String
fileName
=
md
.
getName
();
if
(
StringUtils
.
equalsIgnoreCase
(
fileName
,
"README.md"
))
{
continue
;
if
(
null
==
admin
)
{
// Not init yet
return
;
}
try
{
final
String
fileContent
=
FileUtils
.
readFileToString
(
md
,
"UTF-8"
);
final
JSONObject
article
=
parseArticle
(
fileName
,
fileContent
);
article
.
put
(
Article
.
ARTICLE_AUTHOR_EMAIL
,
adminEmail
);
final
String
adminEmail
=
admin
.
optString
(
User
.
USER_EMAIL
);
int
succCnt
=
0
,
failCnt
=
0
;
final
Set
<
String
>
failSet
=
new
TreeSet
<>();
final
Collection
<
File
>
mds
=
FileUtils
.
listFiles
(
new
File
(
markdownsPath
),
new
String
[]{
"md"
},
true
);
for
(
final
File
md
:
mds
)
{
final
String
fileName
=
md
.
getName
();
if
(
StringUtils
.
equalsIgnoreCase
(
fileName
,
"README.md"
))
{
continue
;
}
try
{
final
String
fileContent
=
FileUtils
.
readFileToString
(
md
,
"UTF-8"
);
final
JSONObject
article
=
parseArticle
(
fileName
,
fileContent
);
article
.
put
(
Article
.
ARTICLE_AUTHOR_EMAIL
,
adminEmail
);
final
JSONObject
request
=
new
JSONObject
();
request
.
put
(
Article
.
ARTICLE
,
article
);
final
String
id
=
articleMgmtService
.
addArticle
(
request
);
FileUtils
.
moveFile
(
md
,
new
File
(
md
.
getPath
()
+
"."
+
id
));
LOGGER
.
info
(
"Imported article ["
+
article
.
optString
(
Article
.
ARTICLE_TITLE
)
+
"]"
);
succCnt
++;
}
catch
(
final
Exception
e
)
{
LOGGER
.
log
(
Level
.
ERROR
,
"Import file ["
+
fileName
+
"] failed"
,
e
);
failCnt
++;
failSet
.
add
(
fileName
);
}
}
final
JSONObject
request
=
new
JSONObject
();
request
.
put
(
Article
.
ARTICLE
,
article
);
final
StringBuilder
logBuilder
=
new
StringBuilder
();
logBuilder
.
append
(
"["
).
append
(
succCnt
).
append
(
"] imported, ["
).
append
(
failCnt
).
append
(
"] failed"
);
if
(
failCnt
>
0
)
{
logBuilder
.
append
(
": "
).
append
(
Strings
.
LINE_SEPARATOR
);
f
inal
String
id
=
articleMgmtService
.
addArticle
(
request
);
FileUtils
.
moveFile
(
md
,
new
File
(
md
.
getPath
()
+
"."
+
id
)
);
LOGGER
.
info
(
"Imported article ["
+
article
.
optString
(
Article
.
ARTICLE_TITLE
)
+
"]"
);
}
catch
(
final
Exception
e
)
{
LOGGER
.
log
(
Level
.
ERROR
,
"Import file ["
+
fileName
+
"] failed"
,
e
);
f
or
(
final
String
fail
:
failSet
)
{
logBuilder
.
append
(
" "
).
append
(
fail
).
append
(
Strings
.
LINE_SEPARATOR
);
}
}
else
{
logBuilder
.
append
(
" :p"
);
}
}
LOGGER
.
info
(
logBuilder
.
toString
());
}).
start
();
}
private
JSONObject
parseArticle
(
final
String
fileName
,
final
String
fileContent
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment