# StattBuchung Hilfezentrum : systems.sdw.statt.Kalender

Created by Thomas Mack, last modified on Jul 05, 2017

## Beschreibung

Das folgende Java-Programm verwendet die Apache http-Klient Bibliothek um mit der API von stattbuchung.de zu kommunizieren. nach dem Aufbau der Verbindung wird die Liste der verfügbaren Kalender geholt. Dann werden alle Kalendereinträge geladen, die zu Kalenderarten gehören, die standardmäßig sichtbar sind und die zwischen einem Monat in der Vergangenheit und einem Jahr in der Zukunft liegen.

Code der Klasse

    package systems.sdw.statt;

    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.List;
    import java.util.Properties;

    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONObject;

    import systems.sdw.generic.Exceptions;
    import systems.sdw.statt.util.Client;
    import systems.sdw.statt.util.Converter;

    public class Kalender {

    	private static final String opcGetKalenderliste="255001";
    	private static final String opcGetEventCalendarItems="255115";

    	public static void main(String[] args) {

    		props.setProperty(Client.propServer, "stattbuchung.de");
    		props.setProperty(Client.propScheme, "https");
    		props.setProperty(Client.propPort, "443");

    		props.setProperty(Client.propLogin, "?");
    		props.setProperty(Client.propPassword, "?");

    		Client client=new Client(props);
    		try {
    			if (client.connect())	{
    				System.out.println("Connect OK");
    				//
    				// Einfachstes Beispiel: Unparametrisierter GET-Aufruf
    				JSONObject kalenderListe=client.get(opcGetKalenderliste);
    				System.out.println(kalenderListe.toString(2));

    				// Jetzt die Kalendereinträge holen. Es sollen alle Kalender geholt werden, die defaultmäßig visible==true
     				// in der Kalenderlisze voreingestellt haben. Wir wollen einen Monat zurück und 1 Jahr in die Zukunft gehen.

    				// 1 Monat zurück
    				Calendar von=Calendar.getInstance();
    				von.set(Calendar.MONTH, von.get(Calendar.MONTH)-1);

    				// 1 Jahr nach vorn
    				Calendar bis=Calendar.getInstance();
    				bis.set(Calendar.YEAR, bis.get(Calendar.YEAR)+1);

    				// Zähler für die Anzahl Kalender, die visible=true haben
    				int count=0;

    				// Beispiel als GET-Aufruf mit Parametern: Liste der Kalendereinträge

    				List<NameValuePair> nvps=new ArrayList <NameValuePair>();

    				nvps.add(new BasicNameValuePair("von", Converter.Timestamp2ISO8601String(von)));
    				nvps.add(new BasicNameValuePair("bis", Converter.Timestamp2ISO8601String(bis)));

    				for (int i=0; i<=kalenderListe.getJSONArray("items").length()-1; i++) {
    					JSONObject item=kalenderListe.getJSONArray("items").getJSONObject(i);
    					if (item.getBoolean("visible")==true) {
    						nvps.add(new BasicNameValuePair("oidItem["+(count++)+"]", new Long(item.getLong("oid")).toString()));
    					}
    				}
    				nvps.add(new BasicNameValuePair("itemCount", new Integer(count).toString()));

    				JSONObject getResponse1=client.get(opcGetEventCalendarItems, nvps);
    				System.out.println(getResponse1.toString(2));

    				// WICHTIG: Session schließen
    				client.disconnect();
    			}
    		} catch (Exceptions.NoSessionAvailableException e) {
    			System.out.println(e.getText());
    		} catch (Exceptions.WrongParamException e) {
    			System.out.println(e.getText());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}

    }