All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mdfromhtml.core.IMDfromHTMLIPCMessage Maven / Gradle / Ivy

/**
 * (c) Copyright 2020 IBM Corporation
 * 1 New Orchard Road, 
 * Armonk, New York, 10504-1722
 * United States
 * +1 914 499 1900
 * support: Nathaniel Mills [email protected]
 *
 * 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 com.mdfromhtml.core;

import com.api.json.JSONObject;

/**
 * Interface for the MDfromHTML IPC Message to be sent (or received) across the
 * MDfromHTML Interprocess Communications Infrastructure. Messages may carry
 * JSONObject or byte[] content. Messages are identified by a topic (used for
 * subscription), a type (used for identifying how a message should be parsed
 * and interpreted), a create time, a sequence number where 0 implies the only
 * message, 1 or greater implies a chunk of a larger message (where
 * {@link Integer#MAX_VALUE} acks as a semaphore to signal the last of a
 * sequence), and a flag describing if the message content is a JSONObject or
 * byte[].
 */

public interface IMDfromHTMLIPCMessage {

    /**
     * @return the enumerated value associated with this message
     * @see MDfromHTMLIPCVerbs
     */
    public MDfromHTMLIPCApplications getApplication();

    /**
     * @return the numeric identity of the application
     */
    public int getApplicationValue();

    /**
     * @return the message content as a JSONObject
     * @throws Exception
     */
    public JSONObject getMessage() throws Exception;

    /**
     * @return the message content as a byte[]
     */
    public byte[] getMessageBytes();

    /**
     * @return the publisher (creator) of this message
     */
    public String getPublisherName();

    /**
     * @return the sequence number of this message. Note: zero implies the only
     *         message, non-zero implies a part of a chunked message, with 65768
     *         signifying the last of the sequence of messages.
     */
    public int getSequence();

    /**
     * @return the session id related to the message content. If the content is
     *         not associated with a particular session, the ID returned is
     *         {@link MDfromHTMLID#UNDEFINED_ID} and corresponds with the String
     *         value in {@link MDfromHTMLConstants#UNDEFINED_ID}
     */
    public MDfromHTMLID getSessionID();

    /**
     * @return the original message creation time (not necessarily the same as
     *         the time it was published)
     */
    public long getTime();

    /**
     * @return the message topic
     */
    public String getTopic();

    /**
     * @return the message type. If the original was undefined, the type will
     *         return the {@link MDfromHTMLConstants#UNDEFINED_String}
     */
    public String getType();

    /**
     * Retrieve the numeric identity of the verb
     * 
     * @return the numeric identity of the verb
     */
    public int getVerbValue();

    /**
     * Retrieve the enumerated value associated with this message
     * 
     * @see MDfromHTMLIPCVerbs
     * @return the enumerated value associated with this message
     */
    public MDfromHTMLIPCVerbs getVerb();

    /**
     * Retrieve the user identification associated with this message
     * 
     * @return the user identification associated with this message
     */
    public MDfromHTMLID getUserID();

    /**
     * @return true if the message sequence is {@link Integer#MAX_VALUE}
     *         signaling the end of a chunked sequence of messages
     */
    public boolean isLastMessage();

    /**
     * @return true if the message sequence is zero signaling the message was
     *         not chunked
     */
    public boolean isOnlyMessage();

    /**
     * @return true if the message sequence is not zero (for an "chunked"
     *         message).
     */
    public boolean isSequence();

    /**
     * @return true if the original message was a String (as opposed to a
     *         byte[])
     */
    public boolean isJSON();

    /**
     * @return an abbreviated formatted version of the message (contains only
     *         the first 100 bytes of the payload)
     */
    public String toString();

    /**
     * @return formatted complete version of this message
     * @see #toString that is more useful for debugging
     */
    public String toStringFull();

    /**
     * @param formatJSON
     *            true if the message is to be formatted (if the message
     *            contains JSON), false if not.
     * @return formatted complete version of this message
     * @see #toString that is more useful for debugging
     */
    public String toStringFull(boolean formatJSON);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy