001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel.bam;
018    
019    import org.apache.camel.bam.model.ActivityDefinition;
020    import org.apache.camel.bam.model.ActivityState;
021    import org.apache.commons.logging.Log;
022    import org.apache.commons.logging.LogFactory;
023    
024    import java.util.ArrayList;
025    import java.util.List;
026    
027    /**
028     * Represents a activity which is typically a system or could be an endpoint
029     *
030     * @version $Revision: $
031     */
032    public class ActivityRules {
033        private static final transient Log log = LogFactory.getLog(ActivityRules.class);
034        private int expectedMessages = 1;
035        private ActivityDefinition activity;
036        private ProcessRules process;
037        private List<TemporalRule> rules = new ArrayList<TemporalRule>();
038        private String activityName;
039    
040        public ActivityRules(ProcessRules process) {
041            this.process = process;
042            process.getActivities().add(this);
043        }
044    
045        public ActivityDefinition getActivity() {
046            return activity;
047        }
048    
049        public void setActivity(ActivityDefinition activity) {
050            this.activity = activity;
051        }
052    
053        public int getExpectedMessages() {
054            return expectedMessages;
055        }
056    
057        public void setExpectedMessages(int expectedMessages) {
058            this.expectedMessages = expectedMessages;
059        }
060    
061        public ProcessRules getProcess() {
062            return process;
063        }
064    
065        /**
066         * Perform any assertions after the state has been updated
067         */
068        public void processExchange(ActivityState activityState, ProcessContext context) {
069    
070            log.info("Received state: " + activityState
071                    + " message count " + activityState.getReceivedMessageCount()
072                    + " started: " + activityState.getTimeStarted()
073                    + " completed: " + activityState.getTimeCompleted());
074    
075    /*
076            process.fireRules(activityState, context);
077    
078            for (TemporalRule rule : rules) {
079                rule.evaluate(context, activityState);
080            }
081    */
082        }
083    
084        public void setActivityName(String activityName) {
085            this.activityName = activityName;
086        }
087    
088        public void addRule(TemporalRule rule) {
089            rules.add(rule);
090        }
091    
092        /**
093         * Handles overdue activities
094         */
095        public void processExpired(ActivityState activityState) throws Exception {
096            for (TemporalRule rule : rules) {
097                rule.processExpired(activityState);
098            }
099        }
100    }