package in.co.praveenkumar.mdroid.moodlerest;
import in.co.praveenkumar.mdroid.helper.GsonExclude;
import in.co.praveenkumar.mdroid.model.MoodleEvents;
import java.io.Reader;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class MoodleRestEvent {
public static final int ID_TYPE_COURSE = 0;
public static final int ID_TYPE_EVENT = 1;
public static final int ID_TYPE_GROUP = 2;
private final String DEBUG_TAG = "MoodleRestEvent";
private String mUrl;
private String token;
public MoodleRestEvent(String mUrl, String token) {
this.mUrl = mUrl;
this.token = token;
}
/**
* Get all Calendar events of given ids in current Moodle site. Allowed list
* of ids are:
* <ul>
* <li>courseids (ID_TYPE_COURSE)</li>
* <li>eventids (ID_TYPE_EVENT)</li>
* <li>groupids (ID_TYPE_GROUP)</li>
* </ul>
*
* @param ids
* List of ids.
* @param userEvents
* Set if user events are to be included
* @param siteEvents
* Set if site events are to be included
* @param idType
* Type of the ids given. Ex.: use ID_TYPE_COURSE if requesting
* for course events
*
* <br/>
* <b>Note:</b> If only site and user events are required
* (excluding course or group events), pass null for ids
*
* @return MoodleEvents
*
* @author Praveen Kumar Pendyala (praveen@praveenkumar.co.in)
*/
public MoodleEvents getEventsForIds(List<String> ids, int idType,
Boolean userEvents, Boolean siteEvents) {
MoodleEvents mEvents = null;
String format = MoodleRestOption.RESPONSE_FORMAT;
String function = MoodleRestOption.FUNCTION_GET_EVENTS;
try {
// Adding all parameters.
String params = "";
// Moodle default endtime is today. Setting to year 2200
params += "&options[timeend]="
+ URLEncoder.encode("7258098600", "UTF-8");
// Hide user events if set to
if (!userEvents)
params += "&options[userevents]="
+ URLEncoder.encode("0", "UTF-8");
// Hide site events if set to
if (!siteEvents)
params += "&options[siteevents]="
+ URLEncoder.encode("0", "UTF-8");
if (ids == null)
ids = new ArrayList<>();
for (int i = 0; i < ids.size(); i++) {
switch (idType) {
case ID_TYPE_COURSE:
params += "&events[courseids][" + i + "]="
+ URLEncoder.encode(ids.get(i), "UTF-8");
break;
case ID_TYPE_EVENT:
params += "&events[eventids][" + i + "]="
+ URLEncoder.encode(ids.get(i), "UTF-8");
break;
case ID_TYPE_GROUP:
params += "&events[groupids][" + i + "]="
+ URLEncoder.encode(ids.get(i), "UTF-8");
break;
}
}
// Build a REST call url to make a call.
String restUrl = mUrl + "/webservice/rest/server.php" + "?wstoken="
+ token + "&wsfunction=" + function
+ "&moodlewsrestformat=" + format;
// Fetch content now.
MoodleRestCall mrc = new MoodleRestCall();
Reader reader = mrc.fetchContent(restUrl, params);
GsonExclude ex = new GsonExclude();
Gson gson = new GsonBuilder()
.addDeserializationExclusionStrategy(ex)
.addSerializationExclusionStrategy(ex).create();
mEvents = gson.fromJson(reader, MoodleEvents.class);
reader.close();
} catch (Exception e) {
Log.d(DEBUG_TAG, "URL encoding failed");
e.printStackTrace();
}
return mEvents;
}
}