package com.taobao.easyweb.core.request.pipeline;
import com.taobao.easyweb.core.app.App;
import com.taobao.easyweb.core.app.AppLogger;
import com.taobao.easyweb.core.app.deploy.DeployException;
import com.taobao.easyweb.core.app.deploy.DeployPhase;
import com.taobao.easyweb.core.app.deploy.Deployer;
import com.taobao.easyweb.core.app.deploy.process.FileProcessor;
import com.taobao.easyweb.core.app.scanner.ScanResult;
import com.taobao.easyweb.core.bean.BeanFactory;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
/**
* User: jimmey/shantong
* DateTime: 13-5-3 ����12:01
*/
@Component
@Deployer(DeployPhase.AFTER_INIT)
public class PipelineProcessor extends FileProcessor {
@Override
public void process(ScanResult result) throws DeployException {
List<String> list = result.getSuffixFiles(".properties");
if (list.isEmpty()) {
return;
}
App app = result.getApp();
for (String file : list) {
if (!file.endsWith("pipeline.properties")) {
continue;
}
Properties properties = new Properties();
try {
properties.load(new FileInputStream(file));
String pipelines = properties.getProperty("pipeline.valves");
if (StringUtils.isBlank(pipelines)) {
continue;
}
List<Valve> valves = new LinkedList<Valve>();
String[] v = pipelines.split(",");
for (String name : v) {
Object obj = BeanFactory.getAppBean(app.getAppKey(), name);
if (obj == null || !(obj instanceof Valve)) {
AppLogger.getAppLogger(app.getAppKey(), "PipelineProcessor init error:");
throw new DeployException("pipeline " + name + " error");
}
valves.add((Valve) obj);
}
Pipeline.initPipeline(result.getApp(), valves);
} catch (IOException e) {
}
}
}
}