/**
* Copyright (c) 2015, Lucee Assosication Switzerland. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
package lucee.runtime.monitor;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Map;
import lucee.commons.lang.ExceptionUtil;
import lucee.runtime.PageContext;
import lucee.runtime.config.ConfigWeb;
import lucee.runtime.exp.PageException;
import lucee.runtime.op.Caster;
import lucee.runtime.type.Query;
public class ActionMonitorWrap extends MonitorWrap implements ActionMonitor {
private static final Class[] PARAMS_LOG1 =
new Class[]{PageContext.class,String.class,String.class,long.class,Object.class};
private static final Class[] PARAMS_LOG2 =
new Class[]{ConfigWeb.class,String.class,String.class,long.class,Object.class};
private Method log;
private Method getData;
public ActionMonitorWrap(Object monitor) {
super(monitor,TYPE_ACTION);
}
@Override
public void log(PageContext pc, String type, String label, long executionTime, Object data) throws IOException {
try {
if(log==null) {
log=monitor.getClass().getMethod("log", PARAMS_LOG1);
}
log.invoke(monitor, new Object[]{pc,type,label,Caster.toLong(executionTime),data});
} catch (Exception e) {
throw ExceptionUtil.toIOException(e);
}
}
@Override
public void log(ConfigWeb config, String type, String label,long executionTime, Object data) throws IOException {
try {
if(log==null) {
log=monitor.getClass().getMethod("log", PARAMS_LOG2);
}
log.invoke(monitor, new Object[]{config,type,label,Caster.toLong(executionTime),data});
} catch (Exception e) {
throw ExceptionUtil.toIOException(e);
}
}
@Override
public Query getData(Map<String, Object> arguments) throws PageException {
try {
if(getData==null) {
getData=monitor.getClass().getMethod("getData", new Class[]{Map.class});
}
return (Query) getData.invoke(monitor, new Object[]{arguments});
} catch (Exception e) {
throw Caster.toPageException(e);
}
}
}