/*
* Copyright (C) 2003-2015 eXo Platform SAS.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.exoplatform.calendar.client.rest.connector;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.nio.file.Path;
import java.util.List;
import org.exoplatform.calendar.client.model.*;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* Created by The eXo Platform SAS
* Author : eXoPlatform
* exo@exoplatform.com
* Jul 21, 2015
*/
public class ExoCalendarConnector implements ExoCalendarConnectorInterface {
private String BASE_URL;
public static final Gson gson = new GsonBuilder().create();
// Constructor 1.
public ExoCalendarConnector(String base_url) {
this.BASE_URL = base_url;
}
// Constructor 2.
public ExoCalendarConnector(String base_url, String username, String password) {
this.BASE_URL = base_url;
final String _username = username;
final String _password = password;
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(_username, _password.toCharArray());
}
});
}
// Constructor 3.
public ExoCalendarConnector(String base_url, Authenticator authenticator) {
this.BASE_URL = base_url;
Authenticator.setDefault(authenticator);
}
public ExoCalendarCollection getCalendars() throws Exception {
String url = BASE_URL + ServiceInfo.getCalendarsUri();
String json = HttpUtils.get(url);
return gson.fromJson(json, ExoCalendarCollection.class);
}
public String createCalendar(ExoCalendar calendar) throws Exception {
String url = BASE_URL + ServiceInfo.getCalendarsUri();
String json = gson.toJson(calendar);
return HttpUtils.post(json, url);
}
public ExoCalendar getCalendarById(String id) throws Exception {
String url = BASE_URL + ServiceInfo.getCalendarUri(id);
String json = HttpUtils.get(url);
return gson.fromJson(json, ExoCalendar.class);
}
public int updateCalendar(ExoCalendar calendar, String id) throws Exception {
String url = BASE_URL + ServiceInfo.getCalendarUri(id);
String json = gson.toJson(calendar);
return HttpUtils.put(json, url);
}
public int deleteCalendar(String id) throws Exception {
String url = BASE_URL + ServiceInfo.getCalendarUri(id);
return HttpUtils.delete(url);
}
public ExoEventCollection getEventsByCalendarId(String calendar_id) throws Exception {
String url = BASE_URL + ServiceInfo.getEventsUri(calendar_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, ExoEventCollection.class);
}
public ExoEvent getEventById(String event_id) throws Exception {
String url = BASE_URL + ServiceInfo.getEventUri(event_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, ExoEvent.class);
}
public String createEvent(ExoEvent event, String calendar_id) throws Exception {
String url = BASE_URL + ServiceInfo.getEventsUri(calendar_id);
String json = gson.toJson(event);
return HttpUtils.post(json, url);
}
public int updateEvent(ExoEvent event, String event_id) throws Exception {
String url = BASE_URL + ServiceInfo.getEventUri(event_id);
String json = gson.toJson(event);
return HttpUtils.put(json, url);
}
public int deleteEvent(String event_id) throws Exception {
String url = BASE_URL + ServiceInfo.getEventUri(event_id);
return HttpUtils.delete(url);
}
public ExoTaskCollection getTasksByCalendarId(String calendar_id) throws Exception {
String url = BASE_URL + ServiceInfo.getTasksUri(calendar_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, ExoTaskCollection.class);
}
public ExoTask getTaskById(String task_id) throws Exception {
String url = BASE_URL + ServiceInfo.getTaskUri(task_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, ExoTask.class);
}
public String createTask(ExoTask task, String calendar_id) throws Exception {
String url = BASE_URL + ServiceInfo.getTasksUri(calendar_id);
String json = gson.toJson(task);
return HttpUtils.post(json, url);
}
public int updateTask(ExoTask task, String task_id) throws Exception {
String url = BASE_URL + ServiceInfo.getTaskUri(task_id);
String json = gson.toJson(task);
return HttpUtils.put(json, url);
}
public int deleteTask(String task_id) throws Exception {
String url = BASE_URL + ServiceInfo.getTaskUri(task_id);
return HttpUtils.delete(url);
}
/**
* Get attachments of an event specified by id.
*/
public AttachmentCollection getAttachmentsByEventId(String event_id) throws Exception {
String url = BASE_URL + ServiceInfo.getAttachmentsUri(event_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, AttachmentCollection.class);
}
/**
* Get an attachment by its id.
*/
public Attachment getAttachmentById(String attachment_id) throws Exception {
String url = BASE_URL + ServiceInfo.getAttachmentUri(attachment_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, Attachment.class);
}
/**
* Attach files to an event.
*/
public String createAttachment(List<Path> paths, String event_id) throws Exception {
String url = BASE_URL + ServiceInfo.getAttachmentsUri(event_id);
return HttpUtils.upload(paths, url);
}
/**
* Delete an attachment specified by its id.
*/
public int deleteAttachment(String attachment_id) throws Exception {
String url = BASE_URL + ServiceInfo.getAttachmentUri(attachment_id);
return HttpUtils.delete(url);
}
/**
* Get invitations of an event specified by id.
*/
public InvitationCollection getInvitationsByEventId(String event_id) throws Exception {
String url = BASE_URL + ServiceInfo.getInvitationsUri(event_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, InvitationCollection.class);
}
/**
* Get an invitation by its id.
*/
public Invitation getInvitationById(String invitation_id) throws Exception {
String url = BASE_URL + ServiceInfo.getInvitationUri(invitation_id);
String json = HttpUtils.get(url);
return gson.fromJson(json, Invitation.class);
}
/**
* Create an invitation of a given event.
*/
public String createInvitation(Invitation invitation, String event_id) throws Exception {
String url = BASE_URL + ServiceInfo.getInvitationsUri(event_id);
String json = gson.toJson(invitation);
return HttpUtils.post(json, url);
}
/**
* Update an invitation specified by its id.
*/
public int updateInvitation(Invitation invitation, String invitation_id) throws Exception {
String url = BASE_URL + ServiceInfo.getInvitationUri(invitation_id);
String json = gson.toJson(invitation);
return HttpUtils.put(json, url);
}
/**
* Delete an invitation specified by its id.
*/
public int deleteInvitation(String invitation_id) throws Exception {
String url = BASE_URL + ServiceInfo.getInvitationUri(invitation_id);
return HttpUtils.delete(url);
}
}