Skip to content

Commit f551cbd

Browse files
committed
Merge pull request #5 from ccpmark/feature/invitee-interface
Common interface between Invitees and Invitee.Invitations
2 parents 4c72847 + e066c19 commit f551cbd

5 files changed

Lines changed: 67 additions & 8 deletions

File tree

src/main/java/com/robinpowered/sdk/RobinServiceFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
import com.robinpowered.sdk.credential.Credential;
77
import com.robinpowered.sdk.exception.RobinExceptionHandler;
88
import com.robinpowered.sdk.model.Account;
9+
import com.robinpowered.sdk.model.Invitable;
910
import com.robinpowered.sdk.model.Urn;
1011
import com.robinpowered.sdk.model.adapter.AccountReferenceAdapter;
12+
import com.robinpowered.sdk.model.adapter.InvitableAdapter;
1113
import com.robinpowered.sdk.model.adapter.JodaDateTimeAdapter;
1214
import com.robinpowered.sdk.model.adapter.RobinTypeAdapterFactory;
1315
import com.robinpowered.sdk.model.adapter.UrnAdapter;
@@ -60,6 +62,7 @@ protected Converter getResponseDataConverter() {
6062
// Set our naming policy to transform underscores <-> camelCase
6163
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
6264
.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter())
65+
.registerTypeAdapter(Invitable.class, new InvitableAdapter())
6366
.registerTypeAdapterFactory(new RobinTypeAdapterFactory())
6467
.registerTypeAdapter(Urn.class, new UrnAdapter())
6568
.registerTypeHierarchyAdapter(Account.Reference.class, new AccountReferenceAdapter())

src/main/java/com/robinpowered/sdk/model/Event.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public static CreationType fromString(String value) {
8282
private DateTime startedAt;
8383
private DateTime endedAt;
8484
private Boolean isAllDay;
85-
private List<Invitee> invitees;
85+
private List<Invitable> invitees;
8686

8787

8888
/**
@@ -210,7 +210,7 @@ public void setIsAllDay(Boolean isAllDay) {
210210
this.isAllDay = isAllDay;
211211
}
212212

213-
public void setInvitees(List<Invitee> invitees) {
213+
public void setInvitees(List<Invitable> invitees) {
214214
this.invitees = invitees;
215215
}
216216

@@ -220,7 +220,7 @@ public void setInvitees(List<Invitee> invitees) {
220220
*
221221
* @return A list of the event's invitees.
222222
*/
223-
public List<Invitee> getInvitees() {
223+
public List<Invitable> getInvitees() {
224224
return invitees;
225225
}
226226

@@ -275,10 +275,10 @@ public static class Booking {
275275
private final DateTime startedAt;
276276
private final DateTime endedAt;
277277
private final boolean isAllDay;
278-
private final List<Invitee.Invitation> invitees;
278+
private final List<Invitable> invitees;
279279

280-
public Booking(String ownerRef, String title, String description,
281-
DateTime startedAt, DateTime endedAt, boolean isAllDay, List<Invitee.Invitation> invitees) {
280+
public Booking(String ownerRef, String title, String description, DateTime startedAt, DateTime endedAt,
281+
boolean isAllDay, List<Invitable> invitees) {
282282

283283
this.ownerRef = ownerRef;
284284
this.title = title;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.robinpowered.sdk.model;
2+
3+
/**
4+
* Interface for models that may be invited to an {@link Event}.
5+
*/
6+
public interface Invitable {
7+
8+
String getEmail();
9+
10+
}

src/main/java/com/robinpowered/sdk/model/Invitee.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
* @todo This class needs further design once APIs are fully realized.
1212
*/
13-
public class Invitee implements IdentifiableApiResponseModel {
13+
public class Invitee implements IdentifiableApiResponseModel, Invitable {
1414

1515
/**
1616
* Constants
@@ -223,7 +223,7 @@ public String getMimeType() {
223223
/**
224224
* Used to invite others to an {@link Event} or {@link Event.Booking} and to become and {@link Invitee}.
225225
*/
226-
public static class Invitation {
226+
public static class Invitation implements Invitable {
227227

228228
private final String email;
229229

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.robinpowered.sdk.model.adapter;
2+
3+
import com.google.gson.JsonDeserializationContext;
4+
import com.google.gson.JsonDeserializer;
5+
import com.google.gson.JsonElement;
6+
import com.google.gson.JsonObject;
7+
import com.google.gson.JsonParseException;
8+
import com.google.gson.JsonSerializationContext;
9+
import com.google.gson.JsonSerializer;
10+
import com.robinpowered.sdk.model.Invitable;
11+
import com.robinpowered.sdk.model.Invitee;
12+
13+
import java.lang.reflect.Type;
14+
15+
/**
16+
* Handles adapting {@link Invitable} from JSON representations.
17+
*/
18+
public class InvitableAdapter implements JsonDeserializer<Invitable>, JsonSerializer<Invitable> {
19+
20+
@Override
21+
public Invitable deserialize(
22+
JsonElement json,
23+
Type typeOfT,
24+
JsonDeserializationContext context
25+
) throws JsonParseException {
26+
27+
JsonObject object = json.getAsJsonObject();
28+
boolean isInvitation = object.has("email") && !object.has("id");
29+
boolean isInvitee = object.has("email")
30+
&& object.has("id")
31+
&& object.has("event_id");
32+
33+
if (isInvitation) {
34+
return context.deserialize(object, Invitee.Invitation.class);
35+
} else if (isInvitee) {
36+
return context.deserialize(object, Invitee.class);
37+
}
38+
39+
throw new JsonParseException("Malformed json for invitees.");
40+
}
41+
42+
@Override
43+
public JsonElement serialize(Invitable invitable, Type typeOfSrc, JsonSerializationContext context) {
44+
return context.serialize(invitable);
45+
}
46+
}

0 commit comments

Comments
 (0)