package com.thinkbiganalytics.scheduler.rest; /*- * #%L * thinkbig-scheduler-controller * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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. * #L% */ import com.google.common.base.Function; import com.google.common.collect.Collections2; import com.thinkbiganalytics.scheduler.JobIdentifier; import com.thinkbiganalytics.scheduler.JobInfo; import com.thinkbiganalytics.scheduler.TriggerIdentifier; import com.thinkbiganalytics.scheduler.model.DefaultJobIdentifier; import com.thinkbiganalytics.scheduler.model.DefaultTriggerIdentifier; import com.thinkbiganalytics.scheduler.model.DefaultTriggerInfo; import com.thinkbiganalytics.scheduler.rest.model.ScheduleIdentifier; import com.thinkbiganalytics.scheduler.rest.model.ScheduledJob; import com.thinkbiganalytics.scheduler.rest.model.TriggerInfo; import com.thinkbiganalytics.scheduler.support.ScheduledJobState; import com.thinkbiganalytics.scheduler.util.CronExpressionUtil; import org.apache.commons.lang3.StringUtils; import java.text.ParseException; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; /** * Transforms a scheduler REST object to/from the scheduler domain object */ public class Model { public static final Function<TriggerIdentifier, ScheduleIdentifier> DOMAIN_TO_TRIGGER_IDENTIFIER = new Function<TriggerIdentifier, ScheduleIdentifier>() { @Override public ScheduleIdentifier apply(TriggerIdentifier triggerIdentifier) { ScheduleIdentifier scheduleIdentifier = new ScheduleIdentifier(triggerIdentifier.getName(), triggerIdentifier.getGroup()); return scheduleIdentifier; } }; public static final Function<JobIdentifier, ScheduleIdentifier> DOMAIN_TO_JOB_IDENTIFIER = new Function<JobIdentifier, ScheduleIdentifier>() { @Override public ScheduleIdentifier apply(JobIdentifier jobIdentifier) { ScheduleIdentifier scheduleIdentifier = new ScheduleIdentifier(jobIdentifier.getName(), jobIdentifier.getGroup()); return scheduleIdentifier; } }; public static final Function<ScheduleIdentifier, TriggerIdentifier> TRIGGER_IDENTIFIER_TO_DOMAIN = new Function<ScheduleIdentifier, TriggerIdentifier>() { @Override public TriggerIdentifier apply(ScheduleIdentifier scheduleIdentifier) { TriggerIdentifier triggerIdentifier = new DefaultTriggerIdentifier(scheduleIdentifier.getName(), scheduleIdentifier.getGroup()); return triggerIdentifier; } }; public static final Function<ScheduleIdentifier, JobIdentifier> JOB_IDENTIFIER_TO_DOMAIN = new Function<ScheduleIdentifier, JobIdentifier>() { @Override public JobIdentifier apply(ScheduleIdentifier scheduleIdentifier) { JobIdentifier jobIdentifier = new DefaultJobIdentifier(scheduleIdentifier.getName(), scheduleIdentifier.getGroup()); return jobIdentifier; } }; public static final Function<TriggerInfo, com.thinkbiganalytics.scheduler.model.DefaultTriggerInfo> TRIGGER_INFO_TO_DOMAIN = new Function<TriggerInfo, DefaultTriggerInfo>() { @Override public DefaultTriggerInfo apply(TriggerInfo triggerInfo) { JobIdentifier jobIdentifier = JOB_IDENTIFIER_TO_DOMAIN.apply(triggerInfo.getJobIdentifier()); TriggerIdentifier triggerIdentifier = TRIGGER_IDENTIFIER_TO_DOMAIN.apply(triggerInfo.getTriggerIdentifier()); DefaultTriggerInfo domain = new DefaultTriggerInfo(jobIdentifier, triggerIdentifier); return domain; } }; public static final Function<com.thinkbiganalytics.scheduler.TriggerInfo, TriggerInfo> DOMAIN_TO_TRIGGER_INFO = new Function<com.thinkbiganalytics.scheduler.TriggerInfo, TriggerInfo>() { @Override public TriggerInfo apply(com.thinkbiganalytics.scheduler.TriggerInfo domain) { ScheduleIdentifier jobIdentifier = DOMAIN_TO_JOB_IDENTIFIER.apply(domain.getJobIdentifier()); ScheduleIdentifier triggerIdentifier = DOMAIN_TO_TRIGGER_IDENTIFIER.apply(domain.getTriggerIdentifier()); TriggerInfo triggerInfo = new TriggerInfo(jobIdentifier, triggerIdentifier); triggerInfo.setCronExpression(domain.getCronExpression()); triggerInfo.setNextFireTime(domain.getNextFireTime()); triggerInfo.setCronExpressionSummary(domain.getCronExpressionSummary()); triggerInfo.setDescription(domain.getDescription()); return triggerInfo; } }; public static final Function<JobInfo, ScheduledJob> DOMAIN_TO_SCHEDULED_JOB = new Function<JobInfo, ScheduledJob>() { @Override public ScheduledJob apply(JobInfo jobInfo) { ScheduledJob jobBean = new ScheduledJob(); jobBean.setJobIdentifier(Model.DOMAIN_TO_JOB_IDENTIFIER.apply(jobInfo.getJobIdentifier())); jobBean.setJobGroup(jobInfo.getJobIdentifier().getGroup()); jobBean.setJobName(jobInfo.getJobIdentifier().getName()); jobBean.setTriggers(Model.domainToTriggerInfo(jobInfo.getTriggers())); jobBean.setIsPaused(ScheduledJobState.isPaused(jobInfo.getTriggers())); jobBean.setIsScheduled(ScheduledJobState.isScheduled(jobInfo.getTriggers())); jobBean.setIsRunning(ScheduledJobState.isRunning(jobInfo.getTriggers())); jobBean.setCronExpressionData(); jobBean.setState(); if (jobBean.getNextFireTime() == null) { Date nextFireTime = null; try { if (StringUtils.isNotBlank(jobBean.getCronExpression())) { nextFireTime = CronExpressionUtil.getNextFireTime(jobBean.getCronExpression()); } } catch (ParseException e) { } jobBean.setNextFireTime(nextFireTime); } return jobBean; } }; public static List<TriggerInfo> domainToTriggerInfo(Collection<com.thinkbiganalytics.scheduler.TriggerInfo> triggerInfos) { return new ArrayList<>(Collections2.transform(triggerInfos, DOMAIN_TO_TRIGGER_INFO)); } }