Ejemplo n.º 1
0
  /**
   * Synchroniseert verwijderde polygonen met de server
   *
   * @param group groupid om polygonen uit te syncen
   * @throws SyncException
   */
  private void deletePolygons(int group) throws SyncException {
    Cursor c = db.getRemovedPolygons(group);
    int polygonid = 0;

    if (!c.moveToFirst()) {
      return; // Niks te syncen, dus gelijk klaar!
    }

    do {
      polygonid = c.getInt(0);

      HttpDelete httpd = new HttpDelete(serverUrl + "polygon/id/" + polygonid);
      UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

      try {
        httpd.addHeader(new BasicScheme().authenticate(creds, httpd));
      } catch (AuthenticationException e1) {
        Log.e(Mapp.TAG, e1.getStackTrace().toString());
        throw new SyncException("Authentication failed");
      }

      HttpResponse response;

      try {
        response = httpclient.execute(httpd);

        if (response.getStatusLine().getStatusCode() == 418) {
          throw new SyncException("Unable to synchronize because the server is a teapot.");
        } else if (response.getStatusLine().getStatusCode() == 401) {
          throw new SyncException("Not authorized");
        } else if (response.getStatusLine().getStatusCode() != 200) {
          // Er is iets mis gegaan.
          // Lees de uitvoer
          InputStream is = response.getEntity().getContent();
          BufferedReader r = new BufferedReader(new InputStreamReader(is));
          StringBuilder total = new StringBuilder();
          String line;
          while ((line = r.readLine()) != null) {
            total.append(line);
          }

          JSONObject result = null;
          result = new JSONObject(total.toString());
          Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
          throw new SyncException(result.getString("message"));
        } else {
          db.removeRemovedPolygon(polygonid);
        }
      } catch (ClientProtocolException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Epic HTTP failure");
      } catch (IOException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Exception during server synchronisation");
      } catch (JSONException e) {
        Log.e(Mapp.TAG, "Sync failed. Getting status message from JSON response failed.");
        throw new SyncException("Invalid server response");
      }
    } while (c.moveToNext());
  }
Ejemplo n.º 2
0
  /**
   * Stuurt nieuwe lidmaatschappen naar 't servertje
   *
   * @throws SyncException
   */
  private void putMemberships() throws SyncException {
    Cursor c = db.getNewMemberships();
    String email = "";
    int id = 0;

    if (!c.moveToFirst()) {
      return; // Niks te syncen, dus gelijk klaar!
    }

    do {
      HttpPut httpp = new HttpPut(serverUrl + "membership");
      UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

      id = c.getInt(0);
      email = c.getString(1);

      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
      nameValuePairs.add(new BasicNameValuePair("email", email));
      nameValuePairs.add(new BasicNameValuePair("group_id", id + ""));

      try {
        httpp.addHeader(new BasicScheme().authenticate(creds, httpp));
        httpp.setEntity(new UrlEncodedFormEntity(nameValuePairs));
      } catch (AuthenticationException e1) {
        Log.e(Mapp.TAG, e1.getStackTrace().toString());
        throw new SyncException("Authentication failed");
      } catch (UnsupportedEncodingException e) {
        Log.e(Mapp.TAG, e.getStackTrace().toString());
        throw new SyncException("Failed to encode data");
      }

      HttpResponse response;

      try {
        response = httpclient.execute(httpp);

        // Lees het resultaat van de actie in
        JSONObject result = null;
        InputStream is = response.getEntity().getContent();
        BufferedReader r = new BufferedReader(new InputStreamReader(is));
        StringBuilder total = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
          total.append(line);
        }

        result = new JSONObject(total.toString());

        if (response.getStatusLine().getStatusCode() == 418) {
          throw new SyncException("Unable to synchronize because the server is a teapot.");
        } else if (response.getStatusLine().getStatusCode() == 401) {
          throw new SyncException("Not authorized");
        } else if (response.getStatusLine().getStatusCode() != 200) {
          // Er is iets mis gegaan.
          Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
          throw new SyncException(result.getString("message"));
        } else {
          // Het 'nieuw'-vlaggetje verwijderen
          db.setMembershipIsSynced(id, email);
        }
      } catch (ClientProtocolException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Epic HTTP failure");
      } catch (IOException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Exception during server synchronisation");
      } catch (JSONException e) {
        Log.e(Mapp.TAG, "Sync failed. Response is no valid JSON or expected variable not found.");
        throw new SyncException("Invalid server response");
      }
    } while (c.moveToNext());
  }
Ejemplo n.º 3
0
  /**
   * Haalt info over de gegeven groep op en slaat deze lokaal op
   *
   * @param i het id van de op te halen groep
   * @param update of het een update betreft of een nieuwe polygoon is
   * @throws SyncException
   */
  private void updateGroup(int id, boolean update) throws SyncException {
    HttpGet httpg = new HttpGet(serverUrl + "group/id/" + id);
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

    try {
      httpg.addHeader(new BasicScheme().authenticate(creds, httpg));
    } catch (AuthenticationException e1) {
      Log.e(Mapp.TAG, e1.getMessage());
      throw new SyncException("Authentication failed");
    }

    HttpResponse response;

    try {
      response = httpclient.execute(httpg);

      // Lees het resultaat van de actie in
      InputStream is = response.getEntity().getContent();
      BufferedReader r = new BufferedReader(new InputStreamReader(is));
      StringBuilder total = new StringBuilder();
      String line;
      while ((line = r.readLine()) != null) {
        total.append(line);
      }

      if (response.getStatusLine().getStatusCode() == 418) {
        throw new SyncException("Unable to synchronize because the server is a teapot.");
      } else if (response.getStatusLine().getStatusCode() == 401) {
        throw new SyncException("Not authorized");
      } else if (response.getStatusLine().getStatusCode() != 200) {
        // Er is iets mis gegaan.
        JSONObject result = new JSONObject(total.toString());
        Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
        throw new SyncException(result.getString("message"));
      } else {
        // Alles is blijkbaar goed gegaan
        JSONObject result = new JSONObject(total.toString());

        if (!update) {
          db.addGroupFromServer(id, result.optString("email"), result.optString("name"));
        } else {
          db.editGroupFromServer(id, result.optString("email"), result.optString("name"));
          db.deleteMemberships(id);
        }

        JSONArray members = result.getJSONArray("members");

        for (int i = 0; i < members.length(); i++) {
          JSONObject o = members.getJSONObject(i);
          db.addMembership(
              o.getString("email"), id, (o.getString("accepted").equals("true")), false);
        }
      }
    } catch (ClientProtocolException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Epic HTTP failure");
    } catch (IOException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Exception during server synchronisation");
    } catch (JSONException e) {
      Log.e(Mapp.TAG, "Sync failed. Response is no valid JSON or expected variable not found.");
      throw new SyncException("Invalid server response");
    }
  }
Ejemplo n.º 4
0
  /**
   * Stuurt alle nieuwe polygonen naar de server
   *
   * @throws SyncException
   */
  private void putGroups() throws SyncException {
    Cursor c = db.getNewGroups();
    String name = "";
    int id = 0;

    if (!c.moveToFirst()) {
      return; // Niks te syncen, dus gelijk klaar!
    }

    /**
     * Als er tijdens het syncen een andere groep een ander id krijgt (omdat zijn id nodig was),
     * klopt onze cursor misschien niet meer dus moeten we opnieuw query'en.
     */
    boolean requery = false;

    do {
      HttpPut httpp = new HttpPut(serverUrl + "group");
      UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

      id = c.getInt(0);
      name = c.getString(1);

      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
      nameValuePairs.add(new BasicNameValuePair("name", name));

      try {
        httpp.addHeader(new BasicScheme().authenticate(creds, httpp));
        httpp.setEntity(new UrlEncodedFormEntity(nameValuePairs));
      } catch (AuthenticationException e1) {
        Log.e(Mapp.TAG, e1.getStackTrace().toString());
        throw new SyncException("Authentication failed");
      } catch (UnsupportedEncodingException e) {
        Log.e(Mapp.TAG, e.getStackTrace().toString());
        throw new SyncException("Failed to encode data");
      }

      HttpResponse response;

      try {
        response = httpclient.execute(httpp);

        // Lees het resultaat van de actie in
        JSONObject result = null;
        InputStream is = response.getEntity().getContent();
        BufferedReader r = new BufferedReader(new InputStreamReader(is));
        StringBuilder total = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
          total.append(line);
        }

        result = new JSONObject(total.toString());

        if (response.getStatusLine().getStatusCode() == 418) {
          throw new SyncException("Unable to synchronize because the server is a teapot.");
        } else if (response.getStatusLine().getStatusCode() == 401) {
          throw new SyncException("Not authorized");
        } else if (response.getStatusLine().getStatusCode() != 200) {
          // Er is iets mis gegaan.
          Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
          throw new SyncException(result.getString("message"));
        } else {
          // De polygoon een nieuw id geven en het 'nieuw'-vlaggetje verwijderen
          db.setGroupIsSynced(id);
          requery = db.updateGroupId(id, result.getInt("group_id"));
        }
      } catch (ClientProtocolException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Epic HTTP failure");
      } catch (IOException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Exception during server synchronisation");
      } catch (JSONException e) {
        Log.e(Mapp.TAG, "Sync failed. Response is no valid JSON or expected variable not found.");
        throw new SyncException("Invalid server response");
      }

      if (requery) {
        c = db.getNewGroups(); // Opnieuw laden omdat polygoonid's gewijzigd kunnen zijn inmiddels
      }
    } while (c.moveToNext());
  }
Ejemplo n.º 5
0
  /**
   * Werkt groepen bij
   *
   * @throws SyncException
   */
  private void updateGroups() throws SyncException {
    // Alle groepen die nog wel lokaal staan, maar waar volgens de server de gebruiker niet meer in
    // zit,
    // keihard wegmikken.
    Cursor c = db.getGroups();
    if (!c.moveToFirst()) {
      return; // Snel klaar.
    }

    // Checken welke groepen op de server aangemeld zijn
    HttpGet httpg = new HttpGet(serverUrl + "user");
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

    try {
      httpg.addHeader(new BasicScheme().authenticate(creds, httpg));
    } catch (AuthenticationException e1) {
      Log.e(Mapp.TAG, e1.getMessage());
      throw new SyncException("Authentication failed");
    }

    HttpResponse response;
    ArrayList<Integer> groupsOnServer = new ArrayList<Integer>();

    try {
      response = httpclient.execute(httpg);

      // Lees het resultaat van de actie in
      InputStream is = response.getEntity().getContent();
      BufferedReader r = new BufferedReader(new InputStreamReader(is));
      StringBuilder total = new StringBuilder();
      String line;
      while ((line = r.readLine()) != null) {
        total.append(line);
      }

      if (response.getStatusLine().getStatusCode() == 418) {
        throw new SyncException("Unable to synchronize because the server is a teapot.");
      } else if (response.getStatusLine().getStatusCode() == 401) {
        throw new SyncException("Not authorized");
      } else if (response.getStatusLine().getStatusCode() != 200) {
        // Er is iets mis gegaan.
        JSONObject result = new JSONObject(total.toString());
        Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
        throw new SyncException(result.getString("message"));
      } else {
        // Alles is blijkbaar goed gegaan
        JSONObject result = new JSONObject(total.toString());
        JSONArray groups = result.getJSONArray("groups");
        // TODO GET memberships
        for (int i = 0; i < groups.length(); i++) {
          JSONObject o = groups.getJSONObject(i);
          groupsOnServer.add(o.getInt("id"));
        }
      }
    } catch (ClientProtocolException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Epic HTTP failure");
    } catch (IOException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Exception during server synchronisation");
    } catch (JSONException e) {
      Log.e(Mapp.TAG, "Sync failed. Response is no valid JSON or expected variable not found.");
      throw new SyncException("Invalid server response");
    }

    // Alles verwijderen wat niet meer op de server zit
    ArrayList<Integer> groupsInDb = new ArrayList<Integer>();

    do {
      groupsInDb.add(c.getInt(0));
      if (!groupsOnServer.contains(c.getInt(0))) {
        groupsInDb.remove(new Integer(c.getInt(0)));
        db.removePolygonsFromGroup(c.getInt(0), false);
        db.deleteMemberships(c.getInt(0));
        db.removeGroup(c.getInt(0), false);
      }
    } while (c.moveToNext());

    // En nu alles toevoegen wat nog niet lokaal zit / updaten
    for (int i : groupsOnServer) {
      updateGroup(i, groupsInDb.contains(i));
    }
  }
Ejemplo n.º 6
0
  /**
   * Synchroniseert gewijzigde polygonen met de server
   *
   * @param group het id van de groep waaruit polygonen gesynct moeten worden
   * @throws SyncException
   */
  private void getPolygons(int group, long lastSync) throws SyncException {
    HttpGet httpg = new HttpGet(serverUrl + "polygons/group_id/" + group + "/since/" + lastSync);
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

    try {
      httpg.addHeader(new BasicScheme().authenticate(creds, httpg));
    } catch (AuthenticationException e1) {
      Log.e(Mapp.TAG, e1.getMessage());
      throw new SyncException("Authentication failed");
    }

    HttpResponse response;

    try {
      response = httpclient.execute(httpg);

      // Lees het resultaat van de actie in
      InputStream is = response.getEntity().getContent();
      BufferedReader r = new BufferedReader(new InputStreamReader(is));
      StringBuilder total = new StringBuilder();
      String line;
      while ((line = r.readLine()) != null) {
        total.append(line);
      }

      if (response.getStatusLine().getStatusCode() == 418) {
        throw new SyncException("Unable to synchronize because the server is a teapot.");
      } else if (response.getStatusLine().getStatusCode() == 401) {
        throw new SyncException("Not authorized");
      } else if (response.getStatusLine().getStatusCode() == 404) {
        // Geen nieuwe polygonen hier
        return;
      } else if (response.getStatusLine().getStatusCode() != 200) {
        // Er is iets mis gegaan.
        JSONObject result = new JSONObject(total.toString());
        Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
        throw new SyncException(result.getString("message"));
      } else {
        // Alles is blijkbaar goed gegaan
        JSONArray result = new JSONArray(total.toString());

        // Loop over de polygonen heen
        for (int i = 0; i < result.length(); i++) {
          JSONObject polygon = result.getJSONObject(i);

          // Deze polygoon is nieuw of gewijzigd dus we updaten 'm of voeren 'm in
          db.addPolygonFromServer(
              polygon.getInt("id"),
              polygon.getInt("group_id"),
              polygon.getInt("color"),
              polygon.getString("name"),
              polygon.optString("description"),
              polygon.getLong("created"));

          // Nu de punten invoeren
          JSONArray points = result.getJSONObject(i).getJSONArray("points");
          for (int j = 0; j < points.length(); j++) {
            JSONObject point = points.getJSONObject(j);
            db.addPolygonPoint(
                polygon.getInt("id"),
                point.getLong("latitude"),
                point.getLong("longitude"),
                point.getInt("order"),
                false);
          }
        }
      }
    } catch (ClientProtocolException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Epic HTTP failure");
    } catch (IOException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Exception during server synchronisation");
    } catch (JSONException e) {
      Log.e(Mapp.TAG, "Sync failed. Response is no valid JSON or expected variable not found.");
      throw new SyncException("Invalid server response");
    }
  }
Ejemplo n.º 7
0
  /**
   * Verwijdert polygonen lokaal als ze niet meer op de server staan. Naam van deze methode (C)
   * Joost Maar de inhoud van deze methode wel (C) Mathijs
   *
   * @param polygonIds een lijstje met polygonid's die op de server voorkomen (in deze groep)
   * @throws SyncException
   */
  private void removeDeletedPolygons(int group) throws SyncException {
    Cursor c = db.getAllPolygons(group);
    if (!c.moveToFirst()) {
      return; // Lokale db is al leeg
    }

    // Lijstje maken met alle id's op de server
    ArrayList<Integer> polygonIds = new ArrayList<Integer>();

    HttpGet httpg = new HttpGet(serverUrl + "polygons/group_id/" + group + "/since/1");
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

    try {
      httpg.addHeader(new BasicScheme().authenticate(creds, httpg));
    } catch (AuthenticationException e1) {
      Log.e(Mapp.TAG, e1.getMessage());
      throw new SyncException("Authentication failed");
    }

    HttpResponse response;

    try {
      response = httpclient.execute(httpg);

      // Lees het resultaat van de actie in
      InputStream is = response.getEntity().getContent();
      BufferedReader r = new BufferedReader(new InputStreamReader(is));
      StringBuilder total = new StringBuilder();
      String line;
      while ((line = r.readLine()) != null) {
        total.append(line);
      }

      if (response.getStatusLine().getStatusCode() == 418) {
        throw new SyncException("Unable to synchronize because the server is a teapot.");
      } else if (response.getStatusLine().getStatusCode() == 401) {
        throw new SyncException("Not authorized");
      } else if (response.getStatusLine().getStatusCode() == 404) {
        // Geen polygonen hier
        do {
          if (!(c.getInt(3) == 1)) {
            db.removePolygon(c.getInt(0), false);
          }
        } while (c.moveToNext());
        return;
      } else if (response.getStatusLine().getStatusCode() != 200) {
        // Er is iets mis gegaan.
        JSONObject result = new JSONObject(total.toString());
        Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
        throw new SyncException(result.getString("message"));
      } else {
        // Alles is blijkbaar goed gegaan
        JSONArray result = new JSONArray(total.toString());

        // Loop over de polygonen heen
        for (int i = 0; i < result.length(); i++) {
          JSONObject polygon = result.getJSONObject(i);
          polygonIds.add(polygon.getInt("id"));
        }
      }
    } catch (ClientProtocolException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Epic HTTP failure");
    } catch (IOException e) {
      Log.e(Mapp.TAG, e.getMessage());
      throw new SyncException("Exception during server synchronisation");
    } catch (JSONException e) {
      Log.e(Mapp.TAG, "Sync failed. Response is no valid JSON or expected variable not found.");
      throw new SyncException("Invalid server response");
    }

    // Nu we eindelijk alle id's hebben, kijken of er in de lokale db id's voorkomen die niet in
    // onze nieuwe lijst zitten
    do {
      if (!polygonIds.contains(c.getInt(0)) && c.getInt(3) != 1) {
        db.removePolygon(c.getInt(0), false);
      }
    } while (c.moveToNext());
  }
Ejemplo n.º 8
0
  /**
   * Synchroniseert gewijzigde polygonen met de server
   *
   * @param group het id van de groep waaruit polygonen gesynct moeten worden
   * @throws SyncException
   */
  private void postPolygons(int group) throws SyncException {
    Cursor c = db.getChangedPolygons(group);
    int polygonid = 0;
    String name = "";
    String color = "";
    String desc = "";

    if (!c.moveToFirst()) {
      return; // Niks te syncen, dus gelijk klaar!
    }

    do {
      HttpPost httpp = new HttpPost(serverUrl + "polygon");
      UsernamePasswordCredentials creds = new UsernamePasswordCredentials(mappUser, mappPass);

      polygonid = c.getInt(0);
      name = c.getString(2);
      color = c.getString(1);
      desc = c.getString(3);

      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
      nameValuePairs.add(new BasicNameValuePair("id", polygonid + ""));
      nameValuePairs.add(new BasicNameValuePair("name", name));
      nameValuePairs.add(new BasicNameValuePair("group_id", group + ""));
      nameValuePairs.add(new BasicNameValuePair("color", color));
      nameValuePairs.add(new BasicNameValuePair("description", desc));

      // Nu de punten van de polygoon ophalen en die bijvoegen
      Cursor points = db.getAllPolygonPoints(polygonid);
      if (!points.moveToFirst()) {
        // Hier klopt iets niet, de polygoon heeft geen punten!
        db.removePolygon(polygonid, true);
        return;
      }

      do {
        nameValuePairs.add(
            new BasicNameValuePair(
                "points[]",
                points.getString(0) + "," + points.getString(1) + "," + points.getString(2)));
      } while (points.moveToNext());

      try {
        httpp.addHeader(new BasicScheme().authenticate(creds, httpp));
        httpp.setEntity(new UrlEncodedFormEntity(nameValuePairs));
      } catch (AuthenticationException e1) {
        Log.e(Mapp.TAG, e1.getMessage());
        throw new SyncException("Authentication failed");
      } catch (UnsupportedEncodingException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Failed to encode data");
      }

      HttpResponse response;

      try {
        response = httpclient.execute(httpp);

        if (response.getStatusLine().getStatusCode() == 418) {
          throw new SyncException("Unable to synchronize because the server is a teapot.");
        } else if (response.getStatusLine().getStatusCode() == 401) {
          throw new SyncException("Not authorized");
        } else if (response.getStatusLine().getStatusCode() != 200) {
          // Er is iets mis gegaan.

          // Lees het resultaat van de actie in
          JSONObject result = null;
          InputStream is = response.getEntity().getContent();
          BufferedReader r = new BufferedReader(new InputStreamReader(is));
          StringBuilder total = new StringBuilder();
          String line;
          while ((line = r.readLine()) != null) {
            total.append(line);
          }

          result = new JSONObject(total.toString());

          Log.e(Mapp.TAG, "Sync error: " + result.getString("message"));
          throw new SyncException(result.getString("message"));
        } else {
          db.setPolygonIsSynced(polygonid);
        }
      } catch (ClientProtocolException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Epic HTTP failure");
      } catch (IOException e) {
        Log.e(Mapp.TAG, e.getMessage());
        throw new SyncException("Exception during server synchronisation");
      } catch (JSONException e) {
        Log.e(Mapp.TAG, "Sync failed. Response is no valid JSON or expected variable not found.");
        throw new SyncException("Invalid server response");
      }
    } while (c.moveToNext());
  }