Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Alla oleva esimerkki hakee yksittäisen varauksen tiedot sekä tekee varaushaun Java:lla. Esimerkissä käytetään Apache HttpClient ja Googlen Gson kirjastoja helpottamaan http-kutsun tekemistä sekä JSON:n käsittelyä.

Luodut rajapintaluokat eivät aina sisällä kaikkia mahdollisia kenttiä joten lisää niitä tarpeen mukaan. Koodi ei myöskään sisällä virheenkäsittelyä.

Voit ladata maven projektin ja ajaa sen komentoriviltä.

Info

Muista ensin vaihtaa API_KEY koodiin.

Code Block
languagebash
mvn package
mvn exec:java -Dexec.mainClass="com.example.Main"

Voit tuoda projektin Eclipseen valitsemalla File -> Import -> Existing projects into workspace ajettuasi ensin alla olevan komennon komentoriviltä.

Code Block
languagebash
mvn eclipse:eclipse

Sen jälkeen koodia voi ajaa myös suoraan Eclipsestä valitsemalla Run As -> Java Application

Java-esimerkki

Code Block
languagejava
package com.example;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;

public class Main {

   private static String API_KEY = "oma_api_key";

   public static void main(String[] a) throws Exception {
      ReservationService service = new ReservationService();
      System.out.println(service.getReservation("1234"));
      JReservationQuery query = new JReservationQuery();
      DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
      query.startDate = df.parse("15.1.2014");
      query.endDate = df.parse("17.1.2014");
      query.room = Arrays.asList("G205");
      System.out.println(service.searchReservations(query));
   }

   public static class ReservationService {
      private String serviceUrl = "https://opendata.metropolia.fi/r1/reservation";
      private static Gson gson = new GsonBuilder()
            .setDateFormat("yyyy-MM-dd'T'HH:mm").disableHtmlEscaping().create();

      public JReservation getReservation(String id) throws JsonSyntaxException,
            ParseException, IOException {
         HttpClient client = getClient();
         HttpGet get = new HttpGet(serviceUrl + "/" + id + "?apiKey=" + API_KEY);
         HttpResponse response = client.execute(get);
         try {
            JResult result = gson.fromJson(
                  EntityUtils.toString(response.getEntity(), "UTF-8"),
                  JResult.class);
            if (result != null && result.reservations != null && 
                    !result.reservations.isEmpty()) {
               return result.reservations.get(0);
            }
            return null;
         } finally {
            get.releaseConnection();
         }

      }

      public List<JReservation> searchReservations(JReservationQuery query)
            throws ClientProtocolException, IOException {

         HttpClient client = getClient();
         HttpPost post = new HttpPost(serviceUrl + "/search?apiKey=" + API_KEY);
         String json = gson.toJson(query);
         StringEntity entity = new StringEntity(json, ContentType.create(
               "application/json", "UTF-8"));
         post.setEntity(entity);
         HttpResponse response = client.execute(post);
         try {
            JResult result = gson.fromJson(
                  EntityUtils.toString(response.getEntity(), "UTF-8"),
                  JResult.class);
            return result.reservations;
         } finally {
            post.releaseConnection();
         }

      }

      private HttpClient getClient() {
         DefaultHttpClient client = new DefaultHttpClient();
         HttpParams params = client.getParams();
         HttpConnectionParams.setConnectionTimeout(params, 30000);
         HttpConnectionParams.setSoTimeout(params, 30000);
         return client;
      }

   }

   public static class JResult {
      public String status;
      public List<JReservation> reservations;
   }

   public static class JReservation {
      public String id;
      public String subject;
      public Date startDate;
      public Date endDate;
      public List<JResource> resources;

      public String toString() {
         return "\n" + subject + " " + startDate + " - " + endDate + " ("
               + resources + ")";
      }
   }

   public static class JResource {
      public String id;
      public String type;
      public String code;
      public String name;

      public String toString() {
         return name+" "+code;
      }
   }

   public static class JReservationQuery {
      public Date startDate;
      public Date endDate;
      public List<String> room;
   }

}