@Transactional(readOnly=true) public class ShareBean extends AbstractLevel2Service implements LocalShare
SessionManager
should not be used to obtain the Share
data since it may not be completely in sync. i.e. Don't use SM.find()IShare
Modifier and Type | Field and Description |
---|---|
protected LocalAdmin |
admin |
protected Executor |
executor |
static org.slf4j.Logger |
log |
protected MailUtil |
mailUtil |
static java.lang.String |
NS_COMMENT |
static java.lang.String |
NS_ENABLED |
protected SessionManager |
sessionManager |
protected ShareStore |
store |
iQuery, iUpdate, metadata, queryFactory, sec
Constructor and Description |
---|
ShareBean(LocalAdmin admin,
SessionManager mgr,
ShareStore store,
Executor executor,
MailUtil mailUtil) |
Modifier and Type | Method and Description |
---|---|
protected void |
_addGraph(ome.services.sharing.data.ShareData data,
ome.services.sharing.ShareBean.Graph g) |
void |
activate(long shareId)
Turns on the access control lists attached to the given share for the
current session.
|
CommentAnnotation |
addComment(long shareId,
java.lang.String commentText)
|
void |
addGuest(long shareId,
java.lang.String emailAddress)
Add guest email address to the share.
|
void |
addGuests(long shareId,
java.lang.String... emailAddresses)
Adds guest email addresses to the share.
|
<T extends IObject> |
addObject(long shareId,
T object)
|
<T extends IObject> |
addObjects(long shareId,
T... objects)
|
CommentAnnotation |
addReply(long shareId,
java.lang.String comment,
CommentAnnotation replyTo)
Creates
comment which replies to an existing
comment. |
void |
addUser(long shareId,
Experimenter exp)
Adds
experimenter to
share |
void |
addUsers(long shareId,
Experimenter... exps)
Adds
experimenters to
share |
protected void |
adminFlush() |
protected void |
applyIfShareAccessible(QueryBuilder qb)
If the current user is not an admin, then this methods adds a subclause
to the HQL:
AND ( share.owner.id = :userId or user.id = :userId )
QueryBuilder.where() should already have been called. |
void |
closeShare(long shareId)
Closes
share . |
<T extends IObject> |
createShare(java.lang.String description,
java.sql.Timestamp expiration,
java.util.List<T> items,
java.util.List<Experimenter> exps,
java.util.List<java.lang.String> guests,
boolean enabled)
|
void |
deactivate()
Turns off the access control lists with the current share.
|
void |
deleteComment(Annotation comment)
Deletes
comment from the
database. |
static long |
expirationAsLong(long started,
java.sql.Timestamp expiration)
Convert a
expiration into a long which can be set on
Session.setTimeToLive(Long) . |
java.util.Map<java.lang.String,Experimenter> |
getActiveConnections(long shareId)
Gets actual active connections to
share . |
java.util.Set<java.lang.String> |
getAllGuests(long shareId)
Get the email addresses for all share guests.
|
java.util.Set<Experimenter> |
getAllMembers(long shareId)
Get all
users who are a member of the share. |
java.util.Set<java.lang.String> |
getAllUsers(long shareId)
Get a single set containing the
login names
of the users as well email addresses for guests. |
java.util.Map<java.lang.Long,java.lang.Long> |
getCommentCount(java.util.Set<java.lang.Long> ids)
Returns a map from share id to comment count.
|
java.util.List<Annotation> |
getComments(long shareId)
|
<T extends IObject> |
getContentMap(long shareId)
Returns the contents of the share keyed by type.
|
<T extends IObject> |
getContents(long shareId)
|
int |
getContentSize(long shareId)
Returns the number of items in the share.
|
<T extends IObject> |
getContentSubList(long shareId,
int start,
int finish)
Returns a range of items from the share.
|
java.util.List<Event> |
getEvents(long shareId,
Experimenter experimenter,
java.sql.Timestamp from,
java.sql.Timestamp to)
Gets events for
share per
experimenter for period of time. |
java.util.Map<java.lang.Long,java.lang.Long> |
getMemberCount(java.util.Set<java.lang.Long> shareIds)
Returns a map from share id to the count of total members (including the
owner).
|
java.util.Set<Session> |
getMemberShares(boolean active)
Gets all shares where current
Experimenter is a member. |
java.util.Set<Session> |
getMemberSharesFor(Experimenter user,
boolean active)
Gets all shares where given
Experimenter is a member. |
java.util.Set<Session> |
getOwnShares(boolean active)
Gets all owned shares for the current
Experimenter |
java.util.Map<java.lang.String,Experimenter> |
getPastConnections(long shareId)
Gets previous connections to
share . |
java.lang.Class<? extends ServiceInterface> |
getServiceInterface() |
Share |
getShare(long sessionId)
|
protected ome.services.sharing.data.ShareData |
getShareIfAccessible(long shareId)
Loads share and checks it's owner and member data against the current
context (owner/member/admin).
|
java.util.Set<Session> |
getSharesOwnedBy(Experimenter user,
boolean active)
Gets all shares owned by the given
Experimenter . |
protected java.lang.String |
idToUuid(long shareId) |
void |
invalidateConnection(long shareId,
Experimenter exp)
Makes the connection invalid for
share for
specifiec user. |
protected <T extends IObject> |
list(java.util.List<ome.services.sharing.data.Obj> objectList) |
protected java.util.List<Experimenter> |
loadMembers(ome.services.sharing.data.ShareData data) |
protected <T extends IObject> |
map(java.util.Map<java.lang.String,java.util.List<java.lang.Long>> map) |
void |
notifyMembersOfShare(long shareId,
java.lang.String subject,
java.lang.String message,
boolean html)
Notify via email selected members of share.
|
void |
removeGuest(long shareId,
java.lang.String emailAddress)
Removes guest email address from share.
|
void |
removeGuests(long shareId,
java.lang.String... emailAddresses)
Removes guest email addresses from the share.
|
<T extends IObject> |
removeObject(long shareId,
T object)
|
<T extends IObject> |
removeObjects(long shareId,
T... objects)
Remove existing items from the share.
|
void |
removeUser(long shareId,
Experimenter exp)
Removes
experimenter from
share |
void |
removeUsers(long shareId,
java.util.List<Experimenter> exps)
Removes
experimenters from
share |
void |
resetReadFilter(org.hibernate.Session s) |
void |
setActive(long shareId,
boolean active) |
void |
setDescription(long shareId,
java.lang.String description) |
void |
setExpiration(long shareId,
java.sql.Timestamp expiration) |
protected java.util.Set<Session> |
sharesToSessions(java.util.List<ome.services.sharing.data.ShareData> datas) |
protected Share |
shareToSession(ome.services.sharing.data.ShareData data) |
protected void |
storeShareData(long shareId,
ome.services.sharing.data.ShareData data) |
protected void |
throwOnNullData(long shareId,
ome.services.sharing.data.ShareData data) |
getBeanHelper, getExtendedMetadata, getQueryFactory, getSecuritySystem, selfConfigure, setExtendedMetadata, setQueryFactory, setQueryService, setSecuritySystem, setUpdateService
public static final org.slf4j.Logger log
public static final java.lang.String NS_ENABLED
public static final java.lang.String NS_COMMENT
protected final LocalAdmin admin
protected final SessionManager sessionManager
protected final ShareStore store
protected final Executor executor
protected final MailUtil mailUtil
public ShareBean(LocalAdmin admin, SessionManager mgr, ShareStore store, Executor executor, MailUtil mailUtil)
public final java.lang.Class<? extends ServiceInterface> getServiceInterface()
getServiceInterface
in interface SelfConfigurableService
public void activate(long shareId)
IShare
ValidationException
is thrown.public void deactivate()
IShare
deactivate
in interface IShare
public void resetReadFilter(org.hibernate.Session s)
resetReadFilter
in interface LocalShare
public java.util.Map<java.lang.Long,java.lang.Long> getMemberCount(java.util.Set<java.lang.Long> shareIds)
IShare
ShareMember
links.getMemberCount
in interface IShare
shareIds
- Not null.public java.util.Set<Session> getOwnShares(boolean active)
IShare
Experimenter
getOwnShares
in interface IShare
active
- if true, then only shares which can be used for login will be
returned. All "draft" shares (see
IShare.createShare(String, Timestamp, List, List, List, boolean)
and closed shares
will be filtered.public java.util.Set<Session> getMemberShares(boolean active)
IShare
Experimenter
is a member.getMemberShares
in interface IShare
active
- if true, then only shares which can be used for login will be
returned. All "draft" shares (see
IShare.createShare(String, Timestamp, List, List, List, boolean)
and closed shares
will be filtered.public java.util.Set<Session> getSharesOwnedBy(Experimenter user, boolean active)
IShare
Experimenter
.getSharesOwnedBy
in interface IShare
active
- if true, then only shares which can be used for login will be
returned. All "draft" shares (see
IShare.createShare(String, Timestamp, List, List, List, boolean)
and closed shares
will be filtered.public java.util.Set<Session> getMemberSharesFor(Experimenter user, boolean active)
IShare
Experimenter
is a member.getMemberSharesFor
in interface IShare
active
- if true, then only shares which can be used for login will be
returned. All "draft" shares (see
IShare.createShare(String, Timestamp, List, List, List, boolean)
and closed shares
will be filtered.public Share getShare(long sessionId)
IShare
Session
with all related:
comments
,
members
, fully loaded. Unlike the
other methods on this interface, if the sessionId is unknown, does not
throw a ValidationException
.public <T extends IObject> java.util.List<T> getContents(long shareId)
IShare
getContents
in interface IShare
public <T extends IObject> java.util.List<T> getContentSubList(long shareId, int start, int finish)
IShare
getContentSubList
in interface IShare
IShare.getContents(long)
public <T extends IObject> java.util.Map<java.lang.Class<T>,java.util.List<java.lang.Long>> getContentMap(long shareId)
IShare
getContentMap
in interface IShare
public int getContentSize(long shareId)
IShare
getContentSize
in interface IShare
@Transactional(readOnly=false) public <T extends IObject> long createShare(java.lang.String description, java.sql.Timestamp expiration, java.util.List<T> items, java.util.List<Experimenter> exps, java.util.List<java.lang.String> guests, boolean enabled)
IShare
createShare
in interface IShare
enabled
- if true, then the share is immediately available for use. If
false, then the share is in draft state. All methods on this
interface will work for shares except
IShare.activate(long)
. Similarly, the share password cannot
be used by guests to login.@Transactional(readOnly=false) public void setDescription(long shareId, java.lang.String description)
setDescription
in interface IShare
@Transactional(readOnly=false) public void setExpiration(long shareId, java.sql.Timestamp expiration)
setExpiration
in interface IShare
@Transactional(readOnly=false) public void setActive(long shareId, boolean active)
@Transactional(readOnly=false) public void closeShare(long shareId)
IShare
share
. No further logins will be
possible and all getters (e.g. IShare.getMemberShares(boolean)
,
IShare.getOwnShares(boolean)
, ...) will filter these results if
onlyActive
is true.closeShare
in interface IShare
@Transactional(readOnly=false) public <T extends IObject> void addObjects(long shareId, T... objects)
IShare
items
to
share
. Conceptually calls
IShare.addObjects(long, IObject...)
for every argument passed, but the
graphs will be merged.addObjects
in interface IShare
@Transactional(readOnly=false) public <T extends IObject> void addObject(long shareId, T object)
IShare
@Transactional(readOnly=false) public <T extends IObject> void removeObjects(long shareId, T... objects)
IShare
removeObjects
in interface IShare
@Transactional(readOnly=false) public <T extends IObject> void removeObject(long shareId, T object)
IShare
removeObject
in interface IShare
public java.util.Map<java.lang.Long,java.lang.Long> getCommentCount(java.util.Set<java.lang.Long> ids)
IShare
getCommentCount
in interface IShare
ids
- Not null.public java.util.List<Annotation> getComments(long shareId)
IShare
getComments
in interface IShare
@Transactional(readOnly=false) public CommentAnnotation addComment(long shareId, java.lang.String commentText)
IShare
addComment
in interface IShare
@Transactional(readOnly=false) public CommentAnnotation addReply(long shareId, java.lang.String comment, CommentAnnotation replyTo)
IShare
comment
which replies to an existing
comment.addReply
in interface IShare
CommentAnnotation
@Transactional(readOnly=false) public void deleteComment(Annotation comment)
IShare
comment
from the
database.deleteComment
in interface IShare
public java.util.Set<Experimenter> getAllMembers(long shareId)
IShare
users
who are a member of the share.getAllMembers
in interface IShare
public java.util.Set<java.lang.String> getAllGuests(long shareId)
IShare
getAllGuests
in interface IShare
public java.util.Set<java.lang.String> getAllUsers(long shareId) throws ValidationException
IShare
login names
of the users as well email addresses for guests.getAllUsers
in interface IShare
Set
containing the login of all usersValidationException
- if there is a conflict between email addresses and user
names.@Transactional(readOnly=false) public void addUsers(long shareId, Experimenter... exps)
IShare
experimenters
to
share
@Transactional(readOnly=false) public void addGuests(long shareId, java.lang.String... emailAddresses)
IShare
@Transactional(readOnly=false) public void removeUsers(long shareId, java.util.List<Experimenter> exps)
IShare
experimenters
from
share
removeUsers
in interface IShare
@Transactional(readOnly=false) public void removeGuests(long shareId, java.lang.String... emailAddresses)
IShare
removeGuests
in interface IShare
@Transactional(readOnly=false) public void addUser(long shareId, Experimenter exp)
IShare
experimenter
to
share
@Transactional(readOnly=false) public void addGuest(long shareId, java.lang.String emailAddress)
IShare
@Transactional(readOnly=false) public void removeUser(long shareId, Experimenter exp)
IShare
experimenter
from
share
removeUser
in interface IShare
@Transactional(readOnly=false) public void removeGuest(long shareId, java.lang.String emailAddress)
IShare
removeGuest
in interface IShare
public java.util.Map<java.lang.String,Experimenter> getActiveConnections(long shareId)
IShare
share
.getActiveConnections
in interface IShare
public java.util.List<Event> getEvents(long shareId, Experimenter experimenter, java.sql.Timestamp from, java.sql.Timestamp to)
IShare
share
per
experimenter
for period of time.public java.util.Map<java.lang.String,Experimenter> getPastConnections(long shareId)
IShare
share
.getPastConnections
in interface IShare
public void invalidateConnection(long shareId, Experimenter exp)
IShare
share
for
specifiec user.invalidateConnection
in interface IShare
exp
- - connection@Transactional(readOnly=false) public void notifyMembersOfShare(long shareId, java.lang.String subject, java.lang.String message, boolean html)
IShare
notifyMembersOfShare
in interface IShare
protected java.lang.String idToUuid(long shareId)
protected java.util.List<Experimenter> loadMembers(ome.services.sharing.data.ShareData data)
public static long expirationAsLong(long started, java.sql.Timestamp expiration)
expiration
into a long which can be set on
Session.setTimeToLive(Long)
.protected java.util.Set<Session> sharesToSessions(java.util.List<ome.services.sharing.data.ShareData> datas)
protected Share shareToSession(ome.services.sharing.data.ShareData data)
protected <T extends IObject> java.util.Map<java.lang.Class<T>,java.util.List<java.lang.Long>> map(java.util.Map<java.lang.String,java.util.List<java.lang.Long>> map)
protected <T extends IObject> java.util.List<T> list(java.util.List<ome.services.sharing.data.Obj> objectList)
protected void adminFlush()
protected void throwOnNullData(long shareId, ome.services.sharing.data.ShareData data)
protected void applyIfShareAccessible(QueryBuilder qb)
QueryBuilder.where()
should already have been called.protected ome.services.sharing.data.ShareData getShareIfAccessible(long shareId)
applyIfShareAccessible(QueryBuilder)
which does the same check
at the database rather than binary data level.protected void _addGraph(ome.services.sharing.data.ShareData data, ome.services.sharing.ShareBean.Graph g)
protected void storeShareData(long shareId, ome.services.sharing.data.ShareData data)
Version: 5.4.4-ice35-b82
Copyright © 2018 The University of Dundee & Open Microscopy Environment. All Rights Reserved.