Package org.xmlBlaster.util.qos.address

Source Code of org.xmlBlaster.util.qos.address.Destination

/*------------------------------------------------------------------------------
Name:      Destination.java
Project:   xmlBlaster.org
Copyright: xmlBlaster.org, see xmlBlaster-LICENSE file
------------------------------------------------------------------------------*/
package org.xmlBlaster.util.qos.address;

import java.util.logging.Logger;

import org.xmlBlaster.util.Global;
import org.xmlBlaster.util.SessionName;
import org.xmlBlaster.util.def.Constants;

/**
* Holding destination address attributes.
* <p />
* This class corresponds to the QOS destination tag
* @author xmlBlaster@marcelruff.info
*/
public class Destination implements java.io.Serializable
{
   private static final long serialVersionUID = 1L;
   private static Logger log = Logger.getLogger(Destination.class.getName());
   private String ME = "Destination";

   /** The destination address (==login name) or the XPath query string */
   private SessionName destination = null;
   /** EXACT is default */
   private String queryType = "EXACT";
   /** No queuing is default */
   private boolean DEFAULT_forceQueuing = false;
   private boolean forceQueuing = DEFAULT_forceQueuing;

   /** For SAX parser */
   public Destination() {
      //this(null, null);
   }

   /**
    * Constructs the specialized quality of service destination object.
    * @param address The destination address (EXACT),
    *                this is typically the login name of another client
    */
   public Destination(SessionName address) {
      this(null, address);
   }


   /**
    * Constructs the specialized quality of service destination object.
    * @param address The destination address (EXACT),
    *                this is typically the login name of another client
    */
   public Destination(Global glob, SessionName address) {
      setDestination(address);
   }


   /**
    * Constructs the specialized quality of service destination object.
    * @param address The destination address or query string
    * @param queryType "EXACT" or "XPATH"
    */
    // @exception IllegalArgumentException for XPATH (not implemented yet)
   public Destination(String address, String queryType) {
      setQueryType(queryType);
      if (isXPathQuery()) {
         log.severe("Query type " + queryType + " is not implemented");
         //throw new IllegalArgumentException(ME+": Query type " + queryType + " is not implemented");
      }
      else {
         setDestination(new SessionName(Global.instance(), address));
      }
   }

   /**
    * @return true/false
    */
   public boolean isXPathQuery() {
      return queryType.equals("XPATH");
   }

   /**
    * @return true/false
    */
   public boolean isExactAddress() {
      return queryType.equals("EXACT");
   }

   /**
    * Check if the address is a sessionId
   public boolean isSessionId() {
      if (destination == null)
         return false;
      if (!isExactAddress())
         return false;
      return destination.startsWith(Constants.SESSIONID_PREFIX);
   }
    */

   /**
    * @return true/false
    */
   public boolean forceQueuing() {
      return forceQueuing;
   }

   /**
    * Set queuing of messages.
    * <p />
    * true: If client is not logged in, messages will be queued until he comes. <br />
    * false: Default is that on PtP messages when the destination address is
    *        not online, an Exception is thrown
    */
   public void forceQueuing(boolean forceQueuing) {
      this.forceQueuing = forceQueuing;
   }

   /**
    * Set the destination address or the destination query string.
    * @param destination The destination address or the query string, may not be null
    */
   public final void setDestination(SessionName destination) {
      if (destination == null) {
         throw new IllegalArgumentException("Destination.setDestination with null value");
      }
      this.destination = destination;
   }


   /**
    * @param The destination address or XPath query string
    */
   public final SessionName getDestination() {
      return destination;
   }

   /**
    * @param queryType The query type, one of "EXACT" | "XPATH"
    * @exception IllegalArgumentException for unknown queryType
    */
   public final void setQueryType(String queryType) {
      if (queryType.equalsIgnoreCase("EXACT"))
         this.queryType = queryType;
      else if (queryType.equalsIgnoreCase("XPATH"))
         log.severe("Query type " + queryType + " is not implemented");
         //throw new IllegalArgumentException(ME+": Query type " + queryType + " is not implemented");
      else
         throw new IllegalArgumentException(ME+": Query type " + queryType + " is not implemented");
   }

   public final String toString() {
      return destination.getAbsoluteName();
   }

   /**
    * Get the XML ASCII representation of this object.
    * <br>
    * @return The destination as a XML ASCII string
    */
   public final String toXml() {
      return toXml((String)null);
   }

   /**
    * Dump state of this object into a XML ASCII string.
    * <br>
    * @param extraOffset indenting of tags for nice output
    * @return The Destination as a XML ASCII string
    */
   public final String toXml(String extraOffset) {
      if (this.destination == null)
        return "";
      StringBuffer sb = new StringBuffer(256);
      if (extraOffset == null) extraOffset = "";
      String offset = Constants.OFFSET + extraOffset;

      sb.append(offset).append("<destination");
      if (!"EXACT".equals(queryType))
         sb.append(" queryType='").append(queryType).append("'");
      if (forceQueuing != DEFAULT_forceQueuing)
         sb.append(" forceQueuing='").append(forceQueuing).append("'");

      // Set the real used destination to support PtP routing
      if (this.destination.isNodeIdExplicitlyGiven())
         sb.append(">").append(this.destination.getAbsoluteName()).append("</destination>");
      else
         sb.append(">").append(this.destination.getRelativeName()).append("</destination>");

      return sb.toString();
   }

   /**
    * Only for testing
    *    java org.xmlBlaster.engine.Destination
    */
   public static void main(String args[]) {
      Destination dest = new Destination();
      dest.setDestination(new SessionName(Global.instance(), "Johann"));
      dest.forceQueuing(true);
      System.out.println(dest.toXml());
   }
}
TOP

Related Classes of org.xmlBlaster.util.qos.address.Destination

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.