/**
* 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.JsonIgnore;
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 javax.portlet.PortletMode;
import javax.portlet.WindowState;
import org.apache.commons.lang.Validate;
import org.apereo.portal.dao.usertype.FunctionalNameType;
import org.apereo.portal.portlet.om.IPortletWindowId;
/**
* Constructor assumes that Map passed in is completely immutable
*
*/
public abstract class PortletExecutionEvent extends PortalEvent {
private static final long serialVersionUID = 1L;
@JsonIgnore private final IPortletWindowId portletWindowId;
private final String fname;
private final WindowState windowState;
private final PortletMode portletMode;
/**
* Still here to support deserializing old event json
*
* @deprecated use {@link #executionTimeNano} instead
*/
@JsonInclude(Include.NON_NULL)
@Deprecated
private Long executionTime;
private long executionTimeNano;
private final Map<String, List<String>> parameters;
PortletExecutionEvent() {
super();
this.portletWindowId = null;
this.fname = null;
this.executionTimeNano = -1;
this.parameters = Collections.emptyMap();
this.windowState = null;
this.portletMode = null;
}
PortletExecutionEvent(PortletExecutionEventBuilder portletEventBuilder) {
super(portletEventBuilder.portalEventBuilder);
this.portletWindowId = portletEventBuilder.portletWindowId;
this.fname = portletEventBuilder.fname;
this.executionTimeNano = portletEventBuilder.executionTimeNano;
this.parameters = portletEventBuilder.parameters;
this.windowState = portletEventBuilder.windowState;
this.portletMode = portletEventBuilder.portletMode;
}
/**
* @return The windowId of the portlet that was executed, may return null if this event was
* loaded from a persistent store
*/
public IPortletWindowId getPortletWindowId() {
return portletWindowId;
}
/** @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 fname */
public String getFname() {
return this.fname;
}
public Map<String, List<String>> getParameters() {
return Collections.unmodifiableMap(this.parameters);
}
public WindowState getWindowState() {
return windowState;
}
public PortletMode getPortletMode() {
return portletMode;
}
@Override
public String toString() {
return super.toString()
+ ", fname="
+ this.fname
+ ", executionTimeNano="
+ this.getExecutionTimeNano()
+ ", parameters="
+ this.parameters.size();
}
protected static class PortletExecutionEventBuilder {
private final PortalEventBuilder portalEventBuilder;
private final IPortletWindowId portletWindowId;
private final String fname;
private final long executionTimeNano;
private final Map<String, List<String>> parameters;
private final WindowState windowState;
private final PortletMode portletMode;
public PortletExecutionEventBuilder(PortletExecutionEventBuilder portletEventBuilder) {
this(
portletEventBuilder.portalEventBuilder,
portletEventBuilder.portletWindowId,
portletEventBuilder.fname,
portletEventBuilder.executionTimeNano,
portletEventBuilder.parameters,
portletEventBuilder.windowState,
portletEventBuilder.portletMode);
}
public PortletExecutionEventBuilder(
PortalEventBuilder portalEventBuilder,
IPortletWindowId portletWindowId,
String fname,
long executionTimeNano,
Map<String, List<String>> parameters,
WindowState windowState,
PortletMode portletMode) {
Validate.notNull(portalEventBuilder, "portalEventBuilder");
FunctionalNameType.validate(fname);
Validate.notNull(parameters, "parameters");
this.portalEventBuilder = portalEventBuilder;
this.portletWindowId = portletWindowId;
this.fname = fname;
this.executionTimeNano = executionTimeNano;
this.parameters = parameters;
this.windowState = windowState;
this.portletMode = portletMode;
}
}
}