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.flow.planner;
022    
023    import cascading.flow.FlowElement;
024    import cascading.flow.FlowException;
025    import cascading.pipe.Pipe;
026    import cascading.tap.Tap;
027    import cascading.util.TraceUtil;
028    
029    /**
030     * Class ElementGraphException is thrown during rendering of a pipe assembly to
031     * the Cascading internal "graph" representation.
032     */
033    public class ElementGraphException extends FlowException
034      {
035      /** Field flowElement */
036      private FlowElement flowElement;
037    
038      /** Constructor ElementGraphException creates a new ElementGraphException instance. */
039      public ElementGraphException()
040        {
041        }
042    
043      public ElementGraphException( Pipe pipe, String message )
044        {
045        this( (FlowElement) pipe, TraceUtil.formatTrace( pipe, message ) );
046        }
047    
048      public ElementGraphException( Tap tap, String message )
049        {
050        this( (FlowElement) tap, TraceUtil.formatTrace( tap, message ) );
051        }
052    
053      /**
054       * Constructor ElementGraphException creates a new ElementGraphException instance.
055       *
056       * @param flowElement of type FlowElement
057       * @param message     of type String
058       */
059      public ElementGraphException( FlowElement flowElement, String message )
060        {
061        super( message );
062        this.flowElement = flowElement;
063        }
064    
065      /**
066       * Constructor ElementGraphException creates a new ElementGraphException instance.
067       *
068       * @param flowElement of type FlowElement
069       * @param message     of type String
070       * @param throwable   of type Throwable
071       */
072      public ElementGraphException( FlowElement flowElement, String message, Throwable throwable )
073        {
074        super( message, throwable );
075        this.flowElement = flowElement;
076        }
077    
078      /**
079       * Constructor ElementGraphException creates a new ElementGraphException instance.
080       *
081       * @param string of type String
082       */
083      public ElementGraphException( String string )
084        {
085        super( string );
086        }
087    
088      /**
089       * Constructor ElementGraphException creates a new ElementGraphException instance.
090       *
091       * @param string    of type String
092       * @param throwable of type Throwable
093       */
094      public ElementGraphException( String string, Throwable throwable )
095        {
096        super( string, throwable );
097        }
098    
099      /**
100       * Constructor ElementGraphException creates a new ElementGraphException instance.
101       *
102       * @param throwable of type Throwable
103       */
104      public ElementGraphException( Throwable throwable )
105        {
106        super( throwable );
107        }
108    
109      /**
110       * Method getFlowElement returns the flowElement of this ElementGraphException object.
111       *
112       * @return the flowElement (type FlowElement) of this ElementGraphException object.
113       */
114      public FlowElement getFlowElement()
115        {
116        return flowElement;
117        }
118    
119      Pipe getPipe()
120        {
121        if( flowElement instanceof Pipe )
122          return (Pipe) flowElement;
123    
124        return null;
125        }
126      }