/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.falcon.client;

import com.sun.jersey.api.client.ClientResponse;
import org.apache.falcon.resource.APIResult;

import java.io.IOException;
import java.io.InputStream;

/**
 * Exception thrown by FalconClient.
 */
public class FalconCLIException extends Exception {

    private static final int MB = 1024 * 1024;

    public FalconCLIException(String msg) {
        super(msg);
    }

    public FalconCLIException(Throwable e) {
        super(e);
    }

    public FalconCLIException(String msg, Throwable throwable) {
        super(msg, throwable);
    }

    public static FalconCLIException fromReponse(ClientResponse clientResponse) {
        ClientResponse.Status status = clientResponse.getClientResponseStatus();
        String statusValue = status.toString();
        String message = "";
        if (status == ClientResponse.Status.BAD_REQUEST) {
            clientResponse.bufferEntity();
            InputStream in = clientResponse.getEntityInputStream();
            try {
                in.mark(MB);
                message = clientResponse.getEntity(APIResult.class).getMessage();
            } catch (Throwable th) {
                byte[] data = new byte[MB];
                try {
                    in.reset();
                    int len = in.read(data);
                    message = new String(data, 0, len);
                } catch (IOException e) {
                    message = e.getMessage();
                }
            }
        }
        return new FalconCLIException(statusValue + ";" + message);
    }
}

@@ -1622,71 +1622,8 @@
 %22%22;%0A
-        if (status == ClientResponse.Status.BAD_REQUEST) %7B%0A    
     
@@ -1665,20 +1665,16 @@
         
-  
-  
 InputStr
@@ -1721,36 +1721,32 @@
 ream();%0A        
-    
 try %7B%0A          
@@ -1747,20 +1747,16 @@
         
-  
-  
 in.mark(
@@ -1760,20 +1760,16 @@
 rk(MB);%0A
-    
         
@@ -1838,36 +1838,32 @@
 sage();%0A        
-  
-  
 %7D catch (Throwab
@@ -1867,28 +1867,24 @@
 wable th) %7B%0A
-    
             
@@ -1919,38 +1919,30 @@
             
-  
-  
 try %7B%0A
-    
             
@@ -1973,20 +1973,16 @@
         
-  
-  
 int len 
@@ -1998,20 +1998,16 @@
 (data);%0A
-    
         
@@ -2058,28 +2058,24 @@
             
-  
-  
 %7D catch (IOE
@@ -2096,36 +2096,32 @@
                 
-    
 message = e.getM
@@ -2134,26 +2134,8 @@
 ();%0A
-                %7D%0A
     

FALCON-1969 Provide server-side error details on CLI, if any