// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/CAppMgtServiceStub.java
// public interface CAppMgtServiceStub {
// 
//     @RequestLine("GET /management/login")
//     @Headers("accept: application/json; charset=utf-8")
//     Response doAuthenticate() throws CAppMgtServiceStubException;
// 
//     @RequestLine("POST /management/applications")
//     @Headers("Content-Type: multipart/form-data; charset=utf-8")
//     Response deployCApp(@Param("file") File capp) throws CAppMgtServiceStubException;
// 
//     @RequestLine("DELETE /management/applications/{name}")
//     @Headers("Content-Type: application/json; charset=utf-8")
//     Response unDeployCApp(@Param("name") String cAppName) throws CAppMgtServiceStubException;
// }
// 
// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/impl/HTTPClientBuilderServiceImpl.java
// public class HTTPClientBuilderServiceImpl implements HTTPClientBuilderService {
// 
//     public Client newDefaultClientInstance() {
//         return new Client.Default(null, null);
//     }
// 
//     @Override
//     public <T> T buildWithBasicAuth(String username, String password, int connectTimeoutMillis, int readTimeoutMillis,
//                        Class<T> target, String url) {
//         return Feign.builder().requestInterceptor(new BasicAuthRequestInterceptor(username, password))
//                 .encoder(new Encoder.Default()).decoder(new Decoder.Default())
//                 .options(new Request.Options(connectTimeoutMillis, readTimeoutMillis))
//                 .client(newDefaultClientInstance())
//                 .target(target, url);
//     }
// 
//     @Override
//     public <T> T buildWithJWTAndFormEncoder(String accessToken, int connectTimeoutMillis,
//                                       int readTimeoutMillis, Class<T> target, String url) {
//         return Feign.builder().requestInterceptor(new JWTAuthRequestInterceptor(accessToken))
//                 .encoder(new FormEncoder())
//                 .decoder(new Decoder.Default())
//                 .options(new Request.Options(connectTimeoutMillis, readTimeoutMillis))
//                 .client(newDefaultClientInstance())
//                 .target(target, url);
//     }
// 
//     @Override
//     public <T> T buildWithJWT(String accessToken, int connectTimeoutMillis, int readTimeoutMillis, Class<T> target,
//                               String url) {
//         return Feign.builder().requestInterceptor(new JWTAuthRequestInterceptor(accessToken))
//                 .encoder(new Encoder.Default()).decoder(new Decoder.Default())
//                 .options(new Request.Options(connectTimeoutMillis, readTimeoutMillis))
//                 .client(newDefaultClientInstance())
//                 .target(target, url);
//     }
// 
// }
// 
// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/util/Constants.java
// public static final int CLIENT_CONNECTION_TIMEOUT = 5000;
// 
// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/util/Constants.java
// public static final int CLIENT_READ_TIMEOUT = 5000;


import static org.wso2.maven.car.artifact.util.Constants.CLIENT_CONNECTION_TIMEOUT;
import static org.wso2.maven.car.artifact.util.Constants.CLIENT_READ_TIMEOUT;
import org.wso2.maven.car.artifact.CAppMgtServiceStub;
import org.wso2.maven.car.artifact.impl.HTTPClientBuilderServiceImpl;
/*
 *
 *  Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 *  WSO2 Inc. 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.wso2.maven.car.artifact.util;



public class CAppMgtHandlerFactory {

    private static HTTPClientBuilderServiceImpl instance = new HTTPClientBuilderServiceImpl();

    private CAppMgtHandlerFactory(){}

    /**
     * Returns an HTTPS client for communicating with the MI server with basic auth.
     *
     * @param serverUrl HTTPS URL of the MI server.
     * @param username Username.
     * @param password Password.
     * @return ErrorHandlerServiceStub instance which functions as the HTTPS client.
     */
// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/CAppMgtServiceStub.java
// public interface CAppMgtServiceStub {
// 
//     @RequestLine("GET /management/login")
//     @Headers("accept: application/json; charset=utf-8")
//     Response doAuthenticate() throws CAppMgtServiceStubException;
// 
//     @RequestLine("POST /management/applications")
//     @Headers("Content-Type: multipart/form-data; charset=utf-8")
//     Response deployCApp(@Param("file") File capp) throws CAppMgtServiceStubException;
// 
//     @RequestLine("DELETE /management/applications/{name}")
//     @Headers("Content-Type: application/json; charset=utf-8")
//     Response unDeployCApp(@Param("name") String cAppName) throws CAppMgtServiceStubException;
// }
// 
// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/impl/HTTPClientBuilderServiceImpl.java
// public class HTTPClientBuilderServiceImpl implements HTTPClientBuilderService {
// 
//     public Client newDefaultClientInstance() {
//         return new Client.Default(null, null);
//     }
// 
//     @Override
//     public <T> T buildWithBasicAuth(String username, String password, int connectTimeoutMillis, int readTimeoutMillis,
//                        Class<T> target, String url) {
//         return Feign.builder().requestInterceptor(new BasicAuthRequestInterceptor(username, password))
//                 .encoder(new Encoder.Default()).decoder(new Decoder.Default())
//                 .options(new Request.Options(connectTimeoutMillis, readTimeoutMillis))
//                 .client(newDefaultClientInstance())
//                 .target(target, url);
//     }
// 
//     @Override
//     public <T> T buildWithJWTAndFormEncoder(String accessToken, int connectTimeoutMillis,
//                                       int readTimeoutMillis, Class<T> target, String url) {
//         return Feign.builder().requestInterceptor(new JWTAuthRequestInterceptor(accessToken))
//                 .encoder(new FormEncoder())
//                 .decoder(new Decoder.Default())
//                 .options(new Request.Options(connectTimeoutMillis, readTimeoutMillis))
//                 .client(newDefaultClientInstance())
//                 .target(target, url);
//     }
// 
//     @Override
//     public <T> T buildWithJWT(String accessToken, int connectTimeoutMillis, int readTimeoutMillis, Class<T> target,
//                               String url) {
//         return Feign.builder().requestInterceptor(new JWTAuthRequestInterceptor(accessToken))
//                 .encoder(new Encoder.Default()).decoder(new Decoder.Default())
//                 .options(new Request.Options(connectTimeoutMillis, readTimeoutMillis))
//                 .client(newDefaultClientInstance())
//                 .target(target, url);
//     }
// 
// }
// 
// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/util/Constants.java
// public static final int CLIENT_CONNECTION_TIMEOUT = 5000;
// 
// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/util/Constants.java
// public static final int CLIENT_READ_TIMEOUT = 5000;


// Path: maven-car-deploy-plugin/src/main/java/org/wso2/maven/car/artifact/util/CAppMgtHandlerFactory.java
import static org.wso2.maven.car.artifact.util.Constants.CLIENT_CONNECTION_TIMEOUT;
import static org.wso2.maven.car.artifact.util.Constants.CLIENT_READ_TIMEOUT;
import org.wso2.maven.car.artifact.CAppMgtServiceStub;
import org.wso2.maven.car.artifact.impl.HTTPClientBuilderServiceImpl;

/*
 *
 *  Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 *  WSO2 Inc. 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.wso2.maven.car.artifact.util;



public class CAppMgtHandlerFactory {

    private static HTTPClientBuilderServiceImpl instance = new HTTPClientBuilderServiceImpl();

    private CAppMgtHandlerFactory(){}

    /**
     * Returns an HTTPS client for communicating with the MI server with basic auth.
     *
     * @param serverUrl HTTPS URL of the MI server.
     * @param username Username.
     * @param password Password.
     * @return ErrorHandlerServiceStub instance which functions as the HTTPS client.
     */
    public static CAppMgtServiceStub getCAppMgtHttpsClient(String serverUrl, String username,