NotificationJob.java
- /*
- * Copyright (C) 2003-2013 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
- package org.exoplatform.commons.notification.job;
- import java.util.concurrent.Callable;
- import org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- import org.exoplatform.commons.api.notification.model.ArgumentLiteral;
- import org.exoplatform.commons.api.notification.service.NotificationCompletionService;
- import org.exoplatform.commons.notification.NotificationUtils;
- import org.exoplatform.commons.notification.impl.NotificationSessionManager;
- import org.exoplatform.commons.utils.CommonsUtils;
- import org.exoplatform.container.ExoContainer;
- import org.exoplatform.container.ExoContainerContext;
- import org.exoplatform.container.PortalContainer;
- import org.exoplatform.services.log.ExoLogger;
- import org.exoplatform.services.log.Log;
- public abstract class NotificationJob implements Job {
- /** Defines the Logger instance*/
- protected static final Log LOG = ExoLogger.getLogger(NotificationJob.class);
-
- /** Define the argument parameter for DAILY job with Boolean type */
- public final static ArgumentLiteral<Boolean> JOB_DAILY = new ArgumentLiteral<Boolean>(Boolean.class, "jobDaily");
-
- /** Define the argument parameter for DAY OF JOB job with String type */
- public final static ArgumentLiteral<String> DAY_OF_JOB = new ArgumentLiteral<String>(String.class, "dayOfJob");
-
- /** Define the argument parameter for WEEKLY job with Boolean type */
- public final static ArgumentLiteral<Boolean> JOB_WEEKLY = new ArgumentLiteral<Boolean>(Boolean.class, "jobWeekly");
- private ExoContainer container;
- public NotificationJob() {
- this(PortalContainer.getInstance());
- }
- public NotificationJob(ExoContainer exoContainer) {
- this.container = exoContainer;
- }
- @Override
- public void execute(final JobExecutionContext context) throws JobExecutionException {
- if (isValid() == false) {
- return;
- }
- Callable<Boolean> task = new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- ExoContainer currentContainer = ExoContainerContext.getCurrentContainer();
- ExoContainerContext.setCurrentContainer(container);
- boolean created = NotificationSessionManager.createSystemProvider();
- try {
- processSendNotification(context);
- } catch (Exception e) {
- LOG.error("Failed to running NotificationJob", e);
- return false;
- } finally {
- NotificationSessionManager.closeSessionProvider(created);
- ExoContainerContext.setCurrentContainer(currentContainer);
- }
- return true;
- }
- };
- //
- CommonsUtils.getService(NotificationCompletionService.class).addTask(task);
- }
- protected boolean isValid() {
- try {
- return CommonsUtils.getRepository().getState() != 0 && CommonsUtils.isFeatureActive(NotificationUtils.FEATURE_NAME);
- } catch (Exception e) {
- LOG.error("Failed to get current repository", e);
- return false;
- }
- }
- /**
- * Process the job to build the message and send to target.
- *
- * @throws Exception
- */
- protected void processSendNotification() throws Exception {}
- protected void processSendNotification(JobExecutionContext context) throws Exception {
- processSendNotification();
- }
- }