com.wasteofplastic.acidisland.Update.java Source code

Java tutorial

Introduction

Here is the source code for com.wasteofplastic.acidisland.Update.java

Source

package com.wasteofplastic.acidisland;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

/**
 * Bukkit.org update checker
 * Source:
 * https://github.com/gravitylow/ServerModsAPI-Example/blob/master/Update.java
 * License: free
 */
public class Update {

    // The project's unique ID
    private final int projectID;

    // An optional API key to use, will be null if not submitted
    private final String apiKey;

    // Keys for extracting file information from JSON response
    private static final String API_NAME_VALUE = "name";
    private static final String API_LINK_VALUE = "downloadUrl";
    private static final String API_RELEASE_TYPE_VALUE = "releaseType";
    private static final String API_FILE_NAME_VALUE = "fileName";
    private static final String API_GAME_VERSION_VALUE = "gameVersion";

    // Static information for querying the API
    private static final String API_QUERY = "/servermods/files?projectIds=";
    private static final String API_HOST = "https://api.curseforge.com";

    // Results of query
    // Version's title
    String versionName = "";

    // Version's link
    String versionLink = "";

    // Version's release type
    String versionType = "";

    // Version's file name
    String versionFileName = "";

    // Version's game version
    String versionGameVersion = "";

    // Whether the look up was successful or not
    private boolean success = false;

    /**
     * Check for updates anonymously (keyless)
     * 
     * @param projectID
     *            The BukkitDev Project ID, found in the "Facts" panel on the
     *            right-side of your project page.
     */
    public Update(int projectID) {
        this(projectID, null);
    }

    /**
     * Check for updates using your Curse account (with key)
     * 
     * @param projectID
     *            The BukkitDev Project ID, found in the "Facts" panel on the
     *            right-side of your project page.
     * @param apiKey
     *            Your ServerMods API key, found at
     *            https://dev.bukkit.org/home/servermods-apikey/
     */
    public Update(int projectID, String apiKey) {
        this.projectID = projectID;
        this.apiKey = apiKey;
        this.success = query();
    }

    /**
     * Query the API to find the latest approved file's details.
     * 
     * @return true if successful
     */
    public boolean query() {
        URL url = null;

        try {
            // Create the URL to query using the project's ID
            url = new URL(API_HOST + API_QUERY + projectID);
        } catch (MalformedURLException e) {
            // There was an error creating the URL

            e.printStackTrace();
            return false;
        }

        try {
            // Open a connection and query the project
            URLConnection conn = url.openConnection();

            if (apiKey != null) {
                // Add the API key to the request if present
                conn.addRequestProperty("X-API-Key", apiKey);
            }

            // Add the user-agent to identify the program
            conn.addRequestProperty("User-Agent", "ASkyBlockAcidIsland Update Checker");

            // Read the response of the query
            // The response will be in a JSON format, so only reading one line
            // is necessary.
            final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String response = reader.readLine();

            // Parse the array of files from the query's response
            JSONArray array = (JSONArray) JSONValue.parse(response);

            if (array.size() > 0) {
                // Get the newest file's details
                JSONObject latest = (JSONObject) array.get(array.size() - 1);

                // Get the version's title
                versionName = (String) latest.get(API_NAME_VALUE);

                // Get the version's link
                versionLink = (String) latest.get(API_LINK_VALUE);

                // Get the version's release type
                versionType = (String) latest.get(API_RELEASE_TYPE_VALUE);

                // Get the version's file name
                versionFileName = (String) latest.get(API_FILE_NAME_VALUE);

                // Get the version's game version
                versionGameVersion = (String) latest.get(API_GAME_VERSION_VALUE);

                return true;
            } else {
                System.out.println("There are no files for this project");
                return false;
            }
        } catch (IOException e) {
            // There was an error reading the query

            e.printStackTrace();
            return false;
        }
    }

    /**
     * @return the versionName
     */
    public String getVersionName() {
        return versionName;
    }

    /**
     * @return the versionLink
     */
    public String getVersionLink() {
        return versionLink;
    }

    /**
     * @return the versionType
     */
    public String getVersionType() {
        return versionType;
    }

    /**
     * @return the versionFileName
     */
    public String getVersionFileName() {
        return versionFileName;
    }

    /**
     * @return the versionGameVersion
     */
    public String getVersionGameVersion() {
        return versionGameVersion;
    }

    /**
     * @return the success
     */
    public boolean isSuccess() {
        return success;
    }
}