001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.wicket.core.request.handler.logger; 018 019import java.util.function.Supplier; 020 021import org.apache.wicket.Page; 022import org.apache.wicket.core.request.handler.IPageClassRequestHandler; 023import org.apache.wicket.core.request.handler.IPageProvider; 024import org.apache.wicket.core.request.handler.IPageRequestHandler; 025import org.apache.wicket.request.ILogData; 026import org.apache.wicket.request.component.IRequestablePage; 027import org.apache.wicket.request.mapper.parameter.PageParameters; 028 029/** 030 * Contains logging data for request handlers that are related to pages; most likely 031 * {@link IPageRequestHandler} or {@link IPageClassRequestHandler}. 032 * 033 * @author Emond Papegaaij 034 */ 035public class PageLogData implements ILogData 036{ 037 private static final long serialVersionUID = 1L; 038 039 private final Class<? extends IRequestablePage> pageClass; 040 private final Integer pageId; 041 private final PageParameters pageParameters; 042 private final Integer renderCount; 043 044 /** 045 * Construct. 046 * 047 * @param pageProvider 048 */ 049 public PageLogData(IPageProvider pageProvider) 050 { 051 pageId = optional(pageProvider::getPageId); 052 renderCount = optional(pageProvider::getRenderCount); 053 pageClass = optional(pageProvider::getPageClass); 054 pageParameters = optional(pageProvider::getPageParameters); 055 } 056 057 /** 058 * Wrapper for optional values that might fail if the page does not exist 059 * (i.e. session timeout). 060 */ 061 protected <T> T optional(Supplier<T> function) { 062 try { 063 return function.get(); 064 } catch (Exception ex) { 065 return null; 066 } 067 } 068 069 /** 070 * Construct. 071 * 072 * @param page 073 */ 074 public PageLogData(Page page) 075 { 076 pageClass = page.getPageClass(); 077 pageId = page.getPageId(); 078 pageParameters = page.getPageParameters(); 079 renderCount = page.getRenderCount(); 080 } 081 082 /** 083 * @return pageClass 084 */ 085 public final Class<? extends IRequestablePage> getPageClass() 086 { 087 return pageClass; 088 } 089 090 /** 091 * @return pageId 092 */ 093 public final Integer getPageId() 094 { 095 return pageId; 096 } 097 098 /** 099 * @return pageParameters 100 */ 101 public final PageParameters getPageParameters() 102 { 103 return pageParameters; 104 } 105 106 /** 107 * @return renderCount 108 */ 109 public final Integer getRenderCount() 110 { 111 return renderCount; 112 } 113 114 @Override 115 public String toString() 116 { 117 StringBuilder sb = new StringBuilder("{"); 118 if (pageClass != null) 119 { 120 sb.append("pageClass="); 121 sb.append(getPageClass().getName()); 122 sb.append(','); 123 } 124 sb.append("pageId="); 125 sb.append(getPageId()); 126 sb.append(",pageParameters={"); 127 sb.append(getPageParameters()); 128 sb.append("},renderCount="); 129 sb.append(getRenderCount()); 130 sb.append("}"); 131 return sb.toString(); 132 } 133}