Package org.jboss.aerogear.test.api.sender

Source Code of org.jboss.aerogear.test.api.sender.SenderRequest$UnifiedMessageBlueprint

/*
* JBoss, Home of Professional Open Source
* Copyright 2011, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of 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.test.api.sender;

import org.apache.http.HttpStatus;
import org.jboss.aerogear.test.UnexpectedResponseException;
import org.jboss.aerogear.test.api.AbstractSessionRequest;
import org.jboss.aerogear.unifiedpush.SenderClient;
import org.jboss.aerogear.unifiedpush.api.Installation;
import org.jboss.aerogear.unifiedpush.api.PushApplication;
import org.jboss.aerogear.unifiedpush.api.Variant;
import org.jboss.aerogear.unifiedpush.message.MessageResponseCallback;
import org.jboss.aerogear.unifiedpush.message.UnifiedMessage;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class SenderRequest extends AbstractSessionRequest<SenderRequest> {

    public UnifiedMessageBlueprint message() {
        return new UnifiedMessageBlueprint();
    }

    /* FIXME what should we generate?
    public UnifiedMessageBlueprint generate() {
        return message();
    }*/

    public SenderRequest send(UnifiedMessage message) {
        SenderClient senderClient = new SenderClient.Builder(getSession().getBaseUrl().toExternalForm())
                .customTrustStore("setup/aerogear.truststore", null, "aerogear")
                .build();

        final CountDownLatch latch = new CountDownLatch(1);
        final AtomicInteger statusCode = new AtomicInteger(-1);

        MessageResponseCallback callback = new MessageResponseCallback() {
            @Override
            public void onComplete(int status) {
                statusCode.set(status);
                latch.countDown();
            }

            @Override
            public void onError(Throwable throwable) {
                throw new RuntimeException(throwable);
            }
        };

        senderClient.send(message, callback);

        try {
            latch.await(5000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        UnexpectedResponseException.verifyStatusCode(statusCode.get(), HttpStatus.SC_OK);

        return this;
    }

    public static SenderRequest request() {
        return new SenderRequest();
    }

    public class UnifiedMessageBlueprint {

        private final UnifiedMessage.Builder builder;

        public UnifiedMessageBlueprint() {
            builder = new UnifiedMessage.Builder();
        }

        public UnifiedMessageBlueprint pushApplication(PushApplication pushApplication) {
            return pushApplicationId(pushApplication.getPushApplicationID())
                    .masterSecret(pushApplication.getMasterSecret());
        }

        public UnifiedMessageBlueprint pushApplicationId(String pushApplicationId) {
            builder.pushApplicationId(pushApplicationId);
            return this;
        }

        public UnifiedMessageBlueprint masterSecret(String masterSecret) {
            builder.masterSecret(masterSecret);
            return this;
        }

        public UnifiedMessageBlueprint aliases(String... aliases) {
            return aliases(Arrays.asList(aliases));
        }

        public UnifiedMessageBlueprint aliases(List<String> aliases) {
            builder.aliases(aliases);
            return this;
        }

        public UnifiedMessageBlueprint aliasesOf(Installation... installations) {
            return aliasesOf(Arrays.asList(installations));
        }

        public UnifiedMessageBlueprint aliasesOf(List<? extends Installation> installations) {
            List<String> aliases = new ArrayList<String>();
            for (Installation installation : installations) {
                aliases.add(installation.getAlias());
            }
            return aliases(aliases);
        }

        public UnifiedMessageBlueprint deviceTypes(String... deviceTypes) {
            return deviceTypes(Arrays.asList(deviceTypes));
        }

        public UnifiedMessageBlueprint deviceTypes(List<String> deviceTypes) {
            builder.deviceType(deviceTypes);
            return this;
        }

        public UnifiedMessageBlueprint deviceTypesOf(Installation... installations) {
            return deviceTypesOf(Arrays.asList(installations));
        }

        public UnifiedMessageBlueprint deviceTypesOf(List<? extends Installation> installations) {
            List<String> deviceTypes = new ArrayList<String>();
            for (Installation installation : installations) {
                deviceTypes.add(installation.getDeviceType());
            }
            return deviceTypes(deviceTypes);
        }

        public UnifiedMessageBlueprint categories(String... categories) {
            builder.categories(categories);
            return this;
        }

        public UnifiedMessageBlueprint categories(Set<String> categories) {
            builder.categories(categories);
            return this;
        }

        public UnifiedMessageBlueprint categoriesOf(Installation... installations) {
            return categoriesOf(Arrays.asList(installations));
        }

        public UnifiedMessageBlueprint categoriesOf(List<? extends Installation> installations) {
            Set<String> categories = new HashSet<String>();
            for (Installation installation : installations) {
                categories.addAll(installation.getCategories());
            }
            return categories(categories);
        }

        public UnifiedMessageBlueprint variantIDs(String... variants) {
            return variantIDs(Arrays.asList(variants));
        }

        public UnifiedMessageBlueprint variantIDs(List<String> variants) {
            builder.variants(variants);
            return this;
        }

        public UnifiedMessageBlueprint variants(Variant... variants) {
            return variants(Arrays.asList(variants));
        }

        public UnifiedMessageBlueprint variants(List<? extends Variant> variants) {
            List<String> variantIDs = new ArrayList<String>();
            for (Variant variant : variants) {
                variantIDs.add(variant.getVariantID());
            }
            return variantIDs(variantIDs);
        }

        public UnifiedMessageBlueprint attribute(String key, String value) {
            builder.attribute(key, value);
            return this;
        }

        public UnifiedMessageBlueprint alert(String message) {
            builder.alert(message);
            return this;
        }

        public UnifiedMessageBlueprint sound(String sound) {
            builder.sound(sound);
            return this;
        }

        public UnifiedMessageBlueprint badge(String badge) {
            builder.badge(badge);
            return this;
        }

        public UnifiedMessageBlueprint contentAvailable() {
            builder.contentAvailable();
            return this;
        }

        public UnifiedMessageBlueprint simplePush(String version) {
            builder.simplePush(version);
            return this;
        }

        public UnifiedMessageBlueprint timeToLive(int seconds) {
            builder.timeToLive(seconds);
            return this;
        }

        public SenderRequest send() {
            SenderRequest.this.send(builder.build());
            return SenderRequest.this;
        }

    }

}
TOP

Related Classes of org.jboss.aerogear.test.api.sender.SenderRequest$UnifiedMessageBlueprint

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.