/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2010-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.sms.monitor.internal;
import org.opennms.sms.monitor.internal.config.MobileSequenceConfig;
import org.opennms.sms.monitor.internal.config.MobileSequenceRequest;
import org.opennms.sms.monitor.internal.config.MobileSequenceResponse;
import org.opennms.sms.monitor.internal.config.MobileSequenceTransaction;
import org.opennms.sms.monitor.internal.config.SequenceResponseMatcher;
import org.opennms.sms.monitor.internal.config.SequenceSessionVariable;
import org.opennms.sms.monitor.internal.config.SmsSequenceRequest;
import org.opennms.sms.monitor.internal.config.SmsSequenceResponse;
import org.opennms.sms.monitor.internal.config.SmsSourceMatcher;
import org.opennms.sms.monitor.internal.config.TextResponseMatcher;
import org.opennms.sms.monitor.internal.config.UssdSequenceRequest;
import org.opennms.sms.monitor.internal.config.UssdSequenceResponse;
import org.opennms.sms.monitor.internal.config.UssdSessionStatusMatcher;
import org.opennms.sms.monitor.session.SessionVariableGenerator;
import org.smslib.USSDSessionStatus;
/**
* MobileSequenceConfigBuilder
*
* @author brozow
* @version $Id: $
*/
public class MobileSequenceConfigBuilder {
private MobileSequenceConfig m_sequence;
/**
* <p>Constructor for MobileSequenceConfigBuilder.</p>
*/
public MobileSequenceConfigBuilder() {
this(new MobileSequenceConfig());
}
/**
* <p>Constructor for MobileSequenceConfigBuilder.</p>
*
* @param sequence a {@link org.opennms.sms.monitor.internal.config.MobileSequenceConfig} object.
*/
public MobileSequenceConfigBuilder(MobileSequenceConfig sequence) {
m_sequence = sequence;
}
/**
* <p>getSequence</p>
*
* @return a {@link org.opennms.sms.monitor.internal.config.MobileSequenceConfig} object.
*/
public MobileSequenceConfig getSequence() {
return m_sequence;
}
/**
* <p>addTransaction</p>
*
* @return a {@link org.opennms.sms.monitor.internal.MobileSequenceConfigBuilder.MobileSequenceTransactionBuilder} object.
*/
public MobileSequenceTransactionBuilder addTransaction() {
MobileSequenceTransaction t = new MobileSequenceTransaction();
getSequence().addTransaction(t);
return new MobileSequenceTransactionBuilder(t);
}
/**
* <p>request</p>
*
* @param request a {@link org.opennms.sms.monitor.internal.config.MobileSequenceRequest} object.
* @return a {@link org.opennms.sms.monitor.internal.MobileSequenceConfigBuilder.MobileSequenceTransactionBuilder} object.
*/
public MobileSequenceTransactionBuilder request(MobileSequenceRequest request) {
return addTransaction().setRequest(request);
}
/**
* <p>smsRequest</p>
*
* @param label a {@link java.lang.String} object.
* @param gatewayId a {@link java.lang.String} object.
* @param recipient a {@link java.lang.String} object.
* @param text a {@link java.lang.String} object.
* @return a {@link org.opennms.sms.monitor.internal.MobileSequenceConfigBuilder.MobileSequenceTransactionBuilder} object.
*/
public MobileSequenceTransactionBuilder smsRequest(String label, String gatewayId, String recipient, String text) {
SmsSequenceRequest smsRequest = new SmsSequenceRequest();
smsRequest.setLabel(label);
smsRequest.setGatewayId(gatewayId);
smsRequest.setRecipient(recipient);
smsRequest.setText(text);
return request(smsRequest);
}
/**
* <p>ussdRequest</p>
*
* @param label a {@link java.lang.String} object.
* @param gatewayId a {@link java.lang.String} object.
* @param text a {@link java.lang.String} object.
* @return a {@link org.opennms.sms.monitor.internal.MobileSequenceConfigBuilder.MobileSequenceTransactionBuilder} object.
*/
public MobileSequenceTransactionBuilder ussdRequest(String label, String gatewayId, String text) {
MobileSequenceRequest ussdRequest = new UssdSequenceRequest();
ussdRequest.setLabel(label);
ussdRequest.setGatewayId(gatewayId);
ussdRequest.setText(text);
return request(ussdRequest);
}
public static class MobileSequenceTransactionBuilder {
private MobileSequenceTransaction m_transaction;
public MobileSequenceTransactionBuilder(MobileSequenceTransaction transaction) {
m_transaction = transaction;
}
public MobileSequenceTransactionBuilder setRequest(MobileSequenceRequest sequenceRequest) {
m_transaction.setRequest(sequenceRequest);
return this;
}
public MobileSequenceTransaction getTransaction() {
return m_transaction;
}
public void addResponse(MobileSequenceResponse response) {
m_transaction.addResponse(response);
}
public SmsResponseBuilder expectSmsResponse() {
return expectSmsResponse(null);
}
public SmsResponseBuilder expectSmsResponse(String label) {
MobileSequenceResponse response = new SmsSequenceResponse(label);
addResponse(response);
return new SmsResponseBuilder(response);
}
public UssdResponseBuilder expectUssdResponse() {
return expectUssdResponse(null);
}
public UssdResponseBuilder expectUssdResponse(String label) {
UssdSequenceResponse response = new UssdSequenceResponse(label);
addResponse(response);
return new UssdResponseBuilder(response);
}
public MobileSequenceTransactionBuilder withTransactionLabel(String transactionLabel) {
m_transaction.setLabel(transactionLabel);
return this;
}
public MobileSequenceTransactionBuilder withGatewayId(String gatewayId) {
m_transaction.setGatewayId(gatewayId);
return this;
}
}
/**
* SmsResponseBuilder
*
* @author brozow
*/
public static class SmsResponseBuilder {
private MobileSequenceResponse m_response;
public SmsResponseBuilder(MobileSequenceResponse response) {
m_response = response;
}
public SmsResponseBuilder addMatcher(SequenceResponseMatcher matcher) {
m_response.addMatcher(matcher);
return this;
}
public SmsResponseBuilder matching(String regex) {
return addMatcher(new TextResponseMatcher(regex));
}
public SmsResponseBuilder srcMatches(String originator) {
addMatcher(new SmsSourceMatcher(originator));
return this;
}
public SmsResponseBuilder onGateway(String gatewayId) {
m_response.setGatewayId(gatewayId);
return this;
}
}
/**
* SmsResponseBuilder
*
* @author brozow
*/
public static class UssdResponseBuilder {
private UssdSequenceResponse m_response;
public UssdResponseBuilder(UssdSequenceResponse response) {
m_response = response;
}
public UssdResponseBuilder addMatcher(SequenceResponseMatcher matcher) {
m_response.addMatcher(matcher);
return this;
}
public UssdResponseBuilder matching(String regex) {
return addMatcher(new TextResponseMatcher(regex));
}
public UssdResponseBuilder withSessionStatus(USSDSessionStatus sessionStatus) {
return addMatcher(new UssdSessionStatusMatcher(sessionStatus));
}
public UssdResponseBuilder onGateway(String gatewayId) {
m_response.setGatewayId(gatewayId);
return this;
}
}
/**
* <p>variable</p>
*
* @param name a {@link java.lang.String} object.
* @param variableClass a {@link java.lang.Class} object.
* @return a {@link org.opennms.sms.monitor.internal.MobileSequenceConfigBuilder.SessionVariableBuilder} object.
*/
public SessionVariableBuilder variable(String name, Class<? extends SessionVariableGenerator> variableClass) {
SequenceSessionVariable var = new SequenceSessionVariable(name, variableClass.getName());
m_sequence.addSessionVariable(var);
return new SessionVariableBuilder(var);
}
public static class SessionVariableBuilder {
private SequenceSessionVariable m_var;
public SessionVariableBuilder(SequenceSessionVariable var) {
m_var = var;
}
public SessionVariableBuilder parameter(String key, Object val) {
m_var.addParameter(key, val == null ? null : val.toString());
return this;
}
}
}