Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
solo
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
Commits
c3574d1a
Commit
c3574d1a
authored
Jun 28, 2012
by
Liang Ding
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
c
parent
b9b2d102
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
590 additions
and
1038 deletions
+590
-1038
core/src/main/java/org/b3log/solo/service/TagQueryService.java
...src/main/java/org/b3log/solo/service/TagQueryService.java
+167
-183
core/src/main/java/org/b3log/solo/util/Articles.java
core/src/main/java/org/b3log/solo/util/Articles.java
+324
-642
core/src/test/java/org/b3log/solo/repository/impl/UserRepositoryImplTestCase.java
...3log/solo/repository/impl/UserRepositoryImplTestCase.java
+99
-213
No files found.
core/src/main/java/org/b3log/solo/service/TagQueryService.java
View file @
c3574d1a
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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
java.util.List
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
org.b3log.latke.Keys
;
import
org.b3log.latke.repository.Query
;
import
org.b3log.latke.repository.RepositoryException
;
import
org.b3log.latke.service.ServiceException
;
import
org.b3log.latke.util.CollectionUtils
;
import
org.b3log.solo.model.Tag
;
import
org.b3log.solo.repository.TagRepository
;
import
org.b3log.solo.repository.impl.TagRepositoryImpl
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
/**
* Tag query service.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
<<<<<<< HEAD
* @version 1.0.0.2, Nov 11, 2011
=======
* @version 1.0.0.3, Jun 28, 2012
>>>>>>> origin/0.4.6
* @since 0.4.0
*/
public
final
class
TagQueryService
{
/**
* Logger.
*/
<<<<<<<
HEAD
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
TagQueryService
.
class
.
getName
());
=======
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
TagQueryService
.
class
.
getName
());
>>>>>>>
origin
/
0.4
.
6
/**
* Tag repository.
*/
private
TagRepository
tagRepository
=
TagRepositoryImpl
.
getInstance
();
/**
* Gets a tag by the specified tag title.
*
* @param tagTitle the specified tag title
* @return for example,
* <pre>
* {
* "tag": {
* "oId": "",
* "tagTitle": "",
* "tagReferenceCount": int,
* "tagPublishedRefCount": int
* }
* }
* </pre>, returns {@code null} if not found
* @throws ServiceException service exception
*/
<<<<<<<
HEAD
public
JSONObject
getTagByTitle
(
final
String
tagTitle
)
throws
ServiceException
{
=======
public
JSONObject
getTagByTitle
(
final
String
tagTitle
)
throws
ServiceException
{
>>>>>>>
origin
/
0.4
.
6
try
{
final
JSONObject
ret
=
new
JSONObject
();
final
JSONObject
tag
=
tagRepository
.
getByTitle
(
tagTitle
);
if
(
null
==
tag
)
{
return
null
;
}
ret
.
put
(
Tag
.
TAG
,
tag
);
LOGGER
.
log
(
Level
.
FINER
,
"Got an tag[title={0}]"
,
tagTitle
);
return
ret
;
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets an article failed"
,
e
);
throw
new
ServiceException
(
e
);
}
}
/**
<<<<<<< HEAD
=======
* Gets the count of tags.
*
* @return count of tags
* @throws ServiceException service exception
*/
public
long
getTagCount
()
throws
ServiceException
{
try
{
return
tagRepository
.
count
();
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets tags failed"
,
e
);
throw
new
ServiceException
(
e
);
}
}
/**
>>>>>>> origin/0.4.6
* Gets all tags.
*
* @return for example,
* <pre>
* [
* {"tagTitle": "", "tagReferenceCount": int, ....},
* ....
* ]
* </pre>, returns an empty list if not found
* @throws ServiceException service exception
*/
public
List
<
JSONObject
>
getTags
()
throws
ServiceException
{
try
{
final
Query
query
=
new
Query
().
setPageCount
(
1
);
final
JSONObject
result
=
tagRepository
.
get
(
query
);
final
JSONArray
tagArray
=
result
.
optJSONArray
(
Keys
.
RESULTS
);
return
CollectionUtils
.
jsonArrayToList
(
tagArray
);
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets tags failed"
,
e
);
throw
new
ServiceException
(
e
);
}
}
/**
* Gets the {@link TagQueryService} singleton.
*
* @return the singleton
*/
public
static
TagQueryService
getInstance
()
{
return
SingletonHolder
.
SINGLETON
;
}
/**
* Private constructor.
*/
private
TagQueryService
()
{
}
/**
* Singleton holder.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.0, Oct 24, 2011
*/
private
static
final
class
SingletonHolder
{
/**
* Singleton.
*/
private
static
final
TagQueryService
SINGLETON
=
new
TagQueryService
();
/**
* Private default constructor.
*/
private
SingletonHolder
()
{
}
}
}
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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
java.util.List
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
org.b3log.latke.Keys
;
import
org.b3log.latke.repository.Query
;
import
org.b3log.latke.repository.RepositoryException
;
import
org.b3log.latke.service.ServiceException
;
import
org.b3log.latke.util.CollectionUtils
;
import
org.b3log.solo.model.Tag
;
import
org.b3log.solo.repository.TagRepository
;
import
org.b3log.solo.repository.impl.TagRepositoryImpl
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
/**
* Tag query service.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.3, Jun 28, 2012
* @since 0.4.0
*/
public
final
class
TagQueryService
{
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
TagQueryService
.
class
.
getName
());
/**
* Tag repository.
*/
private
TagRepository
tagRepository
=
TagRepositoryImpl
.
getInstance
();
/**
* Gets a tag by the specified tag title.
*
* @param tagTitle the specified tag title
* @return for example,
* <pre>
* {
* "tag": {
* "oId": "",
* "tagTitle": "",
* "tagReferenceCount": int,
* "tagPublishedRefCount": int
* }
* }
* </pre>, returns {@code null} if not found
* @throws ServiceException service exception
*/
public
JSONObject
getTagByTitle
(
final
String
tagTitle
)
throws
ServiceException
{
try
{
final
JSONObject
ret
=
new
JSONObject
();
final
JSONObject
tag
=
tagRepository
.
getByTitle
(
tagTitle
);
if
(
null
==
tag
)
{
return
null
;
}
ret
.
put
(
Tag
.
TAG
,
tag
);
LOGGER
.
log
(
Level
.
FINER
,
"Got an tag[title={0}]"
,
tagTitle
);
return
ret
;
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets an article failed"
,
e
);
throw
new
ServiceException
(
e
);
}
}
/**
* Gets the count of tags.
*
* @return count of tags
* @throws ServiceException service exception
*/
public
long
getTagCount
()
throws
ServiceException
{
try
{
return
tagRepository
.
count
();
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets tags failed"
,
e
);
throw
new
ServiceException
(
e
);
}
}
/**
>>>>>>> origin/0.4.6
* Gets all tags.
*
* @return for example,
* <pre>
* [
* {"tagTitle": "", "tagReferenceCount": int, ....},
* ....
* ]
* </pre>, returns an empty list if not found
* @throws ServiceException service exception
*/
public
List
<
JSONObject
>
getTags
()
throws
ServiceException
{
try
{
final
Query
query
=
new
Query
().
setPageCount
(
1
);
final
JSONObject
result
=
tagRepository
.
get
(
query
);
final
JSONArray
tagArray
=
result
.
optJSONArray
(
Keys
.
RESULTS
);
return
CollectionUtils
.
jsonArrayToList
(
tagArray
);
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets tags failed"
,
e
);
throw
new
ServiceException
(
e
);
}
}
/**
* Gets the {@link TagQueryService} singleton.
*
* @return the singleton
*/
public
static
TagQueryService
getInstance
()
{
return
SingletonHolder
.
SINGLETON
;
}
/**
* Private constructor.
*/
private
TagQueryService
()
{
}
/**
* Singleton holder.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.0, Oct 24, 2011
*/
private
static
final
class
SingletonHolder
{
/**
* Singleton.
*/
private
static
final
TagQueryService
SINGLETON
=
new
TagQueryService
();
/**
* Private default constructor.
*/
private
SingletonHolder
()
{
}
}
}
core/src/main/java/org/b3log/solo/util/Articles.java
View file @
c3574d1a
<<<<<<<
HEAD
<<<<<<<
HEAD
=======
>>>>>>>
origin
/
0.4
.
6
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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
.
util
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpSession
;
import
org.b3log.solo.model.Article
;
import
org.b3log.latke.Keys
;
<<<<<<<
HEAD
import
org.b3log.latke.repository.FilterOperator
;
import
org.b3log.latke.repository.Query
;
import
org.b3log.latke.repository.RepositoryException
;
import
org.b3log.latke.repository.SortDirection
;
=======
import
org.b3log.latke.repository.*
;
>>>>>>>
origin
/
0.4
.
6
import
org.b3log.latke.service.ServiceException
;
import
org.b3log.latke.user.UserService
;
import
org.b3log.latke.user.UserServiceFactory
;
import
org.b3log.latke.util.CollectionUtils
;
import
org.b3log.latke.util.Strings
;
import
org.b3log.solo.model.Common
;
import
org.b3log.solo.model.Preference
;
import
org.b3log.solo.repository.ArticleRepository
;
import
org.b3log.solo.repository.UserRepository
;
import
org.b3log.solo.repository.impl.ArticleRepositoryImpl
;
import
org.b3log.solo.repository.impl.UserRepositoryImpl
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
* Article utilities.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.2.8, May 6, 2012
* @since 0.3.1
*/
public
final
class
Articles
{
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
Articles
.
class
.
getName
());
/**
* Article repository.
*/
private
ArticleRepository
articleRepository
=
ArticleRepositoryImpl
.
getInstance
();
/**
* User repository.
*/
private
UserRepository
userRepository
=
UserRepositoryImpl
.
getInstance
();
/**
* User service.
*/
private
UserService
userService
=
UserServiceFactory
.
getUserService
();
/**
* Builds article view password form parameters with the specified article.
*
* @param article the specified article
* @return parameters string, for example,
* <pre>
* "?articleId=xxx&articleTitle=xxx&articlePermalink=xxx&articleAbstract=xxx"
* </pre>
* @throws UnsupportedEncodingException if can not encode the arguments
*/
public
String
buildArticleViewPwdFormParameters
(
final
JSONObject
article
)
throws
UnsupportedEncodingException
{
final
StringBuilder
parametersBuilder
=
new
StringBuilder
(
"?articleId="
).
append
(
article
.
optString
(
Keys
.
OBJECT_ID
)).
append
(
"&articleTitle="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_TITLE
),
"UTF-8"
)).
append
(
"&articlePermalink="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_PERMALINK
),
"UTF-8"
)).
append
(
"&articleAbstract="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_ABSTRACT
,
" "
),
"UTF-8"
));
return
parametersBuilder
.
toString
();
}
/**
* Checks whether need password to view the specified article with the specified request.
*
* <p>
* Checks session, if not represents, checks article property {@link Article#ARTICLE_VIEW_PWD view password}.
* </p>
*
* <p>
* The blogger itself dose not need view password never.
* </p>
*
* @param request the specified request
* @param article the specified article
* @return {@code true} if need, returns {@code false} otherwise
*/
public
boolean
needViewPwd
(
final
HttpServletRequest
request
,
final
JSONObject
article
)
{
final
String
articleViewPwd
=
article
.
optString
(
Article
.
ARTICLE_VIEW_PWD
);
if
(
Strings
.
isEmptyOrNull
(
articleViewPwd
))
{
return
false
;
}
final
HttpSession
session
=
request
.
getSession
(
false
);
if
(
null
!=
session
)
{
@SuppressWarnings
(
"unchecked"
)
Map
<
String
,
String
>
viewPwds
=
(
Map
<
String
,
String
>)
session
.
getAttribute
(
Common
.
ARTICLES_VIEW_PWD
);
if
(
null
==
viewPwds
)
{
viewPwds
=
new
HashMap
<
String
,
String
>();
}
if
(
articleViewPwd
.
equals
(
viewPwds
.
get
(
article
.
optString
(
Keys
.
OBJECT_ID
))))
{
return
false
;
}
}
if
(
null
!=
userService
.
getCurrentUser
(
request
))
{
return
false
;
}
return
true
;
}
/**
<<<<<<< HEAD
* Gets the specified article's author.
*
* <p>
* The specified article has a property
* {@value Article#ARTICLE_AUTHOR_EMAIL}, this method will use this property
* to get a user from users.
* </p>
*
* <p>
* If can't find the specified article's author (i.e. the author has been
* removed by administrator), returns administrator.
* </p>
*
* @param article the specified article
* @return user, {@code null} if not found
* @throws ServiceException service exception
*/
public
JSONObject
getAuthor
(
final
JSONObject
article
)
throws
ServiceException
{
try
{
final
String
email
=
article
.
getString
(
Article
.
ARTICLE_AUTHOR_EMAIL
);
JSONObject
ret
=
userRepository
.
getByEmail
(
email
);
if
(
null
==
ret
)
{
LOGGER
.
log
(
Level
.
WARNING
,
"Gets author of article failed, assumes the administrator is the author of this article[id={0}]"
,
article
.
getString
(
Keys
.
OBJECT_ID
));
// This author may be deleted by admin, use admin as the author
// of this article
ret
=
userRepository
.
getAdmin
();
}
return
ret
;
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets author of article[id={0}] failed"
,
article
.
optString
(
Keys
.
OBJECT_ID
));
throw
new
ServiceException
(
e
);
}
catch
(
final
JSONException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets author of article[id={0}] failed"
,
article
.
optString
(
Keys
.
OBJECT_ID
));
throw
new
ServiceException
(
e
);
}
}
/**
* Article comment count +1 for an article specified by the given article id.
*
* @param articleId the given article id
* @throws JSONException json exception
* @throws RepositoryException repository exception
*/
public
void
incArticleCommentCount
(
final
String
articleId
)
throws
JSONException
,
RepositoryException
{
final
JSONObject
article
=
articleRepository
.
get
(
articleId
);
final
JSONObject
newArticle
=
new
JSONObject
(
article
,
JSONObject
.
getNames
(
article
));
final
int
commentCnt
=
article
.
getInt
(
Article
.
ARTICLE_COMMENT_COUNT
);
newArticle
.
put
(
Article
.
ARTICLE_COMMENT_COUNT
,
commentCnt
+
1
);
articleRepository
.
update
(
articleId
,
newArticle
);
}
/**
* Gets the sign of an article specified by the sign id.
*
* @param signId the specified article id
* @param preference the specified preference
* @return article sign, returns the default sign (which oId is "1") if not found
* @throws RepositoryException repository exception
* @throws JSONException json exception
*/
public
JSONObject
getSign
(
final
String
signId
,
final
JSONObject
preference
)
throws
JSONException
,
RepositoryException
{
final
JSONArray
signs
=
new
JSONArray
(
preference
.
getString
(
Preference
.
SIGNS
));
JSONObject
defaultSign
=
null
;
for
(
int
i
=
0
;
i
<
signs
.
length
();
i
++)
{
final
JSONObject
ret
=
signs
.
getJSONObject
(
i
);
if
(
signId
.
equals
(
ret
.
optString
(
Keys
.
OBJECT_ID
)))
{
return
ret
;
}
if
(
"1"
.
equals
(
ret
.
optString
(
Keys
.
OBJECT_ID
)))
{
defaultSign
=
ret
;
}
}
LOGGER
.
log
(
Level
.
WARNING
,
"Can not find the sign[id={0}], returns a default sign[id=1]"
,
signId
);
if
(
null
==
defaultSign
)
{
throw
new
IllegalStateException
(
"Can not find the default sign which id equals to 1"
);
}
return
defaultSign
;
}
/**
* Determines the specified article has updated.
*
* @param article the specified article
* @return {@code true} if it has updated, {@code false} otherwise
* @throws JSONException json exception
*/
public
boolean
hasUpdated
(
final
JSONObject
article
)
throws
JSONException
{
final
Date
updateDate
=
(
Date
)
article
.
get
(
Article
.
ARTICLE_UPDATE_DATE
);
final
Date
createDate
=
(
Date
)
article
.
get
(
Article
.
ARTICLE_CREATE_DATE
);
return
!
createDate
.
equals
(
updateDate
);
}
/**
* Determines the specified article had been published.
*
* @param article the specified article
* @return {@code true} if it had been published, {@code false} otherwise
* @throws JSONException json exception
*/
public
boolean
hadBeenPublished
(
final
JSONObject
article
)
throws
JSONException
{
return
article
.
getBoolean
(
Article
.
ARTICLE_HAD_BEEN_PUBLISHED
);
}
/**
* Gets all unpublished articles.
*
* @return articles all unpublished articles
* @throws RepositoryException repository exception
* @throws JSONException json exception
*/
public
List
<
JSONObject
>
getUnpublishedArticles
()
throws
RepositoryException
,
JSONException
{
final
Map
<
String
,
SortDirection
>
sorts
=
new
HashMap
<
String
,
SortDirection
>();
sorts
.
put
(
Article
.
ARTICLE_CREATE_DATE
,
SortDirection
.
DESCENDING
);
sorts
.
put
(
Article
.
ARTICLE_PUT_TOP
,
SortDirection
.
DESCENDING
);
final
Query
query
=
new
Query
().
addFilter
(
Article
.
ARTICLE_IS_PUBLISHED
,
FilterOperator
.
EQUAL
,
true
);
final
JSONObject
result
=
articleRepository
.
get
(
query
);
final
JSONArray
articles
=
result
.
getJSONArray
(
Keys
.
RESULTS
);
return
CollectionUtils
.
jsonArrayToList
(
articles
);
}
/**
* Gets the {@link Articles} singleton.
*
* @return the singleton
*/
public
static
Articles
getInstance
()
{
return
SingletonHolder
.
SINGLETON
;
}
/**
* Private default constructor.
*/
private
Articles
()
{
}
/**
* Singleton holder.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.0, Jan 12, 2011
*/
private
static
final
class
SingletonHolder
{
/**
* Singleton.
*/
private
static
final
Articles
SINGLETON
=
new
Articles
();
/**
* Private default constructor.
*/
private
SingletonHolder
()
{
}
}
}
=======
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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
.
util
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpSession
;
import
org.b3log.solo.model.Article
;
import
org.b3log.latke.Keys
;
import
org.b3log.latke.repository.*
;
import
org.b3log.latke.service.ServiceException
;
import
org.b3log.latke.user.UserService
;
import
org.b3log.latke.user.UserServiceFactory
;
import
org.b3log.latke.util.CollectionUtils
;
import
org.b3log.latke.util.Strings
;
import
org.b3log.solo.model.Common
;
import
org.b3log.solo.model.Preference
;
import
org.b3log.solo.repository.ArticleRepository
;
import
org.b3log.solo.repository.UserRepository
;
import
org.b3log.solo.repository.impl.ArticleRepositoryImpl
;
import
org.b3log.solo.repository.impl.UserRepositoryImpl
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
* Article utilities.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.2.8, May 6, 2012
* @since 0.3.1
*/
public
final
class
Articles
{
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
Articles
.
class
.
getName
());
/**
* Article repository.
*/
private
ArticleRepository
articleRepository
=
ArticleRepositoryImpl
.
getInstance
();
/**
* User repository.
*/
private
UserRepository
userRepository
=
UserRepositoryImpl
.
getInstance
();
/**
* User service.
*/
private
UserService
userService
=
UserServiceFactory
.
getUserService
();
/**
* Builds article view password form parameters with the specified article.
*
* @param article the specified article
* @return parameters string, for example,
* <pre>
* "?articleId=xxx&articleTitle=xxx&articlePermalink=xxx&articleAbstract=xxx"
* </pre>
* @throws UnsupportedEncodingException if can not encode the arguments
*/
public
String
buildArticleViewPwdFormParameters
(
final
JSONObject
article
)
throws
UnsupportedEncodingException
{
final
StringBuilder
parametersBuilder
=
new
StringBuilder
(
"?articleId="
).
append
(
article
.
optString
(
Keys
.
OBJECT_ID
)).
append
(
"&articleTitle="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_TITLE
),
"UTF-8"
)).
append
(
"&articlePermalink="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_PERMALINK
),
"UTF-8"
)).
append
(
"&articleAbstract="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_ABSTRACT
,
" "
),
"UTF-8"
));
return
parametersBuilder
.
toString
();
}
/**
* Checks whether need password to view the specified article with the specified request.
*
* <p>
* Checks session, if not represents, checks article property {@link Article#ARTICLE_VIEW_PWD view password}.
* </p>
*
* <p>
* The blogger itself dose not need view password never.
* </p>
*
* @param request the specified request
* @param article the specified article
* @return {@code true} if need, returns {@code false} otherwise
*/
public
boolean
needViewPwd
(
final
HttpServletRequest
request
,
final
JSONObject
article
)
{
final
String
articleViewPwd
=
article
.
optString
(
Article
.
ARTICLE_VIEW_PWD
);
if
(
Strings
.
isEmptyOrNull
(
articleViewPwd
))
{
return
false
;
}
final
HttpSession
session
=
request
.
getSession
(
false
);
if
(
null
!=
session
)
{
@SuppressWarnings
(
"unchecked"
)
Map
<
String
,
String
>
viewPwds
=
(
Map
<
String
,
String
>)
session
.
getAttribute
(
Common
.
ARTICLES_VIEW_PWD
);
if
(
null
==
viewPwds
)
{
viewPwds
=
new
HashMap
<
String
,
String
>();
}
if
(
articleViewPwd
.
equals
(
viewPwds
.
get
(
article
.
optString
(
Keys
.
OBJECT_ID
))))
{
return
false
;
}
}
if
(
null
!=
userService
.
getCurrentUser
(
request
))
{
return
false
;
}
return
true
;
=======
*
Gets
time
of
the
recent
updated
article
.
*
*
@return
time
of
the
recent
updated
article
,
returns
{
@code
0
}
if
not
found
*
@throws
ServiceException
service
exception
*/
public
long
getRecentArticleTime
()
throws
ServiceException
{
try
{
final
List
<
JSONObject
>
recentArticles
=
articleRepository
.
getRecentArticles
(
1
);
if
(
recentArticles
.
isEmpty
())
{
return
0
;
}
final
JSONObject
recentArticle
=
recentArticles
.
get
(
0
);
return
((
Date
)
recentArticle
.
get
(
Article
.
ARTICLE_UPDATE_DATE
)).
getTime
();
}
catch
(
final
Exception
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
e
.
getMessage
(),
e
);
throw
new
ServiceException
(
"Gets recent article time failed"
);
}
>>>>>>>
origin
/
0.4
.
6
}
/**
* Gets the specified article's author.
*
* <p>
* The specified article has a property
* {@value Article#ARTICLE_AUTHOR_EMAIL}, this method will use this property
* to get a user from users.
* </p>
*
* <p>
* If can't find the specified article's author (i.e. the author has been
* removed by administrator), returns administrator.
* </p>
*
* @param article the specified article
* @return user, {@code null} if not found
* @throws ServiceException service exception
*/
public
JSONObject
getAuthor
(
final
JSONObject
article
)
throws
ServiceException
{
try
{
final
String
email
=
article
.
getString
(
Article
.
ARTICLE_AUTHOR_EMAIL
);
JSONObject
ret
=
userRepository
.
getByEmail
(
email
);
if
(
null
==
ret
)
{
LOGGER
.
log
(
Level
.
WARNING
,
"Gets author of article failed, assumes the administrator is the author of this article[id={0}]"
,
article
.
getString
(
Keys
.
OBJECT_ID
));
// This author may be deleted by admin, use admin as the author
// of this article
ret
=
userRepository
.
getAdmin
();
}
return
ret
;
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets author of article[id={0}] failed"
,
article
.
optString
(
Keys
.
OBJECT_ID
));
throw
new
ServiceException
(
e
);
}
catch
(
final
JSONException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets author of article[id={0}] failed"
,
article
.
optString
(
Keys
.
OBJECT_ID
));
throw
new
ServiceException
(
e
);
}
}
/**
* Article comment count +1 for an article specified by the given article id.
*
* @param articleId the given article id
* @throws JSONException json exception
* @throws RepositoryException repository exception
*/
public
void
incArticleCommentCount
(
final
String
articleId
)
throws
JSONException
,
RepositoryException
{
final
JSONObject
article
=
articleRepository
.
get
(
articleId
);
final
JSONObject
newArticle
=
new
JSONObject
(
article
,
JSONObject
.
getNames
(
article
));
final
int
commentCnt
=
article
.
getInt
(
Article
.
ARTICLE_COMMENT_COUNT
);
newArticle
.
put
(
Article
.
ARTICLE_COMMENT_COUNT
,
commentCnt
+
1
);
articleRepository
.
update
(
articleId
,
newArticle
);
}
/**
* Gets the sign of an article specified by the sign id.
*
* @param signId the specified article id
* @param preference the specified preference
* @return article sign, returns the default sign (which oId is "1") if not found
* @throws RepositoryException repository exception
* @throws JSONException json exception
*/
public
JSONObject
getSign
(
final
String
signId
,
final
JSONObject
preference
)
throws
JSONException
,
RepositoryException
{
final
JSONArray
signs
=
new
JSONArray
(
preference
.
getString
(
Preference
.
SIGNS
));
JSONObject
defaultSign
=
null
;
for
(
int
i
=
0
;
i
<
signs
.
length
();
i
++)
{
final
JSONObject
ret
=
signs
.
getJSONObject
(
i
);
if
(
signId
.
equals
(
ret
.
optString
(
Keys
.
OBJECT_ID
)))
{
return
ret
;
}
if
(
"1"
.
equals
(
ret
.
optString
(
Keys
.
OBJECT_ID
)))
{
defaultSign
=
ret
;
}
}
LOGGER
.
log
(
Level
.
WARNING
,
"Can not find the sign[id={0}], returns a default sign[id=1]"
,
signId
);
if
(
null
==
defaultSign
)
{
throw
new
IllegalStateException
(
"Can not find the default sign which id equals to 1"
);
}
return
defaultSign
;
}
/**
* Determines the specified article has updated.
*
* @param article the specified article
* @return {@code true} if it has updated, {@code false} otherwise
* @throws JSONException json exception
*/
public
boolean
hasUpdated
(
final
JSONObject
article
)
throws
JSONException
{
final
Date
updateDate
=
(
Date
)
article
.
get
(
Article
.
ARTICLE_UPDATE_DATE
);
final
Date
createDate
=
(
Date
)
article
.
get
(
Article
.
ARTICLE_CREATE_DATE
);
return
!
createDate
.
equals
(
updateDate
);
}
/**
* Determines the specified article had been published.
*
* @param article the specified article
* @return {@code true} if it had been published, {@code false} otherwise
* @throws JSONException json exception
*/
public
boolean
hadBeenPublished
(
final
JSONObject
article
)
throws
JSONException
{
return
article
.
getBoolean
(
Article
.
ARTICLE_HAD_BEEN_PUBLISHED
);
}
/**
* Gets all unpublished articles.
*
* @return articles all unpublished articles
* @throws RepositoryException repository exception
* @throws JSONException json exception
*/
public
List
<
JSONObject
>
getUnpublishedArticles
()
throws
RepositoryException
,
JSONException
{
final
Map
<
String
,
SortDirection
>
sorts
=
new
HashMap
<
String
,
SortDirection
>();
sorts
.
put
(
Article
.
ARTICLE_CREATE_DATE
,
SortDirection
.
DESCENDING
);
sorts
.
put
(
Article
.
ARTICLE_PUT_TOP
,
SortDirection
.
DESCENDING
);
final
Query
query
=
new
Query
().
setFilter
(
new
PropertyFilter
(
Article
.
ARTICLE_IS_PUBLISHED
,
FilterOperator
.
EQUAL
,
true
));
final
JSONObject
result
=
articleRepository
.
get
(
query
);
final
JSONArray
articles
=
result
.
getJSONArray
(
Keys
.
RESULTS
);
return
CollectionUtils
.
jsonArrayToList
(
articles
);
}
/**
* Gets the {@link Articles} singleton.
*
* @return the singleton
*/
public
static
Articles
getInstance
()
{
return
SingletonHolder
.
SINGLETON
;
}
/**
* Private default constructor.
*/
private
Articles
()
{
}
/**
* Singleton holder.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.0, Jan 12, 2011
*/
private
static
final
class
SingletonHolder
{
/**
* Singleton.
*/
private
static
final
Articles
SINGLETON
=
new
Articles
();
/**
* Private default constructor.
*/
private
SingletonHolder
()
{
}
}
}
<<<<<<<
HEAD
>>>>>>>
origin
/
0.4
.
6
=======
>>>>>>>
origin
/
0.4
.
6
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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
.
util
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpSession
;
import
org.b3log.solo.model.Article
;
import
org.b3log.latke.Keys
;
import
org.b3log.latke.repository.*
;
import
org.b3log.latke.service.ServiceException
;
import
org.b3log.latke.user.UserService
;
import
org.b3log.latke.user.UserServiceFactory
;
import
org.b3log.latke.util.CollectionUtils
;
import
org.b3log.latke.util.Strings
;
import
org.b3log.solo.model.Common
;
import
org.b3log.solo.model.Preference
;
import
org.b3log.solo.repository.ArticleRepository
;
import
org.b3log.solo.repository.UserRepository
;
import
org.b3log.solo.repository.impl.ArticleRepositoryImpl
;
import
org.b3log.solo.repository.impl.UserRepositoryImpl
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
* Article utilities.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.2.8, May 6, 2012
* @since 0.3.1
*/
public
final
class
Articles
{
/**
* Logger.
*/
private
static
final
Logger
LOGGER
=
Logger
.
getLogger
(
Articles
.
class
.
getName
());
/**
* Article repository.
*/
private
ArticleRepository
articleRepository
=
ArticleRepositoryImpl
.
getInstance
();
/**
* User repository.
*/
private
UserRepository
userRepository
=
UserRepositoryImpl
.
getInstance
();
/**
* User service.
*/
private
UserService
userService
=
UserServiceFactory
.
getUserService
();
/**
* Builds article view password form parameters with the specified article.
*
* @param article the specified article
* @return parameters string, for example,
* <pre>
* "?articleId=xxx&articleTitle=xxx&articlePermalink=xxx&articleAbstract=xxx"
* </pre>
* @throws UnsupportedEncodingException if can not encode the arguments
*/
public
String
buildArticleViewPwdFormParameters
(
final
JSONObject
article
)
throws
UnsupportedEncodingException
{
final
StringBuilder
parametersBuilder
=
new
StringBuilder
(
"?articleId="
).
append
(
article
.
optString
(
Keys
.
OBJECT_ID
)).
append
(
"&articleTitle="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_TITLE
),
"UTF-8"
)).
append
(
"&articlePermalink="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_PERMALINK
),
"UTF-8"
)).
append
(
"&articleAbstract="
).
append
(
URLEncoder
.
encode
(
article
.
optString
(
Article
.
ARTICLE_ABSTRACT
,
" "
),
"UTF-8"
));
return
parametersBuilder
.
toString
();
}
/**
* Checks whether need password to view the specified article with the specified request.
*
* <p>
* Checks session, if not represents, checks article property {@link Article#ARTICLE_VIEW_PWD view password}.
* </p>
*
* <p>
* The blogger itself dose not need view password never.
* </p>
*
* @param request the specified request
* @param article the specified article
* @return {@code true} if need, returns {@code false} otherwise
*/
public
boolean
needViewPwd
(
final
HttpServletRequest
request
,
final
JSONObject
article
)
{
final
String
articleViewPwd
=
article
.
optString
(
Article
.
ARTICLE_VIEW_PWD
);
if
(
Strings
.
isEmptyOrNull
(
articleViewPwd
))
{
return
false
;
}
final
HttpSession
session
=
request
.
getSession
(
false
);
if
(
null
!=
session
)
{
@SuppressWarnings
(
"unchecked"
)
Map
<
String
,
String
>
viewPwds
=
(
Map
<
String
,
String
>)
session
.
getAttribute
(
Common
.
ARTICLES_VIEW_PWD
);
if
(
null
==
viewPwds
)
{
viewPwds
=
new
HashMap
<
String
,
String
>();
}
if
(
articleViewPwd
.
equals
(
viewPwds
.
get
(
article
.
optString
(
Keys
.
OBJECT_ID
))))
{
return
false
;
}
}
if
(
null
!=
userService
.
getCurrentUser
(
request
))
{
return
false
;
}
return
true
;
}
/*
* Gets time of the recent updated article.
*
* @return time of the recent updated article, returns {@code 0} if not found
* @throws ServiceException service exception
*/
public
long
getRecentArticleTime
()
throws
ServiceException
{
try
{
final
List
<
JSONObject
>
recentArticles
=
articleRepository
.
getRecentArticles
(
1
);
if
(
recentArticles
.
isEmpty
())
{
return
0
;
}
final
JSONObject
recentArticle
=
recentArticles
.
get
(
0
);
return
((
Date
)
recentArticle
.
get
(
Article
.
ARTICLE_UPDATE_DATE
)).
getTime
();
}
catch
(
final
Exception
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
e
.
getMessage
(),
e
);
throw
new
ServiceException
(
"Gets recent article time failed"
);
}
}
/**
* Gets the specified article's author.
*
* <p>
* The specified article has a property
* {@value Article#ARTICLE_AUTHOR_EMAIL}, this method will use this property
* to get a user from users.
* </p>
*
* <p>
* If can't find the specified article's author (i.e. the author has been
* removed by administrator), returns administrator.
* </p>
*
* @param article the specified article
* @return user, {@code null} if not found
* @throws ServiceException service exception
*/
public
JSONObject
getAuthor
(
final
JSONObject
article
)
throws
ServiceException
{
try
{
final
String
email
=
article
.
getString
(
Article
.
ARTICLE_AUTHOR_EMAIL
);
JSONObject
ret
=
userRepository
.
getByEmail
(
email
);
if
(
null
==
ret
)
{
LOGGER
.
log
(
Level
.
WARNING
,
"Gets author of article failed, assumes the administrator is the author of this article[id={0}]"
,
article
.
getString
(
Keys
.
OBJECT_ID
));
// This author may be deleted by admin, use admin as the author
// of this article
ret
=
userRepository
.
getAdmin
();
}
return
ret
;
}
catch
(
final
RepositoryException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets author of article[id={0}] failed"
,
article
.
optString
(
Keys
.
OBJECT_ID
));
throw
new
ServiceException
(
e
);
}
catch
(
final
JSONException
e
)
{
LOGGER
.
log
(
Level
.
SEVERE
,
"Gets author of article[id={0}] failed"
,
article
.
optString
(
Keys
.
OBJECT_ID
));
throw
new
ServiceException
(
e
);
}
}
/**
* Article comment count +1 for an article specified by the given article id.
*
* @param articleId the given article id
* @throws JSONException json exception
* @throws RepositoryException repository exception
*/
public
void
incArticleCommentCount
(
final
String
articleId
)
throws
JSONException
,
RepositoryException
{
final
JSONObject
article
=
articleRepository
.
get
(
articleId
);
final
JSONObject
newArticle
=
new
JSONObject
(
article
,
JSONObject
.
getNames
(
article
));
final
int
commentCnt
=
article
.
getInt
(
Article
.
ARTICLE_COMMENT_COUNT
);
newArticle
.
put
(
Article
.
ARTICLE_COMMENT_COUNT
,
commentCnt
+
1
);
articleRepository
.
update
(
articleId
,
newArticle
);
}
/**
* Gets the sign of an article specified by the sign id.
*
* @param signId the specified article id
* @param preference the specified preference
* @return article sign, returns the default sign (which oId is "1") if not found
* @throws RepositoryException repository exception
* @throws JSONException json exception
*/
public
JSONObject
getSign
(
final
String
signId
,
final
JSONObject
preference
)
throws
JSONException
,
RepositoryException
{
final
JSONArray
signs
=
new
JSONArray
(
preference
.
getString
(
Preference
.
SIGNS
));
JSONObject
defaultSign
=
null
;
for
(
int
i
=
0
;
i
<
signs
.
length
();
i
++)
{
final
JSONObject
ret
=
signs
.
getJSONObject
(
i
);
if
(
signId
.
equals
(
ret
.
optString
(
Keys
.
OBJECT_ID
)))
{
return
ret
;
}
if
(
"1"
.
equals
(
ret
.
optString
(
Keys
.
OBJECT_ID
)))
{
defaultSign
=
ret
;
}
}
LOGGER
.
log
(
Level
.
WARNING
,
"Can not find the sign[id={0}], returns a default sign[id=1]"
,
signId
);
if
(
null
==
defaultSign
)
{
throw
new
IllegalStateException
(
"Can not find the default sign which id equals to 1"
);
}
return
defaultSign
;
}
/**
* Determines the specified article has updated.
*
* @param article the specified article
* @return {@code true} if it has updated, {@code false} otherwise
* @throws JSONException json exception
*/
public
boolean
hasUpdated
(
final
JSONObject
article
)
throws
JSONException
{
final
Date
updateDate
=
(
Date
)
article
.
get
(
Article
.
ARTICLE_UPDATE_DATE
);
final
Date
createDate
=
(
Date
)
article
.
get
(
Article
.
ARTICLE_CREATE_DATE
);
return
!
createDate
.
equals
(
updateDate
);
}
/**
* Determines the specified article had been published.
*
* @param article the specified article
* @return {@code true} if it had been published, {@code false} otherwise
* @throws JSONException json exception
*/
public
boolean
hadBeenPublished
(
final
JSONObject
article
)
throws
JSONException
{
return
article
.
getBoolean
(
Article
.
ARTICLE_HAD_BEEN_PUBLISHED
);
}
/**
* Gets all unpublished articles.
*
* @return articles all unpublished articles
* @throws RepositoryException repository exception
* @throws JSONException json exception
*/
public
List
<
JSONObject
>
getUnpublishedArticles
()
throws
RepositoryException
,
JSONException
{
final
Map
<
String
,
SortDirection
>
sorts
=
new
HashMap
<
String
,
SortDirection
>();
sorts
.
put
(
Article
.
ARTICLE_CREATE_DATE
,
SortDirection
.
DESCENDING
);
sorts
.
put
(
Article
.
ARTICLE_PUT_TOP
,
SortDirection
.
DESCENDING
);
final
Query
query
=
new
Query
().
setFilter
(
new
PropertyFilter
(
Article
.
ARTICLE_IS_PUBLISHED
,
FilterOperator
.
EQUAL
,
true
));
final
JSONObject
result
=
articleRepository
.
get
(
query
);
final
JSONArray
articles
=
result
.
getJSONArray
(
Keys
.
RESULTS
);
return
CollectionUtils
.
jsonArrayToList
(
articles
);
}
/**
* Gets the {@link Articles} singleton.
*
* @return the singleton
*/
public
static
Articles
getInstance
()
{
return
SingletonHolder
.
SINGLETON
;
}
/**
* Private default constructor.
*/
private
Articles
()
{
}
/**
* Singleton holder.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.0, Jan 12, 2011
*/
private
static
final
class
SingletonHolder
{
/**
* Singleton.
*/
private
static
final
Articles
SINGLETON
=
new
Articles
();
/**
* Private default constructor.
*/
private
SingletonHolder
()
{
}
}
}
core/src/test/java/org/b3log/solo/repository/impl/UserRepositoryImplTestCase.java
View file @
c3574d1a
<<<<<<<
HEAD
<<<<<<<
HEAD
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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.model.Role
;
import
org.b3log.latke.model.User
;
import
org.b3log.latke.repository.FilterOperator
;
import
org.b3log.latke.repository.Query
;
import
org.b3log.latke.repository.Transaction
;
import
org.b3log.solo.AbstractTestCase
;
import
org.b3log.solo.model.UserExt
;
import
org.b3log.solo.repository.UserRepository
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
org.testng.Assert
;
import
org.testng.annotations.Test
;
/**
* {@link UserRepositoryImpl} test case.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.1, Feb 21, 2012
*/
@Test
(
suiteName
=
"repository"
)
public
final
class
UserRepositoryImplTestCase
extends
AbstractTestCase
{
/**
* Tests.
*
* @throws Exception exception
*/
@Test
public
void
test
()
throws
Exception
{
final
UserRepository
userRepository
=
getUserRepository
();
final
JSONObject
another
=
new
JSONObject
();
another
.
put
(
User
.
USER_NAME
,
"test1"
);
another
.
put
(
User
.
USER_EMAIL
,
"test1@gmail.com"
);
another
.
put
(
User
.
USER_PASSWORD
,
"pass1"
);
another
.
put
(
User
.
USER_ROLE
,
Role
.
DEFAULT_ROLE
);
another
.
put
(
UserExt
.
USER_ARTICLE_COUNT
,
0
);
another
.
put
(
UserExt
.
USER_PUBLISHED_ARTICLE_COUNT
,
0
);
Transaction
transaction
=
userRepository
.
beginTransaction
();
userRepository
.
add
(
another
);
transaction
.
commit
();
Assert
.
assertNull
(
userRepository
.
getAdmin
());
JSONObject
admin
=
new
JSONObject
();
admin
.
put
(
User
.
USER_NAME
,
"test"
);
admin
.
put
(
User
.
USER_EMAIL
,
"test@gmail.com"
);
admin
.
put
(
User
.
USER_PASSWORD
,
"pass"
);
admin
.
put
(
User
.
USER_ROLE
,
Role
.
ADMIN_ROLE
);
admin
.
put
(
UserExt
.
USER_ARTICLE_COUNT
,
0
);
admin
.
put
(
UserExt
.
USER_PUBLISHED_ARTICLE_COUNT
,
0
);
transaction
=
userRepository
.
beginTransaction
();
userRepository
.
add
(
admin
);
transaction
.
commit
();
Assert
.
assertTrue
(
userRepository
.
isAdminEmail
(
"test@gmail.com"
));
Assert
.
assertFalse
(
userRepository
.
isAdminEmail
(
"notFound@gmail.com"
));
admin
=
userRepository
.
getAdmin
();
Assert
.
assertNotNull
(
admin
);
Assert
.
assertEquals
(
"test"
,
admin
.
optString
(
User
.
USER_NAME
));
final
JSONObject
result
=
userRepository
.
get
(
new
Query
().
addFilter
(
User
.
USER_NAME
,
FilterOperator
.
EQUAL
,
"test1"
));
final
JSONArray
users
=
result
.
getJSONArray
(
Keys
.
RESULTS
);
Assert
.
assertEquals
(
users
.
length
(),
1
);
Assert
.
assertEquals
(
users
.
getJSONObject
(
0
).
getString
(
User
.
USER_EMAIL
),
"test1@gmail.com"
);
final
JSONObject
notFound
=
userRepository
.
getByEmail
(
"not.found@gmail.com"
);
Assert
.
assertNull
(
notFound
);
final
JSONObject
found
=
userRepository
.
getByEmail
(
"test1@gmail.com"
);
Assert
.
assertNotNull
(
found
);
Assert
.
assertEquals
(
found
.
getString
(
User
.
USER_PASSWORD
),
"pass1"
);
}
}
=======
=======
>>>>>>>
origin
/
0.4
.
6
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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.model.Role
;
import
org.b3log.latke.model.User
;
import
org.b3log.latke.repository.FilterOperator
;
import
org.b3log.latke.repository.PropertyFilter
;
import
org.b3log.latke.repository.Query
;
import
org.b3log.latke.repository.Transaction
;
import
org.b3log.solo.AbstractTestCase
;
import
org.b3log.solo.model.UserExt
;
import
org.b3log.solo.repository.UserRepository
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
org.testng.Assert
;
import
org.testng.annotations.Test
;
/**
* {@link UserRepositoryImpl} test case.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.1, Feb 21, 2012
*/
@Test
(
suiteName
=
"repository"
)
public
final
class
UserRepositoryImplTestCase
extends
AbstractTestCase
{
/**
* Tests.
*
* @throws Exception exception
*/
@Test
public
void
test
()
throws
Exception
{
final
UserRepository
userRepository
=
getUserRepository
();
final
JSONObject
another
=
new
JSONObject
();
another
.
put
(
User
.
USER_NAME
,
"test1"
);
another
.
put
(
User
.
USER_EMAIL
,
"test1@gmail.com"
);
another
.
put
(
User
.
USER_PASSWORD
,
"pass1"
);
another
.
put
(
User
.
USER_ROLE
,
Role
.
DEFAULT_ROLE
);
another
.
put
(
UserExt
.
USER_ARTICLE_COUNT
,
0
);
another
.
put
(
UserExt
.
USER_PUBLISHED_ARTICLE_COUNT
,
0
);
Transaction
transaction
=
userRepository
.
beginTransaction
();
userRepository
.
add
(
another
);
transaction
.
commit
();
Assert
.
assertNull
(
userRepository
.
getAdmin
());
JSONObject
admin
=
new
JSONObject
();
admin
.
put
(
User
.
USER_NAME
,
"test"
);
admin
.
put
(
User
.
USER_EMAIL
,
"test@gmail.com"
);
admin
.
put
(
User
.
USER_PASSWORD
,
"pass"
);
admin
.
put
(
User
.
USER_ROLE
,
Role
.
ADMIN_ROLE
);
admin
.
put
(
UserExt
.
USER_ARTICLE_COUNT
,
0
);
admin
.
put
(
UserExt
.
USER_PUBLISHED_ARTICLE_COUNT
,
0
);
transaction
=
userRepository
.
beginTransaction
();
userRepository
.
add
(
admin
);
transaction
.
commit
();
Assert
.
assertTrue
(
userRepository
.
isAdminEmail
(
"test@gmail.com"
));
Assert
.
assertFalse
(
userRepository
.
isAdminEmail
(
"notFound@gmail.com"
));
admin
=
userRepository
.
getAdmin
();
Assert
.
assertNotNull
(
admin
);
Assert
.
assertEquals
(
"test"
,
admin
.
optString
(
User
.
USER_NAME
));
final
JSONObject
result
=
userRepository
.
get
(
new
Query
().
setFilter
(
new
PropertyFilter
(
User
.
USER_NAME
,
FilterOperator
.
EQUAL
,
"test1"
)));
final
JSONArray
users
=
result
.
getJSONArray
(
Keys
.
RESULTS
);
Assert
.
assertEquals
(
users
.
length
(),
1
);
Assert
.
assertEquals
(
users
.
getJSONObject
(
0
).
getString
(
User
.
USER_EMAIL
),
"test1@gmail.com"
);
final
JSONObject
notFound
=
userRepository
.
getByEmail
(
"not.found@gmail.com"
);
Assert
.
assertNull
(
notFound
);
final
JSONObject
found
=
userRepository
.
getByEmail
(
"test1@gmail.com"
);
Assert
.
assertNotNull
(
found
);
Assert
.
assertEquals
(
found
.
getString
(
User
.
USER_PASSWORD
),
"pass1"
);
}
}
<<<<<<<
HEAD
>>>>>>>
origin
/
0.4
.
6
=======
>>>>>>>
origin
/
0.4
.
6
/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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.model.Role
;
import
org.b3log.latke.model.User
;
import
org.b3log.latke.repository.FilterOperator
;
import
org.b3log.latke.repository.PropertyFilter
;
import
org.b3log.latke.repository.Query
;
import
org.b3log.latke.repository.Transaction
;
import
org.b3log.solo.AbstractTestCase
;
import
org.b3log.solo.model.UserExt
;
import
org.b3log.solo.repository.UserRepository
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
org.testng.Assert
;
import
org.testng.annotations.Test
;
/**
* {@link UserRepositoryImpl} test case.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.1, Feb 21, 2012
*/
@Test
(
suiteName
=
"repository"
)
public
final
class
UserRepositoryImplTestCase
extends
AbstractTestCase
{
/**
* Tests.
*
* @throws Exception exception
*/
@Test
public
void
test
()
throws
Exception
{
final
UserRepository
userRepository
=
getUserRepository
();
final
JSONObject
another
=
new
JSONObject
();
another
.
put
(
User
.
USER_NAME
,
"test1"
);
another
.
put
(
User
.
USER_EMAIL
,
"test1@gmail.com"
);
another
.
put
(
User
.
USER_PASSWORD
,
"pass1"
);
another
.
put
(
User
.
USER_ROLE
,
Role
.
DEFAULT_ROLE
);
another
.
put
(
UserExt
.
USER_ARTICLE_COUNT
,
0
);
another
.
put
(
UserExt
.
USER_PUBLISHED_ARTICLE_COUNT
,
0
);
Transaction
transaction
=
userRepository
.
beginTransaction
();
userRepository
.
add
(
another
);
transaction
.
commit
();
Assert
.
assertNull
(
userRepository
.
getAdmin
());
JSONObject
admin
=
new
JSONObject
();
admin
.
put
(
User
.
USER_NAME
,
"test"
);
admin
.
put
(
User
.
USER_EMAIL
,
"test@gmail.com"
);
admin
.
put
(
User
.
USER_PASSWORD
,
"pass"
);
admin
.
put
(
User
.
USER_ROLE
,
Role
.
ADMIN_ROLE
);
admin
.
put
(
UserExt
.
USER_ARTICLE_COUNT
,
0
);
admin
.
put
(
UserExt
.
USER_PUBLISHED_ARTICLE_COUNT
,
0
);
transaction
=
userRepository
.
beginTransaction
();
userRepository
.
add
(
admin
);
transaction
.
commit
();
Assert
.
assertTrue
(
userRepository
.
isAdminEmail
(
"test@gmail.com"
));
Assert
.
assertFalse
(
userRepository
.
isAdminEmail
(
"notFound@gmail.com"
));
admin
=
userRepository
.
getAdmin
();
Assert
.
assertNotNull
(
admin
);
Assert
.
assertEquals
(
"test"
,
admin
.
optString
(
User
.
USER_NAME
));
final
JSONObject
result
=
userRepository
.
get
(
new
Query
().
setFilter
(
new
PropertyFilter
(
User
.
USER_NAME
,
FilterOperator
.
EQUAL
,
"test1"
)));
final
JSONArray
users
=
result
.
getJSONArray
(
Keys
.
RESULTS
);
Assert
.
assertEquals
(
users
.
length
(),
1
);
Assert
.
assertEquals
(
users
.
getJSONObject
(
0
).
getString
(
User
.
USER_EMAIL
),
"test1@gmail.com"
);
final
JSONObject
notFound
=
userRepository
.
getByEmail
(
"not.found@gmail.com"
);
Assert
.
assertNull
(
notFound
);
final
JSONObject
found
=
userRepository
.
getByEmail
(
"test1@gmail.com"
);
Assert
.
assertNotNull
(
found
);
Assert
.
assertEquals
(
found
.
getString
(
User
.
USER_PASSWORD
),
"pass1"
);
}
}
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