package com.matrix.component.ueditor; 
 | 
  
 | 
import com.matrix.component.ueditor.define.ActionMap; 
 | 
import com.matrix.component.ueditor.define.AppInfo; 
 | 
import com.matrix.component.ueditor.define.BaseState; 
 | 
import com.matrix.component.ueditor.hunter.FileManager; 
 | 
import com.matrix.component.ueditor.hunter.ImageHunter; 
 | 
import com.matrix.component.ueditor.upload.Uploader; 
 | 
import com.matrix.component.ueditor.define.State; 
 | 
import java.util.Map; 
 | 
  
 | 
import javax.servlet.http.HttpServletRequest; 
 | 
  
 | 
public class ActionEnter { 
 | 
     
 | 
    private HttpServletRequest request = null; 
 | 
     
 | 
    private String rootPath = null; 
 | 
    private String contextPath = null; 
 | 
     
 | 
    private String actionType = null; 
 | 
     
 | 
    private ConfigManager configManager = null; 
 | 
  
 | 
    public ActionEnter ( HttpServletRequest request, String rootPath ) { 
 | 
         
 | 
        this.request = request; 
 | 
        this.rootPath = rootPath; 
 | 
        this.actionType = request.getParameter( "action" ); 
 | 
        this.contextPath = request.getContextPath(); 
 | 
        this.configManager = ConfigManager.getInstance( this.rootPath, this.contextPath, request.getRequestURI() ); 
 | 
         
 | 
    } 
 | 
     
 | 
    public String exec () { 
 | 
         
 | 
        String callbackName = this.request.getParameter("callback"); 
 | 
         
 | 
        if ( callbackName != null ) { 
 | 
  
 | 
            if ( !validCallbackName( callbackName ) ) { 
 | 
                return new BaseState( false, AppInfo.ILLEGAL ).toJSONString(); 
 | 
            } 
 | 
             
 | 
            return callbackName+"("+this.invoke()+");"; 
 | 
             
 | 
        } else { 
 | 
            return this.invoke(); 
 | 
        } 
 | 
  
 | 
    } 
 | 
     
 | 
    public String invoke() { 
 | 
         
 | 
        if ( actionType == null || !ActionMap.mapping.containsKey( actionType ) ) { 
 | 
            return new BaseState( false, AppInfo.INVALID_ACTION ).toJSONString(); 
 | 
        } 
 | 
         
 | 
        if ( this.configManager == null || !this.configManager.valid() ) { 
 | 
            return new BaseState( false, AppInfo.CONFIG_ERROR ).toJSONString(); 
 | 
        } 
 | 
         
 | 
        State state = null; 
 | 
         
 | 
        int actionCode = ActionMap.getType( this.actionType ); 
 | 
         
 | 
        Map<String, Object> conf = null; 
 | 
         
 | 
        switch ( actionCode ) { 
 | 
         
 | 
            case ActionMap.CONFIG: 
 | 
                return this.configManager.getAllConfig().toString(); 
 | 
                 
 | 
            case ActionMap.UPLOAD_IMAGE: 
 | 
            case ActionMap.UPLOAD_SCRAWL: 
 | 
            case ActionMap.UPLOAD_VIDEO: 
 | 
            case ActionMap.UPLOAD_FILE: 
 | 
                conf = this.configManager.getConfig( actionCode ); 
 | 
                state = new Uploader( request, conf ).doExec(); 
 | 
                break; 
 | 
                 
 | 
            case ActionMap.CATCH_IMAGE: 
 | 
                conf = configManager.getConfig( actionCode ); 
 | 
                String[] list = this.request.getParameterValues( (String)conf.get( "fieldName" ) ); 
 | 
                state = new ImageHunter( conf ).capture( list ); 
 | 
                break; 
 | 
                 
 | 
            case ActionMap.LIST_IMAGE: 
 | 
            case ActionMap.LIST_FILE: 
 | 
                conf = configManager.getConfig( actionCode ); 
 | 
                int start = this.getStartIndex(); 
 | 
                state = new FileManager( conf ).listFile( start ); 
 | 
                break; 
 | 
                 
 | 
        } 
 | 
         
 | 
        return state.toJSONString(); 
 | 
         
 | 
    } 
 | 
     
 | 
    public int getStartIndex () { 
 | 
         
 | 
        String start = this.request.getParameter( "start" ); 
 | 
         
 | 
        try { 
 | 
            return Integer.parseInt( start ); 
 | 
        } catch ( Exception e ) { 
 | 
            return 0; 
 | 
        } 
 | 
         
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * callback参数验证 
 | 
     */ 
 | 
    public boolean validCallbackName ( String name ) { 
 | 
         
 | 
        if ( name.matches( "^[a-zA-Z_]+[\\w0-9_]*$" ) ) { 
 | 
            return true; 
 | 
        } 
 | 
         
 | 
        return false; 
 | 
         
 | 
    } 
 | 
     
 | 
} 
 |