Java tutorial
/******************************************************************************* * Copyright 2017 Capital One Services, LLC and Bitwise, Inc. * Licensed 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 hydrograph.ui.communication.debugservice.method; import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.lang.StringUtils; import org.eclipse.ui.PlatformUI; import org.slf4j.Logger; import com.google.gson.Gson; import hydrograph.ui.common.datastructures.dataviewer.JobDetails; import hydrograph.ui.common.util.PreferenceConstants; import hydrograph.ui.communication.debugservice.constants.DebugServiceMethods; import hydrograph.ui.communication.debugservice.constants.DebugServicePostParameters; import hydrograph.ui.datastructures.metadata.MetaDataDetails; import hydrograph.ui.logging.factory.LogFactory; /** * The class Provider * Provides handle for Debug service post methods * * @author Bitwise * */ public class Provider { private static String POST_PROTOCOL = "http"; public static Provider INSTANCE = new Provider(); private static Logger LOGGER = LogFactory.INSTANCE.getLogger(Provider.class); private Provider() { } /** * * Get post method to delete csv debug file * * @param jobDetails * @return {@link PostMethod} * @throws NumberFormatException * @throws MalformedURLException */ public PostMethod getDeleteDebugFileMethod(JobDetails jobDetails) throws NumberFormatException, MalformedURLException { URL url = new URL(POST_PROTOCOL, getHost(jobDetails), getPortNo(jobDetails), DebugServiceMethods.DELETE_DEBUG_CSV_FILE); PostMethod postMethod = new PostMethod(url.toString()); postMethod.addParameter(DebugServicePostParameters.JOB_ID, jobDetails.getUniqueJobID()); postMethod.addParameter(DebugServicePostParameters.COMPONENT_ID, jobDetails.getComponentID()); postMethod.addParameter(DebugServicePostParameters.SOCKET_ID, jobDetails.getComponentSocketID()); LOGGER.debug("Calling debug service for deleting csv debug file url :: " + url); return postMethod; } private Integer getPortNo(JobDetails jobDetails) { String localPortNo = PlatformUI.getPreferenceStore().getString(PreferenceConstants.LOCAL_PORT_NO); if (StringUtils.isBlank(localPortNo)) { localPortNo = PreferenceConstants.DEFAULT_PORT_NO; } String remotePortNo = PlatformUI.getPreferenceStore().getString(PreferenceConstants.REMOTE_PORT_NO); if (StringUtils.isBlank(remotePortNo)) { remotePortNo = PreferenceConstants.DEFAULT_PORT_NO; } if (jobDetails.isRemote() && StringUtils.isNotBlank(remotePortNo)) { return Integer.parseInt(remotePortNo); } else return Integer.parseInt(localPortNo); } private String getHost(JobDetails jobDetails) { String remoteHost = PlatformUI.getPreferenceStore().getString(PreferenceConstants.REMOTE_HOST); if (jobDetails.isRemote() && PlatformUI.getPreferenceStore().getBoolean(PreferenceConstants.USE_REMOTE_CONFIGURATION)) { return remoteHost; } return jobDetails.getHost(); } /** * * Get post method to get csv debug file * * @param jobDetails * @param fileSize * @return {@link PostMethod} * @throws NumberFormatException * @throws MalformedURLException */ public PostMethod getDebugFileMethod(JobDetails jobDetails, String fileSize) throws NumberFormatException, MalformedURLException { URL url = new URL(POST_PROTOCOL, getHost(jobDetails), getPortNo(jobDetails), DebugServiceMethods.GET_DEBUG_FILE_PATH); PostMethod postMethod = new PostMethod(url.toString()); postMethod.addParameter(DebugServicePostParameters.JOB_ID, jobDetails.getUniqueJobID()); postMethod.addParameter(DebugServicePostParameters.COMPONENT_ID, jobDetails.getComponentID()); postMethod.addParameter(DebugServicePostParameters.SOCKET_ID, jobDetails.getComponentSocketID()); postMethod.addParameter(DebugServicePostParameters.BASE_PATH, jobDetails.getBasepath()); postMethod.addParameter(DebugServicePostParameters.USER_ID, jobDetails.getUsername()); postMethod.addParameter(DebugServicePostParameters.DEBUG_SERVICE_PWD, jobDetails.getPassword()); postMethod.addParameter(DebugServicePostParameters.FILE_SIZE, fileSize); postMethod.addParameter(DebugServicePostParameters.HOST_NAME, getHost(jobDetails)); LOGGER.debug("Calling debug service to get csv debug file from url :: " + url); return postMethod; } /** * * Get post method to delete basepath debug files * * @param host * @param port * @param unique job ID * @param base path * @param User * @param password * @param isRemote * @return {@link PostMethod} * @throws NumberFormatException * @throws MalformedURLException */ public PostMethod getDeleteBasePathFileMethod(String host, String port, String uniqJobID, String basePath, String user, String password, boolean isRemote) throws NumberFormatException, MalformedURLException { if (isRemote) { port = PlatformUI.getPreferenceStore().getString(PreferenceConstants.REMOTE_PORT_NO); if (StringUtils.isBlank(port)) { port = PreferenceConstants.DEFAULT_PORT_NO; } if (PlatformUI.getPreferenceStore().getBoolean(PreferenceConstants.USE_REMOTE_CONFIGURATION)) { host = PlatformUI.getPreferenceStore().getString(PreferenceConstants.REMOTE_HOST); } } URL url = new URL(POST_PROTOCOL, host, Integer.valueOf(port), DebugServiceMethods.DELETE_BASEPATH_FILES); PostMethod postMethod = new PostMethod(url.toString()); postMethod.addParameter(DebugServicePostParameters.JOB_ID, uniqJobID); postMethod.addParameter(DebugServicePostParameters.BASE_PATH, basePath); postMethod.addParameter(DebugServicePostParameters.USER_ID, user); postMethod.addParameter(DebugServicePostParameters.DEBUG_SERVICE_PWD, password); LOGGER.debug("Calling debug service to delete basepath debug files through url :: " + url); return postMethod; } /** * Method to get file based on the filter condition * @param jsonString Filter condition string * @param jobDetails * @return * @throws NumberFormatException * @throws MalformedURLException */ public PostMethod getFilteredFileMethod(String jsonString, JobDetails jobDetails) throws NumberFormatException, MalformedURLException { URL url = new URL(POST_PROTOCOL, getHost(jobDetails), getPortNo(jobDetails), DebugServiceMethods.GET_FILTERED_FILE_PATH); PostMethod postMethod = new PostMethod(url.toString()); postMethod.addParameter(DebugServicePostParameters.FILTER_JSON_OBJECT, jsonString); LOGGER.debug("Calling debug service to get file based on the filter condition through url :: " + url); return postMethod; } /** * Method to get hive table details * @param jsonString Db name and table details * @param jobDetails * @param userCredentials * @return * @throws NumberFormatException * @throws MalformedURLException */ public PostMethod readMetaDataMethod(MetaDataDetails metaDataDetails, String host, String port) throws NumberFormatException, MalformedURLException { URL url = new URL(POST_PROTOCOL, host, Integer.valueOf(port), DebugServiceMethods.READ_METASTORE); PostMethod postMethod = new PostMethod(url.toString()); Gson gson = new Gson(); postMethod.addParameter(DebugServicePostParameters.REQUEST_PARAMETERS, gson.toJson(metaDataDetails)); LOGGER.debug("Calling Metadata service to get Metadata details through url :: " + url); return postMethod; } public PostMethod getConnectionStatus(MetaDataDetails metaDataDetails, String host, String port) throws NumberFormatException, MalformedURLException { URL url = new URL(POST_PROTOCOL, host, Integer.valueOf(port), DebugServiceMethods.TEST_CONNECTION); PostMethod postMethod = new PostMethod(url.toString()); Gson gson = new Gson(); postMethod.addParameter(DebugServicePostParameters.REQUEST_PARAMETERS, gson.toJson(metaDataDetails)); LOGGER.debug("Calling service to test connection for database components through url :: " + url); return postMethod; } }