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, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.oozie.command.coord;
019    
020    import java.util.Date;
021    
022    import org.apache.oozie.CoordinatorActionBean;
023    import org.apache.oozie.CoordinatorJobBean;
024    import org.apache.oozie.AppType;
025    import org.apache.oozie.command.XCommand;
026    import org.apache.oozie.coord.CoordELFunctions;
027    import org.apache.oozie.event.CoordinatorActionEvent;
028    import org.apache.oozie.event.CoordinatorJobEvent;
029    
030    /**
031     * Abstract coordinator command class derived from XCommand
032     */
033    public abstract class CoordinatorXCommand<T> extends XCommand<T> {
034    
035        /**
036         * Base class constructor for coordinator commands.
037         *
038         * @param name command name
039         * @param type command type
040         * @param priority command priority
041         */
042        public CoordinatorXCommand(String name, String type, int priority) {
043            super(name, type, priority);
044        }
045    
046        /**
047         * Base class constructor for coordinator commands.
048         *
049         * @param name command name
050         * @param type command type
051         * @param priority command priority
052         * @param dryrun true if rerun is enabled for command
053         */
054        public CoordinatorXCommand(String name, String type, int priority, boolean dryrun) {
055            super(name, type, priority, dryrun);
056        }
057    
058        public static void generateEvent(CoordinatorActionBean coordAction, String user, String appName, Date startTime) {
059            if (eventService.isSupportedApptype(AppType.COORDINATOR_ACTION.name())) {
060                String missDep = coordAction.getMissingDependencies();
061                if (missDep != null && missDep.length() > 0) {
062                    missDep = missDep.split(CoordELFunctions.INSTANCE_SEPARATOR)[0];
063                }
064                String pushMissDep = coordAction.getPushMissingDependencies();
065                if (pushMissDep != null && pushMissDep.length() > 0) {
066                    pushMissDep = pushMissDep.split(CoordELFunctions.INSTANCE_SEPARATOR)[0];
067                }
068                String deps = missDep == null ? (pushMissDep == null ? null : pushMissDep) : (pushMissDep == null ? missDep
069                        : missDep + CoordELFunctions.INSTANCE_SEPARATOR + pushMissDep);
070                CoordinatorActionEvent event = new CoordinatorActionEvent(coordAction.getId(), coordAction.getJobId(),
071                        coordAction.getStatus(), user, appName, coordAction.getNominalTime(), startTime,
072                        deps);
073                event.setErrorCode(coordAction.getErrorCode());
074                event.setErrorMessage(coordAction.getErrorMessage());
075                eventService.queueEvent(event);
076            }
077        }
078    
079        protected void generateEvent(CoordinatorJobBean coordJob) {
080            if (eventService.isSupportedApptype(AppType.COORDINATOR_JOB.name())) {
081                CoordinatorJobEvent event = new CoordinatorJobEvent(coordJob.getId(), coordJob.getBundleId(),
082                        coordJob.getStatus(), coordJob.getUser(), coordJob.getAppName(), coordJob.getStartTime(),
083                        coordJob.getEndTime());
084                eventService.queueEvent(event);
085            }
086        }
087    
088    }