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 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(){
on(event:'load-notices'){ d, session ->
def user = findUser(session);
Model.mapObject(user.notices, noticeFilters)
}
on(event:'inbox-accessed'){ d, session ->
findUser(session)?.inbox?.accessed()
}
on(event:'delete-delivery'){ id, session ->
def user = findUser(session);
if(user){
load('/data/factory')('delivery',"personId=${user.id}¬iceId=${id}")?.each{ it.delete() }
emit(user: user.userName, event:'delivery-deleted'){ id }
}
}
}
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}")
emit(user: delivery.person.userName, event:'new-notice'){ delivery.notice }
}
inboxWatcher = factory.watch('inbox'){ ptr ->
def inbox = factory(ptr)
emit(user: inbox.person.userName, event:'inbox-status'){ inbox }
}
}
static destroy(){
deliveryWatcher?.cancel(true)
inboxWatcher?.cancel(true)
}
static findUser(session){
def name = session.userPrincipal?.name
def user = null
if(name){
user = load('/data/factory')('person',"userName=${name}")?.first()
}
if(!user){
throw new Exception("User ${name} not found")
}
return user
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy