All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.ponfee.disjob.supervisor.base.ExecuteTaskParamBuilder Maven / Gradle / Ivy

/*
 * Copyright 2022-2024 Ponfee (http://www.ponfee.cn/)
 *
 * 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
 *
 *     https://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.
 */

package cn.ponfee.disjob.supervisor.base;

import cn.ponfee.disjob.core.base.Supervisor;
import cn.ponfee.disjob.core.base.Worker;
import cn.ponfee.disjob.core.enums.JobType;
import cn.ponfee.disjob.core.enums.Operation;
import cn.ponfee.disjob.core.enums.RouteStrategy;
import cn.ponfee.disjob.core.enums.ShutdownStrategy;
import cn.ponfee.disjob.dispatch.ExecuteTaskParam;
import cn.ponfee.disjob.supervisor.model.SchedInstance;
import cn.ponfee.disjob.supervisor.model.SchedJob;
import org.springframework.util.Assert;

import java.util.Objects;

/**
 * ExecuteTaskParam builder
 *
 * @author Ponfee
 */
public final class ExecuteTaskParamBuilder {

    private final SchedJob job;
    private final SchedInstance instance;

    public ExecuteTaskParamBuilder(SchedJob job, SchedInstance instance) {
        if (!instance.getJobId().equals(job.getJobId())) {
            throw new IllegalArgumentException("Inconsistent job id: " + instance.getJobId() + "!=" + job.getJobId());
        }
        this.job = job;
        this.instance = instance;
    }

    public ExecuteTaskParam build(Operation operation, long taskId, long triggerTime, Worker worker) {
        ExecuteTaskParam param = new ExecuteTaskParam();
        param.setOperation(Objects.requireNonNull(operation, "Operation cannot be null."));
        param.setTaskId(taskId);
        param.setInstanceId(instance.getInstanceId());
        param.setWnstanceId(instance.getWnstanceId());
        param.setTriggerTime(triggerTime);
        param.setJobId(job.getJobId());
        param.setRetryCount(job.getRetryCount());
        param.setRetriedCount(instance.getRetriedCount());
        param.setJobType(JobType.of(job.getJobType()));
        param.setRouteStrategy(RouteStrategy.of(job.getRouteStrategy()));
        param.setShutdownStrategy(ShutdownStrategy.of(job.getShutdownStrategy()));
        param.setExecuteTimeout(job.getExecuteTimeout());
        param.setSupervisorAuthenticationToken(Supervisor.local().createSupervisorAuthenticationToken(job.getGroup()));
        param.setWorker(worker);
        param.setJobExecutor(obtainJobExecutor());
        return param;
    }

    private String obtainJobExecutor() {
        if (!instance.isWorkflow()) {
            Assert.hasText(job.getJobExecutor(), () -> "General job executor cannot be null: " + job.getJobId());
            return job.getJobExecutor();
        }

        String curJobExecutor = instance.parseWorkflowCurNode().getName();
        Assert.hasText(curJobExecutor, () -> "Curr node job executor cannot be empty: " + instance.getInstanceId());
        return curJobExecutor;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy