package it.csi.demo.democomp.presentation.democomp.action;

import java.util.*;

import org.apache.struts2.interceptor.validation.SkipValidation;

import com.opensymphony.xwork2.validator.annotations.*;

import it.csi.demo.democomp.dto.*;

import it.csi.demo.democomp.business.*;

/**
 * HomeAction Action Class.
 *
 * @author GuiGen
 */
@Validation()
public class HomeAction extends BaseAction {

	public void setAppDatapersone(
			java.util.ArrayList<it.csi.demo.democomp.dto.nspersona.Persona> value) {
		getSession().put("appDatapersone", value);
	}

	public java.util.ArrayList<it.csi.demo.democomp.dto.nspersona.Persona> getAppDatapersone() {
		return (java.util.ArrayList<it.csi.demo.democomp.dto.nspersona.Persona>) (getSession()
				.get("appDatapersone"));
	}

	/**
	 * classe model associata
	 */
	public Class modelClass() {

		return it.csi.demo.democomp.dto.GlobalHomeModel.class;

	}

	/**
	 *
	 * @return Il risultato delle azioni, SUCCESS altrimenti.
	 */
	public String execute() throws CommandExecutionException {

		log.debug("[HomeAction::execute] START");

		ICommand action = initCommand();
		String result = action.doCommand(this);
		if (result != null) {
			return result;
		} else {
			log.debug("[HomeAction::execute] END");
			return SUCCESS;
		}
	}

	/**
	 * Gestione della validazione
	 */
	public void validate() {
		/*PROTECTED REGION ID(R103397888) ENABLED START*/
		/* Inserire la validazione */
		/*PROTECTED REGION END*/
	}

	/**
	 *	Metodo per la rimozione dalla sessione degli application data a scope
	 *  SAME_PAGE. 
	 */
	public void clearPageScopedAppData() {
		// TODO: nel caso dell'on-init command non si ha ancora un 
		// "content panel corrente" -> NOP
	}

	/**
	 * inizializza la struttura dei command da eseguire allo startup della sessione 
	 */
	private ICommand initCommand() {
		// ExecCommand begin
		String[] resultNames4initApp = new String[]{"ok"};

		ICommand[] actionsForResults4initApp = new ICommand[1];
		/// Jump Command begin
		JumpCommand act_onInit_resokAction_0 = new JumpCommand("cpHome", null,
				false);
		/// Jump Command end
		actionsForResults4initApp[0] = act_onInit_resokAction_0;

		ExecCommand act_onInit_1 = new ExecCommand(resultNames4initApp,
				actionsForResults4initApp) {
			public ExecResults doLogic(Object theModel)
					throws CommandExecutionException {
				it.csi.util.performance.StopWatch watcher = new it.csi.util.performance.StopWatch(
						it.csi.demo.democomp.util.Constants.APPLICATION_CODE);
				ExecResults result = null;
				try {
					watcher.start();
					result = getSpringBackEnd()
							.initApp(
									(it.csi.demo.democomp.dto.GlobalHomeModel) theModel);
					watcher.stop();
					watcher.dumpElapsed("", "readOne()",
							"chiamata verso BackEnd", "initApp");
					return result;
				} catch (BEException e) {
					throw new CommandExecutionException(
							"errore non gestito nell'esecuzione del metodo [initApp]:"
									+ e.getMessage(), e);
				}

			}

			public void storeAppData(ExecResults res, BaseAction strutsAction) {
				// cast della action al tipo specifico per poter utilizzare direttamente
				// le property
				HomeAction specificAction = (HomeAction) strutsAction;

				// store del dato persone
				//java.util.ArrayList<it.csi.demo.democomp.dto.nspersona.Persona> _appDatapersone = 
				//	(java.util.ArrayList<it.csi.demo.democomp.dto.nspersona.Persona>)res.getAppDatapersone();
				// il dato persone e' salvato in un attributo della action corrente
				//specificAction.setAppDatapersone(_appDatapersone);
				// il dato persone e' salvato in sessione
				strutsAction.getSession().put("appDatapersone",
						specificAction.getAppDatapersone());
			}
		};
		// Exec Action end
		return act_onInit_1;
	}

}
