/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * 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 the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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.apereo.portal.events; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.commons.lang.Validate; import org.apereo.portal.url.UrlState; import org.apereo.portal.url.UrlType; /** * Constructor assumes that Map passed in is completely immutable * */ public final class PortalRenderEvent extends PortalEvent { private static final long serialVersionUID = 1L; private final String requestPathInfo; private final UrlState urlState; private final UrlType urlType; private final Map<String, List<String>> parameters; private final String targetedLayoutNodeId; /** * Still here to support deserializing old event json * * @deprecated use {@link #executionTimeNano} instead */ @JsonInclude(Include.NON_NULL) @Deprecated private Long executionTime; private long executionTimeNano; PortalRenderEvent() { super(); this.requestPathInfo = null; this.urlState = null; this.urlType = null; this.parameters = Collections.emptyMap(); this.targetedLayoutNodeId = null; this.executionTimeNano = -1; } PortalRenderEvent( PortalEventBuilder eventBuilder, String requestPathInfo, long executionTimeNano, UrlState urlState, UrlType urlType, Map<String, List<String>> parameters, String targetedLayoutNodeId) { super(eventBuilder); Validate.notNull(urlState, "urlType"); Validate.notNull(urlType, "urlType"); Validate.notNull(parameters, "parameters"); this.requestPathInfo = requestPathInfo; this.urlState = urlState; this.urlType = urlType; this.parameters = parameters; this.targetedLayoutNodeId = targetedLayoutNodeId; this.executionTimeNano = executionTimeNano; } /** @return the executionTime in milliseconds */ public long getExecutionTime() { if (this.executionTime == null) { this.executionTime = TimeUnit.NANOSECONDS.toMillis(this.executionTimeNano); } return this.executionTime; } /** @return the executionTime in nanoseconds */ public long getExecutionTimeNano() { if (this.executionTimeNano == -1 && this.executionTime != null) { this.executionTimeNano = TimeUnit.MILLISECONDS.toNanos(this.executionTime); } return this.executionTimeNano; } /** @return the requestPathInfo */ public String getRequestPathInfo() { return this.requestPathInfo; } /** @return the urlState */ public UrlState getUrlState() { return this.urlState; } /** @return the urlType */ public UrlType getUrlType() { return this.urlType; } /** @return the parameters */ public Map<String, List<String>> getParameters() { return this.parameters; } /** @return the targetedLayoutNodeId */ public String getTargetedLayoutNodeId() { return this.targetedLayoutNodeId; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return super.toString() + ", requestPathInfo=" + this.requestPathInfo + ", urlState=" + this.urlState + ", urlType=" + this.urlType + ", parameters=" + this.parameters.size() + ", targetedLayoutNodeId=" + this.targetedLayoutNodeId + ", executionTimeNano=" + this.getExecutionTimeNano() + "]"; } }