Skip to content

Commit

Permalink
Model update and REST endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastienblanc committed Jan 29, 2015
1 parent 834fbf9 commit c468930
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 1 deletion.
@@ -0,0 +1,111 @@
/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.aerogear.unifiedpush.rest.registry.applications;


import org.jboss.aerogear.unifiedpush.api.AdmVariant;
import org.jboss.aerogear.unifiedpush.api.PushApplication;

import javax.validation.ConstraintViolationException;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

@Path("/applications/{pushAppID}/adm")
public class AdmVariantEndpoint extends AbstractVariantEndpoint {


@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response registerAdmVariant(
AdmVariant admVariant,
@PathParam("pushAppID") String pushApplicationID,
@Context UriInfo uriInfo) {

// find the root push app
PushApplication pushApp = getSearch().findByPushApplicationIDForDeveloper(pushApplicationID);

if (pushApp == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Could not find requested PushApplicationEntity").build();
}

// some validation
try {
validateModelClass(admVariant);
} catch (ConstraintViolationException cve) {

// Build and return the 400 (Bad Request) response
Response.ResponseBuilder builder = createBadRequestResponse(cve.getConstraintViolations());

return builder.build();
}

// store the Adm variant:
variantService.addVariant(admVariant);
// add Adm variant, and merge:
pushAppService.addVariant(pushApp, admVariant);

return Response.created(uriInfo.getAbsolutePathBuilder().path(String.valueOf(admVariant.getVariantID())).build()).entity(admVariant).build();
}

// READ
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response listAllAdmVariationsForPushApp(@PathParam("pushAppID") String pushApplicationID) {
final PushApplication application = getSearch().findByPushApplicationIDForDeveloper(pushApplicationID);
return Response.ok(getVariantsByType(application, AdmVariant.class)).build();
}

// UPDATE
@PUT
@Path("/{admID}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response updateAndroidVariation(
@PathParam("pushAppID") String id,
@PathParam("admID") String androidID,
AdmVariant updatedAdmApplication) {

AdmVariant admVariant = (AdmVariant) variantService.findByVariantID(androidID);
if (admVariant != null) {

// some validation
try {
validateModelClass(updatedAdmApplication);
} catch (ConstraintViolationException cve) {

// Build and return the 400 (Bad Request) response
Response.ResponseBuilder builder = createBadRequestResponse(cve.getConstraintViolations());

return builder.build();
}

// apply updated data:
admVariant.setClientId(updatedAdmApplication.getClientId());
admVariant.setClientSecret(updatedAdmApplication.getClientSecret());
admVariant.setName(updatedAdmApplication.getName());
admVariant.setDescription(updatedAdmApplication.getDescription());
variantService.updateVariant(admVariant);
return Response.noContent().build();
}

return Response.status(Response.Status.NOT_FOUND).entity("Could not find requested Variant").build();
}
}
@@ -0,0 +1,52 @@
/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.aerogear.unifiedpush.api;


import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class AdmVariant extends Variant {
@NotNull
@Size(min = 1, max = 255, message = "ClientId must be max. 255 chars long")
private String clientId;

@Size(min = 1, max = 255, message = "Client Secret must be max. 255 chars long")
private String clientSecret;


public String getClientId() {
return clientId;
}

public void setClientId(String clientId) {
this.clientId = clientId;
}

public String getClientSecret() {
return clientSecret;
}

public void setClientSecret(String clientSecret) {
this.clientSecret = clientSecret;
}

@Override
public VariantType getType() {
return VariantType.ADM;
}
}
Expand Up @@ -51,7 +51,12 @@ public enum VariantType {
/**
* The type identifier for our Windows MPNS variants.
*/
WINDOWS_MPNS("windows_mpns");
WINDOWS_MPNS("windows_mpns"),

/**
* The type identifier for our Amazon Device Messaging (ADM) variants.
*/
ADM("adm");


private final String typeName;
Expand Down
Expand Up @@ -50,6 +50,12 @@ public class DeviceTokenValidator implements ConstraintValidator<DeviceTokenChec
*/
private static final Pattern SIMPLE_PUSH_DEVICE_TOKEN = Pattern.compile("https?://.{0,2000}");

/**
* Pattern for Amazon is harder to define that is why we kept it lenient it is at least 100 characters long and can
* consist of digits, alphas, - , _ and . and all have one of these separators
*/
private static final Pattern ADM_DEVICE_TOKEN = Pattern.compile("(?i)[0-9a-z\\-_.]{100,}");

@Override
public void initialize(DeviceTokenCheck constraintAnnotation) {
}
Expand All @@ -73,6 +79,8 @@ public boolean isValid(Installation installation, ConstraintValidatorContext con
return WINDOWS_DEVICE_TOKEN.matcher(deviceToken).matches();
case SIMPLE_PUSH:
return SIMPLE_PUSH_DEVICE_TOKEN.matcher(deviceToken).matches();
case ADM:
return ADM_DEVICE_TOKEN.matcher(deviceToken).matches();
}
return false;
}
Expand Down
3 changes: 3 additions & 0 deletions model/jpa/src/main/resources/META-INF/orm.xml
Expand Up @@ -85,6 +85,9 @@ http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
<entity class="ChromePackagedAppVariant" access="FIELD">
<discriminator-value>chromePackagedApp</discriminator-value>
</entity>
<entity class="AdmVariant" access="FIELD">
<discriminator-value>admVariant</discriminator-value>
</entity>
<entity class="org.jboss.aerogear.unifiedpush.api.WindowsWNSVariant" access="FIELD">
<discriminator-value>windows_wns</discriminator-value>
</entity>
Expand Down

0 comments on commit c468930

Please sign in to comment.