You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/07/04 16:18:37 UTC

[shardingsphere-elasticjob-lite] branch master updated: Replace JobSettings to YamlJobConfiguration #866 (#939)

This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob-lite.git


The following commit(s) were added to refs/heads/master by this push:
     new 5def759  Replace JobSettings to YamlJobConfiguration #866 (#939)
5def759 is described below

commit 5def759c6e23e24e7ddf973dda6cf6955fb09355
Author: Haitao Wang <dr...@sina.com>
AuthorDate: Sun Jul 5 00:18:29 2020 +0800

    Replace JobSettings to YamlJobConfiguration #866 (#939)
---
 .../console/controller/JobConfigController.java    |  22 ++--
 .../lite/console/service/JobAPIService.java        |   4 +-
 .../console/service/impl/JobAPIServiceImpl.java    |   6 +-
 .../resources/console/js/status/job/job_config.js  |  18 ++-
 .../console/js/status/job/jobs_status_overview.js  |   4 +-
 .../lite/lifecycle/api/JobAPIFactory.java          |   6 +-
 .../api/{JobSettingsAPI.java => JobConfigAPI.java} |  26 ++--
 .../lite/lifecycle/domain/JobSettings.java         |  96 ---------------
 .../internal/settings/JobConfigAPIImpl.java        |  57 +++++++++
 .../internal/settings/JobSettingsAPIImpl.java      |  86 -------------
 .../lite/lifecycle/api/JobAPIFactoryTest.java      |   4 +-
 .../internal/settings/JobConfigAPIImplTest.java    | 133 +++++++++++++++++++++
 .../internal/settings/JobSettingsAPIImplTest.java  | 131 --------------------
 13 files changed, 243 insertions(+), 350 deletions(-)

diff --git a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
index 855cc03..eaa7ead 100644
--- a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
+++ b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.elasticjob.lite.console.controller;
 
 import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -45,33 +45,33 @@ public final class JobConfigController {
     }
     
     /**
-     * Get job settings.
+     * Get job configuration.
      *
      * @param jobName job name
-     * @return job settings
+     * @return job configuration
      */
     @GetMapping(value = "/{jobName}", produces = MediaType.APPLICATION_JSON)
-    public JobSettings getJobSettings(@PathVariable("jobName") final String jobName) {
-        return jobAPIService.getJobSettingsAPI().getJobSettings(jobName);
+    public YamlJobConfiguration getJobConfig(@PathVariable("jobName") final String jobName) {
+        return jobAPIService.getJobConfigAPI().getJobConfig(jobName);
     }
     
     /**
-     * Update job settings.
+     * Update job configuration.
      *
-     * @param jobSettings job settings
+     * @param yamlJobConfiguration job configuration
      */
     @PutMapping(consumes = MediaType.APPLICATION_JSON)
-    public void updateJobSettings(@RequestBody final JobSettings jobSettings) {
-        jobAPIService.getJobSettingsAPI().updateJobSettings(jobSettings);
+    public void updateJobConfig(@RequestBody final YamlJobConfiguration yamlJobConfiguration) {
+        jobAPIService.getJobConfigAPI().updateJobConfig(yamlJobConfiguration);
     }
     
     /**
-     * Remove job settings.
+     * Remove job configuration.
      *
      * @param jobName job name
      */
     @DeleteMapping("/{jobName}")
     public void removeJob(@PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobSettingsAPI().removeJobSettings(jobName);
+        jobAPIService.getJobConfigAPI().removeJobConfig(jobName);
     }
 }
diff --git a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
index c071f2e..29c4e7c 100644
--- a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
+++ b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.elasticjob.lite.console.service;
 
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobStatisticsAPI;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ServerStatisticsAPI;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingOperateAPI;
@@ -31,7 +31,7 @@ public interface JobAPIService {
      *
      * @return job settings API
      */
-    JobSettingsAPI getJobSettingsAPI();
+    JobConfigAPI getJobConfigAPI();
     
     /**
      * Job operate API.
diff --git a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
index 4a02c77..466a151 100644
--- a/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
+++ b/elastic-job-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
@@ -22,7 +22,7 @@ import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
 import org.apache.shardingsphere.elasticjob.lite.console.util.SessionRegistryCenterConfiguration;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobAPIFactory;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobStatisticsAPI;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ServerStatisticsAPI;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingOperateAPI;
@@ -36,9 +36,9 @@ import org.springframework.stereotype.Service;
 public final class JobAPIServiceImpl implements JobAPIService {
     
     @Override
-    public JobSettingsAPI getJobSettingsAPI() {
+    public JobConfigAPI getJobConfigAPI() {
         RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
-        return JobAPIFactory.createJobSettingsAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
+        return JobAPIFactory.createJobConfigAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
     }
     
     @Override
diff --git a/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js b/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
index 5360182..a2fcf05 100644
--- a/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
+++ b/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
@@ -68,7 +68,23 @@ function bindSubmitJobSettingsForm() {
             var jobErrorHandler = $("#job-error-handler").val();
             var description = $("#description").val();
             var reconcileIntervalMinutes = $("#reconcile-interval-minutes").val();
-            var postJson = {jobName: jobName, shardingTotalCount: shardingTotalCount, jobParameter: jobParameter, cron: cron, streamingProcess: streamingProcess, maxTimeDiffSeconds: maxTimeDiffSeconds, monitorExecution: monitorExecution, failover: failover, misfire: misfire, shardingItemParameters: shardingItemParameters, jobShardingStrategyType: jobShardingStrategyType, jobExecutorServiceHandler: jobExecutorServiceHandler, jobErrorHandler: jobErrorHandler, description: description, scri [...]
+            var postJson = {
+                jobName: jobName,
+                shardingTotalCount: shardingTotalCount,
+                jobParameter: jobParameter,
+                cron: cron,
+                shardingItemParameters: shardingItemParameters,
+                maxTimeDiffSeconds: maxTimeDiffSeconds,
+                monitorExecution: monitorExecution,
+                failover: failover,
+                misfire: misfire,
+                reconcileIntervalMinutes: reconcileIntervalMinutes,
+                jobShardingStrategyType: jobShardingStrategyType,
+                jobExecutorServiceHandler: jobExecutorServiceHandler,
+                jobErrorHandler: jobErrorHandler,
+                description: description,
+                props: {'streaming.process': streamingProcess, 'script.command.line': scriptCommandLine}
+            };
             var jobParams = getJobParams();
             if (jobParams.monitorExecution !== monitorExecution || jobParams.failover !== failover || jobParams.misfire !== misfire) {
                 showUpdateConfirmModal();
diff --git a/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js b/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
index 32aa66c..6b838ff 100644
--- a/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
+++ b/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
@@ -235,8 +235,8 @@ function renderJob(data) {
     $("#job-error-handler").attr("value", data.jobErrorHandlerType);
     $("#reconcile-interval-minutes").attr("value", data.reconcileIntervalMinutes);
     $("#description").text(data.description);
-    $("#streaming-process").attr("checked", data.streamingProcess);
+    $("#streaming-process").attr("checked", data.props['streaming.process'] === 'true');
     $("#streaming-process-group").show();
-    $("#script-command-line").attr("value", data.scriptCommandLine);
+    $("#script-command-line").attr("value", data.props['script.command.line']);
     $("#script-commandLine-group").show();
 }
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java
index 8da3970..743b5a5 100644
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactory.java
@@ -22,7 +22,7 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.operate.JobOperateAPIImpl;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.operate.ShardingOperateAPIImpl;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.reg.RegistryCenterFactory;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings.JobSettingsAPIImpl;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings.JobConfigAPIImpl;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.statistics.JobStatisticsAPIImpl;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.statistics.ServerStatisticsAPIImpl;
 import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.statistics.ShardingStatisticsAPIImpl;
@@ -41,8 +41,8 @@ public final class JobAPIFactory {
      * @param digest registry center digest
      * @return job settings API
      */
-    public static JobSettingsAPI createJobSettingsAPI(final String connectString, final String namespace, final String digest) {
-        return new JobSettingsAPIImpl(RegistryCenterFactory.createCoordinatorRegistryCenter(connectString, namespace, digest));
+    public static JobConfigAPI createJobConfigAPI(final String connectString, final String namespace, final String digest) {
+        return new JobConfigAPIImpl(RegistryCenterFactory.createCoordinatorRegistryCenter(connectString, namespace, digest));
     }
     
     /**
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobSettingsAPI.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobConfigAPI.java
similarity index 68%
rename from elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobSettingsAPI.java
rename to elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobConfigAPI.java
index 5a72e95..89b285d 100644
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobSettingsAPI.java
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobConfigAPI.java
@@ -17,32 +17,32 @@
 
 package org.apache.shardingsphere.elasticjob.lite.lifecycle.api;
 
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
 
 /**
  * Job settings API.
  */
-public interface JobSettingsAPI {
-    
+public interface JobConfigAPI {
+
     /**
-     * get job settings.
+     * get job configuration.
      *
      * @param jobName job name
-     * @return job settings
+     * @return job configuration
      */
-    JobSettings getJobSettings(String jobName);
-    
+    YamlJobConfiguration getJobConfig(String jobName);
+
     /**
-     * Update job settings.
+     * Update job configuration.
      *
-     * @param jobSettings job settings
+     * @param yamlJobConfiguration job configuration
      */
-    void updateJobSettings(JobSettings jobSettings);
-    
+    void updateJobConfig(YamlJobConfiguration yamlJobConfiguration);
+
     /**
-     * Remove job settings.
+     * Remove job configuration.
      *
      * @param jobName job name
      */
-    void removeJobSettings(String jobName);
+    void removeJobConfig(String jobName);
 }
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java
deleted file mode 100644
index 93813d0..0000000
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.lifecycle.domain;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.DataflowJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.ScriptJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
-
-import java.io.Serializable;
-
-/**
- * Job settings.
- */
-@Getter
-@Setter
-public final class JobSettings implements Serializable {
-    
-    private static final long serialVersionUID = -6532210090618686688L;
-    
-    private String jobName;
-    
-    private String cron;
-    
-    private int shardingTotalCount;
-    
-    private String shardingItemParameters;
-    
-    private String jobParameter;
-    
-    private boolean monitorExecution;
-    
-    private boolean failover;
-    
-    private boolean misfire;
-    
-    private int maxTimeDiffSeconds;
-    
-    private int reconcileIntervalMinutes;
-    
-    private String jobShardingStrategyType;
-    
-    private String jobExecutorServiceHandlerType;
-    
-    private String jobErrorHandlerType;
-    
-    private String description;
-    
-    private boolean streamingProcess;
-    
-    private String scriptCommandLine;
-    
-    /**
-     * To YAML job configuration.
-     * 
-     * @return YAML job configuration
-     */
-    public YamlJobConfiguration toYamlJobConfiguration() {
-        YamlJobConfiguration result = new YamlJobConfiguration();
-        result.setJobName(jobName);
-        result.setCron(cron);
-        result.setShardingTotalCount(shardingTotalCount);
-        result.setShardingItemParameters(shardingItemParameters);
-        result.setJobParameter(jobParameter);
-        result.setMonitorExecution(monitorExecution);
-        result.setFailover(failover);
-        result.setMisfire(misfire);
-        result.setMaxTimeDiffSeconds(maxTimeDiffSeconds);
-        result.setReconcileIntervalMinutes(reconcileIntervalMinutes);
-        result.setJobShardingStrategyType(jobShardingStrategyType);
-        result.setJobExecutorServiceHandlerType(jobExecutorServiceHandlerType);
-        result.setJobErrorHandlerType(jobErrorHandlerType);
-        result.setDescription(description);
-        result.getProps().setProperty(DataflowJobExecutor.STREAM_PROCESS_KEY, Boolean.valueOf(streamingProcess).toString());
-        if (null != scriptCommandLine) {
-            result.getProps().setProperty(ScriptJobExecutor.SCRIPT_KEY, scriptCommandLine);
-        }
-        return result;
-    }
-}
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImpl.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImpl.java
new file mode 100644
index 0000000..931ed4c
--- /dev/null
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.internal.storage.JobNodePath;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
+import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
+import org.apache.shardingsphere.elasticjob.lite.util.yaml.YamlEngine;
+
+/**
+ * Job Configuration API implementation class.
+ */
+@RequiredArgsConstructor
+public final class JobConfigAPIImpl implements JobConfigAPI {
+    
+    private final CoordinatorRegistryCenter regCenter;
+
+    @Override
+    public YamlJobConfiguration getJobConfig(final String jobName) {
+        JobNodePath jobNodePath = new JobNodePath(jobName);
+        YamlJobConfiguration result = YamlEngine.unmarshal(regCenter.get(jobNodePath.getConfigNodePath()), YamlJobConfiguration.class);
+        return result;
+    }
+
+    @Override
+    public void updateJobConfig(final YamlJobConfiguration yamlJobConfiguration) {
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(yamlJobConfiguration.getJobName()), "jobName can not be empty.");
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(yamlJobConfiguration.getCron()), "cron can not be empty.");
+        Preconditions.checkArgument(yamlJobConfiguration.getShardingTotalCount() > 0, "shardingTotalCount should larger than zero.");
+        JobNodePath jobNodePath = new JobNodePath(yamlJobConfiguration.getJobName());
+        regCenter.update(jobNodePath.getConfigNodePath(), YamlEngine.marshal(yamlJobConfiguration));
+    }
+
+    @Override
+    public void removeJobConfig(final String jobName) {
+        regCenter.remove("/" + jobName);
+    }
+}
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java
deleted file mode 100644
index c277979..0000000
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.elasticjob.lite.api.job.config.JobConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.DataflowJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.ScriptJobExecutor;
-import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.internal.storage.JobNodePath;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
-import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
-import org.apache.shardingsphere.elasticjob.lite.util.yaml.YamlEngine;
-
-/**
- * Job settings API implementation class.
- */
-@RequiredArgsConstructor
-public final class JobSettingsAPIImpl implements JobSettingsAPI {
-    
-    private final CoordinatorRegistryCenter regCenter;
-    
-    @Override
-    public JobSettings getJobSettings(final String jobName) {
-        JobSettings result = new JobSettings();
-        JobNodePath jobNodePath = new JobNodePath(jobName);
-        JobConfiguration jobConfig = YamlEngine.unmarshal(regCenter.get(jobNodePath.getConfigNodePath()), YamlJobConfiguration.class).toJobConfiguration();
-        buildSimpleJobSettings(jobName, result, jobConfig);
-        if (jobConfig.getProps().containsKey(DataflowJobExecutor.STREAM_PROCESS_KEY)) {
-            result.setStreamingProcess(Boolean.parseBoolean(jobConfig.getProps().get(DataflowJobExecutor.STREAM_PROCESS_KEY).toString()));
-        }
-        if (jobConfig.getProps().containsKey(ScriptJobExecutor.SCRIPT_KEY)) {
-            result.setScriptCommandLine(jobConfig.getProps().getProperty(ScriptJobExecutor.SCRIPT_KEY));
-        }
-        return result;
-    }
-    
-    private void buildSimpleJobSettings(final String jobName, final JobSettings jobSettings, final JobConfiguration jobConfig) {
-        jobSettings.setJobName(jobName);
-        jobSettings.setShardingTotalCount(jobConfig.getShardingTotalCount());
-        jobSettings.setCron(jobConfig.getCron());
-        jobSettings.setShardingItemParameters(jobConfig.getShardingItemParameters());
-        jobSettings.setJobParameter(jobConfig.getJobParameter());
-        jobSettings.setMonitorExecution(jobConfig.isMonitorExecution());
-        jobSettings.setMaxTimeDiffSeconds(jobConfig.getMaxTimeDiffSeconds());
-        jobSettings.setFailover(jobConfig.isFailover());
-        jobSettings.setMisfire(jobConfig.isMisfire());
-        jobSettings.setJobShardingStrategyType(jobConfig.getJobShardingStrategyType());
-        jobSettings.setJobExecutorServiceHandlerType(jobConfig.getJobExecutorServiceHandlerType());
-        jobSettings.setJobErrorHandlerType(jobConfig.getJobErrorHandlerType());
-        jobSettings.setReconcileIntervalMinutes(jobConfig.getReconcileIntervalMinutes());
-        jobSettings.setDescription(jobConfig.getDescription());
-    }
-    
-    @Override
-    public void updateJobSettings(final JobSettings jobSettings) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(jobSettings.getJobName()), "jobName can not be empty.");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(jobSettings.getCron()), "cron can not be empty.");
-        Preconditions.checkArgument(jobSettings.getShardingTotalCount() > 0, "shardingTotalCount should larger than zero.");
-        JobNodePath jobNodePath = new JobNodePath(jobSettings.getJobName());
-        regCenter.update(jobNodePath.getConfigNodePath(), YamlEngine.marshal(jobSettings.toYamlJobConfiguration()));
-    }
-    
-    @Override
-    public void removeJobSettings(final String jobName) {
-        regCenter.remove("/" + jobName);
-    }
-}
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java
index aec080c..ed7b95a 100644
--- a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java
+++ b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/api/JobAPIFactoryTest.java
@@ -26,8 +26,8 @@ import static org.junit.Assert.assertThat;
 public final class JobAPIFactoryTest extends AbstractEmbedZookeeperBaseTest {
     
     @Test
-    public void assertCreateJobSettingsAPI() {
-        assertThat(JobAPIFactory.createJobSettingsAPI(getConnectionString(), "namespace", null), instanceOf(JobSettingsAPI.class));
+    public void assertCreateJobConfigAPI() {
+        assertThat(JobAPIFactory.createJobConfigAPI(getConnectionString(), "namespace", null), instanceOf(JobConfigAPI.class));
     }
     
     @Test
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImplTest.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImplTest.java
new file mode 100644
index 0000000..c6d7dc3
--- /dev/null
+++ b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobConfigAPIImplTest.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
+
+import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.DataflowJobExecutor;
+import org.apache.shardingsphere.elasticjob.lite.executor.type.impl.ScriptJobExecutor;
+import org.apache.shardingsphere.elasticjob.lite.internal.config.yaml.YamlJobConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigAPI;
+import org.apache.shardingsphere.elasticjob.lite.lifecycle.fixture.LifecycleYamlConstants;
+import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class JobConfigAPIImplTest {
+    
+    private JobConfigAPI jobConfigAPI;
+    
+    @Mock
+    private CoordinatorRegistryCenter regCenter;
+    
+    @Before
+    public void setUp() {
+        jobConfigAPI = new JobConfigAPIImpl(regCenter);
+    }
+    
+    @Test
+    public void assertGetDataflowJobConfig() {
+        when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getDataflowJobYaml());
+        YamlJobConfiguration actual = jobConfigAPI.getJobConfig("test_job");
+        assertJobConfig(actual);
+        assertThat(actual.getProps().getProperty(DataflowJobExecutor.STREAM_PROCESS_KEY), is("true"));
+        verify(regCenter).get("/test_job/config");
+    }
+    
+    @Test
+    public void assertGetScriptJobConfig() {
+        when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getScriptJobYaml());
+        YamlJobConfiguration actual = jobConfigAPI.getJobConfig("test_job");
+        assertJobConfig(actual);
+        assertThat(actual.getProps().getProperty(ScriptJobExecutor.SCRIPT_KEY), is("echo"));
+        verify(regCenter).get("/test_job/config");
+    }
+    
+    private void assertJobConfig(final YamlJobConfiguration yamlJobConfiguration) {
+        assertThat(yamlJobConfiguration.getJobName(), is("test_job"));
+        assertThat(yamlJobConfiguration.getShardingTotalCount(), is(3));
+        assertThat(yamlJobConfiguration.getCron(), is("0/1 * * * * ?"));
+        assertNull(yamlJobConfiguration.getShardingItemParameters());
+        assertThat(yamlJobConfiguration.getJobParameter(), is("param"));
+        assertThat(yamlJobConfiguration.isMonitorExecution(), is(true));
+        assertThat(yamlJobConfiguration.getMaxTimeDiffSeconds(), is(-1));
+        assertFalse(yamlJobConfiguration.isFailover());
+        assertTrue(yamlJobConfiguration.isMisfire());
+        assertNull(yamlJobConfiguration.getJobShardingStrategyType());
+        assertThat(yamlJobConfiguration.getReconcileIntervalMinutes(), is(10));
+        assertThat(yamlJobConfiguration.getDescription(), is(""));
+    }
+    
+    @Test
+    public void assertUpdateJobConfig() {
+        YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+        jobConfiguration.setJobName("test_job");
+        jobConfiguration.setCron("0/1 * * * * ?");
+        jobConfiguration.setShardingTotalCount(3);
+        jobConfiguration.setJobParameter("param");
+        jobConfiguration.setMonitorExecution(true);
+        jobConfiguration.setFailover(false);
+        jobConfiguration.setMisfire(true);
+        jobConfiguration.setMaxTimeDiffSeconds(-1);
+        jobConfiguration.setReconcileIntervalMinutes(10);
+        jobConfiguration.setDescription("");
+        jobConfiguration.getProps().setProperty(DataflowJobExecutor.STREAM_PROCESS_KEY, "true");
+        jobConfigAPI.updateJobConfig(jobConfiguration);
+        verify(regCenter).update("/test_job/config", LifecycleYamlConstants.getDataflowJobYaml());
+    }
+    
+    @Test(expected = IllegalArgumentException.class)
+    public void assertUpdateJobConfigIfJobNameIsEmpty() {
+        YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+        jobConfiguration.setJobName("");
+        jobConfigAPI.updateJobConfig(jobConfiguration);
+    }
+    
+    @Test(expected = IllegalArgumentException.class)
+    public void assertUpdateJobConfigIfCronIsEmpty() {
+        YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+        jobConfiguration.setJobName("test_job");
+        jobConfiguration.setCron("");
+        jobConfigAPI.updateJobConfig(jobConfiguration);
+    }
+    
+    @Test(expected = IllegalArgumentException.class)
+    public void assertUpdateJobConfigIfShardingTotalCountLessThanOne() {
+        YamlJobConfiguration jobConfiguration = new YamlJobConfiguration();
+        jobConfiguration.setJobName("test_job");
+        jobConfiguration.setCron("0/1 * * * * ?");
+        jobConfiguration.setShardingTotalCount(0);
+        jobConfigAPI.updateJobConfig(jobConfiguration);
+    }
+    
+    @Test
+    public void assertRemoveJobSettings() {
+        jobConfigAPI.removeJobConfig("test_job");
+        verify(regCenter).remove("/test_job");
+    }
+}
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java
deleted file mode 100644
index 57bccab..0000000
--- a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.settings;
-
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobSettingsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobSettings;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.fixture.LifecycleYamlConstants;
-import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public final class JobSettingsAPIImplTest {
-    
-    private JobSettingsAPI jobSettingsAPI;
-    
-    @Mock
-    private CoordinatorRegistryCenter regCenter;
-    
-    @Before
-    public void setUp() {
-        jobSettingsAPI = new JobSettingsAPIImpl(regCenter);
-    }
-    
-    @Test
-    public void assertGetDataflowJobSettings() {
-        when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getDataflowJobYaml());
-        JobSettings actual = jobSettingsAPI.getJobSettings("test_job");
-        assertJobSettings(actual);
-        assertTrue(actual.isStreamingProcess());
-        verify(regCenter).get("/test_job/config");
-    }
-    
-    @Test
-    public void assertGetScriptJobSettings() {
-        when(regCenter.get("/test_job/config")).thenReturn(LifecycleYamlConstants.getScriptJobYaml());
-        JobSettings actual = jobSettingsAPI.getJobSettings("test_job");
-        assertJobSettings(actual);
-        assertThat(actual.getScriptCommandLine(), is("echo"));
-        verify(regCenter).get("/test_job/config");
-    }
-    
-    private void assertJobSettings(final JobSettings jobSettings) {
-        assertThat(jobSettings.getJobName(), is("test_job"));
-        assertThat(jobSettings.getShardingTotalCount(), is(3));
-        assertThat(jobSettings.getCron(), is("0/1 * * * * ?"));
-        assertThat(jobSettings.getShardingItemParameters(), is(""));
-        assertThat(jobSettings.getJobParameter(), is("param"));
-        assertThat(jobSettings.isMonitorExecution(), is(true));
-        assertThat(jobSettings.getMaxTimeDiffSeconds(), is(-1));
-        assertFalse(jobSettings.isFailover());
-        assertTrue(jobSettings.isMisfire());
-        assertNull(jobSettings.getJobShardingStrategyType());
-        assertThat(jobSettings.getReconcileIntervalMinutes(), is(10));
-        assertThat(jobSettings.getDescription(), is(""));
-    }
-    
-    @Test
-    public void assertUpdateJobSettings() {
-        JobSettings jobSettings = new JobSettings();
-        jobSettings.setJobName("test_job");
-        jobSettings.setCron("0/1 * * * * ?");
-        jobSettings.setShardingTotalCount(3);
-        jobSettings.setJobParameter("param");
-        jobSettings.setMonitorExecution(true);
-        jobSettings.setFailover(false);
-        jobSettings.setMisfire(true);
-        jobSettings.setMaxTimeDiffSeconds(-1);
-        jobSettings.setReconcileIntervalMinutes(10);
-        jobSettings.setDescription("");
-        jobSettings.setStreamingProcess(true);
-        jobSettingsAPI.updateJobSettings(jobSettings);
-        verify(regCenter).update("/test_job/config", LifecycleYamlConstants.getDataflowJobYaml());
-    }
-    
-    @Test(expected = IllegalArgumentException.class)
-    public void assertUpdateJobSettingsIfJobNameIsEmpty() {
-        JobSettings jobSettings = new JobSettings();
-        jobSettings.setJobName("");
-        jobSettingsAPI.updateJobSettings(jobSettings);
-    }
-    
-    @Test(expected = IllegalArgumentException.class)
-    public void assertUpdateJobSettingsIfCronIsEmpty() {
-        JobSettings jobSettings = new JobSettings();
-        jobSettings.setJobName("test_job");
-        jobSettings.setCron("");
-        jobSettingsAPI.updateJobSettings(jobSettings);
-    }
-    
-    @Test(expected = IllegalArgumentException.class)
-    public void assertUpdateJobSettingsIfShardingTotalCountLessThanOne() {
-        JobSettings jobSettings = new JobSettings();
-        jobSettings.setJobName("test_job");
-        jobSettings.setCron("0/1 * * * * ?");
-        jobSettings.setShardingTotalCount(0);
-        jobSettingsAPI.updateJobSettings(jobSettings);
-    }
-    
-    @Test
-    public void assertRemoveJobSettings() {
-        jobSettingsAPI.removeJobSettings("test_job");
-        verify(regCenter).remove("/test_job");
-    }
-}