package com.poweroa.flow;

import java.io.File;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Date;

import org.apache.avalon.framework.parameters.ParameterException;
import org.apache.cocoon.components.flow.java.AbstractContinuable;
import org.apache.cocoon.components.flow.java.Continuation;
import org.apache.cocoon.components.flow.java.ContinuationContext;
import org.apache.cocoon.components.flow.java.VarMap;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.forms.flow.java.FormInstance;
import org.apache.cocoon.forms.formmodel.BooleanField;
import org.apache.cocoon.forms.formmodel.Field;
import org.apache.cocoon.forms.formmodel.Repeater;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.impl.FileSource;
import org.apache.excalibur.xml.dom.DOMParser;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;

import com.poweroa.components.Favorite;
import com.poweroa.components.IDirectory;
import com.poweroa.iflow.directory.User;


public class PowerOAFlow extends AbstractContinuable {

	private ContinuationContext getContext() {
		if (Continuation.currentContinuation()==null)
			throw new IllegalStateException("No continuation is running");
		return (ContinuationContext) Continuation.currentContinuation().getContext();
	}
	
	
	public void doRx_View(){
		
		String system=getContext().getParameters().getParameter("system","");
		String appid=getContext().getParameters().getParameter("appid","");
		String view=getContext().getParameters().getParameter("view","");
		String count=getContext().getParameters().getParameter("count","");
		String defaultcount=getContext().getParameters().getParameter("defaultcount","");
		String category=getContext().getParameters().getParameter("category","");
		String categoryname=getContext().getParameters().getParameter("categoryname","");
		String category1=getContext().getParameters().getParameter("category1","");
		String categoryname1=getContext().getParameters().getParameter("categoryname1","");
		String category2=getContext().getParameters().getParameter("category2","");
		String categoryname2=getContext().getParameters().getParameter("categoryname2","");		
		String page=getContext().getParameters().getParameter("page","");
		String style=getContext().getParameters().getParameter("style","");
		String adjustPage=getContext().getParameters().getParameter("adjustPage","true");
		String adjustAccess=getContext().getParameters().getParameter("adjustAccess","true");
		String log=getContext().getParameters().getParameter("log","");
			
		String copletid=getRequest().getParameter("copletid");
		String opendocument=getRequest().getParameter("opendocument");
		String displayonly = getRequest().getParameter("displayonly");
		String calendartype = getRequest().getParameter("calendartype");
		String calendaryear = getRequest().getParameter("calendaryear");;
		String calendarmonth = getRequest().getParameter("calendarmonth");;
		String calendarday = getRequest().getParameter("calendarday");;
		String orderby = getRequest().getParameter("_orderby");
		String sort = getRequest().getParameter("_sort");
		String parentdocid = getRequest().getParameter("parentdocid");
		String categorys = "";
				
		IDirectory iDirectory=null;
		User user=null;
		/*try{
			iDirectory =(IDirectory) getComponent(IDirectory.ROLE);
			user=iDirectory.getCurrentUser();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			releaseComponent(iDirectory);		
		}*/

		if(copletid==null) copletid="";
		if(opendocument==null) opendocument="";
		if(displayonly==null) displayonly="";
		if(count.equals("")&&!defaultcount.equals("")) count=defaultcount;
		
		if(style.equals("")){
			style=getRequest().getParameter("style");
			if(style==null||style=="")
				style="default";
		} 
		if(calendartype == null) calendartype = "week";
		if(orderby==null) orderby="";
		if(sort==null) sort="ASC";
	/*
		String method=getRequest().getMethod();

		if(method.equalsIgnoreCase("POST")){
			
			String _action = getRequest().getParameter("_action");
			if(_action!=null && _action!=""){
				FileSource targetSource = null;
				OutputStream outputStream = null;
				DOMParser parser = null;
				Source source = null;
				Document document=null;
				InputSource inputStream = null;
				SourceResolver resolver = null;
				try{
					parser = (DOMParser) getComponent(DOMParser.ROLE);
					resolver = (SourceResolver) getComponent(SourceResolver.ROLE);
					source = resolver.resolveURI("common/views/emptydoc.xml"); 
					inputStream = new InputSource(source.getInputStream());        
					inputStream.setSystemId(source.getURI());        
					document= parser.parseDocument(inputStream);				
					targetSource = (FileSource) resolver.resolveURI("tmp");
					outputStream=targetSource.getOutputStream();
				

					if(_action.equals("deleteDocument")){
						String _docid = getRequest().getParameter("_docid");
						String _formname = getRequest().getParameter("_formname");
						processPipelineTo(appid+"/viewdelete?docid=" + _docid + "&form=" + _formname,new VarMap().add("power-data", document),outputStream);
					}
					else if(_action.equals("deleteDocuments")){						
						String[] select=getRequest().getParameterValues("checkbox");
						String forms[] = getRequest().getParameterValues("formname");
  					
						if(select != null && select.length > 0){
							for(int i=0;i<select.length;i++){
								processPipelineTo(appid+"/viewdelete?docid="+select[i]+"&form="+forms[i],new VarMap().add("power-data", document),outputStream);
							}
						}
					}
					else if(_action.equals("selectCategorys")){
						String[] select=getRequest().getParameterValues("categorycheck");
						if(select != null && select.length > 0){
							for(int i=0;i<select.length-1;i++){
								categorys += select[i] + ",";
							}
							categorys  += select[select.length-1];
						}
					}
					else if(_action.equals("selectCategory")){
						category = getRequest().getParameter("_category");
						if(category.equals("-ALL-"))
							category = "";
						categoryname = getRequest().getParameter("_categoryname");
					
						category1 = getRequest().getParameter("_category1");
						if(category1.equals("-ALL1-"))
							category1 = "";
						categoryname1 = getRequest().getParameter("_categoryname1");
					
						category2 = getRequest().getParameter("_category22");
						if(category.equals("-ALL2-"))
							category = "";
						categoryname2 = getRequest().getParameter("_categoryname2");
						calendartype = getRequest().getParameter("calendartype");
						calendaryear = getRequest().getParameter("calendaryear");
						calendarmonth = getRequest().getParameter("calendarmonth");
						calendarday = getRequest().getParameter("calendarday");
					}
					else if(_action.equals("generateCalendar")){
						calendartype = getRequest().getParameter("calendartype");
						calendaryear = getRequest().getParameter("calendaryear");
						calendarmonth = getRequest().getParameter("calendarmonth");
						calendarday = getRequest().getParameter("calendarday");
						String[] select=getRequest().getParameterValues("categorycheck");
						if(select != null && select.length > 0){
							for(int i=0;i<select.length-1;i++){
								categorys += select[i] + ",";
							}
							categorys  += select[select.length-1];
						}
					}
					else if(_action.equals("generateTodayCalendar")){
						calendartype = getRequest().getParameter("calendartype");
						Calendar t = java.util.Calendar.getInstance();
						calendaryear = ""+t.get(Calendar.YEAR);
						calendarmonth = ""+(t.get(Calendar.MONTH)+1);
						calendarday = ""+t.get(Calendar.DATE);
						String[] select=getRequest().getParameterValues("categorycheck");
						if(select != null && select.length > 0){
							for(int i=0;i<select.length-1;i++){
								categorys += select[i] + ",";
							}
							categorys  += select[select.length-1];
						}
					}
					else if(_action.equals("deleteininbox") || _action.equals("emptyinbox") || _action.equals("undelete") || _action.equals("deleteinoutbox") || _action.equals("emptyoutbox")){
						String[] select = getRequest().getParameterValues("checkbox");
						String docid = getRequest().getParameter("_docid");
						//rg_view_action(system,_action,select,docid);
					}
					else if(_action.equals("addfavorite")){
						String favoritecontent = getRequest().getParameter("favoritecontent");
						String favoritelink= getRequest().getParameter("favoritelink");
						Favorite favorite=null;
						try{
							favorite=(Favorite) getComponent(Favorite.ROLE);
							if(!favorite.exist(system,user.getName(),favoritelink))
								favorite.add(system,user.getName(),favoritecontent,favoritelink,"");
						}catch(Exception e){
							e.printStackTrace();
						}finally{
							releaseComponent(favorite);
						}
					}
				}catch (Exception e){
					e.printStackTrace();     				
				}finally{
					File tmpfile=null;
					if (targetSource != null) {
						tmpfile=targetSource.getFile();
						resolver.release(targetSource);
					}
					if (source != null)   resolver.release(source);
					releaseComponent(resolver);
					releaseComponent(parser);
					if (document!=null) document=null;
					if (outputStream != null) {
						try {
							outputStream.flush();
							outputStream.close();
						} catch (Exception e) {
							this.getLogger().error("Could not flush/close outputstream: "+e.getMessage());
						}
					}
					tmpfile.delete();
				}
			}
		}*/
		String url = appid+"/views_display/"+view
			+ "?copletid=" + copletid
			+ "&opendocument="+opendocument
			+ "&displayonly="+displayonly
			+ "&count="+count
			+ "&page="+page
			+ "&category="+category
			+ "&categoryname="+categoryname
			+ "&category1="+category1
			+ "&categoryname1="+categoryname1
			+ "&category2="+category2
			+ "&categoryname2="+categoryname2
			+ "&categorys=" + categorys
			+ "&style="+style
			+ "&adjustpage="+adjustPage
			+ "&adjustaccess="+adjustAccess
			+ "&orderby=" + orderby 
			+ "&sort=" + sort  
			+ "&log="+log
			+ "&calendartype=" + calendartype 
			+ "&calendaryear=" + calendaryear 
			+ "&calendarmonth=" + calendarmonth 
			+ "&calendarday=" + calendarday 
			+ "&parentdocid=" + parentdocid;
		sendPage(url);
	}

}
