All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jpattern.gwt.client.event.AEvent Maven / Gradle / Ivy

There is a newer version: 2.45.7
Show newest version
package com.jpattern.gwt.client.event;

import java.util.List;

import com.jpattern.gwt.client.IApplicationProvider;
import com.jpattern.gwt.client.NullApplicationProvider;
import com.jpattern.gwt.client.command.ACommand;
import com.jpattern.gwt.client.command.ICommandCallBack;
import com.jpattern.gwt.client.command.ICommandResult;
import com.jpattern.gwt.client.logger.ILogger;
import com.jpattern.gwt.client.presenter.IPresenter;
import com.jpattern.shared.result.IErrorMessage;

/**
 * 
 * @author Francesco Cina'
 *
 * 14 Apr 2011
 */
public abstract class AEvent implements IEvent {
	
	private final IPresenter presenter;
	private IApplicationProvider provider;
	private IEventCallback eventCallback;
	private final ILogger logger;

	/**
	 * Create an event using the presenter's provider.
	 * @param presenter
	 */
	public AEvent(IPresenter presenter) {
		this(presenter, presenter.getProvider());
	}
	
	/**
	 * Create an event with a specific provider
	 * @param presenter
	 * @param provider
	 */
	public AEvent(IPresenter presenter, IApplicationProvider provider) {
		this.presenter = presenter;
		this.provider = provider;
		this.logger = getProvider().getLoggerService().getLogger(this.getClass());
	}

	/* (non-Javadoc)
	 * @see com.jpattern.gwt.event.IEvent#launch()
	 */
	@Override
	public final void launch(IEventCallback eventCallback) {
		this.eventCallback = eventCallback;
		logger.debug("launch", "start execution");
		presenter.onEventStart();
		getProvider().getBusService().notifyEventStart(this);
		ACommand command = exec();
		command.visit(getProvider());
		command.exec( new EventCommandCallback());
	}

	/* (non-Javadoc)
	 * @see com.jpattern.gwt.event.IEvent#callback(com.jpattern.gwt.command.IWebResult)
	 */
	private void callback(ICommandResult commandResult) {
		IEventResult eventResult = afertExec(commandResult);
		logger.debug("callback", "start execution (event execution finished)");
		presenter.onEventEnd();
		if ( eventResult.getErrorMessages().isEmpty() ) {
			logger.debug("callback", "calling event callback");
			eventCallback.callback(eventResult);
		}
		else {
			logger.warn("callback", eventResult.getErrorMessages().size() + " errors appeared");
			presenter.onEventError(eventResult.getErrorMessages());
			try {
				logger.debug("callback", "calling event callback");
				eventCallback.callback(eventResult);
			} finally {
				checkManagedErrors(eventResult.getErrorMessages());
			}
		}
		getProvider().getBusService().notifyEventEnd(this, eventResult);
	}
	
	protected abstract ACommand exec();
	
	protected abstract IEventResult afertExec(ICommandResult webResult);

	protected IApplicationProvider getProvider() {
		if (provider == null) {
			provider = new NullApplicationProvider();
		}
		return provider;
	}
	
	private void checkManagedErrors(List list) {
		for ( IErrorMessage errorMessage : list ) {
			getProvider().getManagedErrorService().launch( errorMessage, presenter, this, eventCallback );		
		}
	}
	
	private class EventCommandCallback implements ICommandCallBack {

		@Override
		public void callback(ICommandResult commandResult) {
			AEvent.this.callback(commandResult);			
		}
		
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy