/*
* Copyright (c) 2010 StockPlay development team
* All rights reserved.
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.kapti.backend.xmlrpc;
import com.kapti.backend.api.MethodClass;
import com.kapti.backend.security.SessionsHandler;
import com.kapti.data.persistence.StockPlayDAO;
import org.apache.log4j.Logger;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.XmlRpcRequest;
import org.apache.xmlrpc.common.XmlRpcHttpRequestConfig;
import org.apache.xmlrpc.server.RequestProcessorFactoryFactory.RequestSpecificProcessorFactoryFactory;
/**
* \brief Factory voor request processors.
*
* Deze klasse, een uitbreiding van RequestSpecificProcessorFactoryFactory,
* zorgt ervoor dat aangemaakte handlers extra informatie kunnen meegegeven
* worden, dit vooraleer ze een effectieve XML-RPC request afhandelen.
*/
public class ProcessorFactory extends RequestSpecificProcessorFactoryFactory {
//
// Dataleden
//
private StockPlayDAO mDAO = null;
private Logger mLogger;
//
// Constructie
//
public ProcessorFactory(StockPlayDAO iDAO) {
mLogger = Logger.getLogger(this.getClass());
mDAO = iDAO;
}
//
// Methoden
//
/**
* Deze methode wordt door de servlet server gebruikt om een lokale handler
* te vinden om een RPC af te handelen. We overschrijven deze methode louter
* om de geinstantieerde handler een referentie naar de container met
* persistente data mee te geven.
*/
@Override
protected Object getRequestProcessor(Class iClass, XmlRpcRequest iRequest) throws XmlRpcException {
// Haal credentials op
XmlRpcHttpRequestConfig config = (XmlRpcHttpRequestConfig) iRequest.getConfig();
String tSessionID = config.getBasicUserName();
mLogger.debug("getting processor for method " + iRequest.getMethodName());
MethodClass proc = (MethodClass) super.getRequestProcessor(iClass, iRequest);
proc.init(mDAO);
proc.setUser(SessionsHandler.getInstance().getUser(tSessionID));
proc.setRole(SessionsHandler.getInstance().getRole(tSessionID));
return proc;
}
}