/*
* 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 com.addthis.hydra.job;
import com.addthis.basis.util.TokenReplacerOverflowException;
import com.addthis.hydra.job.alias.AliasManager;
import com.addthis.hydra.job.entity.JobEntityManager;
import com.addthis.hydra.job.entity.JobMacro;
import com.addthis.hydra.job.spawn.Spawn;
import com.sun.istack.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
public class JobExpanderImpl implements JobExpander {
private static final Logger log = LoggerFactory.getLogger(JobExpanderImpl.class);
private final JobEntityManager<JobMacro> jobMacroManager;
private final AliasManager aliasManager;
private final Spawn spawn;
public JobExpanderImpl(Spawn spawn, JobEntityManager<JobMacro> jobMacroManager, AliasManager aliasManager) {
this.jobMacroManager = jobMacroManager;
this.aliasManager = aliasManager;
this.spawn = spawn;
}
@Override
@Nullable
public String expandJob(String rawConfig, Collection<JobParameter> parameters) throws FailedJobExpansionException {
try {
// macro recursive expansion
String pass0 = JobExpand.macroExpand(jobMacroManager, aliasManager, rawConfig);
// template in params that "may" contain other macros
String pass1 = JobExpand.macroTemplateParams(pass0, parameters);
// macro recursive expansion again
String pass2 = JobExpand.macroExpand(jobMacroManager, aliasManager, pass1);
// replace remaining params not caught in pass 1
String pass3 = JobExpand.macroTemplateParams(pass2, parameters);
// inject job metadata from spawn
return JobExpand.magicMacroExpand(spawn, pass3, null);
} catch (TokenReplacerOverflowException e) {
log.warn("failed to expand job", e);
throw new FailedJobExpansionException();
}
}
}