/** * Links the {@link TaskObject} to the {@link SectionObject}. * * @param task * {@link SectionTask}. * @param objectName * Name of the object. * @param objectType * Type of the object. * @param designer * {@link SectionDesigner}. * @param objects * Registry of the {@link SectionObject} by type of object. */ static void linkObject(SectionTask task, String objectName, Class<?> objectType, SectionDesigner designer, Map<Class<?>, SectionObject> objects) { // Obtain the section object SectionObject sectionObject = objects.get(objectType); if (sectionObject == null) { sectionObject = designer.addSectionObject(objectType.getName(), objectType.getName()); objects.put(objectType, sectionObject); } // Link task object to section object TaskObject taskObject = task.getTaskObject(objectName); designer.link(taskObject, sectionObject); }
/** * Links an escalation to an {@link SectionOutput}. * * @param task * {@link SectionTask}. * @param exception * Type of escalation. * @param designer * {@link SectionDesigner}. * @param escalations * Registry of the {@link SectionOutput} by type of escalation. */ static <E extends Throwable> void linkEscalation(SectionTask task, Class<E> exception, SectionDesigner designer, Map<Class<?>, SectionOutput> escalations) { // Obtain the section output SectionOutput output = escalations.get(exception); if (output == null) { output = designer.addSectionOutput(exception.getName(), exception.getName(), true); escalations.put(exception, output); } // Link task escalation to output TaskFlow escalation = task.getTaskEscalation(exception.getName()); designer.link(escalation, output, FlowInstigationStrategyEnum.SEQUENTIAL); }
@Override protected void enrichTask(SectionTask task, TaskType<?, ?, ?> taskType, Method method, Class<?> parameterType) { // Do not include if no logic class if (NoLogicClass.class.equals(this.sectionClass)) { return; } // Keep track of the tasks to allow linking by case-insensitive names String taskKey = createTaskKey(task.getSectionTaskName()); this.sectionClassMethodTasksByName.put(taskKey, new TemplateClassTask(task, taskType, method, parameterType)); // Enrich the task super.enrichTask(task, taskType, method, parameterType); }
HttpTemplateInitialWorkSource.PROPERTY_CONTENT_TYPE, HttpTemplateInitialWorkSource.PROPERTY_CHARSET); SectionTask initialTask = initialWork.addSectionTask("_INITIAL_TASK_", HttpTemplateInitialWorkSource.TASK_NAME); designer.link(initialTask.getTaskObject("SERVER_HTTP_CONNECTION"), connectionObject); designer.link(initialTask.getTaskObject("HTTP_APPLICATION_LOCATION"), locationObject); designer.link(initialTask.getTaskObject("REQUEST_STATE"), requestStateObject); designer.link(initialTask.getTaskObject("HTTP_SESSION"), sessionObject); designer.link(initialTask.getTaskEscalation(IOException.class.getName()), ioEscalation, FlowInstigationStrategyEnum.SEQUENTIAL); designer.link(templateTask.getTaskObject("SERVER_HTTP_CONNECTION"), connectionObject); designer.link(templateTask.getTaskObject("HTTP_APPLICATION_LOCATION"), locationObject); designer.link(templateTask.getTaskEscalation(IOException.class.getName()), ioEscalation, FlowInstigationStrategyEnum.SEQUENTIAL); templateTask.getTaskObject("OBJECT").flagAsParameter(); SectionTask arrayIteratorTask = arrayIteratorWork.addSectionTask( templateTaskName + "ArrayIterator", HttpTemplateArrayIteratorWorkSource.TASK_NAME); arrayIteratorTask.getTaskObject(HttpTemplateArrayIteratorWorkSource.OBJECT_NAME) .flagAsParameter(); designer.link(arrayIteratorTask.getTaskFlow(HttpTemplateArrayIteratorWorkSource.FLOW_NAME), templateTask, FlowInstigationStrategyEnum.PARALLEL); TaskFlow renderFlow = initialTask.getTaskFlow(Flows.RENDER.name()); if (beanTask != null) {
designer.link(preSubscription.getTaskObject(CometRequestServicer.class .getName()), cometRequestServicer); designer.link(postSubscription.getTaskObject(CometRequestServicer.class .getName()), cometRequestServicer); designer.link(preSubscription, postSubscription); PublishWorkSource.TASK_NAME); designer.link(publishTask .getTaskObject(Dependencies.SERVER_GWT_RPC_CONNECTION.name()), connection); designer.link( publishTask.getTaskObject(Dependencies.COMET_SERVICE.name()), cometService); designer.link(designer.addSectionInput(PUBLISH_INPUT_NAME, null), designer.link(publishTask.getTaskFlow(outputFlowName), designer .addSectionOutput(PUBLISH_OUTPUT_PREFIX + outputFlowName, CometEvent.class.getName(),
.getTaskObject(DependencyKeys.SERVER_HTTP_CONNECTION .name()); designer.link(serverHttpConnectionObject, .getTaskEscalation(IOException.class.getName()); designer.link(ioEscalationFlow, ioEscalationOutput, FlowInstigationStrategyEnum.SEQUENTIAL);
.getTaskFlow(HttpRouteTaskFlows.NOT_HANDLED.name()); SectionOutput unhandledRequestOutput = designer.addSectionOutput( UNHANDLED_REQUEST_OUTPUT_NAME, null, false);
SectionTask routeTask = routeWork.addSectionTask("route", ServletRouteWorkSource.TASK_ROUTE); designer.link(serviceInput, routeTask); designer.link(routeTask.getTaskFlow(FlowKeys.UNHANDLED.name()), unhandledOutput, FlowInstigationStrategyEnum.SEQUENTIAL); designer.link( routeTask.getTaskObject( net.officefloor.plugin.servlet.route.ServletRouteTask.DependencyKeys.HTTP_CONNECTION.name()), httpConnectionMo); designer.link(routeTask.getTaskObject( net.officefloor.plugin.servlet.route.ServletRouteTask.DependencyKeys.OFFICE_SERVLET_CONTEXT.name()), officeServletContextMo); servletTask.getTaskObject(DependencyKeys.SERVICER_MAPPING.name()).flagAsParameter(); designer.link(servletTask.getTaskObject(DependencyKeys.OFFICE_SERVLET_CONTEXT.name()), officeServletContextMo); designer.link(servletTask.getTaskObject(DependencyKeys.HTTP_CONNECTION.name()), httpConnectionMo); designer.link(servletTask.getTaskObject(DependencyKeys.REQUEST_ATTRIBUTES.name()), requestAttributesMo); designer.link(servletTask.getTaskObject(DependencyKeys.HTTP_SESSION.name()), httpSessionMo); designer.link(servletTask.getTaskObject(DependencyKeys.HTTP_SECURITY.name()), httpSecurityMo); designer.link(servletTask.getTaskEscalation(ServletException.class.getName()), servletExceptionOutput, FlowInstigationStrategyEnum.SEQUENTIAL); designer.link(servletTask.getTaskEscalation(IOException.class.getName()), ioExceptionOutput, FlowInstigationStrategyEnum.SEQUENTIAL);
challengeTask.getTaskObject("HTTP_AUTHENTICATION_REQUIRED_EXCEPTION").flagAsParameter(); designer.link(challengeTask.getTaskObject("SERVER_HTTP_CONNECTION"), serverHttpConnection); designer.link(challengeTask.getTaskObject("HTTP_SESSION"), httpSession); designer.link(challengeTask.getTaskObject("HTTP_REQUEST_STATE"), httpRequestState); for (SectionObject dependency : dependencyObjects) { designer.link(challengeTask.getTaskObject(dependency.getSectionObjectName()), dependency); designer.link(challengeTask.getTaskFlow("FAILURE"), failureOutput, FlowInstigationStrategyEnum.SEQUENTIAL); for (HttpSecurityFlowType<?> flowType : securityType.getFlowTypes()) { String flowName = flowType.getFlowName(); TaskFlow taskFlow = challengeTask.getTaskFlow("FLOW_" + flowName); SectionOutput sectionOutput; if (OUTPUT_FAILURE.equals(flowName)) { moAuthTask.getTaskObject("TASK_AUTHENTICATE_CONTEXT").flagAsParameter(); for (SectionObject dependency : dependencyObjects) { designer.link(moAuthTask.getTaskObject(dependency.getSectionObjectName()), dependency); moLogoutTask.getTaskObject("TASK_LOGOUT_CONTEXT").flagAsParameter(); for (SectionObject dependency : dependencyObjects) { designer.link(moLogoutTask.getTaskObject(dependency.getSectionObjectName()), dependency); startAuthTask.getTaskObject(StartApplicationHttpAuthenticateTask.Dependencies.CREDENTIALS.name()) .flagAsParameter(); designer.link( startAuthTask .getTaskObject(StartApplicationHttpAuthenticateTask.Dependencies.HTTP_AUTHENTICATION.name()), httpAuthentication); designer.link(startAuthTask.getTaskFlow(StartApplicationHttpAuthenticateTask.Flows.FAILURE.name()),
.getTaskObject(Dependencies.SERVER_GWT_RPC_CONNECTION .name()); SectionObject connectionObject = context .getTaskFlow(methodName);
/** * Adds handling for a {@link Servlet} resource. * * @param inputName * {@link SectionInput} name. * @param requestDispatcherPath * {@link RequestDispatcher} path. * @param servletBridge * {@link ServletBridge} {@link SectionObject}. * @param designer * {@link SectionDesigner}. */ private void addServletResource(String inputName, String requestDispatcherPath, SectionObject servletBridge, SectionDesigner designer) { // Create the task to indicate Servlet container resource SectionWork work = designer.addSectionWork(inputName, ServletContainerResourceWorkSource.class.getName()); work.addProperty( ServletContainerResourceWorkSource.PROPERTY_SERVLET_CONTAINER_RESOURCE, requestDispatcherPath); SectionTask task = work.addSectionTask(inputName, "RESOURCE"); TaskObject dependency = task .getTaskObject(DependencyKeys.SERVLET_BRIDGE.name()); designer.link(dependency, servletBridge); // Link input for task SectionInput input = designer.addSectionInput(inputName, null); designer.link(input, task); }