Java tutorial
package com.jbirdvegas.mgerrit.helpers; /* * Copyright (C) 2013 Android Open Kang Project (AOKP) * Author: Jon Stanford (JBirdVegas), 2013 * * 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. */ import android.os.Environment; import android.util.Log; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; public class GerritTeamsHelper { private static final String TAG = GerritTeamsHelper.class.getSimpleName(); private static final String KEY_TEAM_NAME = "team_name"; private static final String KEY_TEAM_URL = "team_url"; private static final String KEY_TIMESTAMP = "timestamp"; private final List<GerritInstance> mInstanceList; private final List<String> mGerritNamesList; private final List<String> mGerritUrlsList; private static final String OUR_DATA = "/data/com.jbirdvegas.mgerrit/gerrits"; public static File mExternalCacheDir = new File(Environment.getDataDirectory().getAbsolutePath() + OUR_DATA); public GerritTeamsHelper() { ensureDirs(); mInstanceList = getAllTeams(); mGerritNamesList = getAllNames(); mGerritUrlsList = getAllUrls(); } private void ensureDirs() { if (!mExternalCacheDir.isDirectory()) { mExternalCacheDir.delete(); } if (!mExternalCacheDir.exists()) { mExternalCacheDir.mkdirs(); } } public List<String> getGerritNamesList() { return mGerritNamesList; } public List<String> getGerritUrlsList() { return mGerritUrlsList; } public class GerritInstance { private String mTeamName; private String mTeamUrl; private long mTimestamp; GerritInstance(String teamName, String teamUrl, long timestamp) { mTeamName = teamName; mTeamUrl = teamUrl; mTimestamp = timestamp; } public GerritInstance(JSONObject jsonObject) { try { mTeamName = jsonObject.getString(KEY_TEAM_NAME); mTeamUrl = jsonObject.getString(KEY_TEAM_URL); mTimestamp = jsonObject.getLong(KEY_TIMESTAMP); } catch (JSONException e) { throw new ExceptionInInitializerError("Failed to parse json into gerrit instance"); } } public String getTeamName() { return mTeamName; } public String getTeamUrl() { return mTeamUrl; } public long getTimestamp() { return mTimestamp; } } public static void saveTeam(String teamName, String teamUrl) { writeTeamToCache(teamName, teamUrl); } private static void writeTeamToCache(String teamName, String teamUrl) { File teamPath = new File(mExternalCacheDir.getAbsolutePath() + '/' + teamName); if (teamPath.exists()) { teamPath.delete(); } BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(teamPath)); try { writer.write(new JSONObject().put(KEY_TEAM_NAME, teamName).put(KEY_TEAM_URL, teamUrl) .put(KEY_TIMESTAMP, System.currentTimeMillis()).toString()); } catch (JSONException e) { Log.e(TAG, "Failed to encode gerrit info to json", e); } } catch (IOException e) { Log.e(TAG, "Failed to write file to the cache", e); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { // let it go } } } } private final List<GerritInstance> getAllTeams() { File[] files = mExternalCacheDir.listFiles(); if (files == null) { return new LinkedList<>(); } List<GerritInstance> instances = new LinkedList<>(); for (File file : files) { try { instances.add(readFileToGerritInstance(file)); } catch (JSONException e) { Log.e(TAG, "Failed to read stored Gerrit instance", e); } } return instances; } private final List<String> getAllNames() { List<String> names = new LinkedList<>(); for (GerritInstance instance : mInstanceList) { names.add(instance.getTeamName()); } return names; } private final List<String> getAllUrls() { List<String> urls = new LinkedList<>(); for (GerritInstance instance : mInstanceList) { urls.add(instance.getTeamUrl()); } return urls; } private GerritInstance readFileToGerritInstance(File file) throws JSONException { FileInputStream inputStream = null; BufferedReader reader = null; StringBuilder total = new StringBuilder(0); try { inputStream = new FileInputStream(file); reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { total.append(line); } } catch (FileNotFoundException e) { Log.e(TAG, "File not found!", e); } catch (IOException e) { Log.e(TAG, "Failed to read instances file", e); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { Log.e(TAG, "Failed to read instance from stream", e); } } if (reader != null) { try { reader.close(); } catch (IOException e) { // let it go } } } return new GerritInstance(new JSONObject(total.toString())); } }