docs: @SuppressWarnings({"checkstyle:magicnumber", "checkstyle:npathcomplexity", "static-method"})
  	protected IStatus submit(Charset charset, String title, String body, String login, String password, IProgressMonitor progress) throws Exception {
  		final SubMonitor subMonitor = SubMonitor.convert(progress, 10);
  
  		subMonitor.setTaskName(Messages.SubmitEclipseLogWizard_15);
  		final Gson gson = new GsonBuilder().create();
  		final String json = gson.toJson(new GithubIssueJson(title, body));
  		subMonitor.setWorkRemaining(9);
  
  		subMonitor.setTaskName(Messages.SubmitEclipseLogWizard_2);
  		final ServiceTracker<IProxyService, IProxyService> proxyTracker = new ServiceTracker<>(
  				SARLEclipsePlugin.getDefault().getBundle().getBundleContext(),
  				IProxyService.class,
  				null);
  		proxyTracker.open();
  		if (subMonitor.isCanceled()) {
  			return Status.CANCEL_STATUS;
  		}
  		final URL url;
  		try {
  			final URI uri = new URI(GITHUB_URL);
  
  			final IProxyData[] proxyDataForHost = proxyTracker.getService().select(uri);
  			for (final IProxyData data : proxyDataForHost) {
  				if (data.getHost() != null) {
  					System.setProperty("http.proxySet", "true"); //$NON-NLS-1$ //$NON-NLS-2$
  					System.setProperty("http.proxyHost", data.getHost()); //$NON-NLS-1$
  				}
  				if (data.getHost() != null) {
  					System.setProperty("http.proxyPort", String.valueOf(data //$NON-NLS-1$
  							.getPort()));
  				}
  				if (subMonitor.isCanceled()) {
  					return Status.CANCEL_STATUS;
  				}
  			}
  
  			url = uri.toURL();
  		} finally {
  			proxyTracker.close();
  		}
  		subMonitor.setWorkRemaining(8);
  		if (subMonitor.isCanceled()) {
  			return Status.CANCEL_STATUS;
  		}
  
  		subMonitor.setTaskName(Messages.SubmitEclipseLogWizard_3);
  		final HttpURLConnection con = (HttpURLConnection) url.openConnection();
  		subMonitor.setWorkRemaining(7);
  		if (subMonitor.isCanceled()) {
  			return Status.CANCEL_STATUS;
  		}
  
  		//add request header
  		subMonitor.setTaskName(Messages.SubmitEclipseLogWizard_4);
  		con.setRequestMethod("POST"); //$NON-NLS-1$
  		con.setRequestProperty("User-Agent", "SARL IDE"); //$NON-NLS-1$ //$NON-NLS-2$
  		// Auth
  		final String auth = Base64.getEncoder().encodeToString((login + ":" + password).getBytes()); //$NON-NLS-1$
  		con.setRequestProperty("Authorization", "Basic " + auth); //$NON-NLS-1$ //$NON-NLS-2$
  
  		con.setDoOutput(true);
  		con.setDoInput(true);
  		subMonitor.setWorkRemaining(6);
  		if (subMonitor.isCanceled()) {
  			return Status.CANCEL_STATUS;
  		}
  
  		// Send post request
  		try (DataOutputStream writer = new DataOutputStream(con.getOutputStream())) {
  			writer.writeBytes(json);
  			writer.flush();
  		}
  		subMonitor.setWorkRemaining(3);
  		if (subMonitor.isCanceled()) {
  			return Status.CANCEL_STATUS;
  		}
  
  		//final int responseCode = con.getResponseCode();
  		subMonitor.setTaskName(Messages.SubmitEclipseLogWizard_6);
  		final int responseCode = con.getResponseCode();
  		final StringBuffer response = new StringBuffer();
  		try (BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
  			String inputLine;
  			while ((inputLine = reader.readLine()) != null) {
  				response.append(inputLine);
  				if (subMonitor.isCanceled()) {
  					return Status.CANCEL_STATUS;
  				}
  			}
  		}
  		subMonitor.setWorkRemaining(0);
  		if (subMonitor.isCanceled()) {
  			return Status.CANCEL_STATUS;
  		}
  
  		if (responseCode != RESPONSE_CODE) {
  			return SARLEclipsePlugin.getDefault().createStatus(IStatus.ERROR,
  					Messages.SubmitEclipseLogWizard_14,
  					new Exception(response.toString()));
  		}
  		//System.out.println(responseCode);
  		//Display.getDefault().asyncExec(() -> {
  		//	final Shell shell = new Shell((Shell) null, SWT.SHELL_TRIM);
  		//	shell.setLayout(new FillLayout());
  		//	final Browser browser = new Browser(shell, SWT.NONE);
  		//	browser.setText(response.toString());
  		//	shell.layout();
  		//	shell.open();
  
  		return Status.OK_STATUS;
  	}