    001    /*
    002     * Copyright (c) 2007-2014 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
    021    package cascading.operation.state;
    022
    023    import java.beans.ConstructorProperties;
    024
    025    import cascading.flow.FlowProcess;
    026    import cascading.operation.BaseOperation;
    027    import cascading.operation.Filter;
    028    import cascading.operation.FilterCall;
    029    import cascading.operation.OperationCall;
    030
    031    /**
    032     * Class Status is a {@link cascading.operation.Filter} that sets the current {@link FlowProcess} 'status' on
    033     * the first {@link cascading.tuple.Tuple} it sees.
    034     * <p/>
    035     * Internally, the {@link #isRemove(cascading.flow.FlowProcess, cascading.operation.FilterCall)} method calls
    036     * {@link cascading.flow.FlowProcess#setStatus(String)}.
    037     * <p/>
    038     * No {@link cascading.tuple.Tuple} instances are ever discarded.
    039     *
    040     * @see FlowProcess
    041     * @see Filter
    042     */
    043    public class Status extends BaseOperation<Boolean> implements Filter<Boolean>
    044      {
    045      /** Field status */
    046      private final String status;
    047
    048      /**
    049       * Constructor Status creates a new Status instance.
    050       *
    051       * @param status of type String
    052       */
    053      @ConstructorProperties({"status"})
    054      public Status( String status )
    055        {
    056        this.status = status;
    057        }
    058
    059      public String getStatus()
    060        {
    061        return status;
    062        }
    063
    064      @Override
    065      public void prepare( FlowProcess flowProcess, OperationCall<Boolean> operationCall )
    066        {
    067        operationCall.setContext( false );
    068        }
    069
    070      @Override
    071      public boolean isRemove( FlowProcess flowProcess, FilterCall<Boolean> filterCall )
    072        {
    073        if( !filterCall.getContext() )
    074          {
    075          filterCall.setContext( true );
    076          flowProcess.setStatus( status );
    077          }
    078
    079        return false;
    080        }
    081
    082      @Override
    083      public boolean equals( Object object )
    084        {
    085        if( this == object )
    086          return true;
    087        if( !( object instanceof Status ) )
    088          return false;
    089        if( !super.equals( object ) )
    090          return false;
    091
    092        Status status1 = (Status) object;
    093
    094        if( status != null ? !status.equals( status1.status ) : status1.status != null )
    095          return false;
    096
    097        return true;
    098        }
    099
    100      @Override
    101      public int hashCode()
    102        {
    103        int result = super.hashCode();
    104        result = 31 * result + ( status != null ? status.hashCode() : 0 );
    105        return result;
    106        }
    107      }