Package railo.runtime.schedule

Source Code of railo.runtime.schedule.ExecutionThread

package railo.runtime.schedule;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.Charset;

import railo.commons.io.IOUtil;
import railo.commons.io.log.LogAndSource;
import railo.commons.io.res.ContentType;
import railo.commons.io.res.Resource;
import railo.commons.lang.StringUtil;
import railo.commons.net.http.HTTPEngine;
import railo.commons.net.http.HTTPResponse;
import railo.commons.net.http.Header;
import railo.commons.security.Credentials;
import railo.runtime.config.Config;
import railo.runtime.exp.PageException;
import railo.runtime.functions.other.CreateUUID;
import railo.runtime.net.proxy.ProxyData;
import railo.runtime.net.proxy.ProxyDataImpl;
import railo.runtime.util.URLResolver;

class ExecutionThread extends Thread {

  private Config config;
  private LogAndSource log;
  private ScheduleTask task;
  private String charset;

  public ExecutionThread(Config config, LogAndSource log, ScheduleTask task, String charset) {
    this.config=config;
    this.log=log;
    this.task=task;
    this.charset=charset;
  }

  public void run() {
    execute(config, log, task, charset);
  }
  public static void execute(Config config, LogAndSource log, ScheduleTask task, String charset) {
    boolean hasError=false;
        String logName="schedule task:"+task.getTask();
       // init
        //HttpClient client = new HttpClient();
        //client.setStrictMode(false);
        //HttpState state = client.getState();
       
        String url;
        if(task.getUrl().getQuery()==null)
          url=task.getUrl().toExternalForm()+"?RequestTimeout="+(task.getTimeout()/1000);
        else if(StringUtil.isEmpty(task.getUrl().getQuery()))
          url=task.getUrl().toExternalForm()+"RequestTimeout="+(task.getTimeout()/1000);
        else {
          if(StringUtil.indexOfIgnoreCase(task.getUrl().getQuery()+"", "RequestTimeout")!=-1)
            url=task.getUrl().toExternalForm();
          else
            url=task.getUrl().toExternalForm()+"&RequestTimeout="+(task.getTimeout()/1000);
        }
       
        //HttpMethod method = new GetMethod(url);
        //HostConfiguration hostConfiguration = client.getHostConfiguration();
       
        Header[] headers=new Header[]{
          HTTPEngine.header("User-Agent","CFSCHEDULE")
        };
    //method.setRequestHeader("User-Agent","CFSCHEDULE");
       
       // Userame / Password
        Credentials credentials = task.getCredentials();
        String user=null,pass=null;
        if(credentials!=null) {
          user=credentials.getUsername();
          pass=credentials.getPassword();
            //get.addRequestHeader("Authorization","Basic admin:spwwn1p");
        }
       
        // Proxy
        ProxyData proxy=task.getProxyData();
        if(!ProxyDataImpl.isValid(proxy) && config.isProxyEnableFor(task.getUrl().getHost())) {
          proxy=config.getProxyData();
        }
       
        HTTPResponse rsp=null;
       
        // execute
        try {
          rsp = HTTPEngine.get(new URL(url), user, pass, task.getTimeout(),HTTPEngine.MAX_REDIRECT, charset, null, proxy, headers);
        } catch (Exception e) {
            if(log!=null)log.error(logName,e.getMessage());
            hasError=true;
        }
       
        // write file
        Resource file = task.getResource();
        if(!hasError && file!=null && task.isPublish()) {
          String n=file.getName();
          if(n.indexOf("{id}")!=-1){
            n=StringUtil.replace(n, "{id}",CreateUUID.invoke(), false)
            file=file.getParentResource().getRealResource(n);
          }
         
          if(isText(rsp) && task.isResolveURL()) {
           
              String str;
                try {
                    InputStream stream = rsp.getContentAsStream();
                    str = stream==null?"":IOUtil.toString(stream,(Charset)null);
                    if(str==null)str="";
                }
                catch (IOException e) {
                  str=e.getMessage();
                }
             
              try {
                    str=new URLResolver().transform(str,task.getUrl(),false);
                } catch (PageException e) {
                    if(log!=null)log.error(logName,e.getMessage());
                    hasError=true;
                }
              try {
                    IOUtil.write(file,str,charset,false);
                }
                catch (IOException e) {
                    if(log!=null)log.error(logName,e.getMessage());
                    hasError=true;
                }
          }
          else {
            //print.out("1111111111111111111111111111111");
              try {
                    IOUtil.copy(
                            rsp.getContentAsStream(),
                            file,
                            true
                    );
                    //new File(file.getAbsolutePath()).write(method.getResponseBodyAsStream());
                }
                catch (IOException e) {
                    if(log!=null)log.error(logName,e.getMessage());
                    hasError=true;
                }
          }
        }
        if(!hasError && log!=null)log.info(logName,"executed");
  }
 
    private static boolean isText(HTTPResponse rsp) {
      ContentType ct = rsp.getContentType();
        if(ct==null)return true;
        String mimetype = ct.getMimeType();
        return
          mimetype == null ||  mimetype.startsWith("text") || mimetype.startsWith("application/octet-stream");
       
    }
 
}
TOP

Related Classes of railo.runtime.schedule.ExecutionThread

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.