/**
   * Sends a ping.
   *
   * @param event
   * @param user
   * @return The ping response code.
   */
  protected int sendPing(AnalyticsEvent event, IAnalyticsUser user) {
    HttpURLConnection connection = null;
    DataOutputStream output = null;

    try {
      URL url = new URL(getAnalyticsURL());
      connection = (HttpURLConnection) url.openConnection();
      if (user != null) {
        connection.setRequestProperty(
            "Cookie", user.getCookie() + "; uid=" + user.getGUID()); // $NON-NLS-1$ //$NON-NLS-2$
      }
      connection.setRequestProperty("User-Agent", AnalyticsEvent.getUserAgent()); // $NON-NLS-1$
      connection.setDoOutput(true);
      connection.setReadTimeout(getTimeout());
      connection.setConnectTimeout(getTimeout());

      connection.setRequestMethod("POST"); // $NON-NLS-1$
      // writes POST
      output = new DataOutputStream(connection.getOutputStream());
      String data = event.getEventString();
      output.writeBytes(data);
      output.flush();

      if (IdeLog.isTraceEnabled(UsagePlugin.getDefault(), IDebugScopes.USAGE)) {
        IdeLog.logTrace(
            UsagePlugin.getDefault(),
            MessageFormat.format("Sending usage: {0}, {1}", url, data)); // $NON-NLS-1$
      }

      int code = connection.getResponseCode();
      if (code == HttpURLConnection.HTTP_UNAUTHORIZED || code == HttpURLConnection.HTTP_FORBIDDEN) {
        UsagePlugin.logError(
            MessageFormat.format(
                Messages.StudioAnalytics_connection_unauthorized, Integer.toString(code)));
      } else if (code < 200 || code > 205) {
        UsagePlugin.logError(
            MessageFormat.format(
                Messages.StudioAnalytics_connection_failed, Integer.toString(code)));
      }

      return code;
    } catch (Exception e) {
      UsagePlugin.logError(e);
      return HttpURLConnection.HTTP_UNAVAILABLE;
    } finally {
      if (output != null) {
        try {
          output.close();
        } catch (IOException ignore) {
        }
      }
      if (connection != null) {
        connection.disconnect();
      }
    }
  }
 private void sendEvent(AnalyticsEvent featureEvent) {
   UsagePlugin plugin = UsagePlugin.getDefault();
   if (plugin == null) {
     return;
   }
   IStudioAnalytics analytics = plugin.getStudioAnalytics();
   if (analytics == null) {
     return;
   }
   analytics.sendEvent(featureEvent);
 }