Package org.springframework.batch.core.step.job

Source Code of org.springframework.batch.core.step.job.DefaultJobParametersExtractor

/*
* Copyright 2006-2013 the original author or authors.
*
* 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.
*/
package org.springframework.batch.core.step.job;

import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameter;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.item.ExecutionContext;

/**
* Simple implementation of {@link JobParametersExtractor} which pulls
* parameters with named keys out of the step execution context and the job
* parameters of the surrounding job.
*
* @author Dave Syer
* @author Will Schipp
*
*/
public class DefaultJobParametersExtractor implements JobParametersExtractor {

  private Set<String> keys = new HashSet<String>();

  private boolean useAllParentParameters = true;

  /**
   * The key names to pull out of the execution context or job parameters, if
   * they exist. If a key doesn't exist in the execution context then the job
   * parameters from the enclosing job execution are tried, and if there is
   * nothing there either then no parameter is extracted. Key names ending
   * with <code>(long)</code>, <code>(int)</code>, <code>(double)</code>,
   * <code>(date)</code> or <code>(string)</code> will be assumed to refer to
   * values of the respective type and assigned to job parameters accordingly
   * (there will be an error if they are not of the right type). Without a
   * special suffix in that form a parameter is assumed to be of type String.
   *
   * @param keys the keys to set
   */
  public void setKeys(String[] keys) {
    this.keys = new HashSet<String>(Arrays.asList(keys));
  }

  /**
   * @see JobParametersExtractor#getJobParameters(Job, StepExecution)
   */
  @Override
  public JobParameters getJobParameters(Job job, StepExecution stepExecution) {
    JobParametersBuilder builder = new JobParametersBuilder();
    Map<String, JobParameter> jobParameters = stepExecution.getJobParameters().getParameters();
    ExecutionContext executionContext = stepExecution.getExecutionContext();
    if (useAllParentParameters) {
      for (String key : jobParameters.keySet()) {
        builder.addParameter(key, jobParameters.get(key));
      }
    }
    for (String key : keys) {
      if (key.endsWith("(long)")) {
        key = key.replace("(long)", "");
        if (executionContext.containsKey(key)) {
          builder.addLong(key, executionContext.getLong(key));
        }
        else if (jobParameters.containsKey(key)) {
          builder.addLong(key, (Long) jobParameters.get(key).getValue());
        }
      }
      else if (key.endsWith("(int)")) {
        key = key.replace("(int)", "");
        if (executionContext.containsKey(key)) {
          builder.addLong(key, (long) executionContext.getInt(key));
        }
        else if (jobParameters.containsKey(key)) {
          builder.addLong(key, (Long) jobParameters.get(key).getValue());
        }
      }
      else if (key.endsWith("(double)")) {
        key = key.replace("(double)", "");
        if (executionContext.containsKey(key)) {
          builder.addDouble(key, executionContext.getDouble(key));
        }
        else if (jobParameters.containsKey(key)) {
          builder.addDouble(key, (Double) jobParameters.get(key).getValue());
        }
      }
      else if (key.endsWith("(string)")) {
        key = key.replace("(string)", "");
        if (executionContext.containsKey(key)) {
          builder.addString(key, executionContext.getString(key));
        }
        else if (jobParameters.containsKey(key)) {
          builder.addString(key, (String) jobParameters.get(key).getValue());
        }
      }
      else if (key.endsWith("(date)")) {
        key = key.replace("(date)", "");
        if (executionContext.containsKey(key)) {
          builder.addDate(key, (Date) executionContext.get(key));
        }
        else if (jobParameters.containsKey(key)) {
          builder.addDate(key, (Date) jobParameters.get(key).getValue());
        }
      }
      else {
        if (executionContext.containsKey(key)) {
          builder.addString(key, executionContext.get(key).toString());
        }
        else if (jobParameters.containsKey(key)) {
          builder.addString(key, jobParameters.get(key).getValue().toString());
        }
      }
    }
    return builder.toJobParameters();
  }

  /**
   * setter to support switching off all parent parameters
   * @param useAllParentParameters
   */
  public void setUseAllParentParameters(boolean useAllParentParameters) {
    this.useAllParentParameters = useAllParentParameters;
  }

 
}
TOP

Related Classes of org.springframework.batch.core.step.job.DefaultJobParametersExtractor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.