colus 02/01/10 22:07:50
Added: src/java/org/apache/avalon/cornerstone/services/rmification
RMIficationListener.java
Removed: src/java/org/apache/avalon/cornerstone/listeners
RMIficationListener.java
Log:
RMIficationListener moved to services.
Revision Changes Path
1.1
jakarta-avalon-cornerstone/src/java/org/apache/avalon/cornerstone/services/rmification/RMIficationListener.java
Index: RMIficationListener.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.cornerstone.services.rmification;
import java.rmi.Remote;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.avalon.framework.CascadingRuntimeException;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.phoenix.Block;
import org.apache.avalon.phoenix.BlockEvent;
import org.apache.avalon.phoenix.BlockListener;
/**
* FIXME: INPROGRESS
*
* @author <a href="mailto:[EMAIL PROTECTED]">Eung-ju Park</a>
* @version $Revision: 1.1 $
*/
public class RMIficationListener
implements org.apache.avalon.framework.configuration.Configurable,
BlockListener
{
private String m_publisherName;
private RMIfication m_publisher;
private java.util.Map m_publications;
private java.util.List m_queue;
public void configure( final
org.apache.avalon.framework.configuration.Configuration configuration )
throws
org.apache.avalon.framework.configuration.ConfigurationException
{
m_publisherName = configuration.getChild( "publisher" ).getValue(
"rmification" );
m_publications = new java.util.HashMap();
final org.apache.avalon.framework.configuration.Configuration[] confs
= configuration.getChildren( "publish" );
for ( int i = 0; i < confs.length; i++ )
{
final org.apache.avalon.framework.configuration.Configuration
conf = confs[ i ];
final String blockName = conf.getAttribute( "remote" );
final String name = conf.getAttribute( "name", blockName );
m_publications.put( name, blockName );
}
}
public void blockAdded( final org.apache.avalon.phoenix.BlockEvent event )
{
if ( m_publisherName.equals( event.getName() ) )
{
m_publisher = (RMIfication)event.getBlock();
for ( int i = 0; i < m_queue.size(); i++ )
{
final org.apache.avalon.phoenix.BlockEvent queued =
(org.apache.avalon.phoenix.BlockEvent)m_queue.get( i );
publishBlock( event );
}
m_queue.clear();
m_queue = null;
}
if ( m_publications.containsKey( event.getName() ) )
{
if ( event.getBlock() instanceof java.rmi.Remote )
{
publishBlock( event );
}
else
{
//FIXME: throw exception
}
}
}
public void blockRemoved( final org.apache.avalon.phoenix.BlockEvent
event )
{
if ( event.getBlock() instanceof java.rmi.Remote )
{
unpublishBlock( event );
}
}
private boolean isPublisherReady()
{
return null != m_publisher;
}
private void publishBlock( final org.apache.avalon.phoenix.BlockEvent
event )
{
if ( !isPublisherReady() )
{
m_queue.add( event );
return;
}
final org.apache.avalon.phoenix.Block block = event.getBlock();
final String blockName = event.getName();
final java.util.Iterator entries =
m_publications.entrySet().iterator();
while ( entries.hasNext() )
{
final java.util.Map.Entry entry =
(java.util.Map.Entry)entries.next();
if ( entry.getValue().equals( blockName ) )
{
try
{
m_publisher.publish( (java.rmi.Remote)block,
(String)entry.getKey() );
}
catch ( final Exception e )
{
throw new
org.apache.avalon.framework.CascadingRuntimeException( "", e );
}
}
}
}
private void unpublishBlock( final org.apache.avalon.phoenix.BlockEvent
event )
{
final org.apache.avalon.phoenix.Block block = event.getBlock();
final String blockName = event.getName();
final java.util.Iterator entries =
m_publications.entrySet().iterator();
while ( entries.hasNext() )
{
final java.util.Map.Entry entry =
(java.util.Map.Entry)entries.next();
if ( entry.getValue().equals( blockName ) )
{
try
{
m_publisher.unpublish( (String)entry.getKey() );
}
catch ( final Exception e )
{
throw new
org.apache.avalon.framework.CascadingRuntimeException( "", e );
}
}
}
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>