001/*
002 * Copyright (c) 2007-2015 Concurrent, Inc. All Rights Reserved.
003 *
004 * Project and contact information: http://www.cascading.org/
005 *
006 * This file is part of the Cascading project.
007 *
008 * Licensed under the Apache License, Version 2.0 (the "License");
009 * you may not use this file except in compliance with the License.
010 * You may obtain a copy of the License at
011 *
012 *     http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing, software
015 * distributed under the License is distributed on an "AS IS" BASIS,
016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017 * See the License for the specific language governing permissions and
018 * limitations under the License.
019 */
020
021package cascading.flow;
022
023import cascading.management.CascadingServices;
024
025/**
026 * FlowSession implementations provide a call-back interface into the current flow management system, if any.
027 * <p/>
028 * A FlowSession is effectively unique to the current {@link Flow}, where a {@link FlowProcess} is unique
029 * to each underlying 'job'.
030 *
031 * @see FlowProcess
032 */
033public class FlowSession
034  {
035  /** Field NULL is a noop implementation of FlowSession. */
036  public static final FlowSession NULL = new FlowSession();
037
038  protected CascadingServices cascadingServices;
039
040  /** Field currentProcess */
041  private FlowProcess currentProcess = FlowProcess.NULL; // is set via accessor
042
043  public FlowSession()
044    {
045    }
046
047  public FlowSession( CascadingServices cascadingServices )
048    {
049    this.cascadingServices = cascadingServices;
050    }
051
052  /**
053   * Method setCurrentProcess sets the currentProcess of this FlowSession object.
054   *
055   * @param currentProcess the currentProcess of this FlowSession object.
056   */
057  public void setCurrentProcess( FlowProcess currentProcess )
058    {
059    this.currentProcess = currentProcess;
060    }
061
062  /**
063   * Method getCurrentProcess returns the currentProcess of this FlowSession object.
064   *
065   * @return the currentProcess (type FlowProcess) of this FlowSession object.
066   */
067  public FlowProcess getCurrentProcess()
068    {
069    return currentProcess;
070    }
071
072  public CascadingServices getCascadingServices()
073    {
074    return cascadingServices;
075    }
076
077  /**
078   * Method getID returns the parent {@link Flow} ID value.
079   *
080   * @return of type String
081   */
082  public String getID()
083    {
084    return currentProcess.getStringProperty( Flow.CASCADING_FLOW_ID );
085    }
086  }