Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   *
   * Licensed under the Apache License, Version 2.0 (the "License").
   * You may not use this file except in compliance with the License.
   * A copy of the License is located at
   *
   *  http://aws.amazon.com/apache2.0
   *
  * or in the "license" file accompanying this file. This file 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.amazonaws.services.simpleworkflow.flow.pojo;
 
 import java.util.Map;
 
 
 @SuppressWarnings("rawtypes")
 public class POJOWorkflowDefinition extends WorkflowDefinition {
 
     private final MethodConverterPair workflowMethod;
 
     private final Map<StringMethodConverterPairsignals;
 
     private final MethodConverterPair getStateMethod;
 
     private final Object workflowImplementationInstance;
 
     private final DataConverter converter;
 
     private final DecisionContext context;
 
     public POJOWorkflowDefinition(Object workflowImplmentationInstanceMethodConverterPair workflowImplementationMethod,
             Map<StringMethodConverterPairsignalsMethodConverterPair getStateMethodDataConverter converter,
             DecisionContext context)
         this. = workflowImplmentationInstance;
         this. = workflowImplementationMethod;
         this. = getStateMethod;
         this. = signals;
         this. = converter;
         this. = context;
     }
 
     @Override
     public Promise<Stringexecute(final String inputthrows WorkflowException {
         final DataConverter c;
         if (.getConverter() == null) {
             c = ;
         }
         else {
             c = .getConverter();
         }
         final Settable<Stringresult = new Settable<String>();
         final AtomicReference<PromisemethodResult = new AtomicReference<Promise>();
         new TryCatchFinally() {
 
             @Override
             protected void doTry() throws Throwable {
                 //TODO: Support ability to call workflow using old client 
                 // after new parameters were added to @Execute method
                 // It requires creation of parameters array of the correct size and
                 // populating the new parameter values with default values for each type
                 Object[] parameters = c.fromData(inputObject[].class);
                 Method method = .getMethod();
                 Object r = invokeMethod(methodparameters);
                 if (!method.getReturnType().equals(.)) {
                     methodResult.set((Promiser);
                 }
             }
 
             @Override
             protected void doCatch(Throwable ethrows Throwable {
                 if (!(e instanceof CancellationException) || !.getWorkflowContext().isCancelRequested()) {
                     throwWorkflowException(ce);
                 }
             }
 
             @Override
             protected void doFinally() throws Throwable {
                 Promise r = methodResult.get();
                 if (r == null || r.isReady()) {
                     Object workflowResult = r == null ? null : r.get();
                     String convertedResult = c.toData(workflowResult);
                     result.set(convertedResult);
                 }
             }
         };
         return result;
    }
    @Override
    public void signalRecieved(String signalNameString detailsthrows WorkflowException {
        MethodConverterPair signalMethod = .get(signalName);
        if (signalMethod != null) {
            DataConverter c = signalMethod.getConverter();
            if (c == null) {
                c = ;
            }
            Method method = signalMethod.getMethod();
            Object[] parameters = c.fromData(detailsObject[].class);
            try {
                invokeMethod(methodparameters);
            }
            catch (Throwable e) {
                throwWorkflowException(ce);
                throw new IllegalStateException("Unreacheable");
            }
        }
        else {
            // TODO: Unhandled signal
        }
    }
    @Override
    public String getWorkflowState() throws WorkflowException {
        if ( == null) {
            return null;
        }
        final DataConverter c;
        if (.getConverter() == null) {
            c = ;
        }
        else {
            c = .getConverter();
        }
        try {
            Method method = .getMethod();
            Object result = invokeMethod(methodnull);
            return c.toData(result);
        }
        catch (Throwable e) {
            throwWorkflowException(ce);
            throw new IllegalStateException("Unreacheable");
        }
    }
    private Object invokeMethod(final Method methodfinal Object[] inputthrows Throwable {
        try {
            return method.invoke(input);
        }
        catch (InvocationTargetException invocationException) {
            if (invocationException.getTargetException() != null) {
                throw invocationException.getTargetException();
            }
            throw invocationException;
        }
    }
    private void throwWorkflowException(DataConverter cThrowable exceptionthrows WorkflowException {
        if (exception instanceof WorkflowException) {
            throw (WorkflowException)exception;
        }
        String reason = WorkflowExecutionUtils.truncateReason(exception.getMessage());
        String details = null;
        try {
            details = c.toData(exception);
        }
        catch (DataConverterException dataConverterException) {
            if (dataConverterException.getCause() == null) {
                dataConverterException.initCause(exception);
            }
            throw dataConverterException;
        }
        throw new WorkflowException(reasondetails);
    }
    public Object getImplementationInstance() {
        return ;
    }
New to GrepCode? Check out our FAQ X