groovity.portal.api.noticeChannels.grvt Maven / Gradle / Ivy
/*******************************************************************************
* © 2018 Disney | ABC Television Group
*
* Licensed under the Apache License, Version 2.0 (the "Apache License")
* with the following modification; you may not use this file except in
* compliance with the Apache License and the following modification to it:
* Section 6. Trademarks. is deleted and replaced with:
*
* 6. Trademarks. This License does not grant permission to use the trade
* names, trademarks, service marks, or product names of the Licensor
* and its affiliates, except as required to comply with Section 4(c) of
* the License and to reproduce the content of the NOTICE file.
*
* You may obtain a copy of the Apache License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Apache License with the above modification is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the Apache License for the specific
* language governing permissions and limitations under the Apache License.
*******************************************************************************/
static AsyncChannel loadNotices
static AsyncChannel inboxAccessed
static AsyncChannel deleteDelivery
static ScheduledFuture deliveryWatcher
static ScheduledFuture inboxWatcher
static ModelFilter[] noticeFilters = [
ModelFilter.transform('sender',{ id ->
load('/data/factory')('person',id)?.userName
}),
ModelFilter.transform('sent',{ time ->
time.format("yyyy-MM-dd hh:mm a")
}),
ModelFilter.exclude('pointer')
]
static init(){
loadNotices = accept(channel:[remote:'load-notices']){ msg ->
def user = findUser(msg);
if(user){
msg.callback(Model.mapObject(user.notices, noticeFilters))
}
}
inboxAccessed = accept(channel:[remote:'inbox-accessed']){ msg ->
findUser(msg)?.inbox?.accessed()
}
deleteDelivery = accept(channel:[remote:'delete-delivery']){ msg ->
def user = findUser(msg);
if(user){
load('/data/factory')('delivery',"personId=${user.id}¬iceId=${msg.data}")?.each{ it.delete() }
offer(channel: [user: user.userName, event:'delivery-deleted']){ msg.data }
}
}
}
static start(){
def factory = load('/data/factory')
//make sure delivery and inbox get loaded first
deliveryWatcher = factory.watch('delivery'){ ptr ->
def delivery = factory(ptr)
factory.invalidate('delivery',"personId=${delivery.person.id}")
offer(channel: [user: delivery.person.userName, event:'new-notice']){ delivery.notice }
}
inboxWatcher = factory.watch('inbox'){ ptr ->
def inbox = factory(ptr)
offer(channel: [user: inbox.person.userName, event:'inbox-status']){ inbox }
}
}
static destroy(){
loadNotices?.close()
inboxAccessed?.close()
deleteDelivery?.close()
deliveryWatcher?.cancel(true)
inboxWatcher?.cancel(true)
}
static findUser(msg){
def name = msg.session.userPrincipal?.name
def user = null
if(name){
user = load('/data/factory')('person',"userName=${name}")?.first()
}
if(!user && msg.callback){
msg.callback([error:"User ${name} not found"])
}
return user
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy