MGG ( Microbetag Gui )

Logo

MGG Progress Documentation

View the Project on GitHub ermismd/MGG

WEEK 9 & WEEK 10

  1. SendDataToServerTask: Created class for the server interaction and data exchange.
  2. SendDataToServerTaskFactory: A factory class for instantiation and management of SendDataToServerTask.

SendDataToServerTask

	 
		/**
		 * This class represents a task for sending data to a server.
		 * The task sends a JSON array as string to microbetag server URL and retrieves the server's response.
		 */
			
		public class SendDataToServerTask extends AbstractTask {
		 
		   private  String serverResponse; // Stores the server response
		   private final JSONObject jsonObject; // The JSON array to send to the server
		   private final MGGManager mggManager;  // The MGGManager instance for retrieving the JSON array
		    
		      
		    	    /**
			     * Constructs a new SendDataToServerTask object.
			     *
			     * @param jsonArray   The JSON array to send to the server.
			     * @param mggManager  The MGGManager instance for retrieving the JSON array.
			     */
			    
			    public SendDataToServerTask( JSONObject jsonObject, MGGManager mggManager) {
			    	this.mggManager=mggManager;
			    	this.jsonObject = mggManager.getJsonObject();
		    	
		    }
		
		    /**
		     * Runs the task to send data to the server.
		     *
		     * @param taskMonitor The task monitor to display progress and status messages.
		     */
		    
		    @Override
		    public void run(TaskMonitor taskMonitor) {
		    	
		    	
		    		
		        taskMonitor.setTitle("Sending Data to Server");
		        taskMonitor.setStatusMessage("Processing Data on Server( May take some time... )");
		        
		       
		        	
		        RequestConfig config = RequestConfig.custom()
		        	    .setConnectTimeout(600 * 1000)  // time to establish the connection with the remote host
		        	    .setSocketTimeout(600 * 1000)  // time waiting for data – after the connection was established; maximum time of inactivity between two data packets
		        	    .setConnectionRequestTimeout(600 * 1000) // time to wait for a connection from the connection manager/pool
		        	    .build();
		
		        
		              CloseableHttpClient httpClient = HttpClients.custom()
		                      .setDefaultRequestConfig(config)
		                      .build() ;
		
		              
		               try {
		                      String jsonQuery = jsonObject.toJSONString();
		                      String serverURL = "https://msysbio.gbiomed.kuleuven.be/upload-abundance-table-dev";
		
		                      HttpPost httpPost = new HttpPost(serverURL);
		                      httpPost.setConfig(config);
		                      
		                      StringEntity entity = new StringEntity(jsonQuery);
		                      
		                      httpPost.setEntity(entity);
		                      httpPost.setHeader("Accept", "application/json");
		                      httpPost.setHeader("Content-type", "application/json");
		
		                      try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
		                          int statusCode = response.getStatusLine().getStatusCode();
		
		                          if (statusCode != 200 && statusCode != 202) {
		                              taskMonitor.showMessage(TaskMonitor.Level.ERROR, "Got " + statusCode + " code from server");
		                              return;
		                          }
		
		                          HttpEntity responseEntity = response.getEntity();
		                          JSONObject jsonResponse = (JSONObject) new JSONParser().parse(new InputStreamReader(responseEntity.getContent()));
		                          
		                          taskMonitor.setStatusMessage("Processing server response");
		                          taskMonitor.setStatusMessage("Data sent to server and retrieved successfully!");
		                       // Here's the new line where you set the JSON response as a status message
		                          taskMonitor.setStatusMessage("Server Response: " + jsonResponse.toJSONString());
		                          mggManager.setServerResponse(jsonResponse);
		
		                      
		                      } catch (Exception e) {
		                    	 
		                          taskMonitor.showMessage(TaskMonitor.Level.ERROR, "Error when waiting for the response: " + e.getMessage());
		                          e.printStackTrace(System.out);
		                      }
		                      
		              } catch (Exception e) {
		                  taskMonitor.showMessage(TaskMonitor.Level.ERROR, "Error while setting up the request or processing the response: " + e.getMessage());
		                  e.printStackTrace(System.out);
		              }
		    			finally {
		    					try {
		    							httpClient.close();
		        } catch (IOException e) {
		            e.printStackTrace(System.out);
		        }
		                  taskMonitor.setStatusMessage("Data sent to server successfully!");
		              
		    			
		    	}
		          
		    }}
		
		    
				/*private void viewData(JSONObject jsonResponse) {
					  JSONViewerPanel viewerPanel = new JSONViewerPanel(jsonResponse);
				  
		    
		    JFrame frame = new JFrame("JSON Viewer");
		    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		    frame.getContentPane().add(viewerPanel);
		    frame.pack();
		    frame.setVisible(true);
		    */
		    		

   

SendDataToServerTaskFactory

 
		
	
			public class SendDataToServerTaskFactory implements TaskFactory {
			    
			    private final MGGManager mggManager;
			    private JSONObject jsonObject;
			       
			    public SendDataToServerTaskFactory(JSONObject jsonObject,MGGManager mggManager) {
			    	this.jsonObject = jsonObject;
			        this.mggManager=mggManager;
			    }
			
			    @Override
			    public TaskIterator createTaskIterator() {
			        return new TaskIterator(2,new SendDataToServerTask(jsonObject, mggManager),new CreateNetworkTask(mggManager));
			               
			    }
			
			    @Override
			    public boolean isReady() {
			        return true;
			    }
			}

     


back