[tor-commits] [onionoo/master] Reduce visibility of attributes to private.

karsten at torproject.org karsten at torproject.org
Mon Apr 14 13:29:25 UTC 2014


commit 1635812bdd5326c265eb4cdeae751b29d8deae95
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue Apr 8 23:41:50 2014 +0200

    Reduce visibility of attributes to private.
    
    Suggested by SonarQube.
---
 .../onionoo/BandwidthDocumentWriter.java           |    5 +-
 src/org/torproject/onionoo/BandwidthStatus.java    |   18 +-
 .../torproject/onionoo/BandwidthStatusUpdater.java |    8 +-
 .../torproject/onionoo/ClientsDocumentWriter.java  |   22 +-
 src/org/torproject/onionoo/ClientsStatus.java      |   39 +-
 .../torproject/onionoo/ClientsStatusUpdater.java   |   27 +-
 src/org/torproject/onionoo/DescriptorSource.java   |   28 +-
 .../torproject/onionoo/DetailsDocumentWriter.java  |   15 +-
 src/org/torproject/onionoo/Document.java           |    8 +-
 src/org/torproject/onionoo/DocumentStore.java      |   12 +-
 src/org/torproject/onionoo/LookupService.java      |  104 +++--
 .../onionoo/NodeDetailsStatusUpdater.java          |   31 +-
 src/org/torproject/onionoo/NodeStatus.java         |  456 +++++++++++---------
 src/org/torproject/onionoo/ResponseBuilder.java    |   25 +-
 .../onionoo/ReverseDomainNameResolver.java         |    6 +-
 .../torproject/onionoo/UptimeDocumentWriter.java   |   42 +-
 src/org/torproject/onionoo/UptimeStatus.java       |   23 +-
 .../torproject/onionoo/UptimeStatusUpdater.java    |   22 +-
 .../torproject/onionoo/WeightsDocumentWriter.java  |    6 +-
 src/org/torproject/onionoo/WeightsStatus.java      |   15 +-
 .../torproject/onionoo/WeightsStatusUpdater.java   |   12 +-
 .../org/torproject/onionoo/DummyDocumentStore.java |    2 +-
 test/org/torproject/onionoo/LookupServiceTest.java |   33 +-
 23 files changed, 567 insertions(+), 392 deletions(-)

diff --git a/src/org/torproject/onionoo/BandwidthDocumentWriter.java b/src/org/torproject/onionoo/BandwidthDocumentWriter.java
index 0c7308e..8e9b93c 100644
--- a/src/org/torproject/onionoo/BandwidthDocumentWriter.java
+++ b/src/org/torproject/onionoo/BandwidthDocumentWriter.java
@@ -49,7 +49,8 @@ public class BandwidthDocumentWriter implements FingerprintListener,
         continue;
       }
       this.writeBandwidthDataFileToDisk(fingerprint,
-          bandwidthStatus.writeHistory, bandwidthStatus.readHistory);
+          bandwidthStatus.getWriteHistory(),
+          bandwidthStatus.getReadHistory());
     }
     Logger.printStatusTime("Wrote bandwidth document files");
   }
@@ -64,7 +65,7 @@ public class BandwidthDocumentWriter implements FingerprintListener,
         + "\"write_history\":{\n" + writeHistoryString + "},\n"
         + "\"read_history\":{\n" + readHistoryString + "}}\n");
     BandwidthDocument bandwidthDocument = new BandwidthDocument();
-    bandwidthDocument.documentString = sb.toString();
+    bandwidthDocument.setDocumentString(sb.toString());
     this.documentStore.store(bandwidthDocument, fingerprint);
   }
 
diff --git a/src/org/torproject/onionoo/BandwidthStatus.java b/src/org/torproject/onionoo/BandwidthStatus.java
index 00e8ca8..37bbc8d 100644
--- a/src/org/torproject/onionoo/BandwidthStatus.java
+++ b/src/org/torproject/onionoo/BandwidthStatus.java
@@ -8,9 +8,23 @@ import java.util.TreeMap;
 
 class BandwidthStatus extends Document {
 
-  SortedMap<Long, long[]> writeHistory = new TreeMap<Long, long[]>();
+  private SortedMap<Long, long[]> writeHistory =
+      new TreeMap<Long, long[]>();
+  public void setWriteHistory(SortedMap<Long, long[]> writeHistory) {
+    this.writeHistory = writeHistory;
+  }
+  public SortedMap<Long, long[]> getWriteHistory() {
+    return this.writeHistory;
+  }
 
-  SortedMap<Long, long[]> readHistory = new TreeMap<Long, long[]>();
+  private SortedMap<Long, long[]> readHistory =
+      new TreeMap<Long, long[]>();
+  public void setReadHistory(SortedMap<Long, long[]> readHistory) {
+    this.readHistory = readHistory;
+  }
+  public SortedMap<Long, long[]> getReadHistory() {
+    return this.readHistory;
+  }
 
   public void fromDocumentString(String documentString) {
     Scanner s = new Scanner(documentString);
diff --git a/src/org/torproject/onionoo/BandwidthStatusUpdater.java b/src/org/torproject/onionoo/BandwidthStatusUpdater.java
index 6aff25d..7633e9f 100644
--- a/src/org/torproject/onionoo/BandwidthStatusUpdater.java
+++ b/src/org/torproject/onionoo/BandwidthStatusUpdater.java
@@ -51,14 +51,14 @@ public class BandwidthStatusUpdater implements DescriptorListener,
     }
     if (descriptor.getWriteHistory() != null) {
       parseHistoryLine(descriptor.getWriteHistory().getLine(),
-          bandwidthStatus.writeHistory);
+          bandwidthStatus.getWriteHistory());
     }
     if (descriptor.getReadHistory() != null) {
       parseHistoryLine(descriptor.getReadHistory().getLine(),
-          bandwidthStatus.readHistory);
+          bandwidthStatus.getReadHistory());
     }
-    this.compressHistory(bandwidthStatus.writeHistory);
-    this.compressHistory(bandwidthStatus.readHistory);
+    this.compressHistory(bandwidthStatus.getWriteHistory());
+    this.compressHistory(bandwidthStatus.getReadHistory());
     this.documentStore.store(bandwidthStatus, fingerprint);
   }
 
diff --git a/src/org/torproject/onionoo/ClientsDocumentWriter.java b/src/org/torproject/onionoo/ClientsDocumentWriter.java
index d9ff02d..34047b5 100644
--- a/src/org/torproject/onionoo/ClientsDocumentWriter.java
+++ b/src/org/torproject/onionoo/ClientsDocumentWriter.java
@@ -74,10 +74,10 @@ public class ClientsDocumentWriter implements FingerprintListener,
       if (clientsStatus == null) {
         continue;
       }
-      SortedSet<ClientsHistory> history = clientsStatus.history;
+      SortedSet<ClientsHistory> history = clientsStatus.getHistory();
       ClientsDocument clientsDocument = new ClientsDocument();
-      clientsDocument.documentString = this.formatHistoryString(
-          hashedFingerprint, history);
+      clientsDocument.setDocumentString(this.formatHistoryString(
+          hashedFingerprint, history));
       this.documentStore.store(clientsDocument, hashedFingerprint);
       this.writtenDocuments++;
     }
@@ -140,11 +140,11 @@ public class ClientsDocumentWriter implements FingerprintListener,
         totalResponsesByTransport = new TreeMap<String, Double>(),
         totalResponsesByVersion = new TreeMap<String, Double>();
     for (ClientsHistory hist : history) {
-      if (hist.endMillis < intervalStartMillis) {
+      if (hist.getEndMillis() < intervalStartMillis) {
         continue;
       }
       while ((intervalStartMillis / dataPointInterval) !=
-          (hist.endMillis / dataPointInterval)) {
+          (hist.getEndMillis() / dataPointInterval)) {
         dataPoints.add(millis * 2L < dataPointInterval
             ? -1.0 : responses * ((double) DateTimeHelper.ONE_DAY)
             / (((double) millis) * 10.0));
@@ -152,10 +152,10 @@ public class ClientsDocumentWriter implements FingerprintListener,
         millis = 0L;
         intervalStartMillis += dataPointInterval;
       }
-      responses += hist.totalResponses;
-      totalResponses += hist.totalResponses;
+      responses += hist.getTotalResponses();
+      totalResponses += hist.getTotalResponses();
       for (Map.Entry<String, Double> e :
-          hist.responsesByCountry.entrySet()) {
+          hist.getResponsesByCountry().entrySet()) {
         if (!totalResponsesByCountry.containsKey(e.getKey())) {
           totalResponsesByCountry.put(e.getKey(), 0.0);
         }
@@ -163,7 +163,7 @@ public class ClientsDocumentWriter implements FingerprintListener,
             + totalResponsesByCountry.get(e.getKey()));
       }
       for (Map.Entry<String, Double> e :
-          hist.responsesByTransport.entrySet()) {
+          hist.getResponsesByTransport().entrySet()) {
         if (!totalResponsesByTransport.containsKey(e.getKey())) {
           totalResponsesByTransport.put(e.getKey(), 0.0);
         }
@@ -171,14 +171,14 @@ public class ClientsDocumentWriter implements FingerprintListener,
             + totalResponsesByTransport.get(e.getKey()));
       }
       for (Map.Entry<String, Double> e :
-          hist.responsesByVersion.entrySet()) {
+          hist.getResponsesByVersion().entrySet()) {
         if (!totalResponsesByVersion.containsKey(e.getKey())) {
           totalResponsesByVersion.put(e.getKey(), 0.0);
         }
         totalResponsesByVersion.put(e.getKey(), e.getValue()
             + totalResponsesByVersion.get(e.getKey()));
       }
-      millis += (hist.endMillis - hist.startMillis);
+      millis += (hist.getEndMillis() - hist.getStartMillis());
     }
     dataPoints.add(millis * 2L < dataPointInterval
         ? -1.0 : responses * ((double) DateTimeHelper.ONE_DAY)
diff --git a/src/org/torproject/onionoo/ClientsStatus.java b/src/org/torproject/onionoo/ClientsStatus.java
index 26f9eab..8bf0998 100644
--- a/src/org/torproject/onionoo/ClientsStatus.java
+++ b/src/org/torproject/onionoo/ClientsStatus.java
@@ -11,17 +11,35 @@ import java.util.TreeSet;
 
 class ClientsHistory implements Comparable<ClientsHistory> {
 
-  long startMillis;
+  private long startMillis;
+  public long getStartMillis() {
+    return this.startMillis;
+  }
 
-  long endMillis;
+  private long endMillis;
+  public long getEndMillis() {
+    return this.endMillis;
+  }
 
-  double totalResponses;
+  private double totalResponses;
+  public double getTotalResponses() {
+    return this.totalResponses;
+  }
 
-  SortedMap<String, Double> responsesByCountry;
+  private SortedMap<String, Double> responsesByCountry;
+  public SortedMap<String, Double> getResponsesByCountry() {
+    return this.responsesByCountry;
+  }
 
-  SortedMap<String, Double> responsesByTransport;
+  private SortedMap<String, Double> responsesByTransport;
+  public SortedMap<String, Double> getResponsesByTransport() {
+    return this.responsesByTransport;
+  }
 
-  SortedMap<String, Double> responsesByVersion;
+  private SortedMap<String, Double> responsesByVersion;
+  public SortedMap<String, Double> getResponsesByVersion() {
+    return this.responsesByVersion;
+  }
 
   ClientsHistory(long startMillis, long endMillis,
       double totalResponses,
@@ -158,7 +176,14 @@ class ClientsHistory implements Comparable<ClientsHistory> {
 
 class ClientsStatus extends Document {
 
-  SortedSet<ClientsHistory> history = new TreeSet<ClientsHistory>();
+  private SortedSet<ClientsHistory> history =
+      new TreeSet<ClientsHistory>();
+  public void setHistory(SortedSet<ClientsHistory> history) {
+    this.history = history;
+  }
+  public SortedSet<ClientsHistory> getHistory() {
+    return this.history;
+  }
 
   public void fromDocumentString(String documentString) {
     Scanner s = new Scanner(documentString);
diff --git a/src/org/torproject/onionoo/ClientsStatusUpdater.java b/src/org/torproject/onionoo/ClientsStatusUpdater.java
index 8a98ccf..56803d4 100644
--- a/src/org/torproject/onionoo/ClientsStatusUpdater.java
+++ b/src/org/torproject/onionoo/ClientsStatusUpdater.java
@@ -155,42 +155,43 @@ public class ClientsStatusUpdater implements DescriptorListener,
 
   private void addToHistory(ClientsStatus clientsStatus,
       SortedSet<ClientsHistory> newIntervals) {
-    SortedSet<ClientsHistory> history = clientsStatus.history;
+    SortedSet<ClientsHistory> history = clientsStatus.getHistory();
     for (ClientsHistory interval : newIntervals) {
       if ((history.headSet(interval).isEmpty() ||
-          history.headSet(interval).last().endMillis <=
-          interval.startMillis) &&
+          history.headSet(interval).last().getEndMillis() <=
+          interval.getStartMillis()) &&
           (history.tailSet(interval).isEmpty() ||
-          history.tailSet(interval).first().startMillis >=
-          interval.endMillis)) {
+          history.tailSet(interval).first().getStartMillis() >=
+          interval.getEndMillis())) {
         history.add(interval);
       }
     }
   }
 
   private void compressHistory(ClientsStatus clientsStatus) {
-    SortedSet<ClientsHistory> history = clientsStatus.history;
+    SortedSet<ClientsHistory> history = clientsStatus.getHistory();
     SortedSet<ClientsHistory> compressedHistory =
         new TreeSet<ClientsHistory>();
     ClientsHistory lastResponses = null;
     String lastMonthString = "1970-01";
     for (ClientsHistory responses : history) {
       long intervalLengthMillis;
-      if (this.now - responses.endMillis <=
+      if (this.now - responses.getEndMillis() <=
           DateTimeHelper.ROUGHLY_THREE_MONTHS) {
         intervalLengthMillis = DateTimeHelper.ONE_DAY;
-      } else if (this.now - responses.endMillis <=
+      } else if (this.now - responses.getEndMillis() <=
           DateTimeHelper.ROUGHLY_ONE_YEAR) {
         intervalLengthMillis = DateTimeHelper.TWO_DAYS;
       } else {
         intervalLengthMillis = DateTimeHelper.TEN_DAYS;
       }
-      String monthString = DateTimeHelper.format(responses.startMillis,
+      String monthString = DateTimeHelper.format(
+          responses.getStartMillis(),
           DateTimeHelper.ISO_YEARMONTH_FORMAT);
       if (lastResponses != null &&
-          lastResponses.endMillis == responses.startMillis &&
-          ((lastResponses.endMillis - 1L) / intervalLengthMillis) ==
-          ((responses.endMillis - 1L) / intervalLengthMillis) &&
+          lastResponses.getEndMillis() == responses.getStartMillis() &&
+          ((lastResponses.getEndMillis() - 1L) / intervalLengthMillis) ==
+          ((responses.getEndMillis() - 1L) / intervalLengthMillis) &&
           lastMonthString.equals(monthString)) {
         lastResponses.addResponses(responses);
       } else {
@@ -204,7 +205,7 @@ public class ClientsStatusUpdater implements DescriptorListener,
     if (lastResponses != null) {
       compressedHistory.add(lastResponses);
     }
-    clientsStatus.history = compressedHistory;
+    clientsStatus.setHistory(compressedHistory);
   }
 
   public String getStatsString() {
diff --git a/src/org/torproject/onionoo/DescriptorSource.java b/src/org/torproject/onionoo/DescriptorSource.java
index c72e8ce..86fba25 100644
--- a/src/org/torproject/onionoo/DescriptorSource.java
+++ b/src/org/torproject/onionoo/DescriptorSource.java
@@ -77,13 +77,25 @@ class DescriptorQueue {
 
   private List<Descriptor> descriptors;
 
-  int historySizeBefore;
+  private int historySizeBefore;
+  public int getHistorySizeBefore() {
+    return this.historySizeBefore;
+  }
 
-  int historySizeAfter;
+  private int historySizeAfter;
+  public int getHistorySizeAfter() {
+    return this.historySizeAfter;
+  }
 
-  long returnedDescriptors = 0L;
+  private long returnedDescriptors = 0L;
+  public long getReturnedDescriptors() {
+    return this.returnedDescriptors;
+  }
 
-  long returnedBytes = 0L;
+  private long returnedBytes = 0L;
+  public long getReturnedBytes() {
+    return this.returnedBytes;
+  }
 
   public DescriptorQueue(File inDir, File statusDir) {
     this.inDir = inDir;
@@ -424,10 +436,10 @@ public class DescriptorSource {
     int historySizeBefore = 0, historySizeAfter = 0;
     long descriptors = 0L, bytes = 0L;
     for (DescriptorQueue descriptorQueue : descriptorQueues) {
-      historySizeBefore += descriptorQueue.historySizeBefore;
-      historySizeAfter += descriptorQueue.historySizeAfter;
-      descriptors += descriptorQueue.returnedDescriptors;
-      bytes += descriptorQueue.returnedBytes;
+      historySizeBefore += descriptorQueue.getHistorySizeBefore();
+      historySizeAfter += descriptorQueue.getHistorySizeAfter();
+      descriptors += descriptorQueue.getReturnedDescriptors();
+      bytes += descriptorQueue.getReturnedBytes();
     }
     sb.append("    " + Logger.formatDecimalNumber(historySizeBefore)
         + " descriptors excluded from this execution\n");
diff --git a/src/org/torproject/onionoo/DetailsDocumentWriter.java b/src/org/torproject/onionoo/DetailsDocumentWriter.java
index 57d0877..cea6ba3 100644
--- a/src/org/torproject/onionoo/DetailsDocumentWriter.java
+++ b/src/org/torproject/onionoo/DetailsDocumentWriter.java
@@ -263,13 +263,14 @@ public class DetailsDocumentWriter implements DescriptorListener,
 
       /* Append descriptor-specific part from details status file, and
        * update contact in node status. */
+      /* TODO Updating the contact here seems like a pretty bad hack. */
       DetailsStatus detailsStatus = this.documentStore.retrieve(
           DetailsStatus.class, false, fingerprint);
       if (detailsStatus != null &&
-          detailsStatus.documentString.length() > 0) {
-        sb.append(",\n" + detailsStatus.documentString);
+          detailsStatus.getDocumentString().length() > 0) {
+        sb.append(",\n" + detailsStatus.getDocumentString());
         String contact = null;
-        Scanner s = new Scanner(detailsStatus.documentString);
+        Scanner s = new Scanner(detailsStatus.getDocumentString());
         while (s.hasNextLine()) {
           String line = s.nextLine();
           if (!line.startsWith("\"contact\":")) {
@@ -291,7 +292,7 @@ public class DetailsDocumentWriter implements DescriptorListener,
 
       /* Write details file to disk. */
       DetailsDocument detailsDocument = new DetailsDocument();
-      detailsDocument.documentString = sb.toString();
+      detailsDocument.setDocumentString(sb.toString());
       this.documentStore.store(detailsDocument, fingerprint);
     }
   }
@@ -343,8 +344,8 @@ public class DetailsDocumentWriter implements DescriptorListener,
       DetailsStatus detailsStatus = this.documentStore.retrieve(
           DetailsStatus.class, false, fingerprint);
       if (detailsStatus != null &&
-          detailsStatus.documentString.length() > 0) {
-        sb.append(",\n" + detailsStatus.documentString);
+          detailsStatus.getDocumentString().length() > 0) {
+        sb.append(",\n" + detailsStatus.getDocumentString());
       }
 
       /* Finish details string. */
@@ -352,7 +353,7 @@ public class DetailsDocumentWriter implements DescriptorListener,
 
       /* Write details file to disk. */
       DetailsDocument detailsDocument = new DetailsDocument();
-      detailsDocument.documentString = sb.toString();
+      detailsDocument.setDocumentString(sb.toString());
       this.documentStore.store(detailsDocument, fingerprint);
     }
   }
diff --git a/src/org/torproject/onionoo/Document.java b/src/org/torproject/onionoo/Document.java
index f0fac2c..bea0794 100644
--- a/src/org/torproject/onionoo/Document.java
+++ b/src/org/torproject/onionoo/Document.java
@@ -4,7 +4,13 @@ package org.torproject.onionoo;
 
 abstract class Document {
 
-  transient String documentString;
+  private transient String documentString;
+  public void setDocumentString(String documentString) {
+    this.documentString = documentString;
+  }
+  public String getDocumentString() {
+    return this.documentString;
+  }
 
   public void fromDocumentString(String documentString) {
     /* Subclasses may override this method to parse documentString. */
diff --git a/src/org/torproject/onionoo/DocumentStore.java b/src/org/torproject/onionoo/DocumentStore.java
index 46b5d98..fa0e98c 100644
--- a/src/org/torproject/onionoo/DocumentStore.java
+++ b/src/org/torproject/onionoo/DocumentStore.java
@@ -35,10 +35,10 @@ public class DocumentStore {
 
   private Time time;
 
-  boolean listedArchivedNodeStatuses = false,
+  private boolean listedArchivedNodeStatuses = false,
       listedCurrentNodeStatuses = false;
 
-  long listOperations = 0L, listedFiles = 0L, storedFiles = 0L,
+  private long listOperations = 0L, listedFiles = 0L, storedFiles = 0L,
       storedBytes = 0L, retrievedFiles = 0L, retrievedBytes = 0L,
       removedFiles = 0L;
 
@@ -187,8 +187,8 @@ public class DocumentStore {
       return false;
     }
     String documentString;
-    if (document.documentString != null) {
-      documentString = document.documentString;
+    if (document.getDocumentString() != null) {
+      documentString = document.getDocumentString();
     } else if (document instanceof DetailsDocument ||
           document instanceof BandwidthDocument ||
           document instanceof WeightsDocument ||
@@ -329,7 +329,7 @@ public class DocumentStore {
     Gson gson = new Gson();
     try {
       result = gson.fromJson(documentString, documentType);
-      result.documentString = documentString;
+      result.setDocumentString(documentString);
     } catch (JsonParseException e) {
       /* Handle below. */
       e.printStackTrace();
@@ -346,7 +346,7 @@ public class DocumentStore {
     T result = null;
     try {
       result = documentType.newInstance();
-      result.documentString = documentString;
+      result.setDocumentString(documentString);
     } catch (InstantiationException e) {
       /* Handle below. */
       e.printStackTrace();
diff --git a/src/org/torproject/onionoo/LookupService.java b/src/org/torproject/onionoo/LookupService.java
index 39f4e2e..a950f02 100644
--- a/src/org/torproject/onionoo/LookupService.java
+++ b/src/org/torproject/onionoo/LookupService.java
@@ -17,12 +17,79 @@ import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.regex.Pattern;
 
+class LookupResult {
+
+  private String countryCode;
+  public void setCountryCode(String countryCode) {
+    this.countryCode = countryCode;
+  }
+  public String getCountryCode() {
+    return this.countryCode;
+  }
+
+  private String countryName;
+  public void setCountryName(String countryName) {
+    this.countryName = countryName;
+  }
+  public String getCountryName() {
+    return this.countryName;
+  }
+
+  private String regionName;
+  public void setRegionName(String regionName) {
+    this.regionName = regionName;
+  }
+  public String getRegionName() {
+    return this.regionName;
+  }
+
+  private String cityName;
+  public void setCityName(String cityName) {
+    this.cityName = cityName;
+  }
+  public String getCityName() {
+    return this.cityName;
+  }
+
+  private String latitude;
+  public void setLatitude(String latitude) {
+    this.latitude = latitude;
+  }
+  public String getLatitude() {
+    return this.latitude;
+  }
+
+  private String longitude;
+  public void setLongitude(String longitude) {
+    this.longitude = longitude;
+  }
+  public String getLongitude() {
+    return this.longitude;
+  }
+
+  private String asNumber;
+  public void setAsNumber(String asNumber) {
+    this.asNumber = asNumber;
+  }
+  public String getAsNumber() {
+    return this.asNumber;
+  }
+
+  private String asName;
+  public void setAsName(String asName) {
+    this.asName = asName;
+  }
+  public String getAsName() {
+    return this.asName;
+  }
+}
+
 public class LookupService {
 
-  File geoipDir;
-  File geoLite2CityBlocksCsvFile;
-  File geoLite2CityLocationsCsvFile;
-  File geoIPASNum2CsvFile;
+  private File geoipDir;
+  private File geoLite2CityBlocksCsvFile;
+  private File geoLite2CityLocationsCsvFile;
+  private File geoIPASNum2CsvFile;
   private boolean hasAllFiles = false;
   public LookupService(File geoipDir) {
     this.geoipDir = geoipDir;
@@ -294,28 +361,28 @@ public class LookupService {
         if (blockLocations.containsKey(blockNumber)) {
           String[] parts = blockLocations.get(blockNumber).
               replaceAll("\"", "").split(",", -1);
-          lookupResult.countryCode = parts[3].toLowerCase();
+          lookupResult.setCountryCode(parts[3].toLowerCase());
           if (parts[4].length() > 0) {
-            lookupResult.countryName = parts[4];
+            lookupResult.setCountryName(parts[4]);
           }
           if (parts[6].length() > 0) {
-            lookupResult.regionName = parts[6];
+            lookupResult.setRegionName(parts[6]);
           }
           if (parts[7].length() > 0) {
-            lookupResult.cityName = parts[7];
+            lookupResult.setCityName(parts[7]);
           }
         }
       }
       if (addressNumberLatLong.containsKey(addressNumber)) {
         String[] latLong = addressNumberLatLong.get(addressNumber);
-        lookupResult.latitude = latLong[0];
-        lookupResult.longitude = latLong[1];
+        lookupResult.setLatitude(latLong[0]);
+        lookupResult.setLongitude(latLong[1]);
       }
       if (addressNumberASN.containsKey(addressNumber)) {
         String[] parts = addressNumberASN.get(addressNumber).split(" ",
             2);
-        lookupResult.aSNumber = parts[0];
-        lookupResult.aSName = parts[1];
+        lookupResult.setAsNumber(parts[0]);
+        lookupResult.setAsName(parts[1]);
       }
       lookupResults.put(addressString, lookupResult);
     }
@@ -327,18 +394,7 @@ public class LookupService {
     return lookupResults;
   }
 
-  class LookupResult {
-    String countryCode;
-    String countryName;
-    String regionName;
-    String cityName;
-    String latitude;
-    String longitude;
-    String aSNumber;
-    String aSName;
-  }
-
-  int addressesLookedUp = 0, addressesResolved = 0;
+  private int addressesLookedUp = 0, addressesResolved = 0;
 
   public String getStatsString() {
     StringBuilder sb = new StringBuilder();
diff --git a/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java b/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
index d6cd2ec..2cf5061 100644
--- a/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
+++ b/src/org/torproject/onionoo/NodeDetailsStatusUpdater.java
@@ -20,7 +20,6 @@ import org.torproject.descriptor.Descriptor;
 import org.torproject.descriptor.NetworkStatusEntry;
 import org.torproject.descriptor.RelayNetworkStatusConsensus;
 import org.torproject.descriptor.ServerDescriptor;
-import org.torproject.onionoo.LookupService.LookupResult;
 
 public class NodeDetailsStatusUpdater implements DescriptorListener,
     StatusUpdater {
@@ -245,14 +244,14 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
       String addressString = node.getAddress();
       if (lookupResults.containsKey(addressString)) {
         LookupResult lookupResult = lookupResults.get(addressString);
-        node.setCountryCode(lookupResult.countryCode);
-        node.setCountryName(lookupResult.countryName);
-        node.setRegionName(lookupResult.regionName);
-        node.setCityName(lookupResult.cityName);
-        node.setLatitude(lookupResult.latitude);
-        node.setLongitude(lookupResult.longitude);
-        node.setASNumber(lookupResult.aSNumber);
-        node.setASName(lookupResult.aSName);
+        node.setCountryCode(lookupResult.getCountryCode());
+        node.setCountryName(lookupResult.getCountryName());
+        node.setRegionName(lookupResult.getRegionName());
+        node.setCityName(lookupResult.getCityName());
+        node.setLatitude(lookupResult.getLatitude());
+        node.setLongitude(lookupResult.getLongitude());
+        node.setASNumber(lookupResult.getAsNumber());
+        node.setASName(lookupResult.getAsName());
       }
     }
   }
@@ -290,7 +289,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
     String publishedDateTime =
         DateTimeHelper.format(descriptor.getPublishedMillis());
     if (detailsStatus != null) {
-      String detailsString = detailsStatus.documentString;
+      String detailsString = detailsStatus.getDocumentString();
       String descPublishedLine = "\"desc_published\":\""
           + publishedDateTime + "\",";
       Scanner s = new Scanner(detailsString);
@@ -363,7 +362,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
       sb.append(",\n\"hibernating\":true");
     }
     detailsStatus = new DetailsStatus();
-    detailsStatus.documentString = sb.toString();
+    detailsStatus.setDocumentString(sb.toString());
     this.documentStore.store(detailsStatus, fingerprint);
   }
 
@@ -376,7 +375,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
         DateTimeHelper.format(descriptor.getPublishedMillis());
     String poolAssignmentLine = null;
     if (detailsStatus != null) {
-      String detailsString = detailsStatus.documentString;
+      String detailsString = detailsStatus.getDocumentString();
       String descPublishedLine = "\"desc_published\":\""
           + publishedDateTime + "\",";
       Scanner s = new Scanner(detailsString);
@@ -407,7 +406,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
       sb.append(",\n" + poolAssignmentLine);
     }
     detailsStatus = new DetailsStatus();
-    detailsStatus.documentString = sb.toString();
+    detailsStatus.setDocumentString(sb.toString());
     this.documentStore.store(detailsStatus, fingerprint);
   }
 
@@ -425,7 +424,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
       DetailsStatus detailsStatus = this.documentStore.retrieve(
           DetailsStatus.class, false, fingerprint);
       if (detailsStatus != null) {
-        String detailsString = detailsStatus.documentString;
+        String detailsString = detailsStatus.getDocumentString();
         Scanner s = new Scanner(detailsString);
         int linesWritten = 0;
         boolean endsWithComma = false;
@@ -443,7 +442,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
       }
       sb.append("\"pool_assignment\":\"" + details + "\"");
       detailsStatus = new DetailsStatus();
-      detailsStatus.documentString = sb.toString();
+      detailsStatus.setDocumentString(sb.toString());
       this.documentStore.store(detailsStatus, fingerprint);
     }
   }
@@ -535,7 +534,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
           DetailsStatus.class, false, fingerprint);
       if (detailsStatus != null) {
         double advertisedBandwidth = -1.0;
-        String detailsString = detailsStatus.documentString;
+        String detailsString = detailsStatus.getDocumentString();
         Scanner s = new Scanner(detailsString);
         while (s.hasNextLine()) {
           String line = s.nextLine();
diff --git a/src/org/torproject/onionoo/NodeStatus.java b/src/org/torproject/onionoo/NodeStatus.java
index da39a5b..8e89682 100644
--- a/src/org/torproject/onionoo/NodeStatus.java
+++ b/src/org/torproject/onionoo/NodeStatus.java
@@ -19,41 +19,285 @@ import org.apache.commons.codec.digest.DigestUtils;
 /* Store search data of a single relay that was running in the past seven
  * days. */
 public class NodeStatus extends Document {
+
   private boolean isRelay;
+  public boolean isRelay() {
+    return this.isRelay;
+  }
+
   private String fingerprint;
+  public String getFingerprint() {
+    return this.fingerprint;
+  }
+
   private String hashedFingerprint;
+  public String getHashedFingerprint() {
+    return this.hashedFingerprint;
+  }
+
   private String nickname;
+  public String getNickname() {
+    return this.nickname;
+  }
+
   private String address;
+  public String getAddress() {
+    return this.address;
+  }
+
   private SortedSet<String> orAddresses;
   private SortedSet<String> orAddressesAndPorts;
+  public SortedSet<String> getOrAddresses() {
+    return new TreeSet<String>(this.orAddresses);
+  }
+  public void addOrAddressAndPort(String orAddressAndPort) {
+    if (!orAddressAndPort.contains(":")) {
+      System.err.println("Illegal OR address:port '" + orAddressAndPort
+          + "'.  Exiting.");
+      System.exit(1);
+    } else if (orAddressAndPort.length() > 0) {
+      String orAddress = orAddressAndPort.substring(0,
+          orAddressAndPort.lastIndexOf(':'));
+      if (this.exitAddresses.contains(orAddress)) {
+        this.exitAddresses.remove(orAddress);
+      }
+      this.orAddresses.add(orAddress);
+      this.orAddressesAndPorts.add(orAddressAndPort);
+    }
+  }
+  public SortedSet<String> getOrAddressesAndPorts() {
+    return new TreeSet<String>(this.orAddressesAndPorts);
+  }
+
   private SortedSet<String> exitAddresses;
+  public void addExitAddress(String exitAddress) {
+    if (exitAddress.length() > 0 && !this.address.equals(exitAddress) &&
+        !this.orAddresses.contains(exitAddress)) {
+      this.exitAddresses.add(exitAddress);
+    }
+  }
+  public SortedSet<String> getExitAddresses() {
+    return new TreeSet<String>(this.exitAddresses);
+  }
+
   private String latitude;
+  public void setLatitude(String latitude) {
+    this.latitude = latitude;
+  }
+  public String getLatitude() {
+    return this.latitude;
+  }
+
   private String longitude;
+  public void setLongitude(String longitude) {
+    this.longitude = longitude;
+  }
+  public String getLongitude() {
+    return this.longitude;
+  }
+
   private String countryCode;
+  public void setCountryCode(String countryCode) {
+    this.countryCode = countryCode;
+  }
+  public String getCountryCode() {
+    return this.countryCode;
+  }
+
   private String countryName;
+  public void setCountryName(String countryName) {
+    this.countryName = countryName;
+  }
+  public String getCountryName() {
+    return this.countryName;
+  }
+
   private String regionName;
+  public void setRegionName(String regionName) {
+    this.regionName = regionName;
+  }
+  public String getRegionName() {
+    return this.regionName;
+  }
+
   private String cityName;
+  public void setCityName(String cityName) {
+    this.cityName = cityName;
+  }
+  public String getCityName() {
+    return this.cityName;
+  }
+
   private String aSName;
+  public void setASName(String aSName) {
+    this.aSName = aSName;
+  }
+  public String getASName() {
+    return this.aSName;
+  }
+
   private String aSNumber;
+  public void setASNumber(String aSNumber) {
+    this.aSNumber = aSNumber;
+  }
+  public String getASNumber() {
+    return this.aSNumber;
+  }
+
   private long firstSeenMillis;
+  public long getFirstSeenMillis() {
+    return this.firstSeenMillis;
+  }
+
   private long lastSeenMillis;
+  public long getLastSeenMillis() {
+    return this.lastSeenMillis;
+  }
+
   private int orPort;
+  public int getOrPort() {
+    return this.orPort;
+  }
+
   private int dirPort;
+  public int getDirPort() {
+    return this.dirPort;
+  }
+
   private SortedSet<String> relayFlags;
+  public SortedSet<String> getRelayFlags() {
+    return this.relayFlags;
+  }
+
   private long consensusWeight;
+  public long getConsensusWeight() {
+    return this.consensusWeight;
+  }
+
   private boolean running;
+  public void setRunning(boolean running) {
+    this.running = running;
+  }
+  public boolean getRunning() {
+    return this.running;
+  }
+
   private String hostName;
+  public void setHostName(String hostName) {
+    this.hostName = hostName;
+  }
+  public String getHostName() {
+    return this.hostName;
+  }
+
   private long lastRdnsLookup = -1L;
+  public void setLastRdnsLookup(long lastRdnsLookup) {
+    this.lastRdnsLookup = lastRdnsLookup;
+  }
+  public long getLastRdnsLookup() {
+    return this.lastRdnsLookup;
+  }
+
   private double advertisedBandwidthFraction = -1.0;
+  public void setAdvertisedBandwidthFraction(
+      double advertisedBandwidthFraction) {
+    this.advertisedBandwidthFraction = advertisedBandwidthFraction;
+  }
+  public double getAdvertisedBandwidthFraction() {
+    return this.advertisedBandwidthFraction;
+  }
+
   private double consensusWeightFraction = -1.0;
+  public void setConsensusWeightFraction(double consensusWeightFraction) {
+    this.consensusWeightFraction = consensusWeightFraction;
+  }
+  public double getConsensusWeightFraction() {
+    return this.consensusWeightFraction;
+  }
+
   private double guardProbability = -1.0;
+  public void setGuardProbability(double guardProbability) {
+    this.guardProbability = guardProbability;
+  }
+  public double getGuardProbability() {
+    return this.guardProbability;
+  }
+
   private double middleProbability = -1.0;
+  public void setMiddleProbability(double middleProbability) {
+    this.middleProbability = middleProbability;
+  }
+  public double getMiddleProbability() {
+    return this.middleProbability;
+  }
+
   private double exitProbability = -1.0;
+  public void setExitProbability(double exitProbability) {
+    this.exitProbability = exitProbability;
+  }
+  public double getExitProbability() {
+    return this.exitProbability;
+  }
+
   private String defaultPolicy;
+  public String getDefaultPolicy() {
+    return this.defaultPolicy;
+  }
+
   private String portList;
+  public String getPortList() {
+    return this.portList;
+  }
+
   private SortedMap<Long, Set<String>> lastAddresses;
+  public SortedMap<Long, Set<String>> getLastAddresses() {
+    return this.lastAddresses == null ? null :
+        new TreeMap<Long, Set<String>>(this.lastAddresses);
+  }
+  public long getLastChangedOrAddress() {
+    long lastChangedAddressesMillis = -1L;
+    if (this.lastAddresses != null) {
+      Set<String> lastAddresses = null;
+      for (Map.Entry<Long, Set<String>> e : this.lastAddresses.entrySet()) {
+        if (lastAddresses != null) {
+          for (String address : e.getValue()) {
+            if (!lastAddresses.contains(address)) {
+              return lastChangedAddressesMillis;
+            }
+          }
+        }
+        lastChangedAddressesMillis = e.getKey();
+        lastAddresses = e.getValue();
+      }
+    }
+    return lastChangedAddressesMillis;
+  }
+
   private String contact;
+  public void setContact(String contact) {
+    if (contact == null) {
+      this.contact = null;
+    } else {
+      StringBuilder sb = new StringBuilder();
+      for (char c : contact.toLowerCase().toCharArray()) {
+        if (c >= 32 && c < 127) {
+          sb.append(c);
+        } else {
+          sb.append(" ");
+        }
+      }
+      this.contact = sb.toString();
+    }
+  }
+  public String getContact() {
+    return this.contact;
+  }
+
   private Boolean recommendedVersion;
+  public Boolean getRecommendedVersion() {
+    return this.recommendedVersion;
+  }
+
   public NodeStatus(boolean isRelay, String nickname, String fingerprint,
       String address, SortedSet<String> orAddressesAndPorts,
       SortedSet<String> exitAddresses, long lastSeenMillis, int orPort,
@@ -259,7 +503,7 @@ public class NodeStatus extends Document {
       this.lastAddresses.putAll(newNodeStatus.lastAddresses);
     }
     this.firstSeenMillis = Math.min(newNodeStatus.firstSeenMillis,
-        this.getFirstSeenMillis());
+        this.firstSeenMillis);
   }
 
   public String toString() {
@@ -315,215 +559,5 @@ public class NodeStatus extends Document {
         this.recommendedVersion ? "true" : "false"));
     return sb.toString();
   }
-
-  public boolean isRelay() {
-    return this.isRelay;
-  }
-  public String getFingerprint() {
-    return this.fingerprint;
-  }
-  public String getHashedFingerprint() {
-    return this.hashedFingerprint;
-  }
-  public String getNickname() {
-    return this.nickname;
-  }
-  public String getAddress() {
-    return this.address;
-  }
-  public SortedSet<String> getOrAddresses() {
-    return new TreeSet<String>(this.orAddresses);
-  }
-  public void addOrAddressAndPort(String orAddressAndPort) {
-    if (!orAddressAndPort.contains(":")) {
-      System.err.println("Illegal OR address:port '" + orAddressAndPort
-          + "'.  Exiting.");
-      System.exit(1);
-    } else if (orAddressAndPort.length() > 0) {
-      String orAddress = orAddressAndPort.substring(0,
-          orAddressAndPort.lastIndexOf(':'));
-      if (this.exitAddresses.contains(orAddress)) {
-        this.exitAddresses.remove(orAddress);
-      }
-      this.orAddresses.add(orAddress);
-      this.orAddressesAndPorts.add(orAddressAndPort);
-    }
-  }
-  public SortedSet<String> getOrAddressesAndPorts() {
-    return new TreeSet<String>(this.orAddressesAndPorts);
-  }
-  public void addExitAddress(String exitAddress) {
-    if (exitAddress.length() > 0 && !this.address.equals(exitAddress) &&
-        !this.orAddresses.contains(exitAddress)) {
-      this.exitAddresses.add(exitAddress);
-    }
-  }
-  public SortedSet<String> getExitAddresses() {
-    return new TreeSet<String>(this.exitAddresses);
-  }
-  public void setLatitude(String latitude) {
-    this.latitude = latitude;
-  }
-  public String getLatitude() {
-    return this.latitude;
-  }
-  public void setLongitude(String longitude) {
-    this.longitude = longitude;
-  }
-  public String getLongitude() {
-    return this.longitude;
-  }
-  public void setCountryCode(String countryCode) {
-    this.countryCode = countryCode;
-  }
-  public String getCountryCode() {
-    return this.countryCode;
-  }
-  public void setCountryName(String countryName) {
-    this.countryName = countryName;
-  }
-  public String getCountryName() {
-    return this.countryName;
-  }
-  public void setRegionName(String regionName) {
-    this.regionName = regionName;
-  }
-  public String getRegionName() {
-    return this.regionName;
-  }
-  public void setCityName(String cityName) {
-    this.cityName = cityName;
-  }
-  public String getCityName() {
-    return this.cityName;
-  }
-  public void setASNumber(String aSNumber) {
-    this.aSNumber = aSNumber;
-  }
-  public String getASNumber() {
-    return this.aSNumber;
-  }
-  public void setASName(String aSName) {
-    this.aSName = aSName;
-  }
-  public String getASName() {
-    return this.aSName;
-  }
-  public long getFirstSeenMillis() {
-    return this.firstSeenMillis;
-  }
-  public long getLastSeenMillis() {
-    return this.lastSeenMillis;
-  }
-  public int getOrPort() {
-    return this.orPort;
-  }
-  public int getDirPort() {
-    return this.dirPort;
-  }
-  public SortedSet<String> getRelayFlags() {
-    return this.relayFlags;
-  }
-  public long getConsensusWeight() {
-    return this.consensusWeight;
-  }
-  public void setRunning(boolean running) {
-    this.running = running;
-  }
-  public boolean getRunning() {
-    return this.running;
-  }
-  public void setHostName(String hostName) {
-    this.hostName = hostName;
-  }
-  public String getHostName() {
-    return this.hostName;
-  }
-  public void setLastRdnsLookup(long lastRdnsLookup) {
-    this.lastRdnsLookup = lastRdnsLookup;
-  }
-  public long getLastRdnsLookup() {
-    return this.lastRdnsLookup;
-  }
-  public void setAdvertisedBandwidthFraction(
-      double advertisedBandwidthFraction) {
-    this.advertisedBandwidthFraction = advertisedBandwidthFraction;
-  }
-  public double getAdvertisedBandwidthFraction() {
-    return this.advertisedBandwidthFraction;
-  }
-  public void setConsensusWeightFraction(double consensusWeightFraction) {
-    this.consensusWeightFraction = consensusWeightFraction;
-  }
-  public double getConsensusWeightFraction() {
-    return this.consensusWeightFraction;
-  }
-  public void setGuardProbability(double guardProbability) {
-    this.guardProbability = guardProbability;
-  }
-  public double getGuardProbability() {
-    return this.guardProbability;
-  }
-  public void setMiddleProbability(double middleProbability) {
-    this.middleProbability = middleProbability;
-  }
-  public double getMiddleProbability() {
-    return this.middleProbability;
-  }
-  public void setExitProbability(double exitProbability) {
-    this.exitProbability = exitProbability;
-  }
-  public double getExitProbability() {
-    return this.exitProbability;
-  }
-  public String getDefaultPolicy() {
-    return this.defaultPolicy;
-  }
-  public String getPortList() {
-    return this.portList;
-  }
-  public SortedMap<Long, Set<String>> getLastAddresses() {
-    return this.lastAddresses == null ? null :
-        new TreeMap<Long, Set<String>>(this.lastAddresses);
-  }
-  public long getLastChangedOrAddress() {
-    long lastChangedAddressesMillis = -1L;
-    if (this.lastAddresses != null) {
-      Set<String> lastAddresses = null;
-      for (Map.Entry<Long, Set<String>> e : this.lastAddresses.entrySet()) {
-        if (lastAddresses != null) {
-          for (String address : e.getValue()) {
-            if (!lastAddresses.contains(address)) {
-              return lastChangedAddressesMillis;
-            }
-          }
-        }
-        lastChangedAddressesMillis = e.getKey();
-        lastAddresses = e.getValue();
-      }
-    }
-    return lastChangedAddressesMillis;
-  }
-  public void setContact(String contact) {
-    if (contact == null) {
-      this.contact = null;
-    } else {
-      StringBuilder sb = new StringBuilder();
-      for (char c : contact.toLowerCase().toCharArray()) {
-        if (c >= 32 && c < 127) {
-          sb.append(c);
-        } else {
-          sb.append(" ");
-        }
-      }
-      this.contact = sb.toString();
-    }
-  }
-  public String getContact() {
-    return this.contact;
-  }
-  public Boolean getRecommendedVersion() {
-    return this.recommendedVersion;
-  }
 }
 
diff --git a/src/org/torproject/onionoo/ResponseBuilder.java b/src/org/torproject/onionoo/ResponseBuilder.java
index bde8961..080af52 100644
--- a/src/org/torproject/onionoo/ResponseBuilder.java
+++ b/src/org/torproject/onionoo/ResponseBuilder.java
@@ -49,8 +49,9 @@ public class ResponseBuilder {
     long newSummaryFileLastModified = -1L;
     UpdateStatus updateStatus = documentStore.retrieve(UpdateStatus.class,
         false);
-    if (updateStatus != null && updateStatus.documentString != null) {
-      String updateString = updateStatus.documentString;
+    if (updateStatus != null &&
+        updateStatus.getDocumentString() != null) {
+      String updateString = updateStatus.getDocumentString();
       try {
         newSummaryFileLastModified = Long.parseLong(updateString.trim());
       } catch (NumberFormatException e) {
@@ -806,9 +807,9 @@ public class ResponseBuilder {
     DetailsDocument detailsDocument = documentStore.retrieve(
         DetailsDocument.class, false, fingerprint);
     if (detailsDocument != null &&
-        detailsDocument.documentString != null) {
+        detailsDocument.getDocumentString() != null) {
       StringBuilder sb = new StringBuilder();
-      Scanner s = new Scanner(detailsDocument.documentString);
+      Scanner s = new Scanner(detailsDocument.getDocumentString());
       sb.append("{");
       if (s.hasNextLine()) {
         /* Skip version line. */
@@ -876,8 +877,8 @@ public class ResponseBuilder {
     BandwidthDocument bandwidthDocument = documentStore.retrieve(
         BandwidthDocument.class, false, fingerprint);
     if (bandwidthDocument != null &&
-        bandwidthDocument.documentString != null) {
-      String bandwidthLines = bandwidthDocument.documentString;
+        bandwidthDocument.getDocumentString() != null) {
+      String bandwidthLines = bandwidthDocument.getDocumentString();
       bandwidthLines = bandwidthLines.substring(0,
           bandwidthLines.length() - 1);
       return bandwidthLines;
@@ -900,8 +901,8 @@ public class ResponseBuilder {
     WeightsDocument weightsDocument = documentStore.retrieve(
         WeightsDocument.class, false, fingerprint);
     if (weightsDocument != null &&
-        weightsDocument.documentString != null) {
-      String weightsLines = weightsDocument.documentString;
+        weightsDocument.getDocumentString() != null) {
+      String weightsLines = weightsDocument.getDocumentString();
       weightsLines = weightsLines.substring(0, weightsLines.length() - 1);
       return weightsLines;
     } else {
@@ -923,8 +924,8 @@ public class ResponseBuilder {
     ClientsDocument clientsDocument = documentStore.retrieve(
         ClientsDocument.class, false, fingerprint);
     if (clientsDocument != null &&
-        clientsDocument.documentString != null) {
-      String clientsLines = clientsDocument.documentString;
+        clientsDocument.getDocumentString() != null) {
+      String clientsLines = clientsDocument.getDocumentString();
       clientsLines = clientsLines.substring(0, clientsLines.length() - 1);
       return clientsLines;
     } else {
@@ -949,8 +950,8 @@ public class ResponseBuilder {
     UptimeDocument uptimeDocument = documentStore.retrieve(
         UptimeDocument.class, false, fingerprint);
     if (uptimeDocument != null &&
-        uptimeDocument.documentString != null) {
-      String uptimeLines = uptimeDocument.documentString;
+        uptimeDocument.getDocumentString() != null) {
+      String uptimeLines = uptimeDocument.getDocumentString();
       uptimeLines = uptimeLines.substring(0, uptimeLines.length() - 1);
       return uptimeLines;
     } else {
diff --git a/src/org/torproject/onionoo/ReverseDomainNameResolver.java b/src/org/torproject/onionoo/ReverseDomainNameResolver.java
index 7f14460..e762811 100644
--- a/src/org/torproject/onionoo/ReverseDomainNameResolver.java
+++ b/src/org/torproject/onionoo/ReverseDomainNameResolver.java
@@ -55,9 +55,9 @@ public class ReverseDomainNameResolver {
   }
 
   private class RdnsLookupRequest extends Thread {
-    RdnsLookupWorker parent;
-    String address, hostName;
-    long lookupStartedMillis = -1L, lookupCompletedMillis = -1L;
+    private RdnsLookupWorker parent;
+    private String address, hostName;
+    private long lookupStartedMillis = -1L, lookupCompletedMillis = -1L;
     public RdnsLookupRequest(RdnsLookupWorker parent, String address) {
       this.parent = parent;
       this.address = address;
diff --git a/src/org/torproject/onionoo/UptimeDocumentWriter.java b/src/org/torproject/onionoo/UptimeDocumentWriter.java
index 06fde0f..a7b1bba 100644
--- a/src/org/torproject/onionoo/UptimeDocumentWriter.java
+++ b/src/org/torproject/onionoo/UptimeDocumentWriter.java
@@ -53,9 +53,9 @@ public class UptimeDocumentWriter implements FingerprintListener,
     if (uptimeStatus == null) {
       return;
     }
-    SortedSet<UptimeHistory> knownStatuses = uptimeStatus.history;
+    SortedSet<UptimeHistory> knownStatuses = uptimeStatus.getHistory();
     for (UptimeHistory status : knownStatuses) {
-      if (status.relay) {
+      if (status.isRelay()) {
         knownRelayStatuses.add(status);
       } else {
         knownBridgeStatuses.add(status);
@@ -77,10 +77,10 @@ public class UptimeDocumentWriter implements FingerprintListener,
     UptimeStatus uptimeStatus = this.documentStore.retrieve(
         UptimeStatus.class, true, fingerprint);
     if (uptimeStatus != null) {
-      SortedSet<UptimeHistory> history = uptimeStatus.history;
+      SortedSet<UptimeHistory> history = uptimeStatus.getHistory();
       UptimeDocument uptimeDocument = new UptimeDocument();
-      uptimeDocument.documentString = this.formatHistoryString(relay,
-          fingerprint, history, knownStatuses);
+      uptimeDocument.setDocumentString(this.formatHistoryString(relay,
+          fingerprint, history, knownStatuses));
       this.documentStore.store(uptimeDocument, fingerprint);
       this.writtenDocuments++;
     }
@@ -142,15 +142,15 @@ public class UptimeDocumentWriter implements FingerprintListener,
         / dataPointInterval) * dataPointInterval;
     int statusHours = 0;
     for (UptimeHistory hist : knownStatuses) {
-      if (hist.relay != relay) {
+      if (hist.isRelay() != relay) {
         continue;
       }
-      long histEndMillis = hist.startMillis + DateTimeHelper.ONE_HOUR
-          * hist.uptimeHours;
+      long histEndMillis = hist.getStartMillis() + DateTimeHelper.ONE_HOUR
+          * hist.getUptimeHours();
       if (histEndMillis < intervalStartMillis) {
         continue;
       }
-      while (hist.startMillis >= intervalStartMillis
+      while (hist.getStartMillis() >= intervalStartMillis
           + dataPointInterval) {
         statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
             ? statusHours : -1);
@@ -159,15 +159,16 @@ public class UptimeDocumentWriter implements FingerprintListener,
       }
       while (histEndMillis >= intervalStartMillis + dataPointInterval) {
         statusHours += (int) ((intervalStartMillis + dataPointInterval
-            - Math.max(hist.startMillis, intervalStartMillis))
+            - Math.max(hist.getStartMillis(), intervalStartMillis))
             / DateTimeHelper.ONE_HOUR);
         statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
             ? statusHours : -1);
         statusHours = 0;
         intervalStartMillis += dataPointInterval;
       }
-      statusHours += (int) ((histEndMillis - Math.max(hist.startMillis,
-          intervalStartMillis)) / DateTimeHelper.ONE_HOUR);
+      statusHours += (int) ((histEndMillis - Math.max(
+          hist.getStartMillis(), intervalStartMillis))
+          / DateTimeHelper.ONE_HOUR);
     }
     statusDataPoints.add(statusHours * 5 > dataPointIntervalHours
         ? statusHours : -1);
@@ -177,18 +178,18 @@ public class UptimeDocumentWriter implements FingerprintListener,
     int uptimeHours = 0;
     long firstStatusStartMillis = -1L;
     for (UptimeHistory hist : history) {
-      if (hist.relay != relay) {
+      if (hist.isRelay() != relay) {
         continue;
       }
       if (firstStatusStartMillis < 0L) {
-        firstStatusStartMillis = hist.startMillis;
+        firstStatusStartMillis = hist.getStartMillis();
       }
-      long histEndMillis = hist.startMillis + DateTimeHelper.ONE_HOUR
-          * hist.uptimeHours;
+      long histEndMillis = hist.getStartMillis() + DateTimeHelper.ONE_HOUR
+          * hist.getUptimeHours();
       if (histEndMillis < intervalStartMillis) {
         continue;
       }
-      while (hist.startMillis >= intervalStartMillis
+      while (hist.getStartMillis() >= intervalStartMillis
           + dataPointInterval) {
         if (firstStatusStartMillis < intervalStartMillis
             + dataPointInterval) {
@@ -201,14 +202,15 @@ public class UptimeDocumentWriter implements FingerprintListener,
       }
       while (histEndMillis >= intervalStartMillis + dataPointInterval) {
         uptimeHours += (int) ((intervalStartMillis + dataPointInterval
-            - Math.max(hist.startMillis, intervalStartMillis))
+            - Math.max(hist.getStartMillis(), intervalStartMillis))
             / DateTimeHelper.ONE_HOUR);
         uptimeDataPoints.add(uptimeHours);
         uptimeHours = 0;
         intervalStartMillis += dataPointInterval;
       }
-      uptimeHours += (int) ((histEndMillis - Math.max(hist.startMillis,
-          intervalStartMillis)) / DateTimeHelper.ONE_HOUR);
+      uptimeHours += (int) ((histEndMillis - Math.max(
+          hist.getStartMillis(), intervalStartMillis))
+          / DateTimeHelper.ONE_HOUR);
     }
     uptimeDataPoints.add(uptimeHours);
     List<Double> dataPoints = new ArrayList<Double>();
diff --git a/src/org/torproject/onionoo/UptimeStatus.java b/src/org/torproject/onionoo/UptimeStatus.java
index 0eb9dde..2e688b8 100644
--- a/src/org/torproject/onionoo/UptimeStatus.java
+++ b/src/org/torproject/onionoo/UptimeStatus.java
@@ -9,11 +9,20 @@ import java.util.TreeSet;
 class UptimeHistory
     implements Comparable<UptimeHistory> {
 
-  boolean relay;
+  private boolean relay;
+  public boolean isRelay() {
+    return this.relay;
+  }
 
-  long startMillis;
+  private long startMillis;
+  public long getStartMillis() {
+    return this.startMillis;
+  }
 
-  int uptimeHours;
+  private int uptimeHours;
+  public int getUptimeHours() {
+    return this.uptimeHours;
+  }
 
   UptimeHistory(boolean relay, long startMillis,
       int uptimeHours) {
@@ -86,7 +95,13 @@ class UptimeHistory
 
 class UptimeStatus extends Document {
 
-  SortedSet<UptimeHistory> history = new TreeSet<UptimeHistory>();
+  private SortedSet<UptimeHistory> history = new TreeSet<UptimeHistory>();
+  public void setHistory(SortedSet<UptimeHistory> history) {
+    this.history = history;
+  }
+  public SortedSet<UptimeHistory> getHistory() {
+    return this.history;
+  }
 
   public void fromDocumentString(String documentString) {
     Scanner s = new Scanner(documentString);
diff --git a/src/org/torproject/onionoo/UptimeStatusUpdater.java b/src/org/torproject/onionoo/UptimeStatusUpdater.java
index 7bf20e5..f524ea3 100644
--- a/src/org/torproject/onionoo/UptimeStatusUpdater.java
+++ b/src/org/torproject/onionoo/UptimeStatusUpdater.java
@@ -126,21 +126,21 @@ public class UptimeStatusUpdater implements DescriptorListener,
 
   private void addToHistory(UptimeStatus uptimeStatus, boolean relay,
       SortedSet<Long> newIntervals) {
-    SortedSet<UptimeHistory> history = uptimeStatus.history;
+    SortedSet<UptimeHistory> history = uptimeStatus.getHistory();
     for (long startMillis : newIntervals) {
       UptimeHistory interval = new UptimeHistory(relay, startMillis, 1);
       if (!history.headSet(interval).isEmpty()) {
         UptimeHistory prev = history.headSet(interval).last();
-        if (prev.relay == interval.relay &&
-            prev.startMillis + DateTimeHelper.ONE_HOUR
-            * prev.uptimeHours > interval.startMillis) {
+        if (prev.isRelay() == interval.isRelay() &&
+            prev.getStartMillis() + DateTimeHelper.ONE_HOUR
+            * prev.getUptimeHours() > interval.getStartMillis()) {
           continue;
         }
       }
       if (!history.tailSet(interval).isEmpty()) {
         UptimeHistory next = history.tailSet(interval).first();
-        if (next.relay == interval.relay &&
-            next.startMillis < interval.startMillis
+        if (next.isRelay() == interval.isRelay() &&
+            next.getStartMillis() < interval.getStartMillis()
             + DateTimeHelper.ONE_HOUR) {
           continue;
         }
@@ -150,15 +150,15 @@ public class UptimeStatusUpdater implements DescriptorListener,
   }
 
   private void compressHistory(UptimeStatus uptimeStatus) {
-    SortedSet<UptimeHistory> history = uptimeStatus.history;
+    SortedSet<UptimeHistory> history = uptimeStatus.getHistory();
     SortedSet<UptimeHistory> compressedHistory =
         new TreeSet<UptimeHistory>();
     UptimeHistory lastInterval = null;
     for (UptimeHistory interval : history) {
       if (lastInterval != null &&
-          lastInterval.startMillis + DateTimeHelper.ONE_HOUR
-          * lastInterval.uptimeHours == interval.startMillis &&
-          lastInterval.relay == interval.relay) {
+          lastInterval.getStartMillis() + DateTimeHelper.ONE_HOUR
+          * lastInterval.getUptimeHours() == interval.getStartMillis() &&
+          lastInterval.isRelay() == interval.isRelay()) {
         lastInterval.addUptime(interval);
       } else {
         if (lastInterval != null) {
@@ -170,7 +170,7 @@ public class UptimeStatusUpdater implements DescriptorListener,
     if (lastInterval != null) {
       compressedHistory.add(lastInterval);
     }
-    uptimeStatus.history = compressedHistory;
+    uptimeStatus.setHistory(compressedHistory);
   }
 
   private void writeHistory(String fingerprint,
diff --git a/src/org/torproject/onionoo/WeightsDocumentWriter.java b/src/org/torproject/onionoo/WeightsDocumentWriter.java
index 83fe872..8dcca0a 100644
--- a/src/org/torproject/onionoo/WeightsDocumentWriter.java
+++ b/src/org/torproject/onionoo/WeightsDocumentWriter.java
@@ -56,10 +56,10 @@ public class WeightsDocumentWriter implements FingerprintListener,
       if (weightsStatus == null) {
         continue;
       }
-      SortedMap<long[], double[]> history = weightsStatus.history;
+      SortedMap<long[], double[]> history = weightsStatus.getHistory();
       WeightsDocument weightsDocument = new WeightsDocument();
-      weightsDocument.documentString = this.formatHistoryString(
-          fingerprint, history);
+      weightsDocument.setDocumentString(this.formatHistoryString(
+          fingerprint, history));
       this.documentStore.store(weightsDocument, fingerprint);
     }
   }
diff --git a/src/org/torproject/onionoo/WeightsStatus.java b/src/org/torproject/onionoo/WeightsStatus.java
index 93f3087..872fd00 100644
--- a/src/org/torproject/onionoo/WeightsStatus.java
+++ b/src/org/torproject/onionoo/WeightsStatus.java
@@ -9,15 +9,24 @@ import java.util.TreeMap;
 
 class WeightsStatus extends Document {
 
-  SortedMap<long[], double[]> history = new TreeMap<long[], double[]>(
-      new Comparator<long[]>() {
+  private SortedMap<long[], double[]> history =
+      new TreeMap<long[], double[]>(new Comparator<long[]>() {
     public int compare(long[] a, long[] b) {
       return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;
     }
   });
+  public void setHistory(SortedMap<long[], double[]> history) {
+    this.history = history;
+  }
+  public SortedMap<long[], double[]> getHistory() {
+    return this.history;
+  }
 
-  Map<String, Integer> advertisedBandwidths =
+  private Map<String, Integer> advertisedBandwidths =
       new HashMap<String, Integer>();
+  public Map<String, Integer> getAdvertisedBandwidths() {
+    return this.advertisedBandwidths;
+  }
 
   public void fromDocumentString(String documentString) {
     Scanner s = new Scanner(documentString);
diff --git a/src/org/torproject/onionoo/WeightsStatusUpdater.java b/src/org/torproject/onionoo/WeightsStatusUpdater.java
index fce1c3e..1e5d559 100644
--- a/src/org/torproject/onionoo/WeightsStatusUpdater.java
+++ b/src/org/torproject/onionoo/WeightsStatusUpdater.java
@@ -179,9 +179,9 @@ public class WeightsStatusUpdater implements DescriptorListener,
                 new HashSet<String>());
           }
           this.descriptorDigestsByFingerprint.get(fingerprint).addAll(
-              weightsStatus.advertisedBandwidths.keySet());
+              weightsStatus.getAdvertisedBandwidths().keySet());
           this.advertisedBandwidths.putAll(
-              weightsStatus.advertisedBandwidths);
+              weightsStatus.getAdvertisedBandwidths());
         }
       }
       if (this.advertisedBandwidths.containsKey(
@@ -245,7 +245,7 @@ public class WeightsStatusUpdater implements DescriptorListener,
     if (weightsStatus == null) {
       weightsStatus = new WeightsStatus();
     }
-    SortedMap<long[], double[]> history = weightsStatus.history;
+    SortedMap<long[], double[]> history = weightsStatus.getHistory();
     long[] interval = new long[] { validAfterMillis, freshUntilMillis };
     if ((history.headMap(interval).isEmpty() ||
         history.headMap(interval).lastKey()[1] <= validAfterMillis) &&
@@ -267,7 +267,7 @@ public class WeightsStatusUpdater implements DescriptorListener,
         if (this.advertisedBandwidths.containsKey(descriptorDigest)) {
           int advertisedBandwidth =
               this.advertisedBandwidths.get(descriptorDigest);
-          weightsStatus.advertisedBandwidths.put(descriptorDigest,
+          weightsStatus.getAdvertisedBandwidths().put(descriptorDigest,
               advertisedBandwidth);
         }
       }
@@ -275,7 +275,7 @@ public class WeightsStatusUpdater implements DescriptorListener,
   }
 
   private void compressHistory(WeightsStatus weightsStatus) {
-    SortedMap<long[], double[]> history = weightsStatus.history;
+    SortedMap<long[], double[]> history = weightsStatus.getHistory();
     SortedMap<long[], double[]> compressedHistory =
         new TreeMap<long[], double[]>(history.comparator());
     long lastStartMillis = 0L, lastEndMillis = 0L;
@@ -332,7 +332,7 @@ public class WeightsStatusUpdater implements DescriptorListener,
       compressedHistory.put(new long[] { lastStartMillis, lastEndMillis },
           lastWeights);
     }
-    weightsStatus.history = compressedHistory;
+    weightsStatus.setHistory(compressedHistory);
   }
 
   private void updateWeightsStatuses() {
diff --git a/test/org/torproject/onionoo/DummyDocumentStore.java b/test/org/torproject/onionoo/DummyDocumentStore.java
index 0fce5d9..2f32833 100644
--- a/test/org/torproject/onionoo/DummyDocumentStore.java
+++ b/test/org/torproject/onionoo/DummyDocumentStore.java
@@ -51,7 +51,7 @@ public class DummyDocumentStore extends DocumentStore {
       boolean parse) {
     if (documentType.equals(UpdateStatus.class)) {
       UpdateStatus updateStatus = new UpdateStatus();
-      updateStatus.documentString = String.valueOf(this.lastModified);
+      updateStatus.setDocumentString(String.valueOf(this.lastModified));
       return documentType.cast(updateStatus);
     }
     throw new RuntimeException("Not implemented.");
diff --git a/test/org/torproject/onionoo/LookupServiceTest.java b/test/org/torproject/onionoo/LookupServiceTest.java
index ae220f8..e12ab2a 100644
--- a/test/org/torproject/onionoo/LookupServiceTest.java
+++ b/test/org/torproject/onionoo/LookupServiceTest.java
@@ -22,7 +22,6 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
-import org.torproject.onionoo.LookupService.LookupResult;
 
 public class LookupServiceTest {
 
@@ -121,59 +120,59 @@ public class LookupServiceTest {
     this.performLookups();
     if (countryCode == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).countryCode == null);
+          this.lookupResults.get(addressString).getCountryCode() == null);
     } else {
       assertEquals(countryCode,
-          this.lookupResults.get(addressString).countryCode);
+          this.lookupResults.get(addressString).getCountryCode());
     }
     if (countryName == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).countryName == null);
+          this.lookupResults.get(addressString).getCountryName() == null);
     } else {
       assertEquals(countryName,
-          this.lookupResults.get(addressString).countryName);
+          this.lookupResults.get(addressString).getCountryName());
     }
     if (regionName == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).regionName == null);
+          this.lookupResults.get(addressString).getRegionName() == null);
     } else {
       assertEquals(regionName,
-          this.lookupResults.get(addressString).regionName);
+          this.lookupResults.get(addressString).getRegionName());
     }
     if (cityName == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).cityName == null);
+          this.lookupResults.get(addressString).getCityName() == null);
     } else {
       assertEquals(cityName,
-          this.lookupResults.get(addressString).cityName);
+          this.lookupResults.get(addressString).getCityName());
     }
     if (latitude == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).latitude == null);
+          this.lookupResults.get(addressString).getLatitude() == null);
     } else {
       assertEquals(latitude,
-          this.lookupResults.get(addressString).latitude);
+          this.lookupResults.get(addressString).getLatitude());
     }
     if (longitude == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).longitude == null);
+          this.lookupResults.get(addressString).getLongitude() == null);
     } else {
       assertEquals(longitude,
-          this.lookupResults.get(addressString).longitude);
+          this.lookupResults.get(addressString).getLongitude());
     }
     if (aSNumber == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).aSNumber == null);
+          this.lookupResults.get(addressString).getAsNumber() == null);
     } else {
       assertEquals(aSNumber,
-          this.lookupResults.get(addressString).aSNumber);
+          this.lookupResults.get(addressString).getAsNumber());
     }
     if (aSName == null) {
       assertTrue(!this.lookupResults.containsKey(addressString) ||
-          this.lookupResults.get(addressString).aSName == null);
+          this.lookupResults.get(addressString).getAsName() == null);
     } else {
       assertEquals(aSName,
-          this.lookupResults.get(addressString).aSName);
+          this.lookupResults.get(addressString).getAsName());
     }
   }
 





More information about the tor-commits mailing list