    001/*
    002    Licensed to the Apache Software Foundation (ASF) under one
    003    or more contributor license agreements.  See the NOTICE file
    004    distributed with this work for additional information
    005    regarding copyright ownership.  The ASF licenses this file
    006    to you under the Apache License, Version 2.0 (the
    007    "License"); you may not use this file except in compliance
    008    with the License.  You may obtain a copy of the License at
    009
    010       http://www.apache.org/licenses/LICENSE-2.0
    011
    012    Unless required by applicable law or agreed to in writing,
    013    software distributed under the License is distributed on an
    014    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    015    KIND, either express or implied.  See the License for the
    016    specific language governing permissions and limitations
    017    under the License.
    018 */
    019
    020package org.apache.wiki.event;
    021
    022/**
    023 * <p>
    024 * WorkflowEvent indicates that a state change to a Workflow: started, running, waiting, completed, aborted.
    025 * These correspond exactly to the states described in the {@link org.apache.wiki.workflow.Workflow}. All events
    026 * are logged with priority INFO.
    027 * </p>
    028 *
    029 * @since 2.3.79
    030 */
    031public final class WorkflowEvent extends WikiEvent {
    032
    033    private static final long serialVersionUID = 1L;
    034
    035    /** After Workflow instantiation. */
    036    public static final int CREATED = 0;
    037
    038    /**
    039     * After the Workflow has been instantiated, but before it has been started
    040     * using the {@link org.apache.wiki.workflow.Workflow#start()} method.
    041     */
    042    public static final int STARTED = 10;
    043
    044    /**
    045     * After the Workflow has been started (or re-started) using the
    046     * {@link org.apache.wiki.workflow.Workflow#start()} method,
    047     * but before it has finished processing all Steps.
    048     */
    049    public static final int RUNNING = 20;
    050
    051    /** When the Workflow has temporarily paused, for example because of a pending Decision. */
    052    public static final int WAITING = 30;
    053
    054    /** After the Workflow has finished processing all Steps, without errors. */
    055    public static final int COMPLETED = 40;
    056
    057    /** If a Step has elected to abort the Workflow. */
    058    public static final int ABORTED = 50;
    059
    060    /** When the workflow wishes to add a Decision to the DecisionQueue */
    061    public static final int DQ_ADDITION = 60;
    062
    063    /** When the workflow wishes to remove a Decision from the DecisionQueue */
    064    public static final int DQ_REMOVAL = 70;
    065
    066    /** When the decision queue decides the outcome of a Decision */
    067    public static final int DQ_DECIDE = 80;
    068
    069    /** When the decision queue reassigns a Decision */
    070    public static final int DQ_REASSIGN = 90;
    071
    072    /**
    073     * Constructs a new instance of this event type, which signals a security event has occurred.
    074     * The <code>source</code> parameter is required, and may not be <code>null</code>. When the
    075     * WikiSecurityEvent is constructed, the security logger {@link WikiSecurityEvent#log} is notified.
    076     *
    077     * @param src the source of the event, which can be any object: a wiki page, group or authentication/authentication/group manager.
    078     * @param type the type of event
    079     */
    080    public WorkflowEvent( final Object src, final int type ) {
    081        super( src, type );
    082    }
    083
    084    /**
    085     * Constructs a new instance of this event type, which signals a security event has occurred.
    086     * The <code>source</code> parameter is required, and may not be <code>null</code>. When the
    087     * WikiSecurityEvent is constructed, the security logger {@link WikiSecurityEvent#log} is notified.
    088     *
    089     * @param src the source of the event, which can be any object: a wiki page, group or authentication/authentication/group manager.
    090     * @param type the type of event
    091     */
    092    public WorkflowEvent( final Object src, final int type, final Object... args ) {
    093        super( src, type, args );
    094    }
    095
    096    /**
    097     * Prints a String (human-readable) representation of this object.
    098     *
    099     * @see java.lang.Object#toString()
    100     */
    101    public String toString() {
    102        final StringBuilder msg = new StringBuilder();
    103        msg.append( "WorkflowEvent." );
    104        msg.append( eventName( getType() ) );
    105        final Object obj = getSrc(); // cfr. https://forums.oracle.com/forums/thread.jspa?threadID=1184115
    106        msg.append( " [source=" ).append( obj.toString() );
    107        msg.append( "]" );
    108        return msg.toString();
    109    }
    110
    111    /**
    112     * Returns a textual representation of an event type.
    113     *
    114     * @param type the type
    115     * @return the string representation
    116     */
    117    public String eventName( final int type ) {
    118        switch( type ) {
    119            case CREATED:    return "CREATED";
    120            case ABORTED:    return "ABORTED";
    121            case COMPLETED:  return "COMPLETED";
    122            case RUNNING:    return "RUNNING";
    123            case STARTED:    return "STARTED";
    124            case WAITING:    return "WAITING";
    125            case DQ_REMOVAL: return "DQ_REMOVAL";
    126            default:         return super.eventName();
    127        }
    128    }
    129
    130}