blob: 18e88e9b8c0b23f2da9b0c9aa18b25e3e42c0e00 [file] [log] [blame]
/*
* Copyright 1999-2004 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.savan.subscribers;
import java.util.Date;
import java.util.HashMap;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.savan.SavanException;
import org.apache.savan.SavanMessageContext;
import org.apache.savan.filters.Filter;
import org.apache.savan.publication.PublicationReport;
import org.apache.savan.subscription.ExpirationBean;
/**
* Defines a subscriber which is the entity that define a specific subscription
* in savan. Independent of the protocol type.
*
*/
public abstract class AbstractSubscriber implements Subscriber {
String id;
Filter filter = null;
HashMap properties = null;
public AbstractSubscriber () {
properties = new HashMap ();
}
public void addProperty (String key, Object value) {
properties.put(key,value);
}
public Object getProperty (String key) {
return properties.get(key);
}
public Filter getFilter() {
return filter;
}
public void setFilter(Filter filter) {
this.filter = filter;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public boolean doesMessageBelongToTheFilter(SavanMessageContext smc) throws SavanException {
if (filter!=null) {
SOAPEnvelope envelope = smc.getEnvelope();
return filter.checkEnvelopeCompliance(envelope);
} else
return true;
}
/**
* This method first checks weather the passed message complies with the current filter.
* If so message is sent, and the subscriberID is added to the PublicationReport.
* Else message is ignored.
*
* @param smc
* @param report
* @throws SavanException
*/
public void processPublication (SavanMessageContext publication,PublicationReport report) throws SavanException {
if (doesMessageBelongToTheFilter(publication)) {
sendPublication(publication,report);
if (getId()!=null)
report.addNotifiedSubscriber(getId());
}
}
public abstract void setSubscriptionEndingTime (Date subscriptionEndingTime);
public abstract void renewSubscription (ExpirationBean bean);
/**
* This should be used by based classes to sendThe publication in its own manner
*
* @param publication
* @param report
* @throws SavanException
*/
protected abstract void sendPublication (SavanMessageContext publication,PublicationReport report) throws SavanException;
}