Package com.rim.samples.device.messagelistdemo

Source Code of com.rim.samples.device.messagelistdemo.MessageListDemoStore$ReadableListImpl

/**
* MessageListDemoStore.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.Vector;

import net.rim.blackberry.api.messagelist.ApplicationIndicator;
import net.rim.blackberry.api.messagelist.ApplicationIndicatorRegistry;
import net.rim.blackberry.api.messagelist.ApplicationMessageFolder;
import net.rim.device.api.collection.ReadableList;
import net.rim.device.api.system.RuntimeStore;

/**
* This class is used to facilitate the storage of messages. For the sake of
* simplicitly, we are saving messages in the device runtime store. In a real
* world situation, messages would be saved in device persistent store and/or on
* a mail server.
*/
public final class MessageListDemoStore {
    // com.rim.samples.device.messagelistdemo.MessageListDemoStore
    private static final long MSG_KEY = 0xcf2b552e0e98a715L;

    private static MessageListDemoStore _instance;

    private final ReadableListImpl _inboxMessages;
    private final ReadableListImpl _deletedMessages;
    private ApplicationMessageFolder _mainFolder;
    private ApplicationMessageFolder _deletedFolder;
    private final ApplicationIndicator _indicator;

    /**
     * Creates a new MessageListDemoStore object
     */
    private MessageListDemoStore() {
        _inboxMessages = new ReadableListImpl();
        _deletedMessages = new ReadableListImpl();
        _indicator =
                ApplicationIndicatorRegistry.getInstance()
                        .getApplicationIndicator();
    }

    /**
     * Gets the singleton instance of the MessageListDemoStore
     *
     * @return The singleton instance of the MessagelistDemoStore
     */
    public static synchronized MessageListDemoStore getInstance() {
        // Keep messages as singleton in the RuntimeStore
        if (_instance == null) {
            final RuntimeStore rs = RuntimeStore.getRuntimeStore();

            synchronized (rs) {
                _instance = (MessageListDemoStore) rs.get(MSG_KEY);

                if (_instance == null) {
                    _instance = new MessageListDemoStore();
                    rs.put(MSG_KEY, _instance);
                }
            }
        }

        return _instance;
    }

    /**
     * Sets the main and deleted folders
     *
     * @param mainFolder
     *            The main folder to use
     * @param deletedFolder
     *            The deleted folder to use
     */
    void setFolders(final ApplicationMessageFolder mainFolder,
            final ApplicationMessageFolder deletedFolder) {
        _mainFolder = mainFolder;
        _deletedFolder = deletedFolder;
    }

    /**
     * Retrieves the inbox folder
     *
     * @return The inbox folder
     */
    ApplicationMessageFolder getInboxFolder() {
        return _mainFolder;
    }

    /**
     * Retrieves the deleted folder
     *
     * @return The deleted folder
     */
    ApplicationMessageFolder getDeletedFolder() {
        return _deletedFolder;
    }

    /**
     * Moves a message into the deleted folder
     *
     * @param message
     *            The message to move to the deleted folder
     */
    void deleteInboxMessage(final DemoMessage message) {
        if (message.isNew()) {
            // Update indicator
            _indicator.setValue(_indicator.getValue() - 1);
            if (_indicator.getValue() <= 0) {
                _indicator.setVisible(false);
            }
        }

        message.messageDeleted();
        _inboxMessages.removeMessage(message);
        _deletedMessages.addMessage(message);
    }

    /**
     * Commits a message to the persistent store
     *
     * @param message
     *            The message to commit
     */
    void commitMessage(final DemoMessage message) {
        // This empty method exists to reinforce the idea that in a real world
        // situation messages would be saved in device persistent store and/or
        // on a mail server.
    }

    /**
     * Adds a message to the inbox
     *
     * @param message
     *            The message to add to the inbox
     */
    void addInboxMessage(final DemoMessage message) {
        _inboxMessages.addMessage(message);

        if (message.isNew()) {
            // Update indicator
            _indicator.setValue(_indicator.getValue() + 1);
            _indicator.setNotificationState(true);
            if (!_indicator.isVisible()) {
                _indicator.setVisible(true);
            }
        }
    }

    /**
     * Completely deletes the message from the message store
     *
     * @param message
     *            The message to delete from the message store
     */
    void deleteMessageCompletely(final DemoMessage message) {
        _deletedMessages.removeMessage(message);
    }

    /**
     * Retrieves the inbox messages as a readable list
     *
     * @return The readable list of all the inbox messages
     */
    ReadableListImpl getInboxMessages() {
        return _inboxMessages;
    }

    /**
     * Gets the deleted messages as a readable list
     *
     * @return The readable list of all the deleted messages
     */
    ReadableListImpl getDeletedMessages() {
        return _deletedMessages;
    }

    /**
     * This is an implementation of the ReadableList interface which stores the
     * list of messages using a Vector.
     */
    static class ReadableListImpl implements ReadableList {
        private final Vector messages;

        /**
         * Creates a empty instance of ReadableListImpl
         */
        ReadableListImpl() {
            messages = new Vector();
        }

        /**
         * @see net.rim.device.api.collection.ReadableList#getAt(int)
         */
        public Object getAt(final int index) {
            return messages.elementAt(index);
        }

        /**
         * @see net.rim.device.api.collection.ReadableList#getAt(int, int,
         *      Object[], int)
         */
        public int getAt(final int index, final int count,
                final Object[] elements, final int destIndex) {
            return 0;
        }

        /**
         * @see net.rim.device.api.collection.ReadableList#getIndex(Object)
         */
        public int getIndex(final Object element) {
            return messages.indexOf(element);
        }

        /**
         * @see net.rim.device.api.collection.ReadableList#size()
         */
        public int size() {
            return messages.size();
        }

        /**
         * Add a message to this list
         *
         * @param message
         *            The message to add to this list
         */
        void addMessage(final DemoMessage message) {
            messages.addElement(message);
        }

        /**
         * Removes a message from this list
         *
         * @param message
         *            The message to remove from this list
         */
        void removeMessage(final DemoMessage message) {
            messages.removeElement(message);
        }
    }
}
TOP

Related Classes of com.rim.samples.device.messagelistdemo.MessageListDemoStore$ReadableListImpl

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.