Package org.jboss.soa.bpel.console.bpaf

Source Code of org.jboss.soa.bpel.console.bpaf.EventAdapter$EventDetailMapping

/*
* Copyright 2009 JBoss, a divison Red Hat, Inc
*
* 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 org.jboss.soa.bpel.console.bpaf;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ode.bpel.evt.*;
import org.apache.ode.utils.CollectionUtils;
import org.jboss.bpm.monitor.model.bpaf.Event;
import org.jboss.bpm.monitor.model.bpaf.Tuple;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
* @author: Heiko Braun <hbraun@redhat.com>
* @date: Sep 21, 2010
*/
public class EventAdapter {

    protected final static Log log = LogFactory.getLog(EventAdapter.class);

    static Map<Class<?>, EventDetailMapping> detailMapping = new HashMap<Class<?>, EventDetailMapping>();
   
    private static Set<String> excludedMethods = new HashSet<String>();

    static
    {
        detailMapping.put(ProcessInstanceStartedEvent.class, new InstanceStartAdapter());
        detailMapping.put(ProcessCompletionEvent.class, new InstanceEndAdapter());
        detailMapping.put(ProcessTerminationEvent.class, new InstanceTerminationAdapter());

        detailMapping.put(ActivityExecStartEvent.class, new ActivityStartAdapter());
        detailMapping.put(ActivityExecEndEvent.class, new ActivityEndAdapter());
        detailMapping.put(ActivityFailureEvent.class, new ActivityFailedAdapter());

        detailMapping.put(ProcessInstanceStateChangeEvent.class, new StateChangeAdapter());
       
        detailMapping.put(CorrelationSetWriteEvent.class, new CorrelationSetWriteAdapter());
        detailMapping.put(PartnerLinkModificationEvent.class, new PartnerLinkModificationAdapter());
        detailMapping.put(VariableModificationEvent.class, new VariableModificationAdapter());
        detailMapping.put(ProcessMessageExchangeEvent.class, new ProcessMessageExchangeAdapter());
       
        detailMapping.put(ExpressionEvaluationSuccessEvent.class, new ExpressionEvaluationSuccessAdapter());
        detailMapping.put(ExpressionEvaluationFailedEvent.class, new ExpressionEvaluationFailedAdapter());
       
        detailMapping.put(ScopeStartEvent.class, new ScopeStartAdapter());
        detailMapping.put(ScopeCompletionEvent.class, new ScopeCompletionAdapter());
        detailMapping.put(ScopeFaultEvent.class, new ScopeFaultAdapter());
       
       
        excludedMethods.add("getProcessInstanceId");
        excludedMethods.add("getScopeId");
        excludedMethods.add("getScopeDeclarationId");
        excludedMethods.add("getClass");
        excludedMethods.add("getActivityId");
        excludedMethods.add("getProcessId");
        excludedMethods.add("getProcessName");
        excludedMethods.add("getActivityDeclarationId");
        excludedMethods.add("getLineNo");
    }

    public static Event createBPAFModel(BpelEvent bpelEvent)
    {
        Event target = null;
        EventDetailMapping mapping = detailMapping.get(bpelEvent.getClass());

        if(mapping!=null)
        {
            ProcessEvent source = (ProcessEvent)bpelEvent;

            // base event data
            target = new Event(false);
            target.setTimestamp(bpelEvent.getTimestamp().getTime());
            target.setProcessDefinitionID(source.getProcessId().toString());
            target.setProcessName(source.getProcessName().toString());
           
            //set default value for activity name
            target.setActivityName("n/a");

            // required for bpel2svg. See https://jira.jboss.org/browse/RIFTSAW-264
            target.addData(new LineNumber(bpelEvent.getLineNo()));
           
            if (source instanceof ProcessInstanceEvent) {
              ProcessInstanceEvent instanceEvent = (ProcessInstanceEvent) source;
              target.setProcessInstanceID(instanceEvent.getProcessInstanceId().toString());
            }
          
           //put the data as a property.
           Tuple data = new Tuple();
           data.setName("data");
           data.setValue(getProcessEventAsString(source));
          
           target.addData(data);
          
            // can return null and thus invalidate the event
            target = mapping.adoptDetails(target, source);
        }
       
        return target;
    }
   
    private static String getProcessEventAsString(ProcessEvent event) {
        StringBuilder sb = new StringBuilder(getEventName(event));

        Method[] methods = event.getClass().getMethods();
        for (Method method : methods) {
            if (method.getName().startsWith("get") && method.getParameterTypes().length == 0 && !excludedMethods.contains(method.getName())) {
                try {
                    String field = method.getName().substring(3);
                    Object value = method.invoke(event, CollectionUtils.EMPTY_OBJECT_ARRAY);
                    if (value == null) {
                        continue;
                    }
                    sb.append("~").append(field).append(" = ").append(value == null ? "null" : value.toString());
                } catch (Exception e) {
                    // ignore
                }
            }
        }
       
        return sb.toString();
    }
   
   
    private static String getEventName(ProcessEvent event) {
      String name = event.getClass().getName();
        return name.substring(name.lastIndexOf('.') + 1);
    }

    public interface EventDetailMapping<T extends ProcessEvent>
    {
        Event adoptDetails(Event target, T source);
    }
}
TOP

Related Classes of org.jboss.soa.bpel.console.bpaf.EventAdapter$EventDetailMapping

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.