/*
* Copyright 2003,2004 Colin Crist
*
* 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 hermes;
import hermes.browser.IconCache;
import javax.jms.Destination;
import javax.jms.Queue;
import javax.jms.Topic;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.log4j.Logger;
/**
* A JMS domain object, i.e. a queue or a topic.
*
* @author colincrist@hermesjms.com
* @version $Id: Domain.java,v 1.10 2006/04/12 13:44:09 colincrist Exp $
*/
public class Domain
{
private static final Logger log = Logger.getLogger(Domain.class) ;
/*
* Domain information for destinations
*/
public static final Domain QUEUE = new Domain("Queue", 1, IconCache.getIcon("jms.queue"));
public static final Domain TOPIC = new Domain("Topic", 2, IconCache.getIcon("jms.topic"));
public static final Domain UNKNOWN = new Domain("Unknown", 3, IconCache.getIcon("jms.queueOrTopic"));
public static final Object FOLDER = new Domain("Folder", 4, null);
private String text;
private int id;
private Icon icon;
/**
*
*/
Domain(String text, int id, ImageIcon icon)
{
super();
this.text = text;
this.id = id;
this.icon = icon;
}
public Icon getIcon()
{
return icon;
}
public int getId()
{
return id;
}
public String toString()
{
return text;
}
public int hashCode()
{
return text.hashCode();
}
public boolean equals(Object other)
{
if (other instanceof Domain)
{
Domain d = (Domain) other;
return d.getId() == id;
}
return false;
}
public static Domain getDomain(Destination destination)
{
if (destination instanceof Queue && destination instanceof Topic)
{
//
// This is an interesting hack to deal with WebLogic as it implements both domains. If we see the object
// is somewhere in the WLS JMS packages then see if we can get the "topic" property. We must do this dynamically
// as it may be loaded in a different class loader (so instanceof will fail) AND we don't want this part of the
// Hermes codebase to be coupled to any provider.
if (destination.getClass().getName().startsWith("weblogic.jms"))
{
try
{
final Boolean isTopic = (Boolean) PropertyUtils.getProperty(destination, "topic");
return isTopic ? Domain.TOPIC : Domain.QUEUE;
}
catch (Throwable e)
{
log.error(e.getMessage(), e) ;
return Domain.UNKNOWN ;
}
}
else
{
return Domain.UNKNOWN;
}
}
else if (destination instanceof Queue)
{
return Domain.QUEUE;
}
else
{
return Domain.TOPIC;
}
}
public static Domain getDomain(int encoding)
{
if (encoding == 1)
{
return QUEUE;
}
else if (encoding == 2)
{
return TOPIC;
}
else
{
return UNKNOWN;
}
}
}