Package com.rim.samples.device.messagelistdemo

Source Code of com.rim.samples.device.messagelistdemo.CommunicationSimulatorThread

/**
* CommunicationSimulatorThread.java
*
* Copyright � 1998-2011 Research In Motion Limited
*
* 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.
*
* Note: For the sake of simplicity, this sample application may not leverage
* resource bundles and resource strings.  However, it is STRONGLY recommended
* that application developers make use of the localization features available
* within the BlackBerry development platform to ensure a seamless application
* experience across a variety of languages and geographies.  For more information
* on localizing your application, please refer to the BlackBerry Java Development
* Environment Development Guide associated with this release.
*/

package com.rim.samples.device.messagelistdemo;

import java.util.Random;

import net.rim.device.api.collection.ReadableList;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.Dialog;

/**
* This Thread subclass simulates communication with a server and generates
* message actions. It can create new messages or update and delete existing
* ones.
*/
public final class CommunicationSimulatorThread extends Thread {

    private boolean _keepRunning;
    private static Random _random = new Random();

    private static final String[] NAMES =
            { "Scott Wyatt", "Tanya Wahl", "Kate Strike", "Mark McMullen",
                    "Beth Horton", "John Graham", "Ho Sung Chan",
                    "Long Feng Wu", "Kevil Wilhelm", "Trevor Van Daele" };

    private static final String[] PICTURES = { "BlueDress.png", "BlueSuit.png",
            "BlueSweatshirt.png", "BrownShirt.png", "Construction.png",
            "DarkJacket.png", "DarkSuit.png", "FemaleDoctor.png",
            "GreenJacket.png", "GreenShirt.png", "GreenTop.png",
            "LeatherJacket.png", "MaleDoctor.png", "Mechanic.png",
            "OrangeShirt.png", "PatternShirt.png", "PurpleTop.png",
            "RedCap.png", "RedJacket.png", "RedShirt.png" };

    /**
     * Creates a new CommunicationSimulatorThread object
     */
    public CommunicationSimulatorThread() {
        _keepRunning = true;
    }

    /**
     * @see java.lang.Runnable#run()
     */
    public void run() {
        // Perform random actions to the message store every three seconds
        final MessageListDemoStore messageStore =
                MessageListDemoStore.getInstance();
        while (_keepRunning) {
            synchronized (messageStore) {
                performRandomAction(messageStore);
            }
            try {
                synchronized (this) {
                    wait(3000);
                }
            } catch (final InterruptedException e) {
                UiApplication.getUiApplication().invokeLater(new Runnable() {
                    public void run() {
                        Dialog.alert("Thread#wait(long) threw " + e.toString());
                    }
                });

                return;
            }
        }
    }

    /**
     * Performs a random action. The action can either be: updating an existing
     * message, deleting an inbox message or deleting a message completely.
     *
     * @param messageStore
     *            The message store to perform the random action to
     */
    private void performRandomAction(final MessageListDemoStore messageStore) {
        final ReadableList inboxMessages = messageStore.getInboxMessages();
        final ReadableList deletedMessages = messageStore.getDeletedMessages();

        switch (_random.nextInt(3)) {
        case 0:

            // Update an existing message
            if (inboxMessages.size() > 0) {
                final DemoMessage msg =
                        (DemoMessage) inboxMessages.getAt(_random
                                .nextInt(inboxMessages.size()));
                if (msg.isNew()) {
                    msg.markRead();
                } else if (!msg.hasReplied()) {
                    msg.reply("Auto reply");
                } else {
                    msg.markAsNew();
                }
                messageStore.getInboxFolder().fireElementUpdated(msg, msg);
            } else {
                addInboxMessage(messageStore);
            }
            break;

        case 1:

            // Delete an inbox message
            if (inboxMessages.size() > 0) {
                final DemoMessage msg =
                        (DemoMessage) inboxMessages.getAt(_random
                                .nextInt(inboxMessages.size()));
                messageStore.deleteInboxMessage(msg);
                messageStore.getInboxFolder().fireElementRemoved(msg);
                messageStore.getDeletedFolder().fireElementAdded(msg);
            } else {
                addInboxMessage(messageStore);
            }
            break;

        default:

            // Delete message completely
            if (deletedMessages.size() > 0) {
                final DemoMessage msg =
                        (DemoMessage) deletedMessages.getAt(_random
                                .nextInt(deletedMessages.size()));
                messageStore.deleteMessageCompletely(msg);
                messageStore.getDeletedFolder().fireElementRemoved(msg);
            } else {
                addInboxMessage(messageStore);
            }
            break;
        }
    }

    /**
     * Adds a predefined message to the specified message store
     *
     * @param messageStore
     *            The message store to add the message to
     */
    private void addInboxMessage(final MessageListDemoStore messageStore) {
        final DemoMessage message = new DemoMessage();
        final String name = NAMES[_random.nextInt(NAMES.length)];
        message.setSender(name);
        message.setSubject("Hello from " + name);
        message.setMessage("Hello Chris. This is " + name
                + ". How are you?  Hope to see you at the conference!");
        message.setReceivedTime(System.currentTimeMillis() - 1000 * 60
                * _random.nextInt(60 * 24));

        // Assign random preview picture
        message.setPreviewPicture(getRandomPhotoImage());

        // Store message
        messageStore.addInboxMessage(message);

        // Notify folder
        messageStore.getInboxFolder().fireElementAdded(message);
    }

    /**
     * Retrieves a random predefined image
     *
     * @return The hard coded photo image
     */
    public static EncodedImage getRandomPhotoImage() {
        final String pictureName =
                "photo/" + PICTURES[_random.nextInt(PICTURES.length)];
        return EncodedImage.getEncodedImageResource(pictureName);
    }

    /**
     * Stops the thread from continuing its processing
     */
    void stopRunning() {
        synchronized (this) {
            _keepRunning = false;
            notifyAll();
        }
    }
}
TOP

Related Classes of com.rim.samples.device.messagelistdemo.CommunicationSimulatorThread

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.