/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.wicket.core.request.handler.logger;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IFormSubmitter;
import org.apache.wicket.request.component.IRequestableComponent;
/**
* Contains logging data for component/listener-interface request handlers.
*
* @author Emond Papegaaij
*/
public class ListenerLogData extends PageLogData
{
private static final long serialVersionUID = 1L;
private final Class<? extends IRequestableComponent> componentClass;
private final String componentPath;
private final Integer behaviorIndex;
private Class<? extends Behavior> behaviorClass;
private Class<? extends IRequestableComponent> submittingComponentClass;
private String submittingComponentPath;
/**
* Construct.
*
* @param pageAndComponentProvider
* @param behaviorIndex
*/
public ListenerLogData(IPageAndComponentProvider pageAndComponentProvider, Integer behaviorIndex)
{
super(pageAndComponentProvider);
componentClass = tryToGetComponentClass(pageAndComponentProvider);
componentPath = tryToGetComponentPath(pageAndComponentProvider);
this.behaviorIndex = behaviorIndex;
if (behaviorIndex != null && componentClass != null)
{
try
{
behaviorClass = pageAndComponentProvider.getComponent()
.getBehaviorById(behaviorIndex)
.getClass();
}
catch (Exception ignore)
{
behaviorClass = null;
}
}
else
{
behaviorClass = null;
}
final Component formSubmitter = tryToGetFormSubmittingComponent(pageAndComponentProvider);
if (formSubmitter != null)
{
submittingComponentClass = formSubmitter.getClass();
submittingComponentPath = formSubmitter.getPageRelativePath();
}
}
private static Class<? extends IRequestableComponent> tryToGetComponentClass(
IPageAndComponentProvider pageAndComponentProvider)
{
try
{
return pageAndComponentProvider.getComponent().getClass();
}
catch (Exception e)
{
// getComponent might fail if the page does not exist (ie session timeout)
return null;
}
}
private static String tryToGetComponentPath(IPageAndComponentProvider pageAndComponentProvider)
{
try
{
return pageAndComponentProvider.getComponentPath();
}
catch (Exception e)
{
// getComponentPath might fail if the page does not exist (ie session timeout)
return null;
}
}
private static Component tryToGetFormSubmittingComponent(
IPageAndComponentProvider pageAndComponentProvider)
{
try
{
final IRequestableComponent component = pageAndComponentProvider.getComponent();
if (component instanceof Form)
{
final IFormSubmitter submitter = ((Form<?>)component).findSubmittingButton();
return submitter instanceof Component ? (Component)submitter : null;
}
return null;
}
catch (Exception e)
{
// getComponent might fail if the page does not exist (ie session timeout)
return null;
}
}
/**
* @return componentClass
*/
public final Class<? extends IRequestableComponent> getComponentClass()
{
return componentClass;
}
/**
* @return componentPath
*/
public final String getComponentPath()
{
return componentPath;
}
/**
* @return behaviorIndex
*/
public final Integer getBehaviorIndex()
{
return behaviorIndex;
}
/**
* @return behaviorClass
*/
public final Class<? extends Behavior> getBehaviorClass()
{
return behaviorClass;
}
/**
* @return submittingComponentClass
*/
public Class<? extends IRequestableComponent> getSubmittingComponentClass()
{
return submittingComponentClass;
}
/**
* @return submittingComponentPath
*/
public String getSubmittingComponentPath()
{
return submittingComponentPath;
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder(super.toString());
sb.setCharAt(sb.length() - 1, ',');
if (getComponentClass() != null)
{
sb.append("componentClass=");
sb.append(getComponentClass().getName());
sb.append(',');
}
if (getComponentPath() != null)
{
sb.append("componentPath=");
sb.append(getComponentPath());
sb.append(',');
}
sb.append("behaviorIndex=");
sb.append(getBehaviorIndex());
if (getBehaviorClass() != null)
{
sb.append(",behaviorClass=");
sb.append(getBehaviorClass().getName());
}
if (getSubmittingComponentClass() != null)
{
sb.append(",submittingComponentClass=");
sb.append(getSubmittingComponentClass().getName());
}
if (getSubmittingComponentPath() != null)
{
sb.append(",submittingComponentPath=");
sb.append(getSubmittingComponentPath());
}
sb.append("}");
return sb.toString();
}
}