Modified: incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/util/TopicUtils.java URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/util/TopicUtils.java?rev=165250&r1=165249&r2=165250&view=diff ============================================================================== --- incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/util/TopicUtils.java (original) +++ incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/util/TopicUtils.java Thu Apr 28 18:32:52 2005 @@ -15,7 +15,7 @@ *=============================================================================*/ package org.apache.ws.notification.topics.util; -import org.apache.ws.notification.topics.TopicSet; +import org.apache.ws.notification.topics.TopicSpaceSet; import org.apache.ws.notification.topics.ResourcePropertyValueChangeTopic; import org.apache.ws.notification.topics.Topic; import org.apache.ws.notification.topics.TopicSpace; @@ -41,19 +41,20 @@ /** * Adds the topic for ResoruceTermination....there should be only one of these! * - * @param topicSet + * @param topicSpaceSet * @return */ - public static Topic addResourceTerminationTopic(TopicSet topicSet, Resource resource, NamespaceVersionHolder namespaces) + public static Topic addResourceTerminationTopic(TopicSpaceSet topicSpaceSet, Resource resource, NamespaceVersionHolder namespaces) + throws Exception { //there can be only 1 ! String namespace = namespaces.getLifetimeXsdNamespace(); Topic topic = null; - TopicSpace topicSpace = topicSet.getTopicSpace(namespace); + TopicSpace topicSpace = topicSpaceSet.getTopicSpace(namespace); if (topicSpace == null) { topicSpace = new TopicSpaceImpl(namespace); - topicSet.addTopicSpace(topicSpace); + topicSpaceSet.addTopicSpace(topicSpace); } if (topicSpace.topicIterator().hasNext()) { @@ -74,10 +75,11 @@ * Adds a topic for the specified property to the specified topic set. * * @param prop - * @param topicSet + * @param topicSpaceSet * @return */ - public static Topic addResourcePropertyValueChangeTopic( ResourceProperty prop, TopicSet topicSet ) + public static Topic addResourcePropertyValueChangeTopic( ResourceProperty prop, TopicSpaceSet topicSpaceSet ) + throws Exception { if ( prop.getMetaData().isReadOnly() ) { @@ -86,11 +88,11 @@ ResourcePropertyValueChangeTopic valueChangeTopic = new ResourcePropertyValueChangeTopicImpl( prop ); prop.addChangeListener( valueChangeTopic ); String topicNsURI = prop.getMetaData().getName().getNamespaceURI(); - TopicSpace topicSpace = topicSet.getTopicSpace( topicNsURI ); + TopicSpace topicSpace = topicSpaceSet.getTopicSpace( topicNsURI ); if ( topicSpace == null ) { topicSpace = new TopicSpaceImpl( topicNsURI ); - topicSet.addTopicSpace( topicSpace ); + topicSpaceSet.addTopicSpace( topicSpace ); } topicSpace.addTopic( valueChangeTopic ); return valueChangeTopic; @@ -100,10 +102,11 @@ * Adds topics for all non-readonly properties from the specified property set to the specified topic set. * * @param propSet - * @param topicSet + * @param topicSpaceSet * @return */ - public static Topic[] addResourcePropertyValueChangeTopics( ResourcePropertySet propSet, TopicSet topicSet ) + public static Topic[] addResourcePropertyValueChangeTopics( ResourcePropertySet propSet, TopicSpaceSet topicSpaceSet ) + throws Exception { List topicList = new ArrayList(); Iterator propIter = propSet.iterator(); @@ -112,7 +115,7 @@ ResourceProperty prop = (ResourceProperty) propIter.next(); if ( ! prop.getMetaData().isReadOnly() ) { - Topic topic = addResourcePropertyValueChangeTopic( prop, topicSet ); + Topic topic = addResourcePropertyValueChangeTopic( prop, topicSpaceSet ); topicList.add( topic ); } }
Modified: incubator/hermes/trunk/src/java/org/apache/ws/pubsub/TopicFilter.java URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/pubsub/TopicFilter.java?rev=165250&r1=165249&r2=165250&view=diff ============================================================================== --- incubator/hermes/trunk/src/java/org/apache/ws/pubsub/TopicFilter.java (original) +++ incubator/hermes/trunk/src/java/org/apache/ws/pubsub/TopicFilter.java Thu Apr 28 18:32:52 2005 @@ -34,7 +34,7 @@ if(it.hasNext()) topicexpr+="/"; } - m_targetNamespace=t.getTopicSpace().getNamespaceURI(); + m_targetNamespace=t.getTopicSpace().getTargetNamespace(); super.setURI(FilterFactory.topicsuri); super.setContent(parse(topicexpr)); } Added: incubator/hermes/trunk/src/test/org/apache/ws/notification/topics/impl/FullTopicExpressionEvaluatorTestCase.java URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/test/org/apache/ws/notification/topics/impl/FullTopicExpressionEvaluatorTestCase.java?rev=165250&view=auto ============================================================================== --- incubator/hermes/trunk/src/test/org/apache/ws/notification/topics/impl/FullTopicExpressionEvaluatorTestCase.java (added) +++ incubator/hermes/trunk/src/test/org/apache/ws/notification/topics/impl/FullTopicExpressionEvaluatorTestCase.java Thu Apr 28 18:32:52 2005 @@ -0,0 +1,173 @@ +/*=============================================================================* + * Copyright 2005 The Apache Software Foundation + * + * 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 org.apache.ws.notification.topics.impl; + +import junit.framework.TestCase; +import org.apache.ws.notification.base.impl.XmlBeansTopicExpression; +import org.apache.ws.notification.topics.Topic; +import org.apache.ws.notification.topics.TopicSpace; +import org.apache.ws.notification.topics.TopicSpaceSet; +import org.apache.ws.notification.topics.TopicExpressionEvaluator; +import org.apache.ws.notification.topics.topicexpression.impl.InvalidTopicExpressionException; +import org.apache.xmlbeans.XmlObject; +import org.oasisOpen.docs.wsn.x2004.x06.wsnWSBaseNotification12Draft01.TopicExpressionDocument; +import org.oasisOpen.docs.wsn.x2004.x06.wsnWSBaseNotification12Draft01.TopicExpressionType; + +/** + * TODO + */ +public class FullTopicExpressionEvaluatorTestCase extends TestCase +{ + + private static final String NSURI1 = "http://ns1.com/"; + private static final String NSPREFIX1 = "ns1"; + private static final String NSURI2 = "http://ns2.com/"; + private static final String NSPREFIX2 = "ns2"; + + private TopicExpressionEvaluator m_evaluator; + private TopicSpaceSet m_topicSpaceSet; + + protected void setUp() throws Exception + { + m_evaluator = new FullTopicExpressionEvaluator(); + m_topicSpaceSet = new TopicSpaceSetImpl( true ); + TopicSpace topicSpace1 = m_topicSpaceSet.addTopicSpace( new TopicSpaceImpl( NSURI1 ) ); + Topic sportsTopic = topicSpace1.addTopic( "sports" ); + Topic tennisTopic = sportsTopic.addTopic( "tennis" ); + tennisTopic.addTopic( "college" ); + Topic footballTopic = sportsTopic.addTopic( "football" ); + footballTopic.addTopic( "college" ); + Topic gamesTopic = topicSpace1.addTopic( "games" ); + gamesTopic.addTopic( "monopoly" ); + gamesTopic.addTopic( "chess" ); + TopicSpace topicSpace2 = m_topicSpaceSet.addTopicSpace( new TopicSpaceImpl( NSURI2 ) ); + Topic bandsTopic = topicSpace2.addTopic( "bands" ); + bandsTopic.addTopic( "beatles" ); + bandsTopic.addTopic( "kinks" ); + } + + public void testEvaluateSimple() throws Exception + { + Topic[] resultTopics = evaluate( NSPREFIX1 + ":sports" ); + assertEquals( 1, resultTopics.length ); + assertContainsTopic( resultTopics, "sports" ); + + resultTopics = evaluate( NSPREFIX1 + ":sports/tennis" ); + assertEquals( 1, resultTopics.length ); + assertContainsTopic( resultTopics, "tennis" ); + } + + public void testEvaluateWildcard() throws Exception + { + Topic[] resultTopics = evaluate( NSPREFIX1 + ":*" ); + assertEquals( 2, resultTopics.length ); + assertContainsTopic( resultTopics, "sports" ); + assertContainsTopic( resultTopics, "games" ); + + resultTopics = evaluate( NSPREFIX1 + ":*/tennis" ); + assertEquals( 1, resultTopics.length ); + assertContainsTopic( resultTopics, "tennis" ); + + resultTopics = evaluate( NSPREFIX1 + ":sports/*" ); + assertEquals( 2, resultTopics.length ); + assertContainsTopic( resultTopics, "tennis" ); + assertContainsTopic( resultTopics, "football" ); + + resultTopics = evaluate( NSPREFIX1 + ":sports/*/college" ); + assertEquals( 2, resultTopics.length ); + assertContainsTopic( resultTopics, "college" ); + + resultTopics = evaluate( NSPREFIX1 + ":*/*" ); + assertEquals( 4, resultTopics.length ); + assertContainsTopic( resultTopics, "tennis" ); + assertContainsTopic( resultTopics, "football" ); + assertContainsTopic( resultTopics, "monopoly" ); + assertContainsTopic( resultTopics, "chess" ); + + resultTopics = evaluate( NSPREFIX1 + ":*/*/college" ); + assertEquals( 2, resultTopics.length ); + assertContainsTopic( resultTopics, "college" ); + } + + public void testEvaluateRecursive() throws Exception + { + Topic[] resultTopics = evaluate( NSPREFIX1 + ":sports//*" ); + assertEquals( 4, resultTopics.length ); + assertContainsTopic( resultTopics, "tennis" ); + assertContainsTopic( resultTopics, "football" ); + assertContainsTopic( resultTopics, "college" ); + + resultTopics = evaluate( NSPREFIX1 + "://*" ); + assertEquals( 8, resultTopics.length ); + assertContainsTopic( resultTopics, "sports" ); + assertContainsTopic( resultTopics, "tennis" ); + assertContainsTopic( resultTopics, "football" ); + assertContainsTopic( resultTopics, "college" ); + assertContainsTopic( resultTopics, "games" ); + assertContainsTopic( resultTopics, "monopoly" ); + assertContainsTopic( resultTopics, "chess" ); + } + + public void testEvaluateInvalid() throws Exception + { + assertExpressionIsInvalid( NSPREFIX1 + ":." ); + assertExpressionIsInvalid( NSPREFIX1 + "://." ); + assertExpressionIsInvalid( NSPREFIX1 + ":bands" ); + assertExpressionIsInvalid( NSPREFIX1 + ":bands/beatles" ); + assertExpressionIsInvalid( NSPREFIX1 + ":bands/*" ); + // TODO: add tests for non-fixed topic set + } + + private void assertExpressionIsInvalid( String expr ) + throws Exception + { + try + { + evaluate( expr ); + fail(); + } + catch ( InvalidTopicExpressionException itee ) + { + // success! + } + } + + private void assertContainsTopic( Topic[] topics, String name ) + { + boolean foundIt = false; + for ( int i = 0; i < topics.length; i++ ) + { + if ( topics[i].getName().equals( name ) ) + { + foundIt = true; + } + } + assertTrue( foundIt ); + } + + private Topic[] evaluate( String expr ) throws Exception + { + TopicExpressionType topicExpr = ( (TopicExpressionDocument) XmlObject.Factory.parse( "<TopicExpression xmlns='http://docs.oasis-open.org/wsn/2004/06/wsn-WS-BaseNotification-1.2-draft-01.xsd' xmlns:" + + NSPREFIX1 + + "='" + + NSURI1 + + "' Dialect='http://docs.oasis-open.org/wsn/2004/06/TopicExpression/Full'>" + + expr + + "</TopicExpression>" ) ).getTopicExpression(); + return m_evaluator.evaluate( m_topicSpaceSet, new XmlBeansTopicExpression( topicExpr ) ); + } + +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
