/** * Copyright 2008-2016 Qualogy Solutions B.V. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.qualogy.qafe.presentation.handler; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.LogFactory; import com.qualogy.qafe.bind.business.action.BusinessActionRef; import com.qualogy.qafe.bind.core.application.ApplicationContext; import com.qualogy.qafe.bind.core.statement.IfStatement; import com.qualogy.qafe.bind.core.statement.Iteration; import com.qualogy.qafe.bind.core.statement.SwitchStatement; import com.qualogy.qafe.bind.presentation.event.Event; import com.qualogy.qafe.bind.presentation.event.EventItem; import com.qualogy.qafe.bind.presentation.event.function.BuiltInFunction; import com.qualogy.qafe.bind.presentation.event.function.EventRef; import com.qualogy.qafe.bind.presentation.event.function.Focus; import com.qualogy.qafe.bind.presentation.event.function.LocalDelete; import com.qualogy.qafe.bind.presentation.event.function.LocalStore; import com.qualogy.qafe.bind.presentation.event.function.LogFunction; import com.qualogy.qafe.bind.presentation.event.function.OpenWindow; import com.qualogy.qafe.bind.presentation.event.function.Return; import com.qualogy.qafe.bind.presentation.event.function.SetProperty; import com.qualogy.qafe.bind.presentation.event.function.SetValue; import com.qualogy.qafe.bind.presentation.event.function.dialog.GenericDialog; import com.qualogy.qafe.core.datastore.DataIdentifier; import com.qualogy.qafe.core.errorhandling.ExternalException; import com.qualogy.qafe.core.framework.presentation.EventData; import com.qualogy.qafe.presentation.EventHandlerImpl; import com.qualogy.qafe.presentation.handler.executors.AbstractEventItemExecute; import com.qualogy.qafe.presentation.handler.executors.BusinessActionRefExecute; import com.qualogy.qafe.presentation.handler.executors.EventRefExecute; import com.qualogy.qafe.presentation.handler.executors.FocusExecute; import com.qualogy.qafe.presentation.handler.executors.GenericDialogExecute; import com.qualogy.qafe.presentation.handler.executors.IfStatementExecute; import com.qualogy.qafe.presentation.handler.executors.IterationExecute; import com.qualogy.qafe.presentation.handler.executors.LocalDeleteExecute; import com.qualogy.qafe.presentation.handler.executors.LocalStoreExecute; import com.qualogy.qafe.presentation.handler.executors.LogFunctionExecute; import com.qualogy.qafe.presentation.handler.executors.OpenWindowExecute; import com.qualogy.qafe.presentation.handler.executors.ReturnBuiltInException; import com.qualogy.qafe.presentation.handler.executors.ReturnExecute; import com.qualogy.qafe.presentation.handler.executors.SetPropertyExecute; import com.qualogy.qafe.presentation.handler.executors.SetValueExecute; import com.qualogy.qafe.presentation.handler.executors.SwitchStatementExecute; import com.qualogy.qafe.util.ExceptionHelper; public class EventItemExecutor { private static EventItemExecutor singleton = null; private final Map<Class<?>, Class<?>> EXECUTOR_MAP = new HashMap<Class<?>, Class<?>>(); private EventItemExecutor(){ EXECUTOR_MAP.put(EventRef.class, EventRefExecute.class); EXECUTOR_MAP.put(GenericDialog.class, GenericDialogExecute.class); EXECUTOR_MAP.put(BusinessActionRef.class, BusinessActionRefExecute.class); EXECUTOR_MAP.put(LocalStore.class, LocalStoreExecute.class); EXECUTOR_MAP.put(LocalDelete.class, LocalDeleteExecute.class); EXECUTOR_MAP.put(IfStatement.class, IfStatementExecute.class); EXECUTOR_MAP.put(SwitchStatement.class, SwitchStatementExecute.class); EXECUTOR_MAP.put(Iteration.class, IterationExecute.class); EXECUTOR_MAP.put(SetValue.class, SetValueExecute.class); EXECUTOR_MAP.put(SetProperty.class, SetPropertyExecute.class); EXECUTOR_MAP.put(OpenWindow.class, OpenWindowExecute.class); EXECUTOR_MAP.put(LogFunction.class, LogFunctionExecute.class); EXECUTOR_MAP.put(Return.class, ReturnExecute.class); EXECUTOR_MAP.put(Focus.class, FocusExecute.class); }; public static EventItemExecutor getInstance(){ if (singleton==null){ singleton = new EventItemExecutor(); } return singleton; } public boolean execute(EventItem eventItem,ApplicationContext context, Event event, EventData eventData,Collection<BuiltInFunction> listToExecute,EventHandlerImpl eventHandler,DataIdentifier dataId) throws ExternalException{ boolean stopProcessing = false; if (eventItem != null) { try { ExecuteEventItem executeEventItem = createExecuteEventItem(eventItem); if (executeEventItem != null) { stopProcessing = executeEventItem.execute(eventItem,context,event, eventData,listToExecute,eventHandler,dataId); } else if (eventItem instanceof BuiltInFunction) { listToExecute.add((BuiltInFunction)eventItem); } else { LogFactory.getLog(getClass().getName()).info("Unable to find renderer for class " + eventItem.getClass().getName()); } } catch (ReturnBuiltInException e) { throw e; } catch (ExternalException e) { throw e; } catch (Exception e) { LogFactory.getLog(getClass().getName()).info("AbstractComponentRenderer:renderChildComponent\n" + ExceptionHelper.printStackTrace(e)); throw new ExternalException(e.getMessage(), e); } } return stopProcessing; } public AbstractEventItemExecute getExecutor(EventItem eventItem) { if (eventItem != null) { try { ExecuteEventItem executeEventItem = createExecuteEventItem(eventItem); if (executeEventItem instanceof AbstractEventItemExecute) { return (AbstractEventItemExecute)executeEventItem; } } catch (Exception e) { // TODO: handle exception } } return null; } private ExecuteEventItem createExecuteEventItem(EventItem eventItem) throws Exception { try { Class clazz = EXECUTOR_MAP.get(eventItem.getClass()); if (clazz != null) { return (ExecuteEventItem)clazz.newInstance(); } } catch (Exception e) { e.printStackTrace(); throw e; } return null; } }