diff --git a/.gitignore b/.gitignore index 4f76b3a..c9cf438 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /download /eclipseBin +/src/test ## gradle /.gradle diff --git a/README.md b/README.md index cdcbec9..e0825a9 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,21 @@ -Creatubbles Web Services API +___ +Receiving the access code +======== + +If you want to use the mod you need to authorize your application via client_id and client secret (see: [Creatubbles API documentation](https://developers.creatubbles.com/api) for more details). + +For now you can receive the client_id and client_secret by sending an email request to [support@creatubbles.com](mailto:support@creatubbles.com) + +___ +Creatubbles Web Services API ======== A Java library to assist in interations between Java applications and the Creatubbles Web Services API -Please check out the [Wiki](https://github.com/creatubbles/api/wiki) to see the structure of calls to and responses back from the Web Service +Please check out the [Creatubbles API documentation](https://developers.creatubbles.com/api) to see the structure of calls to and responses back from the Web Service ___ Contributing To This Project ========= -This project uses gradle. To set it up, simply clone and open up a terminal in the cloned folder, then run `gradlew eclipse` for Eclipse, or `gradlew idea` for IntelliJ IDEA. This will generate a project which you can then import into your IDE. \ No newline at end of file +This project uses gradle. To set it up, simply clone and open up a terminal in the cloned folder, then run `gradlew eclipse` for Eclipse, or `gradlew idea` for IntelliJ IDEA. This will generate a project which you can then import into your IDE. diff --git a/build.gradle b/build.gradle index 43bec0b..23d7a49 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,3 @@ -apply plugin: 'maven' -apply plugin: 'java' -apply plugin: 'eclipse' -apply plugin: 'idea' - buildscript { repositories { mavenCentral() @@ -12,6 +7,14 @@ buildscript { } } +plugins { + id 'java' + id 'maven' + id 'eclipse' + id 'idea' + id 'net.franz-becker.gradle-lombok' version '1.5' +} + archivesBaseName = "creatubbles-wsapi" group = 'com.creatubbles.api' description = "WS API for Creatubbles" @@ -31,7 +34,7 @@ if (System.getenv('BUILD_NUMBER') != null) { tasks.withType(JavaCompile) { options.encoding = 'UTF-8' -} +} repositories { mavenCentral() @@ -42,6 +45,19 @@ dependencies { compile group: 'org.glassfish.jersey.core', name: 'jersey-client', version: '2.22.1' } +lombok { + version = "1.16.8" + sha256 = "fe32b29b7b33eb2b19866cbc5345c59c9984a6036cc396856a04c0d09f99ea68" +} + +import net.franz_becker.gradle.lombok.task.DelombokTask + +task delombok(type: DelombokTask) { + args("src/main/java", "-d", "build/sources/delomboked/java") +} + +tasks.eclipse.dependsOn installLombok + task sourceJar(type: Jar) { from sourceSets.main.allSource classifier = 'sources' @@ -55,12 +71,13 @@ artifacts { } uploadArchives { + mavendir = System.getenv('MAVENDIR') ?: project.getProperty('mavendir') onlyIf { - return project.hasProperty('mavendir') + return mavendir } repositories { mavenDeployer { - repository(url: "file://${project.mavendir}") + repository(url: 'file://' + mavendir) } } } diff --git a/gradle.properties b/gradle.properties index beb72cc..9a92fa1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,2 @@ -version=1.0.0 \ No newline at end of file +version=2.0.1 +mavendir= diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/lombok.config b/lombok.config new file mode 100644 index 0000000..3e1316f --- /dev/null +++ b/lombok.config @@ -0,0 +1,2 @@ +config.stopBubbling = true +lombok.equalsAndHashCode.callSuper = call \ No newline at end of file diff --git a/src/main/java/com/creatubbles/api/CreatubblesAPI.java b/src/main/java/com/creatubbles/api/CreatubblesAPI.java index 898d1d1..a307898 100644 --- a/src/main/java/com/creatubbles/api/CreatubblesAPI.java +++ b/src/main/java/com/creatubbles/api/CreatubblesAPI.java @@ -1,57 +1,66 @@ package com.creatubbles.api; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Type; +import java.nio.file.Files; +import java.util.Map.Entry; + +import org.glassfish.jersey.client.ClientProperties; +import org.glassfish.jersey.client.JerseyClient; +import org.glassfish.jersey.client.JerseyClientBuilder; + import com.creatubbles.api.core.Gallery; -import com.creatubbles.api.request.amazon.UploadS3ImageRequest; -import com.creatubbles.api.request.auth.OAuthAccessTokenRequest; +import com.creatubbles.api.core.LandingUrl; +import com.creatubbles.api.request.amazon.UploadS3FileRequest; import com.creatubbles.api.request.creation.CreateCreationRequest; import com.creatubbles.api.request.creation.CreationsUploadsRequest; -import com.creatubbles.api.request.creation.GetCreationsRequest; import com.creatubbles.api.request.creation.PingCreationsUploadsRequest; -import com.creatubbles.api.request.creator.GetCreatorsRequest; -import com.creatubbles.api.request.user.UserProfileRequest; -import com.creatubbles.api.response.auth.OAuthAccessTokenResponse; -import com.creatubbles.api.response.auth.SignUpResponse; +import com.creatubbles.api.request.landingurls.GetLandingUrlsRequest; +import com.creatubbles.api.request.landingurls.GetSpecificLandingUrlRequest; import com.creatubbles.api.response.creation.CreateCreationResponse; import com.creatubbles.api.response.creation.CreationsUploadsResponse; -import com.creatubbles.api.response.creation.GetCreationsResponse; -import com.creatubbles.api.response.creator.CreateCreatorResponse; -import com.creatubbles.api.response.creator.GetCreatorsResponse; -import com.creatubbles.api.response.gallery.CreateUserGalleryResponse; -import com.creatubbles.api.response.user.UserProfileResponse; -import com.creatubbles.api.util.EndPoints; +import com.creatubbles.api.response.landingurls.GetLandingUrlsResponse; +import com.creatubbles.api.response.landingurls.GetSpecificLandingUrlResponse; +import com.creatubbles.api.util.HttpUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import org.glassfish.jersey.client.ClientProperties; -import org.glassfish.jersey.client.JerseyClient; -import org.glassfish.jersey.client.JerseyClientBuilder; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; public class CreatubblesAPI { + + + public static final String URL_BASE = "https://api.creatubbles.com/v2/"; + public static final String URL_BASE_STAGING = "https://api.staging.creatubbles.com/v2/"; + public final static Gson GSON = new GsonBuilder() - .registerTypeAdapter(SignUpResponse.class, new SignUpResponse()) - .registerTypeAdapter(UserProfileResponse.class, new UserProfileResponse()) - .registerTypeAdapter(CreateCreatorResponse.class, new CreateCreatorResponse()) - .registerTypeAdapter(CreateUserGalleryResponse.class, new CreateUserGalleryResponse()) - .registerTypeAdapter(CreateUserGalleryResponse.class, new CreateUserGalleryResponse()) - .registerTypeAdapter(Gallery.class, new Gallery()) - .registerTypeAdapter(GetCreatorsResponse.class, new GetCreatorsResponse()) - .registerTypeAdapter(GetCreationsResponse.class, new GetCreationsResponse()) - .registerTypeAdapter(CreateCreationResponse.class, new CreateCreationResponse()) - .registerTypeAdapter(CreationsUploadsResponse.class, new CreationsUploadsResponse()) + .registerTypeAdapter(Gallery.class, new Gallery.Serializer()) + .registerTypeAdapter(String.class, new StringAdapter()) + .registerTypeAdapterFactory(new JsonHacks()) .create(); public final static JerseyClient CLIENT = JerseyClientBuilder .createClient() .property(ClientProperties.CONNECT_TIMEOUT, 5000) - .property(ClientProperties.READ_TIMEOUT, 5000) + .property(ClientProperties.READ_TIMEOUT, 20000) .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, Boolean.TRUE); - public static String buildURL(final String endPoint) { - String base = staging ? EndPoints.URL_BASE_STAGING : EndPoints.URL_BASE; + public static String buildURL(final Object end) { + String endPoint = end.toString(); + if (endPoint.startsWith("https://")) { + return endPoint; + } + String base = staging ? URL_BASE_STAGING : URL_BASE; return base.concat(endPoint); } @@ -61,42 +70,101 @@ public static void setStagingMode(boolean staging) { CreatubblesAPI.staging = staging; } - public static void main(String[] args) throws IOException { - CreatubblesAPI.setStagingMode(true); - OAuthAccessTokenRequest request = new OAuthAccessTokenRequest("jevgeni.koltsin@gmail.com", "ccttbb"); - OAuthAccessTokenResponse response = request.execute().getResponse(); - String accessToken = response.access_token; - System.out.println(accessToken); - - UserProfileRequest userProfileRequest = new UserProfileRequest(accessToken); - UserProfileResponse userProfileResponse = userProfileRequest.execute().getResponse(); - System.out.println(userProfileResponse.user.id); + public static boolean stagingModeEnabled() { + return staging; + } - GetCreatorsRequest getCreators = new GetCreatorsRequest(userProfileResponse.user.id, accessToken); - GetCreatorsResponse getCreatorsResponse = getCreators.execute().getResponse(); - System.out.println(getCreatorsResponse.creators != null); + public static void main(String[] args) throws IOException { + // Additional examples can be found in the JUnit test files - GetCreationsRequest getCreations = new GetCreationsRequest(userProfileResponse.user.id, accessToken); - GetCreationsResponse getCreationsResponse = getCreations.execute().getResponse(); - System.out.println(getCreationsResponse.total_count); + CreatubblesAPI.setStagingMode(true); + String accessToken = ""; // TODO commit tests AuthTests.getAuthToken(); CreateCreationRequest createCreation = new CreateCreationRequest(accessToken); CreateCreationResponse createCreationResponse = createCreation.execute().getResponse(); - System.out.println(createCreationResponse.creation.id); + System.out.println(createCreationResponse.getCreation().getId()); + + File file = new File("C:/dev/1.png"); + String extension = HttpUtil.getExtension(file.getPath()); - CreationsUploadsRequest creationsUploads = new CreationsUploadsRequest(createCreationResponse.creation.id, accessToken); + CreationsUploadsRequest creationsUploads = new CreationsUploadsRequest(createCreationResponse.getCreation().getId(), extension, accessToken); CreationsUploadsResponse creationsUploadsResponse = creationsUploads.execute().getResponse(); - System.out.println(creationsUploadsResponse.url); - System.out.println(creationsUploadsResponse.id); + System.out.println(creationsUploadsResponse.getUrl()); + System.out.println(creationsUploadsResponse.getId()); + + GetLandingUrlsRequest getLandingUrls = new GetLandingUrlsRequest(accessToken); + for (GetLandingUrlsResponse landingUrl : getLandingUrls.execute().getResponseList()) { + System.out.println(landingUrl.getUrl().getType() + ":" + landingUrl.getUrl().getUrl()); + } + + GetSpecificLandingUrlRequest getSpecificLandingUrl = new GetSpecificLandingUrlRequest(accessToken, LandingUrl.LandingUrlType.CTB_USER_PROFILE); + GetSpecificLandingUrlResponse getSpecificLandingUrlResponse = getSpecificLandingUrl.execute().getResponse(); + LandingUrl url = getSpecificLandingUrlResponse.getUrl(); + System.out.println("specific url - " + url.getType() + ":" + url.getUrl()); - File file = new File("C:/dev/1.png"); byte[] data = Files.readAllBytes(file.toPath()); - UploadS3ImageRequest uploadS3Image = new UploadS3ImageRequest(data, creationsUploadsResponse.url); + + UploadS3FileRequest uploadS3Image = new UploadS3FileRequest(data, creationsUploadsResponse.getUrl(), creationsUploadsResponse.getType()); uploadS3Image.execute().getResponse(); - PingCreationsUploadsRequest pingCreationsUploads = new PingCreationsUploadsRequest(creationsUploadsResponse.id, accessToken); + PingCreationsUploadsRequest pingCreationsUploads = new PingCreationsUploadsRequest(creationsUploadsResponse.getPingUrl(), accessToken); + pingCreationsUploads.setData(""); pingCreationsUploads.execute().getResponse(); System.out.println("-Finish-"); } + private static class StringAdapter implements JsonDeserializer { + + public String deserialize(JsonElement json, Type typeOfT, + JsonDeserializationContext context) + throws JsonParseException { + String asString = json.getAsJsonPrimitive().getAsString(); + return asString != null && asString.isEmpty() ? null : asString; + } + } + + private static class JsonHacks implements TypeAdapterFactory { + + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + + final TypeAdapter adapter = gson.getDelegateAdapter(this, type); + final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class); + + TypeAdapter result = new TypeAdapter() { + + @Override + public void write(JsonWriter out, T value) throws IOException { + JsonElement ele = adapter.toJsonTree(value); + elementAdapter.write(out, ele); + } + + @Override public T read(JsonReader in) throws IOException { + JsonElement e = elementAdapter.read(in); + + // Enter into all "data" fields immediately + if (e.isJsonObject() && e.getAsJsonObject().has("data")) { + e = e.getAsJsonObject().get("data"); + } + + // Add all "attributes" fields to the parent object so they are accessible without indirection + // Yeah this is a massive hack but it is necessary for things like landing URLs which only + // serve a single string inside the attributes + if (e.isJsonObject()) { + JsonObject obj = e.getAsJsonObject(); + if (obj.has("attributes")) { + JsonObject attr = obj.get("attributes").getAsJsonObject(); + for (Entry entry : attr.entrySet()) { + obj.add(entry.getKey(), entry.getValue()); + } + } + } + + return adapter.fromJsonTree(e); + } + }.nullSafe(); // so we don't have to check for null on the stream + + return result; + } + } } diff --git a/src/main/java/com/creatubbles/api/core/Country.java b/src/main/java/com/creatubbles/api/core/Country.java deleted file mode 100644 index 6e7befb..0000000 --- a/src/main/java/com/creatubbles/api/core/Country.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.creatubbles.api.core; - -public class Country { - public String code, name; -} diff --git a/src/main/java/com/creatubbles/api/core/Creation.java b/src/main/java/com/creatubbles/api/core/Creation.java index 123d103..f680576 100644 --- a/src/main/java/com/creatubbles/api/core/Creation.java +++ b/src/main/java/com/creatubbles/api/core/Creation.java @@ -1,12 +1,60 @@ package com.creatubbles.api.core; -public class Creation { - public String id, user_id; - public String name, created_at; - public int created_at_month, created_at_year, comments_count, bubble_count, views_count; - public String last_bubbled_at, last_commented_at, last_submitted_at; - public Image image; - public Creator[] creators; - public String store_dir; - public String url; +import java.util.HashMap; + +import jersey.repackaged.com.google.common.collect.Maps; +import lombok.AccessLevel; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import com.google.gson.annotations.SerializedName; + +@ToString(callSuper = true) +@EqualsAndHashCode +@Getter +public class Creation extends CreatubblesObject { + + private String name; + @SerializedName("created_at") + private String createdDate; + @SerializedName("created_at_age") + private String createdAge; + + @Getter(value = AccessLevel.NONE) + @SerializedName("created_at_age_per_creator") + private HashMap creatorToAgeMap = Maps.newHashMap(); + + public String getCreatedAge(String creatorId) { + return creatorToAgeMap.get(creatorId); + } + + public String getCreatedAge(User creator) { + return getCreatedAge(creator.getId()); + } + + @SerializedName("created_at_month") + private int createdMonth; + @SerializedName("created_at_year") + private int createdYear; + @SerializedName("comments_count") + private int commentCount; + @SerializedName("bubble_count") + private int bubbleCount; + @SerializedName("views_count") + private int viewCount; + + @SerializedName("last_bubbled_at") + private String lastBubbleDate; + @SerializedName("last_commented_at") + private String lastCommentDate; + @SerializedName("last_submitted_at") + private String lastSubmitDate; + + private Image image; + + @SerializedName("short_url") + private String shortUrl; + + private boolean approved; } diff --git a/src/main/java/com/creatubbles/api/core/Creator.java b/src/main/java/com/creatubbles/api/core/Creator.java deleted file mode 100644 index c2a22ec..0000000 --- a/src/main/java/com/creatubbles/api/core/Creator.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.creatubbles.api.core; - -import java.util.List; - -public class Creator { - public String id; - public String name, created_at, avatar_url; - public int creator_user_id, birth_month, birth_year; - public String age; - public int gender; - public boolean is_male; - public List groups; - public Country country; - public int views_count, followers_count, followings_count; -} diff --git a/src/main/java/com/creatubbles/api/core/CreatubblesObject.java b/src/main/java/com/creatubbles/api/core/CreatubblesObject.java new file mode 100644 index 0000000..79a86c3 --- /dev/null +++ b/src/main/java/com/creatubbles/api/core/CreatubblesObject.java @@ -0,0 +1,10 @@ +package com.creatubbles.api.core; + +import lombok.Data; + +@Data +public class CreatubblesObject { + + private String type; + private String id; +} diff --git a/src/main/java/com/creatubbles/api/core/CreatubblesRequest.java b/src/main/java/com/creatubbles/api/core/CreatubblesRequest.java index d81e3e8..2eab908 100644 --- a/src/main/java/com/creatubbles/api/core/CreatubblesRequest.java +++ b/src/main/java/com/creatubbles/api/core/CreatubblesRequest.java @@ -1,27 +1,42 @@ package com.creatubbles.api.core; -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.util.HttpMethod; -import org.glassfish.jersey.client.JerseyWebTarget; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; import javax.ws.rs.core.Response; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; + +import jersey.repackaged.com.google.common.base.Throwables; +import jersey.repackaged.com.google.common.collect.Maps; + +import org.glassfish.jersey.client.JerseyWebTarget; +import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; + +import com.creatubbles.api.CreatubblesAPI; +import com.creatubbles.api.response.ArrayResponse; +import com.creatubbles.api.response.meta.Metadata; +import com.creatubbles.api.util.HttpMethod; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; public abstract class CreatubblesRequest { + private String endPoint, acceptLanguage, data; - private String xSource = "mc-mod"; private HttpMethod httpMethod; - private Map urlParameters; + private final Map urlParameters = Maps.newHashMap(); private Response response; private Future futureResponse; + private T responseCache; + private T[] responseArrayCache; + private JsonObject metaCache; + private String accessToken; - private static final String EMPTY_RESPONSE = "{}"; private static final String APPLICATION_VND_API_JSON = "application/vnd.api+json"; public CreatubblesRequest(String endPoint, HttpMethod httpMethod) { @@ -40,9 +55,7 @@ public CreatubblesRequest(String endPoint, HttpMethod httpMethod, String accessT this.endPoint = endPoint; this.httpMethod = httpMethod; if (urlParameters != null) { - this.urlParameters = urlParameters; - } else { - this.urlParameters = new HashMap(); + this.urlParameters.putAll(urlParameters); } this.accessToken = accessToken; } @@ -82,15 +95,6 @@ public CreatubblesRequest setAcceptLanguage(String acceptLanguage) { return this; } - public String getXSource() { - return xSource; - } - - public CreatubblesRequest setXSource(String xSource) { - this.xSource = xSource; - return this; - } - public String getData() { return data; } @@ -126,17 +130,21 @@ public boolean wasSuccessful() { } private boolean isSuccessStatus(Response response) { - return response.getStatus() == 200 || response.getStatus() == 204; + return isSuccessStatusCode(response.getStatus()); + } + + public boolean isSuccessStatusCode(int status) { + return status == Response.Status.OK.getStatusCode() || status == Response.Status.CREATED.getStatusCode(); } public void cancelRequest() { - if (futureResponse != null & !futureResponse.isDone()) { + if (futureResponse != null && !futureResponse.isDone()) { futureResponse.cancel(true); } } public Response getRawResponse() { - if (response == null && futureResponse.isDone()) { + if (response == null && futureResponse != null && futureResponse.isDone()) { try { response = futureResponse.get(); } catch (InterruptedException e) { @@ -149,23 +157,98 @@ public Response getRawResponse() { return response; } - public T getResponse() { - if (responseCache == null) { + @SuppressWarnings("unchecked") + private void initResponse() { + if (responseCache == null && responseArrayCache == null) { Response response = getRawResponse(); Class responseClass = getResponseClass(); if (response != null && responseClass != null) { String json = response.readEntity(String.class); - if (isSuccessStatus(response) && json.isEmpty()) { - json = EMPTY_RESPONSE; + if (!isSuccessStatus(response)) { + responseCache = createDefaultResponse(json); + } else { + try { + JsonObject jsonObj = CreatubblesAPI.GSON.fromJson(json, JsonObject.class); + if (isArrayResponse()) { + initResponseArray(jsonObj); + } else { + initResponseSingle(jsonObj); + } + if (jsonObj.has("meta")) { + metaCache = jsonObj.get("meta").getAsJsonObject(); + } + } catch (JsonSyntaxException e) { // protect against invalid API returns (for now) + System.err.println("Invalid JSON: " + json); + e.printStackTrace(); + boolean isArray = isArrayResponse(); + if (isArray && responseArrayCache == null) { + responseArrayCache = (T[]) Array.newInstance(getResponseClass(), 1); + responseArrayCache[0] = createDefaultResponse(json); + } else if (!isArray && responseCache == null) { + responseCache = createDefaultResponse(json); + } + } } - T creatubblesResponse = CreatubblesAPI.GSON.fromJson(json, responseClass); - creatubblesResponse.setOriginatingRequest(this); - responseCache = creatubblesResponse; } } + } + + private void initResponseSingle(JsonObject json) { + responseCache = CreatubblesAPI.GSON.fromJson(json, getResponseClass()); + updateResponse(responseCache); + } + + @SuppressWarnings("unchecked") + private void initResponseArray(JsonObject json) { + responseArrayCache = (T[]) CreatubblesAPI.GSON.fromJson(json, Array.newInstance(getResponseClass(), 0).getClass()); + for (T aResponseArrayCache : responseArrayCache) { + updateResponse(aResponseArrayCache); + } + } + + private void updateResponse(T resp) { + resp.handleId(resp.getId()); + resp.setOriginatingRequest(this); + } + + private T createDefaultResponse(String json) { + try { + T resp = getResponseClass().newInstance(); + resp.setMessage(json); + return resp; + } catch (Exception e) { + throw Throwables.propagate(e); + } + } + + public final boolean isArrayResponse() { + return getResponseClass().isAnnotationPresent(ArrayResponse.class); + } + + /** + * @return A cached version of the deserialized response object. + *

+ * {@code null} if the response is marked with {@link ArrayResponse}. + */ + public final T getResponse() { + initResponse(); return responseCache; } + /** + * @return An unmodifiable view of the array response as a list. + *

+ * {@code null} if the response is not marked with {@link ArrayResponse}. + */ + public final List getResponseList() { + initResponse(); + return responseArrayCache == null ? null : Arrays.asList(responseArrayCache); + } + + public final M getMetadata(Class metaClass) { + return CreatubblesAPI.GSON.fromJson(metaCache, metaClass); + } + public CreatubblesRequest execute() { resetResponse(); String url = CreatubblesAPI.buildURL(endPoint); @@ -177,13 +260,8 @@ public CreatubblesRequest execute() { webTarget = webTarget.queryParam(paramKey, paramValue); } } - //TODO: return if needed + check if staging - //HttpAuthenticationFeature basicAuth = HttpAuthenticationFeature.basic("c", "c"); - //webTarget.register(basicAuth); - Invocation.Builder invocationBuilder = webTarget - .request(APPLICATION_VND_API_JSON) - .accept(APPLICATION_VND_API_JSON); + Invocation.Builder invocationBuilder = webTarget.request(APPLICATION_VND_API_JSON).accept(APPLICATION_VND_API_JSON); if (acceptLanguage != null && acceptLanguage.length() == 2) { invocationBuilder.header("Accept-Language", acceptLanguage.toLowerCase()); @@ -191,9 +269,6 @@ public CreatubblesRequest execute() { if (accessToken != null && !accessToken.isEmpty()) { invocationBuilder.header("Authorization", "Bearer " + accessToken); } - if (xSource != null && !xSource.isEmpty()) { - invocationBuilder.header("X-Source", xSource.toLowerCase()); - } if (httpMethod == HttpMethod.GET) { response = invocationBuilder.get(); @@ -218,9 +293,7 @@ public CreatubblesRequest async() { } } - Invocation.Builder invocationBuilder = webTarget - .request(APPLICATION_VND_API_JSON) - .accept(APPLICATION_VND_API_JSON); + Invocation.Builder invocationBuilder = webTarget.request(APPLICATION_VND_API_JSON).accept(APPLICATION_VND_API_JSON); if (acceptLanguage != null && acceptLanguage.length() == 2) { invocationBuilder.header("Accept-Language", acceptLanguage.toLowerCase()); @@ -228,9 +301,6 @@ public CreatubblesRequest async() { if (accessToken != null && !accessToken.isEmpty()) { invocationBuilder.header("Authorization", "Bearer " + accessToken); } - if (xSource != null && !xSource.isEmpty()) { - invocationBuilder.header("X-Source", xSource.toLowerCase()); - } if (httpMethod == HttpMethod.GET) { futureResponse = invocationBuilder.async().get(); @@ -242,8 +312,12 @@ public CreatubblesRequest async() { return this; } + public void setResponse(Response response) { this.response = response; } + public void setResponseCache(T responseCache) { + this.responseCache = responseCache; + } } diff --git a/src/main/java/com/creatubbles/api/core/CreatubblesResponse.java b/src/main/java/com/creatubbles/api/core/CreatubblesResponse.java index 179ad58..a015279 100644 --- a/src/main/java/com/creatubbles/api/core/CreatubblesResponse.java +++ b/src/main/java/com/creatubbles/api/core/CreatubblesResponse.java @@ -1,8 +1,17 @@ package com.creatubbles.api.core; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString(exclude = "originatingRequest") public abstract class CreatubblesResponse { - public String message; + private String type; + private String id; + + private String message; + // Type is unnecessary because the response has obviously already been gotten private CreatubblesRequest originatingRequest; @@ -10,7 +19,14 @@ public final CreatubblesRequest getOriginalRequest() { return originatingRequest; } - public void setOriginatingRequest(CreatubblesRequest originatingRequest) { + public final void setOriginatingRequest(CreatubblesRequest originatingRequest) { this.originatingRequest = originatingRequest; } + + public final void setId(String id) { + this.id = id; + handleId(id); + } + + public void handleId(String id) {} } diff --git a/src/main/java/com/creatubbles/api/core/Credentials.java b/src/main/java/com/creatubbles/api/core/Credentials.java deleted file mode 100644 index 02c9e1c..0000000 --- a/src/main/java/com/creatubbles/api/core/Credentials.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.creatubbles.api.core; - -public class Credentials { - public String session_token, secret_access_key, access_key_id; -} diff --git a/src/main/java/com/creatubbles/api/core/Gallery.java b/src/main/java/com/creatubbles/api/core/Gallery.java index 4dad514..d8a7708 100644 --- a/src/main/java/com/creatubbles/api/core/Gallery.java +++ b/src/main/java/com/creatubbles/api/core/Gallery.java @@ -1,37 +1,72 @@ package com.creatubbles.api.core; +import java.lang.reflect.Type; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; +import com.google.gson.annotations.SerializedName; -import java.lang.reflect.Type; +@ToString(callSuper = true) +@EqualsAndHashCode +@Builder +@Getter +public class Gallery { -public class Gallery implements JsonSerializer { - public int id; - public String name, description, gallery_type, created_at, banner; - public boolean is_open_for_all; - public int owner_id; - public String owner_type; - - @Override - public JsonElement serialize(Gallery gallery, Type type, JsonSerializationContext jsonSerializationContext) { - JsonObject jsonObject = new JsonObject(); - - jsonObject.addProperty("id", id); - jsonObject.addProperty("name", name); - jsonObject.addProperty("description", description); - jsonObject.addProperty("gallery_type", gallery_type); - jsonObject.addProperty("created_at", created_at); - jsonObject.addProperty("banner", banner); - if (is_open_for_all) { - jsonObject.addProperty("open_for_all", 1); - } else { - jsonObject.addProperty("open_for_all", 0); - } - jsonObject.addProperty("owner_id", owner_id); - jsonObject.addProperty("owner_type", owner_type); + private int id; + private String name, description; + + @SerializedName("type") + private String type; + @SerializedName("created_at") + private String createdDate; + private Image banner; + + @SerializedName("open_for_all") + private boolean openForAll; + + @SerializedName("owner_id") + private int ownerId; + @SerializedName("owner_type") + private String ownerType; + + public static class Serializer implements JsonSerializer { + + @Override + public JsonElement serialize(Gallery src, Type typeOfSrc, JsonSerializationContext context) { - return jsonObject; + JsonObject root = new JsonObject(); + + JsonObject data = new JsonObject(); + data.addProperty("type", src.type); + + JsonObject attributes = new JsonObject(); + attributes.addProperty("name", src.name); + attributes.addProperty("descrtiption", src.description); + attributes.addProperty("open_for_all", src.openForAll ? 1 : 0); + + JsonObject relationships = new JsonObject(); + + JsonObject owner = new JsonObject(); + JsonObject ownerdata = new JsonObject(); + ownerdata.addProperty("type", src.ownerType); + ownerdata.addProperty("id", src.ownerId); + owner.add("data", ownerdata); + + relationships.add("owner", owner); + + data.add("attributes", attributes); + data.add("relationships", relationships); + + root.add("data", data); + return root; + } } + } diff --git a/src/main/java/com/creatubbles/api/core/Group.java b/src/main/java/com/creatubbles/api/core/Group.java deleted file mode 100644 index a9d0744..0000000 --- a/src/main/java/com/creatubbles/api/core/Group.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.creatubbles.api.core; - -public class Group { - public int id; - public String name; -} diff --git a/src/main/java/com/creatubbles/api/core/Image.java b/src/main/java/com/creatubbles/api/core/Image.java index 6dd82a9..2a7d723 100644 --- a/src/main/java/com/creatubbles/api/core/Image.java +++ b/src/main/java/com/creatubbles/api/core/Image.java @@ -1,14 +1,31 @@ package com.creatubbles.api.core; -import java.util.List; +import java.util.Map; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +@ToString +@EqualsAndHashCode +@Getter public class Image { - public String url; - public Links links; - public List creators; - public String store_dir; + + private Map links; + + public String getUrl(ImageType type) { + return links.get(type); + } - public class Links { - public String full_view, list_view_retina, list_view, matrix_view_retina, matrix_view, gallery_mobile, explore_mobile, share; + public enum ImageType { + original, + full_view, + list_view_retina, + list_view, + matrix_view_retina, + matrix_view, + gallery_mobile, + explore_mobile, + share; } } diff --git a/src/main/java/com/creatubbles/api/core/LandingUrl.java b/src/main/java/com/creatubbles/api/core/LandingUrl.java new file mode 100644 index 0000000..24ed216 --- /dev/null +++ b/src/main/java/com/creatubbles/api/core/LandingUrl.java @@ -0,0 +1,52 @@ +package com.creatubbles.api.core; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +/** + * Created by Jevgeni on 10.03.2016. + */ +@ToString +@EqualsAndHashCode +@Getter +public class LandingUrl { + + LandingUrlType type; + String url; + + public enum LandingUrlType { + + CTB_ABOUT_US("ctb-about_us"), + CTB_TERMS_OF_USE("ctb-terms_of_use"), + CTB_PRIVACY_POLICY("ctb-privacy_policy"), + CTB_REGISTRATION("ctb-registration"), + CTB_FORGOT_PASSWORD("ctb-forgot_password"), + CTB_USER_PROFILE("ctb-user_profile"), + CTB_EXPLORE("ctb-explore"); + + private String type; + + public String getType() { + return type; + } + + LandingUrlType(String type) { + this.type = type; + } + + public static LandingUrlType from(String type) { + for (LandingUrlType e : LandingUrlType.values()) { + if (e.getType().equals(type)) { + return e; + } + } + throw new IllegalStateException(); + } + + @Override + public String toString() { + return type; + } + } +} diff --git a/src/main/java/com/creatubbles/api/core/User.java b/src/main/java/com/creatubbles/api/core/User.java index 4518469..63ecdb6 100644 --- a/src/main/java/com/creatubbles/api/core/User.java +++ b/src/main/java/com/creatubbles/api/core/User.java @@ -1,44 +1,38 @@ package com.creatubbles.api.core; -public class User { - public String id; - public String username, email, country, role; - public boolean is_teacher, is_loggable, is_site_admin, newsletter; - public int signed_up_as; - public String access_token; - public String password; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + id.hashCode(); - result = prime * result + ((username == null) ? 0 : username.hashCode()); - return result; - } +import com.google.gson.annotations.SerializedName; - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - User other = (User) obj; - if (id == null && other.id != null) { - return false; - } else if (!id.equals(other.id)) { - return false; - } - if (username == null && other.username != null) { - return false; - } else if (!username.equals(other.username)) { - return false; - } - return true; - } +@ToString(callSuper = true) +@EqualsAndHashCode +@Getter +public class User extends CreatubblesObject { + + private String age; + @SerializedName("birth_month") + private String birthMonth; + @SerializedName("birth_year") + private String birthYear; + + private String username; + @SerializedName("display_name") + private String displayName; + private String email, role; + + @SerializedName("country_code") + private String countryCode; + @SerializedName("country_name") + private String countryName; + + @SerializedName("created_at") + private String createdDate; + @SerializedName("short_url") + private String shortUrl; + @SerializedName("avatar_url") + private String avatarUrl; + + private String gender, interests; } diff --git a/src/main/java/com/creatubbles/api/request/amazon/GetAmazonTokenRequest.java b/src/main/java/com/creatubbles/api/request/amazon/GetAmazonTokenRequest.java deleted file mode 100644 index 3cdfe76..0000000 --- a/src/main/java/com/creatubbles/api/request/amazon/GetAmazonTokenRequest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.creatubbles.api.request.amazon; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.amazon.GetAmazonTokenResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class GetAmazonTokenRequest extends CreatubblesRequest { - - public GetAmazonTokenRequest(String accessToken) { - super(EndPoints.AWS_TOKEN, HttpMethod.GET, accessToken); - } - - @Override - public Class getResponseClass() { - return GetAmazonTokenResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/amazon/UploadS3FileRequest.java b/src/main/java/com/creatubbles/api/request/amazon/UploadS3FileRequest.java new file mode 100644 index 0000000..c02d5c9 --- /dev/null +++ b/src/main/java/com/creatubbles/api/request/amazon/UploadS3FileRequest.java @@ -0,0 +1,44 @@ +package com.creatubbles.api.request.amazon; + +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.response.amazon.UploadS3FileResponse; +import com.creatubbles.api.util.HttpUtil; +import com.creatubbles.api.util.HttpUtil.Response; + +import java.io.IOException; + +/** + * Created by Jevgeni on 28.10.2015. + */ +public class UploadS3FileRequest extends CreatubblesRequest { + + private byte[] data; + private String url; + private String contentType; + + public UploadS3FileRequest(byte[] data, String url, String contentType) { + super(null, null); + this.data = data; + this.url = url; + this.contentType = contentType; + } + + @Override + public Class getResponseClass() { + return UploadS3FileResponse.class; + } + + @Override + public CreatubblesRequest execute() { + resetResponse(); + try { + Response resp = HttpUtil.uploadObject(data, url, contentType); + UploadS3FileResponse response = new UploadS3FileResponse(isSuccessStatusCode(resp.code)); + response.setMessage(resp.message); + setResponseCache(response); + } catch (IOException e) { + e.printStackTrace(); + } + return this; + } +} diff --git a/src/main/java/com/creatubbles/api/request/amazon/UploadS3ImageRequest.java b/src/main/java/com/creatubbles/api/request/amazon/UploadS3ImageRequest.java deleted file mode 100644 index 9663421..0000000 --- a/src/main/java/com/creatubbles/api/request/amazon/UploadS3ImageRequest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.creatubbles.api.request.amazon; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.amazon.UploadS3ImageResponse; -import com.creatubbles.api.util.HttpUtil; - -import java.io.IOException; - -/** - * Created by Jevgeni on 28.10.2015. - */ -@APIVersion(2) -public class UploadS3ImageRequest extends CreatubblesRequest { - - private byte[] data; - private String url; - - public UploadS3ImageRequest(byte[] data, String url) { - super(null, null); - this.data = data; - this.url = url; - } - - @Override - public Class getResponseClass() { - return UploadS3ImageResponse.class; - } - - @Override - public CreatubblesRequest execute() { - resetResponse(); - try { - HttpUtil.uploadObject(data, url); - } catch (IOException e) { - e.printStackTrace(); - } - return this; - } - - @Override - public UploadS3ImageResponse getResponse() { - return new UploadS3ImageResponse(); - } -} diff --git a/src/main/java/com/creatubbles/api/request/auth/OAuthAccessTokenRequest.java b/src/main/java/com/creatubbles/api/request/auth/OAuthAccessTokenRequest.java index 42ff7c2..76f1191 100644 --- a/src/main/java/com/creatubbles/api/request/auth/OAuthAccessTokenRequest.java +++ b/src/main/java/com/creatubbles/api/request/auth/OAuthAccessTokenRequest.java @@ -1,28 +1,31 @@ package com.creatubbles.api.request.auth; -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.auth.OAuthAccessTokenResponse; -import org.glassfish.jersey.client.JerseyWebTarget; - import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; import javax.ws.rs.core.Form; import javax.ws.rs.core.MediaType; +import org.glassfish.jersey.client.JerseyWebTarget; + +import com.creatubbles.api.CreatubblesAPI; +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.response.auth.OAuthAccessTokenResponse; + import static com.creatubbles.api.util.EndPoints.OAUTH_TOKEN; -import static com.creatubbles.api.util.OAuthUtil.CLIENT_ID; -import static com.creatubbles.api.util.OAuthUtil.CLIENT_SECRET; -@APIVersion(2) public class OAuthAccessTokenRequest extends CreatubblesRequest { - private String username; - private String password; + private final String clientId, clientSecret; + private final String username, password; + + public OAuthAccessTokenRequest(String clientId, String clientSecret) { + this(clientId, clientSecret, null, null); + } - public OAuthAccessTokenRequest(String username, String password) { + public OAuthAccessTokenRequest(String clientId, String clientSecret, String username, String password) { super(null, null); + this.clientId = clientId; + this.clientSecret = clientSecret; this.username = username; this.password = password; } @@ -42,16 +45,22 @@ public CreatubblesRequest execute() { .request(MediaType.APPLICATION_FORM_URLENCODED) .accept(MediaType.APPLICATION_JSON); - if (getXSource() != null && !getXSource().isEmpty()) { - invocationBuilder.header("X-Source", getXSource().toLowerCase()); - } - - Form form = new Form() // - .param("grant_type", "password") // - .param("client_id", CLIENT_ID) // - .param("client_secret", CLIENT_SECRET) // - .param("username", username) // + Form form; + + if (username != null && password != null) { + form = new Form() + .param("grant_type", "password") + .param("client_id", clientId) + .param("client_secret", clientSecret) + .param("username", username) .param("password", password); + } else { + form = new Form() + .param("grant_type", "client_credentials") + .param("client_id", clientId) + .param("client_secret", clientSecret); + } + setResponse(invocationBuilder.post(Entity.form(form))); return this; } diff --git a/src/main/java/com/creatubbles/api/request/auth/SignInRequest.java b/src/main/java/com/creatubbles/api/request/auth/SignInRequest.java deleted file mode 100644 index 553f1a1..0000000 --- a/src/main/java/com/creatubbles/api/request/auth/SignInRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.creatubbles.api.request.auth; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.auth.SignInResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class SignInRequest extends CreatubblesRequest { - - public SignInRequest(String email, String password) { - super(EndPoints.SIGN_IN, HttpMethod.POST); - setData("{\"user\" : { \"email\" : \"" + email + "\", \"password\" : \"" + password + "\" }}"); - } - - @Override - public Class getResponseClass() { - return SignInResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/auth/SignUpRequest.java b/src/main/java/com/creatubbles/api/request/auth/SignUpRequest.java deleted file mode 100644 index a3e1ac2..0000000 --- a/src/main/java/com/creatubbles/api/request/auth/SignUpRequest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.creatubbles.api.request.auth; - -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.core.User; -import com.creatubbles.api.response.auth.SignUpResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; -import com.google.gson.JsonObject; - -@APIVersion(1) -public class SignUpRequest extends CreatubblesRequest { - - public SignUpRequest(String email, String password, String country) { - super(EndPoints.SIGN_UP, HttpMethod.POST); - if (email != null && password != null & country != null) { - User user = new User(); - user.email = email; - user.password = password; - user.country = country; - JsonObject jsonObject = new JsonObject(); - jsonObject.add("user", CreatubblesAPI.GSON.toJsonTree(user)); - setData(jsonObject.toString()); - } - } - - public SignUpRequest(User user) { - super(EndPoints.SIGN_UP, HttpMethod.POST); - if (user != null) { - JsonObject jsonObject = new JsonObject(); - jsonObject.add("user", CreatubblesAPI.GSON.toJsonTree(user)); - setData(jsonObject.toString()); - } - } - - @Override - public Class getResponseClass() { - return SignUpResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/creation/CreateCreationRequest.java b/src/main/java/com/creatubbles/api/request/creation/CreateCreationRequest.java index 40850c8..67ab003 100644 --- a/src/main/java/com/creatubbles/api/request/creation/CreateCreationRequest.java +++ b/src/main/java/com/creatubbles/api/request/creation/CreateCreationRequest.java @@ -1,17 +1,14 @@ package com.creatubbles.api.request.creation; -import com.creatubbles.api.APIVersion; import com.creatubbles.api.core.CreatubblesRequest; import com.creatubbles.api.response.creation.CreateCreationResponse; import com.creatubbles.api.util.EndPoints; import com.creatubbles.api.util.HttpMethod; -@APIVersion(2) public class CreateCreationRequest extends CreatubblesRequest { - public CreateCreationRequest(String accessToken) { - super(EndPoints.CREATIONS, HttpMethod.POST, accessToken); + super(EndPoints.CREATIONS.getTemplate(), HttpMethod.POST, accessToken); } @Override diff --git a/src/main/java/com/creatubbles/api/request/creation/CreationsUploadsRequest.java b/src/main/java/com/creatubbles/api/request/creation/CreationsUploadsRequest.java index 545e915..53d13a0 100644 --- a/src/main/java/com/creatubbles/api/request/creation/CreationsUploadsRequest.java +++ b/src/main/java/com/creatubbles/api/request/creation/CreationsUploadsRequest.java @@ -1,20 +1,35 @@ package com.creatubbles.api.request.creation; -import com.creatubbles.api.APIVersion; import com.creatubbles.api.core.CreatubblesRequest; import com.creatubbles.api.response.creation.CreationsUploadsResponse; import com.creatubbles.api.util.EndPoints; import com.creatubbles.api.util.HttpMethod; +import com.creatubbles.api.util.HttpUtil; -@APIVersion(2) public class CreationsUploadsRequest extends CreatubblesRequest { - public CreationsUploadsRequest(String creationId, String accessToken) { - super(String.format(EndPoints.CREATIONS_UPLOADS, creationId), HttpMethod.POST, accessToken); + private String extension; + + public CreationsUploadsRequest(String creationId, String extension, String accessToken) { + super(EndPoints.CREATIONS_UPLOADS.format(creationId), HttpMethod.POST, accessToken); + this.extension = extension; + setUrlParameter("extension", extension); } @Override public Class getResponseClass() { return CreationsUploadsResponse.class; } + + @Override + public CreatubblesRequest execute() { + if (extension == null || !HttpUtil.allowedFileTypes.contains(extension)) { + resetResponse(); + CreationsUploadsResponse response = new CreationsUploadsResponse(); + response.setMessage(String.format("Invalid file with type %s", extension)); + setResponseCache(response); + return this; + } + return super.execute(); + } } diff --git a/src/main/java/com/creatubbles/api/request/creation/GetCreationRequest.java b/src/main/java/com/creatubbles/api/request/creation/GetCreationRequest.java new file mode 100644 index 0000000..271e726 --- /dev/null +++ b/src/main/java/com/creatubbles/api/request/creation/GetCreationRequest.java @@ -0,0 +1,19 @@ +package com.creatubbles.api.request.creation; + +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.response.creation.GetCreationResponse; +import com.creatubbles.api.util.EndPoints; +import com.creatubbles.api.util.HttpMethod; + + +public class GetCreationRequest extends CreatubblesRequest { + + public GetCreationRequest(String id, String accessToken) { + super(EndPoints.CREATION.format(id), HttpMethod.GET, accessToken); + } + + @Override + public Class getResponseClass() { + return GetCreationResponse.class; + } +} diff --git a/src/main/java/com/creatubbles/api/request/creation/GetCreationsRequest.java b/src/main/java/com/creatubbles/api/request/creation/GetCreationsRequest.java index 53f1f29..067251a 100644 --- a/src/main/java/com/creatubbles/api/request/creation/GetCreationsRequest.java +++ b/src/main/java/com/creatubbles/api/request/creation/GetCreationsRequest.java @@ -1,32 +1,40 @@ package com.creatubbles.api.request.creation; -import com.creatubbles.api.APIVersion; import com.creatubbles.api.core.CreatubblesRequest; import com.creatubbles.api.response.creation.GetCreationsResponse; import com.creatubbles.api.util.EndPoints; import com.creatubbles.api.util.HttpMethod; -@APIVersion(2) public class GetCreationsRequest extends CreatubblesRequest { + public enum Params { + page, + per_page, + gallery_id, + user_id, + sort, + search, + + ; + } + + public enum Sort { + popular, + recent, + + ; + } + public GetCreationsRequest(String userId, String authToken) { this(userId, 1, authToken); } public GetCreationsRequest(String userId, int page, String accessToken) { - super(EndPoints.CREATIONS, HttpMethod.GET, accessToken); + super(EndPoints.CREATIONS.getTemplate(), HttpMethod.GET, accessToken); setUrlParameter(Params.user_id.name(), userId); setUrlParameter(Params.page.name(), String.valueOf(page)); } - public enum Params { - page, per_page, gallery_id, user_id, sort, search; - - public enum Sort { - popular, recent; - } - } - @Override public Class getResponseClass() { return GetCreationsResponse.class; diff --git a/src/main/java/com/creatubbles/api/request/creation/PingCreationsUploadsRequest.java b/src/main/java/com/creatubbles/api/request/creation/PingCreationsUploadsRequest.java index 45a8c5b..a80e335 100644 --- a/src/main/java/com/creatubbles/api/request/creation/PingCreationsUploadsRequest.java +++ b/src/main/java/com/creatubbles/api/request/creation/PingCreationsUploadsRequest.java @@ -1,19 +1,16 @@ package com.creatubbles.api.request.creation; -import com.creatubbles.api.APIVersion; import com.creatubbles.api.core.CreatubblesRequest; import com.creatubbles.api.response.creation.PingCreationsUploadsResponse; -import com.creatubbles.api.util.EndPoints; import com.creatubbles.api.util.HttpMethod; /** * Created by Jevgeni on 22.12.2015. */ -@APIVersion(2) public class PingCreationsUploadsRequest extends CreatubblesRequest { - public PingCreationsUploadsRequest(int uploadId, String accessToken) { - super(String.format(EndPoints.PING_CREATIONS_UPLOADS, uploadId), HttpMethod.PUT, accessToken); + public PingCreationsUploadsRequest(String url, String accessToken) { + super(url, HttpMethod.PUT, accessToken); } @Override diff --git a/src/main/java/com/creatubbles/api/request/creation/SearchCreationsRequest.java b/src/main/java/com/creatubbles/api/request/creation/SearchCreationsRequest.java deleted file mode 100644 index 1c1e98c..0000000 --- a/src/main/java/com/creatubbles/api/request/creation/SearchCreationsRequest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.creatubbles.api.request.creation; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.creation.SearchCreationsResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class SearchCreationsRequest extends CreatubblesRequest { - - public SearchCreationsRequest(String searchParam) { - super(EndPoints.SEARCH_CREATIONS, HttpMethod.GET); - setUrlParameter("search", searchParam); - } - - public String getSearchParam() { - return getUrlParameter("search"); - } - - public SearchCreationsRequest setSearchParam(String searchParam) { - setUrlParameter("search", searchParam); - return this; - } - - public Integer getPageNumber() { - try { - return Integer.parseInt(getUrlParameter("page")); - } catch (NumberFormatException e) { - - } - return null; - } - - public SearchCreationsRequest setPageNumber(int pageNumber) { - setUrlParameter("page", String.valueOf(pageNumber)); - return this; - } - - @Override - public Class getResponseClass() { - return SearchCreationsResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/creator/CreateCreatorRequest.java b/src/main/java/com/creatubbles/api/request/creator/CreateCreatorRequest.java deleted file mode 100644 index 6c1d15d..0000000 --- a/src/main/java/com/creatubbles/api/request/creator/CreateCreatorRequest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.creatubbles.api.request.creator; - -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.Creator; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.creator.CreateCreatorResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class CreateCreatorRequest extends CreatubblesRequest { - - public CreateCreatorRequest(String accessToken, Creator creator) { - super(String.format(EndPoints.USERS_CREATORS, "me"), HttpMethod.POST, accessToken); - setData(CreatubblesAPI.GSON.toJson(creator)); - } - - @Override - public Class getResponseClass() { - return CreateCreatorResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/creator/CreatorsFollowersRequest.java b/src/main/java/com/creatubbles/api/request/creator/CreatorsFollowersRequest.java deleted file mode 100644 index c28f4e1..0000000 --- a/src/main/java/com/creatubbles/api/request/creator/CreatorsFollowersRequest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.creatubbles.api.request.creator; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.creator.CreatorsFollowersResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class CreatorsFollowersRequest extends CreatubblesRequest { - - public CreatorsFollowersRequest(String id) { - this(id, 1); - } - - public CreatorsFollowersRequest(String id, int page) { - super(String.format(EndPoints.CREATORS_FOLLOWERS, id), HttpMethod.GET); - setUrlParameter("page", String.valueOf(page)); - } - - public Integer getPageNumber() { - try { - return Integer.parseInt(getUrlParameter("page")); - } catch (NumberFormatException e) { - - } - return null; - } - - public CreatorsFollowersRequest setPageNumber(int pageNumber) { - setUrlParameter("page", String.valueOf(pageNumber)); - return this; - } - - @Override - public Class getResponseClass() { - return CreatorsFollowersResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/creator/CreatorsFollowingUsersRequest.java b/src/main/java/com/creatubbles/api/request/creator/CreatorsFollowingUsersRequest.java deleted file mode 100644 index ae825aa..0000000 --- a/src/main/java/com/creatubbles/api/request/creator/CreatorsFollowingUsersRequest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.creatubbles.api.request.creator; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.creator.CreatorsFollowingUsersResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class CreatorsFollowingUsersRequest extends CreatubblesRequest { - - public CreatorsFollowingUsersRequest(String id) { - this(id, 1); - } - - public CreatorsFollowingUsersRequest(String id, int page) { - super(String.format(EndPoints.CREATORS_FOLLOWING_USERS, id), HttpMethod.GET); - setUrlParameter("page", String.valueOf(page)); - } - - public Integer getPageNumber() { - try { - return Integer.parseInt(getUrlParameter("page")); - } catch (NumberFormatException e) { - - } - return null; - } - - public CreatorsFollowingUsersRequest setPageNumber(int pageNumber) { - setUrlParameter("page", String.valueOf(pageNumber)); - return this; - } - - @Override - public Class getResponseClass() { - return CreatorsFollowingUsersResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/creator/GetCreatorsRequest.java b/src/main/java/com/creatubbles/api/request/creator/GetCreatorsRequest.java index 49920d6..cbb2c5b 100644 --- a/src/main/java/com/creatubbles/api/request/creator/GetCreatorsRequest.java +++ b/src/main/java/com/creatubbles/api/request/creator/GetCreatorsRequest.java @@ -1,20 +1,17 @@ package com.creatubbles.api.request.creator; -import com.creatubbles.api.APIVersion; import com.creatubbles.api.core.CreatubblesRequest; import com.creatubbles.api.response.creator.GetCreatorsResponse; import com.creatubbles.api.util.EndPoints; import com.creatubbles.api.util.HttpMethod; -@APIVersion(2) public class GetCreatorsRequest extends CreatubblesRequest { public GetCreatorsRequest(String userId, String token) { - super(EndPoints.USERS, HttpMethod.GET, token); + super(EndPoints.USERS.getTemplate(), HttpMethod.GET, token); setUrlParameter(Params.user_id.name(), userId); } - @Override public Class getResponseClass() { return GetCreatorsResponse.class; diff --git a/src/main/java/com/creatubbles/api/request/creator/UsersCreatorsRequest.java b/src/main/java/com/creatubbles/api/request/creator/UsersCreatorsRequest.java deleted file mode 100644 index 4fd6a29..0000000 --- a/src/main/java/com/creatubbles/api/request/creator/UsersCreatorsRequest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.creatubbles.api.request.creator; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.creator.UsersCreatorsResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class UsersCreatorsRequest extends CreatubblesRequest { - - public UsersCreatorsRequest() { - this("me", null); - } - - public UsersCreatorsRequest(String id) { - this(id, null); - } - - public UsersCreatorsRequest(String id, int pageNumber) { - this(id, null, pageNumber); - } - - public UsersCreatorsRequest(String id, String accessToken) { - super(String.format(EndPoints.USERS_CREATORS, id), HttpMethod.GET, accessToken); - } - - public UsersCreatorsRequest(String id, String accessToken, int pageNumber) { - super(String.format(EndPoints.USERS_CREATORS, id), HttpMethod.GET, accessToken); - setUrlParameter("page", String.valueOf(pageNumber)); - } - - public Integer getPageNumber() { - try { - return Integer.parseInt(getUrlParameter("page")); - } catch (NumberFormatException e) { - - } - return null; - } - - public UsersCreatorsRequest setPageNumber(int pageNumber) { - setUrlParameter("page", String.valueOf(pageNumber)); - return this; - } - - @Override - public Class getResponseClass() { - return UsersCreatorsResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/gallery/CreateGalleryRequest.java b/src/main/java/com/creatubbles/api/request/gallery/CreateGalleryRequest.java new file mode 100644 index 0000000..ac2eeb0 --- /dev/null +++ b/src/main/java/com/creatubbles/api/request/gallery/CreateGalleryRequest.java @@ -0,0 +1,21 @@ +package com.creatubbles.api.request.gallery; + +import com.creatubbles.api.CreatubblesAPI; +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.core.Gallery; +import com.creatubbles.api.response.gallery.CreateGalleryResponse; +import com.creatubbles.api.util.EndPoints; +import com.creatubbles.api.util.HttpMethod; + +public class CreateGalleryRequest extends CreatubblesRequest { + + public CreateGalleryRequest(Gallery gallery, String accessToken) { + super(EndPoints.GALLERIES.getTemplate(), HttpMethod.POST, accessToken); + setData(CreatubblesAPI.GSON.toJson(gallery)); + } + + @Override + public Class getResponseClass() { + return CreateGalleryResponse.class; + } +} diff --git a/src/main/java/com/creatubbles/api/request/gallery/CreateUserGalleryRequest.java b/src/main/java/com/creatubbles/api/request/gallery/CreateUserGalleryRequest.java deleted file mode 100644 index 47eafa0..0000000 --- a/src/main/java/com/creatubbles/api/request/gallery/CreateUserGalleryRequest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.creatubbles.api.request.gallery; - -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.core.Gallery; -import com.creatubbles.api.response.gallery.CreateUserGalleryResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class CreateUserGalleryRequest extends CreatubblesRequest { - - public CreateUserGalleryRequest(Gallery gallery, String accessToken) { - super(String.format(EndPoints.USERS_GALLERIES, "me"), HttpMethod.POST, accessToken); - setData(CreatubblesAPI.GSON.toJson(gallery)); - } - - @Override - public Class getResponseClass() { - return CreateUserGalleryResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/gallery/ListGalleriesRequest.java b/src/main/java/com/creatubbles/api/request/gallery/ListGalleriesRequest.java new file mode 100644 index 0000000..c1661c4 --- /dev/null +++ b/src/main/java/com/creatubbles/api/request/gallery/ListGalleriesRequest.java @@ -0,0 +1,32 @@ +package com.creatubbles.api.request.gallery; + +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.response.gallery.ListGalleriesResponse; +import com.creatubbles.api.util.EndPoints; +import com.creatubbles.api.util.HttpMethod; + +public class ListGalleriesRequest extends CreatubblesRequest { + + public ListGalleriesRequest(String id, boolean creation) { + this(id, creation, null); + } + + public ListGalleriesRequest(String id, boolean creation, String accessToken) { + super(getEndPoint(id, creation), HttpMethod.GET, accessToken); + } + + private static String getEndPoint(String id, boolean creation) { + if (id == null) { + return EndPoints.GALLERIES.getTemplate(); + } else if (creation) { + return EndPoints.CREATIONS_GALLERIES.format(id); + } else { + return EndPoints.USER_GALLERIES.format(id); + } + } + + @Override + public Class getResponseClass() { + return ListGalleriesResponse.class; + } +} diff --git a/src/main/java/com/creatubbles/api/request/gallery/UserGalleryRequest.java b/src/main/java/com/creatubbles/api/request/gallery/UserGalleryRequest.java deleted file mode 100644 index 42bb1a1..0000000 --- a/src/main/java/com/creatubbles/api/request/gallery/UserGalleryRequest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.creatubbles.api.request.gallery; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.gallery.UserGalleryResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class UserGalleryRequest extends CreatubblesRequest { - - public UserGalleryRequest(String id) { - this(id, null); - } - - public UserGalleryRequest(String id, String accessToken) { - super(String.format(EndPoints.USERS_GALLERIES, id), HttpMethod.GET, accessToken); - } - - @Override - public Class getResponseClass() { - return UserGalleryResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/landingurls/GetCreationLandingUrlRequest.java b/src/main/java/com/creatubbles/api/request/landingurls/GetCreationLandingUrlRequest.java new file mode 100644 index 0000000..9bce72e --- /dev/null +++ b/src/main/java/com/creatubbles/api/request/landingurls/GetCreationLandingUrlRequest.java @@ -0,0 +1,19 @@ +package com.creatubbles.api.request.landingurls; + +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.response.landingurls.GetCreationLandingUrlResponse; +import com.creatubbles.api.util.EndPoints; +import com.creatubbles.api.util.HttpMethod; + + +public class GetCreationLandingUrlRequest extends CreatubblesRequest { + + public GetCreationLandingUrlRequest(String creationId, String accessToken) { + super(EndPoints.CREATION_LANDING_URL.format(creationId), HttpMethod.GET, accessToken); + } + + @Override + public Class getResponseClass() { + return GetCreationLandingUrlResponse.class; + } +} diff --git a/src/main/java/com/creatubbles/api/request/landingurls/GetLandingUrlsRequest.java b/src/main/java/com/creatubbles/api/request/landingurls/GetLandingUrlsRequest.java new file mode 100644 index 0000000..24f03bd --- /dev/null +++ b/src/main/java/com/creatubbles/api/request/landingurls/GetLandingUrlsRequest.java @@ -0,0 +1,22 @@ +package com.creatubbles.api.request.landingurls; + +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.response.landingurls.GetLandingUrlsResponse; +import com.creatubbles.api.util.HttpMethod; + +import static com.creatubbles.api.util.EndPoints.LANDING_URLS; + +/** + * Created by Jevgeni on 09.03.2016. + */ +public class GetLandingUrlsRequest extends CreatubblesRequest { + + public GetLandingUrlsRequest(String accessToken) { + super(LANDING_URLS.getTemplate(), HttpMethod.GET, accessToken); + } + + @Override + public Class getResponseClass() { + return GetLandingUrlsResponse.class; + } +} diff --git a/src/main/java/com/creatubbles/api/request/landingurls/GetSpecificLandingUrlRequest.java b/src/main/java/com/creatubbles/api/request/landingurls/GetSpecificLandingUrlRequest.java new file mode 100644 index 0000000..f7d287a --- /dev/null +++ b/src/main/java/com/creatubbles/api/request/landingurls/GetSpecificLandingUrlRequest.java @@ -0,0 +1,23 @@ +package com.creatubbles.api.request.landingurls; + +import com.creatubbles.api.core.CreatubblesRequest; +import com.creatubbles.api.core.LandingUrl; +import com.creatubbles.api.response.landingurls.GetSpecificLandingUrlResponse; +import com.creatubbles.api.util.HttpMethod; + +import static com.creatubbles.api.util.EndPoints.SPECIFIC_LANDING_URL; + +/** + * Created by Jevgeni on 09.03.2016. + */ +public class GetSpecificLandingUrlRequest extends CreatubblesRequest { + + public GetSpecificLandingUrlRequest(String accessToken, LandingUrl.LandingUrlType type) { + super(SPECIFIC_LANDING_URL.format(type), HttpMethod.GET, accessToken); + } + + @Override + public Class getResponseClass() { + return GetSpecificLandingUrlResponse.class; + } +} diff --git a/src/main/java/com/creatubbles/api/request/user/UserAuthTokenRequest.java b/src/main/java/com/creatubbles/api/request/user/UserAuthTokenRequest.java deleted file mode 100644 index 9dbedb2..0000000 --- a/src/main/java/com/creatubbles/api/request/user/UserAuthTokenRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.creatubbles.api.request.user; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.user.UserAuthTokenResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -@Deprecated -public class UserAuthTokenRequest extends CreatubblesRequest { - - public UserAuthTokenRequest(String accessToken) { - super(EndPoints.AUTH_TOKEN, HttpMethod.GET, accessToken); - } - - @Override - public Class getResponseClass() { - return UserAuthTokenResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/request/user/UserProfileRequest.java b/src/main/java/com/creatubbles/api/request/user/UserProfileRequest.java index 8813b8f..7c9fed5 100644 --- a/src/main/java/com/creatubbles/api/request/user/UserProfileRequest.java +++ b/src/main/java/com/creatubbles/api/request/user/UserProfileRequest.java @@ -1,20 +1,18 @@ package com.creatubbles.api.request.user; -import com.creatubbles.api.APIVersion; import com.creatubbles.api.core.CreatubblesRequest; import com.creatubbles.api.response.user.UserProfileResponse; import com.creatubbles.api.util.EndPoints; import com.creatubbles.api.util.HttpMethod; -@APIVersion(2) public class UserProfileRequest extends CreatubblesRequest { public UserProfileRequest(String accessToken) { - super(String.format(EndPoints.USERS_PROFILE, "me"), HttpMethod.GET, accessToken); + this("me", accessToken); } public UserProfileRequest(String id, String accessToken) { - super(String.format(EndPoints.USERS_PROFILE, id), HttpMethod.GET, accessToken); + super(EndPoints.USERS_PROFILE.format(id), HttpMethod.GET, accessToken); } @Override diff --git a/src/main/java/com/creatubbles/api/request/user/UserTokenRequest.java b/src/main/java/com/creatubbles/api/request/user/UserTokenRequest.java deleted file mode 100644 index 7d777b2..0000000 --- a/src/main/java/com/creatubbles/api/request/user/UserTokenRequest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.creatubbles.api.request.user; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesRequest; -import com.creatubbles.api.response.user.UserTokenResponse; -import com.creatubbles.api.util.EndPoints; -import com.creatubbles.api.util.HttpMethod; - -@APIVersion(1) -public class UserTokenRequest extends CreatubblesRequest { - - public UserTokenRequest(String accessToken) { - super(EndPoints.USER_TOKEN, HttpMethod.GET, accessToken); - } - - @Override - public Class getResponseClass() { - return UserTokenResponse.class; - } -} diff --git a/src/main/java/com/creatubbles/api/APIVersion.java b/src/main/java/com/creatubbles/api/response/ArrayResponse.java similarity index 56% rename from src/main/java/com/creatubbles/api/APIVersion.java rename to src/main/java/com/creatubbles/api/response/ArrayResponse.java index 03d216c..c7ba4a7 100644 --- a/src/main/java/com/creatubbles/api/APIVersion.java +++ b/src/main/java/com/creatubbles/api/response/ArrayResponse.java @@ -1,12 +1,12 @@ -package com.creatubbles.api; +package com.creatubbles.api.response; +import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +@Documented +@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface APIVersion { - int value() default 1; -} +public @interface ArrayResponse {} diff --git a/src/main/java/com/creatubbles/api/response/amazon/GetAmazonTokenResponse.java b/src/main/java/com/creatubbles/api/response/amazon/GetAmazonTokenResponse.java deleted file mode 100644 index 0b77f0d..0000000 --- a/src/main/java/com/creatubbles/api/response/amazon/GetAmazonTokenResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.creatubbles.api.response.amazon; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; -import com.creatubbles.api.core.Credentials; - -@APIVersion(1) -public class GetAmazonTokenResponse extends CreatubblesResponse { - public String error, expires_at; - public Credentials credentials; -} diff --git a/src/main/java/com/creatubbles/api/response/amazon/UploadS3FileResponse.java b/src/main/java/com/creatubbles/api/response/amazon/UploadS3FileResponse.java new file mode 100644 index 0000000..b3f292a --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/amazon/UploadS3FileResponse.java @@ -0,0 +1,18 @@ +package com.creatubbles.api.response.amazon; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import com.creatubbles.api.core.CreatubblesResponse; + +/** + * Created by Jevgeni on 28.10.2015. + */ +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class UploadS3FileResponse extends CreatubblesResponse { + + private boolean success; +} diff --git a/src/main/java/com/creatubbles/api/response/amazon/UploadS3ImageResponse.java b/src/main/java/com/creatubbles/api/response/amazon/UploadS3ImageResponse.java deleted file mode 100644 index 06fa4ce..0000000 --- a/src/main/java/com/creatubbles/api/response/amazon/UploadS3ImageResponse.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.creatubbles.api.response.amazon; - -import com.creatubbles.api.core.CreatubblesResponse; - -/** - * Created by Jevgeni on 28.10.2015. - */ -public class UploadS3ImageResponse extends CreatubblesResponse { -} diff --git a/src/main/java/com/creatubbles/api/response/auth/OAuthAccessTokenResponse.java b/src/main/java/com/creatubbles/api/response/auth/OAuthAccessTokenResponse.java index 9752eb7..50490eb 100644 --- a/src/main/java/com/creatubbles/api/response/auth/OAuthAccessTokenResponse.java +++ b/src/main/java/com/creatubbles/api/response/auth/OAuthAccessTokenResponse.java @@ -1,13 +1,20 @@ package com.creatubbles.api.response.auth; -import com.creatubbles.api.APIVersion; +import lombok.Getter; +import lombok.ToString; + import com.creatubbles.api.core.CreatubblesResponse; +import com.google.gson.annotations.SerializedName; -@APIVersion(2) -public class OAuthAccessTokenResponse extends CreatubblesResponse{ +@Getter +@ToString(callSuper = true) +public class OAuthAccessTokenResponse extends CreatubblesResponse { - public String access_token; - public Long expires_in; - public String token_type; + @SerializedName("access_token") + private String accessToken; + @SerializedName("expires_in") + private Long lifetime; + @SerializedName("token_type") + private String type; } diff --git a/src/main/java/com/creatubbles/api/response/auth/SignInResponse.java b/src/main/java/com/creatubbles/api/response/auth/SignInResponse.java deleted file mode 100644 index 1577506..0000000 --- a/src/main/java/com/creatubbles/api/response/auth/SignInResponse.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.creatubbles.api.response.auth; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; - -@APIVersion(1) -public class SignInResponse extends CreatubblesResponse { - public String access_token; -} diff --git a/src/main/java/com/creatubbles/api/response/auth/SignUpResponse.java b/src/main/java/com/creatubbles/api/response/auth/SignUpResponse.java deleted file mode 100644 index a9db434..0000000 --- a/src/main/java/com/creatubbles/api/response/auth/SignUpResponse.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.creatubbles.api.response.auth; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.core.CreatubblesResponse; -import com.creatubbles.api.core.User; -import com.google.gson.*; - -import java.lang.reflect.Type; -import java.util.List; - -@APIVersion(1) -public class SignUpResponse extends CreatubblesResponse implements JsonDeserializer { - public User user; - public SignUpError errors; - - public SignUpResponse() { - - } - - @Override - public SignUpResponse deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { - SignUpResponse signUpResponse = new SignUpResponse(); - - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - - if (jsonObject.get("id") != null) { - signUpResponse.user = CreatubblesAPI.GSON.fromJson(jsonElement, User.class); - return signUpResponse; - } else if (jsonObject.get("errors").isJsonObject()) { - JsonObject jsonErrorObject = (JsonObject) jsonObject.get("errors"); - signUpResponse.errors = CreatubblesAPI.GSON.fromJson(jsonErrorObject, SignUpError.class); - return signUpResponse; - } - } - - return signUpResponse; - } - - public static class SignUpError { - public List email, password, username; - } -} diff --git a/src/main/java/com/creatubbles/api/response/creation/CreateCreationResponse.java b/src/main/java/com/creatubbles/api/response/creation/CreateCreationResponse.java index 2e2bf80..95cdc6c 100644 --- a/src/main/java/com/creatubbles/api/response/creation/CreateCreationResponse.java +++ b/src/main/java/com/creatubbles/api/response/creation/CreateCreationResponse.java @@ -1,37 +1,15 @@ package com.creatubbles.api.response.creation; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.CreatubblesAPI; +import lombok.Getter; + import com.creatubbles.api.core.Creation; import com.creatubbles.api.core.CreatubblesResponse; -import com.google.gson.*; - -import java.lang.reflect.Type; - -@APIVersion(2) -public class CreateCreationResponse extends CreatubblesResponse implements JsonDeserializer { +import com.google.gson.annotations.SerializedName; - public Creation creation; +@Getter +public class CreateCreationResponse extends CreatubblesResponse { - @Override - public CreateCreationResponse deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) throws - JsonParseException { - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - deserializeData(jsonObject); - } - return this; - } + @SerializedName("attributes") + private Creation creation; - private void deserializeData(JsonObject jsonObject) { - JsonObject data = jsonObject.getAsJsonObject("data"); - if (data != null) { - JsonObject attributes = data.getAsJsonObject("attributes"); - JsonElement idE = data.get("id"); - if (idE != null && attributes != null) { - creation = CreatubblesAPI.GSON.fromJson(attributes, Creation.class); - creation.id = idE.getAsString(); - } - } - } } diff --git a/src/main/java/com/creatubbles/api/response/creation/CreationsUploadsResponse.java b/src/main/java/com/creatubbles/api/response/creation/CreationsUploadsResponse.java index 67ff3ac..9036987 100644 --- a/src/main/java/com/creatubbles/api/response/creation/CreationsUploadsResponse.java +++ b/src/main/java/com/creatubbles/api/response/creation/CreationsUploadsResponse.java @@ -1,35 +1,16 @@ package com.creatubbles.api.response.creation; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; -import com.google.gson.*; - -import java.lang.reflect.Type; +import lombok.Getter; -@APIVersion(2) -public class CreationsUploadsResponse extends CreatubblesResponse implements JsonDeserializer { - - public int id; - public String url; +import com.creatubbles.api.core.CreatubblesResponse; +import com.google.gson.annotations.SerializedName; - @Override - public CreationsUploadsResponse deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - deserializeData(jsonObject); - } - return this; - } +@Getter +public class CreationsUploadsResponse extends CreatubblesResponse { - private void deserializeData(JsonObject jsonObject) { - JsonObject data = jsonObject.getAsJsonObject("data"); - if (data != null) { - JsonObject attributes = data.getAsJsonObject("attributes"); - JsonElement idE = data.get("id"); - if (idE != null && attributes != null) { - url = attributes.get("url").getAsString(); - id = idE.getAsInt(); - } - } - } + private String url; + @SerializedName("content_type") + private String type; + @SerializedName("ping_url") + private String pingUrl; } diff --git a/src/main/java/com/creatubbles/api/response/creation/GetCreationResponse.java b/src/main/java/com/creatubbles/api/response/creation/GetCreationResponse.java new file mode 100644 index 0000000..6e3dcd5 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/creation/GetCreationResponse.java @@ -0,0 +1,24 @@ +package com.creatubbles.api.response.creation; + +import lombok.Getter; +import lombok.ToString; + +import com.creatubbles.api.core.Creation; +import com.creatubbles.api.core.CreatubblesResponse; +import com.creatubbles.api.response.relationships.Relationships; +import com.google.gson.annotations.SerializedName; + +@Getter +@ToString(callSuper = true) +public class GetCreationResponse extends CreatubblesResponse { + + @SerializedName("attributes") + private Creation creation; + + private Relationships relationships; + + @Override + public void handleId(String id) { + creation.setId(id); + } +} diff --git a/src/main/java/com/creatubbles/api/response/creation/GetCreationsResponse.java b/src/main/java/com/creatubbles/api/response/creation/GetCreationsResponse.java index 5858891..1419410 100644 --- a/src/main/java/com/creatubbles/api/response/creation/GetCreationsResponse.java +++ b/src/main/java/com/creatubbles/api/response/creation/GetCreationsResponse.java @@ -1,61 +1,6 @@ package com.creatubbles.api.response.creation; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.core.Creation; -import com.creatubbles.api.core.CreatubblesResponse; -import com.google.gson.*; +import com.creatubbles.api.response.ArrayResponse; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; - -@APIVersion(2) -public class GetCreationsResponse extends CreatubblesResponse implements JsonDeserializer { - public int total_pages, total_count; - public List creations = new ArrayList(); - - @Override - public GetCreationsResponse deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) throws - JsonParseException { - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - deserializeMeta(jsonObject); - deserializeData(jsonObject); - } - return this; - } - - private void deserializeData(JsonObject jsonObject) { - JsonArray data = jsonObject.getAsJsonArray("data"); - if (data != null) { - for (int i = 0; i < data.size(); i++) { - JsonElement elem = data.get(i); - if (!elem.isJsonPrimitive()) { - JsonObject obj = (JsonObject) elem; - JsonObject attributes = obj.getAsJsonObject("attributes"); - JsonElement idE = obj.get("id"); - if (idE != null && attributes != null) { - Creation creation = CreatubblesAPI.GSON.fromJson(attributes, Creation.class); - creation.id = idE.getAsString(); - creations.add(creation); - } - } - } - } - } - - private void deserializeMeta(JsonObject jsonObject) { - JsonObject meta = jsonObject.getAsJsonObject("meta"); - if (meta != null) { - JsonElement totalPagesE = meta.get("total_pages"); - if (totalPagesE != null) { - total_pages = totalPagesE.getAsInt(); - } - JsonElement totalCountE = meta.get("total_count"); - if (totalCountE != null) { - total_count = totalCountE.getAsInt(); - } - } - } -} \ No newline at end of file +@ArrayResponse +public class GetCreationsResponse extends GetCreationResponse {} \ No newline at end of file diff --git a/src/main/java/com/creatubbles/api/response/creation/PingCreationsUploadsResponse.java b/src/main/java/com/creatubbles/api/response/creation/PingCreationsUploadsResponse.java index cc7f51b..4f12840 100644 --- a/src/main/java/com/creatubbles/api/response/creation/PingCreationsUploadsResponse.java +++ b/src/main/java/com/creatubbles/api/response/creation/PingCreationsUploadsResponse.java @@ -1,11 +1,9 @@ package com.creatubbles.api.response.creation; -import com.creatubbles.api.APIVersion; import com.creatubbles.api.core.CreatubblesResponse; /** * Created by Jevgeni on 22.12.2015. */ -@APIVersion(2) public class PingCreationsUploadsResponse extends CreatubblesResponse { } diff --git a/src/main/java/com/creatubbles/api/response/creation/SearchCreationsResponse.java b/src/main/java/com/creatubbles/api/response/creation/SearchCreationsResponse.java deleted file mode 100644 index 0c30bf9..0000000 --- a/src/main/java/com/creatubbles/api/response/creation/SearchCreationsResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.creatubbles.api.response.creation; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.Creation; -import com.creatubbles.api.core.CreatubblesResponse; - -import java.util.List; - -@APIVersion(1) -public class SearchCreationsResponse extends CreatubblesResponse { - public int total_entries, total_pages; - public String page; - public List creations; -} diff --git a/src/main/java/com/creatubbles/api/response/creator/CreateCreatorResponse.java b/src/main/java/com/creatubbles/api/response/creator/CreateCreatorResponse.java deleted file mode 100644 index 12f7eb2..0000000 --- a/src/main/java/com/creatubbles/api/response/creator/CreateCreatorResponse.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.creatubbles.api.response.creator; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.core.Creator; -import com.creatubbles.api.core.CreatubblesResponse; -import com.google.gson.*; - -import java.lang.reflect.Type; -import java.util.List; - -@APIVersion(1) -public class CreateCreatorResponse extends CreatubblesResponse implements JsonDeserializer { - public Creator creator; - public CreateCreatorError errors; - - @Override - public CreateCreatorResponse deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { - CreateCreatorResponse createCreatorResponse = new CreateCreatorResponse(); - - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - - if (jsonObject.get("creator") != null && jsonObject.get("creator").isJsonObject()) { - JsonObject creatorObject = (JsonObject) jsonObject.get("creator"); - - if (creatorObject.get("id") != null) { - createCreatorResponse.creator = CreatubblesAPI.GSON.fromJson(jsonElement, Creator.class); - return createCreatorResponse; - } else if (creatorObject.get("errors") != null) { - JsonObject jsonErrorObject = (JsonObject) jsonObject.get("errors"); - createCreatorResponse.errors = CreatubblesAPI.GSON.fromJson(jsonErrorObject, CreateCreatorError.class); - return createCreatorResponse; - } - } - } - - return createCreatorResponse; - } - - public static class CreateCreatorError { - public List gender, name, birth_year, base; - } -} diff --git a/src/main/java/com/creatubbles/api/response/creator/CreatorsFollowersResponse.java b/src/main/java/com/creatubbles/api/response/creator/CreatorsFollowersResponse.java deleted file mode 100644 index 99d4cea..0000000 --- a/src/main/java/com/creatubbles/api/response/creator/CreatorsFollowersResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.creatubbles.api.response.creator; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; -import com.creatubbles.api.core.User; - -import java.util.List; - -@APIVersion(1) -public class CreatorsFollowersResponse extends CreatubblesResponse { - public int total_entries, total_pages, page; - public List users; -} diff --git a/src/main/java/com/creatubbles/api/response/creator/CreatorsFollowingUsersResponse.java b/src/main/java/com/creatubbles/api/response/creator/CreatorsFollowingUsersResponse.java deleted file mode 100644 index dc48dc7..0000000 --- a/src/main/java/com/creatubbles/api/response/creator/CreatorsFollowingUsersResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.creatubbles.api.response.creator; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; -import com.creatubbles.api.core.User; - -import java.util.List; - -@APIVersion(1) -public class CreatorsFollowingUsersResponse extends CreatubblesResponse { - public int total_entries, total_pages, page; - public List users; -} diff --git a/src/main/java/com/creatubbles/api/response/creator/GetCreatorsResponse.java b/src/main/java/com/creatubbles/api/response/creator/GetCreatorsResponse.java index 65ccdf4..c0cf159 100644 --- a/src/main/java/com/creatubbles/api/response/creator/GetCreatorsResponse.java +++ b/src/main/java/com/creatubbles/api/response/creator/GetCreatorsResponse.java @@ -1,41 +1,18 @@ package com.creatubbles.api.response.creator; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.core.Creator; -import com.creatubbles.api.core.CreatubblesResponse; -import com.google.gson.*; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; +import lombok.Getter; +import lombok.ToString; -@APIVersion(2) -public class GetCreatorsResponse extends CreatubblesResponse implements JsonDeserializer { +import com.creatubbles.api.core.CreatubblesResponse; +import com.creatubbles.api.core.User; +import com.creatubbles.api.response.ArrayResponse; +import com.google.gson.annotations.SerializedName; - public List creators = new ArrayList(); +@ArrayResponse +@Getter +@ToString(callSuper = true) +public class GetCreatorsResponse extends CreatubblesResponse { - @Override - public GetCreatorsResponse deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - JsonArray data = jsonObject.getAsJsonArray("data"); - if (data != null) { - for (int i = 0; i < data.size(); i++) { - JsonElement elem = data.get(i); - if (!elem.isJsonPrimitive()) { - JsonObject obj = (JsonObject) jsonElement; - JsonObject attributes = obj.getAsJsonObject("attributes"); - JsonElement idE = obj.get("id"); - if (idE != null && attributes != null) { - Creator creator = CreatubblesAPI.GSON.fromJson(attributes, Creator.class); - creator.id = idE.getAsString(); - creators.add(creator); - } - } - } - } - } - return this; - } + @SerializedName("attributes") + User creator; } diff --git a/src/main/java/com/creatubbles/api/response/creator/UsersCreatorsResponse.java b/src/main/java/com/creatubbles/api/response/creator/UsersCreatorsResponse.java deleted file mode 100644 index ff19d7e..0000000 --- a/src/main/java/com/creatubbles/api/response/creator/UsersCreatorsResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.creatubbles.api.response.creator; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.Creator; -import com.creatubbles.api.core.CreatubblesResponse; - -import java.util.List; - -@APIVersion(1) -public class UsersCreatorsResponse extends CreatubblesResponse { - public int total_entries, total_pages; - public String page, next, prev, first, last; - public List creators; -} diff --git a/src/main/java/com/creatubbles/api/response/gallery/CreateGalleryResponse.java b/src/main/java/com/creatubbles/api/response/gallery/CreateGalleryResponse.java new file mode 100644 index 0000000..5e4fde7 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/gallery/CreateGalleryResponse.java @@ -0,0 +1,14 @@ +package com.creatubbles.api.response.gallery; + +import lombok.Getter; + +import com.creatubbles.api.core.CreatubblesResponse; +import com.creatubbles.api.core.Gallery; +import com.google.gson.annotations.SerializedName; + +@Getter +public class CreateGalleryResponse extends CreatubblesResponse { + + @SerializedName("attributes") + private Gallery gallery; +} diff --git a/src/main/java/com/creatubbles/api/response/gallery/CreateUserGalleryResponse.java b/src/main/java/com/creatubbles/api/response/gallery/CreateUserGalleryResponse.java deleted file mode 100644 index 0a7e8ef..0000000 --- a/src/main/java/com/creatubbles/api/response/gallery/CreateUserGalleryResponse.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.creatubbles.api.response.gallery; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.CreatubblesAPI; -import com.creatubbles.api.core.CreatubblesResponse; -import com.creatubbles.api.core.Gallery; -import com.google.gson.*; - -import java.lang.reflect.Type; -import java.util.List; - -@APIVersion(1) -public class CreateUserGalleryResponse extends CreatubblesResponse implements JsonDeserializer { - public Gallery gallery; - public CreateUserGalleryError errors; - - @Override - public CreateUserGalleryResponse deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { - CreateUserGalleryResponse createUserGalleryResponse = new CreateUserGalleryResponse(); - - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - - if (jsonObject.get("gallery") != null && jsonObject.get("gallery").isJsonObject()) { - JsonObject galleryObject = (JsonObject) jsonObject.get("gallery"); - - if (galleryObject.get("id") != null) { - createUserGalleryResponse.gallery = CreatubblesAPI.GSON.fromJson(jsonElement, Gallery.class); - return createUserGalleryResponse; - } else if (galleryObject.get("errors") != null) { - JsonObject jsonErrorObject = (JsonObject) jsonObject.get("errors"); - createUserGalleryResponse.errors = CreatubblesAPI.GSON.fromJson(jsonErrorObject, CreateUserGalleryError.class); - return createUserGalleryResponse; - } - } - } - - return createUserGalleryResponse; - } - - public static class CreateUserGalleryError { - public List name; - } -} diff --git a/src/main/java/com/creatubbles/api/response/gallery/ListGalleriesResponse.java b/src/main/java/com/creatubbles/api/response/gallery/ListGalleriesResponse.java new file mode 100644 index 0000000..4eb573e --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/gallery/ListGalleriesResponse.java @@ -0,0 +1,13 @@ +package com.creatubbles.api.response.gallery; + +import com.creatubbles.api.core.CreatubblesResponse; +import com.creatubbles.api.core.Gallery; +import com.creatubbles.api.response.ArrayResponse; +import com.google.gson.annotations.SerializedName; + +@ArrayResponse +public class ListGalleriesResponse extends CreatubblesResponse { + + @SerializedName("attributes") + private Gallery galleries; +} diff --git a/src/main/java/com/creatubbles/api/response/gallery/UserGalleryResponse.java b/src/main/java/com/creatubbles/api/response/gallery/UserGalleryResponse.java deleted file mode 100644 index 655c4f4..0000000 --- a/src/main/java/com/creatubbles/api/response/gallery/UserGalleryResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.creatubbles.api.response.gallery; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; -import com.creatubbles.api.core.Gallery; - -import java.util.List; - -@APIVersion(1) -public class UserGalleryResponse extends CreatubblesResponse { - public int total; - public List galleries; -} diff --git a/src/main/java/com/creatubbles/api/response/landingurls/GetCreationLandingUrlResponse.java b/src/main/java/com/creatubbles/api/response/landingurls/GetCreationLandingUrlResponse.java new file mode 100644 index 0000000..d6cc0d1 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/landingurls/GetCreationLandingUrlResponse.java @@ -0,0 +1,14 @@ +package com.creatubbles.api.response.landingurls; + +import lombok.Getter; +import lombok.ToString; + +import com.creatubbles.api.core.CreatubblesResponse; + +@Getter +@ToString(callSuper = true) +public class GetCreationLandingUrlResponse extends CreatubblesResponse { + + private String url; + +} diff --git a/src/main/java/com/creatubbles/api/response/landingurls/GetLandingUrlsResponse.java b/src/main/java/com/creatubbles/api/response/landingurls/GetLandingUrlsResponse.java new file mode 100644 index 0000000..dcd3070 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/landingurls/GetLandingUrlsResponse.java @@ -0,0 +1,14 @@ +package com.creatubbles.api.response.landingurls; + +import lombok.Getter; + +import com.creatubbles.api.core.CreatubblesResponse; +import com.creatubbles.api.core.LandingUrl; +import com.creatubbles.api.response.ArrayResponse; + +@Getter +@ArrayResponse +public class GetLandingUrlsResponse extends CreatubblesResponse { + + private LandingUrl url; +} \ No newline at end of file diff --git a/src/main/java/com/creatubbles/api/response/landingurls/GetSpecificLandingUrlResponse.java b/src/main/java/com/creatubbles/api/response/landingurls/GetSpecificLandingUrlResponse.java new file mode 100644 index 0000000..0c89007 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/landingurls/GetSpecificLandingUrlResponse.java @@ -0,0 +1,12 @@ +package com.creatubbles.api.response.landingurls; + +import lombok.Getter; + +import com.creatubbles.api.core.CreatubblesResponse; +import com.creatubbles.api.core.LandingUrl; + +@Getter +public class GetSpecificLandingUrlResponse extends CreatubblesResponse { + + private LandingUrl url; +} diff --git a/src/main/java/com/creatubbles/api/response/meta/MetaPagination.java b/src/main/java/com/creatubbles/api/response/meta/MetaPagination.java new file mode 100644 index 0000000..c44110c --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/meta/MetaPagination.java @@ -0,0 +1,21 @@ +package com.creatubbles.api.response.meta; + +import lombok.Value; + +import com.google.gson.annotations.SerializedName; + +@Value +public class MetaPagination implements Metadata { + + @SerializedName("total_count") + int objectCount; + + @SerializedName("total_pages") + int pageCount; + + @SerializedName("per_page") + int perPage; + + @SerializedName("current_page") + int page; +} diff --git a/src/main/java/com/creatubbles/api/response/meta/Metadata.java b/src/main/java/com/creatubbles/api/response/meta/Metadata.java new file mode 100644 index 0000000..542e7d4 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/meta/Metadata.java @@ -0,0 +1,5 @@ +package com.creatubbles.api.response.meta; + +public interface Metadata { + +} diff --git a/src/main/java/com/creatubbles/api/response/relationships/RelationshipUser.java b/src/main/java/com/creatubbles/api/response/relationships/RelationshipUser.java new file mode 100644 index 0000000..d9d7aa9 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/relationships/RelationshipUser.java @@ -0,0 +1,9 @@ +package com.creatubbles.api.response.relationships; + +import lombok.Value; + +@Value +public class RelationshipUser { + + String id, type; +} diff --git a/src/main/java/com/creatubbles/api/response/relationships/Relationships.java b/src/main/java/com/creatubbles/api/response/relationships/Relationships.java new file mode 100644 index 0000000..efbb927 --- /dev/null +++ b/src/main/java/com/creatubbles/api/response/relationships/Relationships.java @@ -0,0 +1,11 @@ +package com.creatubbles.api.response.relationships; + +import lombok.Value; + +@Value +public class Relationships { + + RelationshipUser user; + RelationshipUser[] creators; + +} diff --git a/src/main/java/com/creatubbles/api/response/user/UserAuthTokenResponse.java b/src/main/java/com/creatubbles/api/response/user/UserAuthTokenResponse.java deleted file mode 100644 index 115e317..0000000 --- a/src/main/java/com/creatubbles/api/response/user/UserAuthTokenResponse.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.creatubbles.api.response.user; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; - -@APIVersion(1) -public class UserAuthTokenResponse extends CreatubblesResponse { - public String auth_token; -} diff --git a/src/main/java/com/creatubbles/api/response/user/UserProfileResponse.java b/src/main/java/com/creatubbles/api/response/user/UserProfileResponse.java index af59d67..a54df72 100644 --- a/src/main/java/com/creatubbles/api/response/user/UserProfileResponse.java +++ b/src/main/java/com/creatubbles/api/response/user/UserProfileResponse.java @@ -1,33 +1,21 @@ package com.creatubbles.api.response.user; -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.CreatubblesAPI; +import lombok.Getter; +import lombok.ToString; + import com.creatubbles.api.core.CreatubblesResponse; import com.creatubbles.api.core.User; -import com.google.gson.*; - -import java.lang.reflect.Type; - -@APIVersion(2) -public class UserProfileResponse extends CreatubblesResponse implements JsonDeserializer { - public User user; +import com.google.gson.annotations.SerializedName; +@Getter +@ToString(callSuper = true) +public class UserProfileResponse extends CreatubblesResponse { + + @SerializedName("attributes") + private User user; + @Override - public UserProfileResponse deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { - UserProfileResponse userProfileResponse = new UserProfileResponse(); - if (!jsonElement.isJsonPrimitive()) { - JsonObject jsonObject = (JsonObject) jsonElement; - JsonObject data = jsonObject.getAsJsonObject("data"); - if (data != null) { - JsonObject attributes = data.getAsJsonObject("attributes"); - JsonElement idE = data.get("id"); - if (attributes != null && idE != null) { - String id = idE.getAsString(); - userProfileResponse.user = CreatubblesAPI.GSON.fromJson(attributes, User.class); - userProfileResponse.user.id = id; - } - } - } - return userProfileResponse; + public void handleId(String id) { + user.setId(id); } } diff --git a/src/main/java/com/creatubbles/api/response/user/UserTokenResponse.java b/src/main/java/com/creatubbles/api/response/user/UserTokenResponse.java deleted file mode 100644 index cfba51d..0000000 --- a/src/main/java/com/creatubbles/api/response/user/UserTokenResponse.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.creatubbles.api.response.user; - -import com.creatubbles.api.APIVersion; -import com.creatubbles.api.core.CreatubblesResponse; - -@APIVersion(1) -public class UserTokenResponse extends CreatubblesResponse { - public String user_token; -} diff --git a/src/main/java/com/creatubbles/api/util/EndPoint.java b/src/main/java/com/creatubbles/api/util/EndPoint.java new file mode 100644 index 0000000..37ad598 --- /dev/null +++ b/src/main/java/com/creatubbles/api/util/EndPoint.java @@ -0,0 +1,14 @@ +package com.creatubbles.api.util; + +public interface EndPoint { + + String getTemplate(); + + String format(Object... args); + + /** + * Should return {@link #getTemplate()}. + */ + @Override + String toString(); +} diff --git a/src/main/java/com/creatubbles/api/util/EndPoints.java b/src/main/java/com/creatubbles/api/util/EndPoints.java index 985ca32..88edde8 100644 --- a/src/main/java/com/creatubbles/api/util/EndPoints.java +++ b/src/main/java/com/creatubbles/api/util/EndPoints.java @@ -1,40 +1,41 @@ package com.creatubbles.api.util; -public class EndPoints { +import lombok.RequiredArgsConstructor; - public static final String URL_BASE = "https://www.creatubbles.com/api/v2/"; - - public static final String URL_BASE_STAGING = "https://staging.creatubbles.com/api/v2/"; - - public static final String SIGN_IN = "users/sign_in.json"; - - public static final String SIGN_UP = "users.json"; - - @Deprecated - public static final String AUTH_TOKEN = "sessions/auth_token.json"; - - public static final String USER_TOKEN = "sessions/user_token.json"; - - public static final String USERS_CREATORS = "users/%s/creators.json"; - - public static final String CREATORS_FOLLOWING_USERS = "creators/%s/users/following.json"; - - public static final String CREATORS_FOLLOWERS = "creators/%s/users/followers.json"; - - public static final String USERS_GALLERIES = "users/%s/galleries.json"; - - public static final String CREATIONS_BY_ID = "creations/%s.json"; - - public static final String SEARCH_CREATIONS = "search/creations.json"; - - public static final String AWS_TOKEN = "sessions/aws_token.json"; +@RequiredArgsConstructor +public enum EndPoints implements EndPoint { //API v2 - public static final String OAUTH_TOKEN = "oauth/token"; - public static final String USERS = "users"; - public static final String USERS_PROFILE = "users/%s"; - public static final String CREATIONS = "creations"; - public static final String CREATIONS_UPLOADS = "creations/%s/uploads"; - public static final String PING_CREATIONS_UPLOADS = "uploads/%s"; - + OAUTH_TOKEN("oauth/token"), + USERS("users"), + USERS_PROFILE("users/%s"), + CREATION("creations/%s"), + CREATIONS("creations"), + CREATIONS_UPLOADS("creations/%s/uploads"), + PING_CREATIONS_UPLOADS("uploads/%s"), + LANDING_URLS("landing_urls"), + SPECIFIC_LANDING_URL("landing_urls/%s"), + CREATION_LANDING_URL("creations/%s/landing_url"), + GALLERIES("galleries"), + USER_GALLERIES("users/%s/galleries"), + CREATIONS_GALLERIES("creations/%s/galleries"), + + ; + + private final String template; + + @Override + public String getTemplate() { + return template; + } + + @Override + public String format(Object... args) { + return String.format(getTemplate(), args); + } + + @Override + public String toString() { + return getTemplate(); + } } diff --git a/src/main/java/com/creatubbles/api/util/HttpUtil.java b/src/main/java/com/creatubbles/api/util/HttpUtil.java index 965a1e0..cc14493 100644 --- a/src/main/java/com/creatubbles/api/util/HttpUtil.java +++ b/src/main/java/com/creatubbles/api/util/HttpUtil.java @@ -3,27 +3,61 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.OutputStream; +import java.net.FileNameMap; import java.net.HttpURLConnection; import java.net.URL; +import java.net.URLConnection; +import java.util.Arrays; +import java.util.List; public class HttpUtil { - public static int uploadObject(byte[] data, String url) throws IOException { - HttpURLConnection connection = (HttpURLConnection) (new URL(url).openConnection()); - connection.setDoOutput(true); - connection.setUseCaches(false); - connection.setRequestMethod(HttpMethod.PUT.name()); - OutputStream out = connection.getOutputStream(); - ByteArrayInputStream in = new ByteArrayInputStream(data); - byte[] buffer = new byte[4096]; - int bytesRead = -1; - while ((bytesRead = in.read(buffer)) != -1) { - out.write(buffer, 0, bytesRead); + private static final FileNameMap FILE_NAME_MAP = URLConnection.getFileNameMap(); + + public static class Response { + public String message; + public int code; + } + + public static final List allowedFileTypes = Arrays.asList("png", "gif", "jpg", "jpeg", "h264", "mpeg4", "wmv", "webm", "flv", "ogg", "ogv", "mp4", "m4v", "f4v", "mov", "zip"); + + public static Response uploadObject(byte[] data, String url, String mimeType) throws IOException { + HttpURLConnection connection = null; + Response ret = new Response(); + try { + connection = (HttpURLConnection) (new URL(url).openConnection()); + connection.setDoOutput(true); + connection.setUseCaches(false); + connection.setRequestMethod(HttpMethod.PUT.name()); + connection.setRequestProperty("Content-Type", mimeType); + OutputStream out = null; + try { + out = connection.getOutputStream(); + ByteArrayInputStream in = new ByteArrayInputStream(data); + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = in.read(buffer)) != -1) { + out.write(buffer, 0, bytesRead); + } + in.close(); + } finally { + if (out != null) { + out.flush(); + out.close(); + } + } + } finally { + if (connection != null) { + ret.code = connection.getResponseCode(); + ret.message = connection.getResponseMessage(); + connection.disconnect(); + } } - out.flush(); - in.close(); - out.close(); - return connection.getResponseCode(); + return ret; + } + + public static String getExtension(String path) { + return path.substring(path.indexOf('.', path.lastIndexOf('/')) + 1).toLowerCase(); } } diff --git a/src/main/java/com/creatubbles/api/util/OAuthUtil.java b/src/main/java/com/creatubbles/api/util/OAuthUtil.java deleted file mode 100644 index 93ae412..0000000 --- a/src/main/java/com/creatubbles/api/util/OAuthUtil.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.creatubbles.api.util; - -public class OAuthUtil { - - public static final String CLIENT_ID = "274af44ed7c74b2daf680de6363fd9590800200c9a66483a81a0841d11e5a837"; - public static final String CLIENT_SECRET = "a3b6ec42ce884f8eadadf5ddb9c7038c4062e707c29e4c27a44ff84c754a3485"; -}