/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.core.validation;
import org.eclipse.skalli.commons.FormatUtils;
import org.eclipse.skalli.model.EntityBase;
import org.eclipse.skalli.services.validation.Validation;
class QueuedEntity<T extends EntityBase> extends Validation<T> implements Comparable<QueuedEntity<T>> {
private long queuedAt = -1L;
private long startedAt = -1L;
private long nanos = -1L; // ensure well-defined ordering in queue
private static long NANO_TIME = System.nanoTime();
public QueuedEntity(Validation<T> validation) {
super(validation.getEntityClass(), validation.getEntityId(),
validation.getMinSeverity(), validation.getUserId(), validation.getPriority());
queuedAt = System.currentTimeMillis();
nanos = System.nanoTime() - NANO_TIME;
}
public long getStartedAt() {
return startedAt;
}
public void setStartedAt(long startedAt) {
this.startedAt = startedAt;
}
public long getQueuedAt() {
return queuedAt;
}
@SuppressWarnings("nls")
@Override
public String toString() {
StringBuilder sb = new StringBuilder(super.toString());
if (queuedAt >= 0) {
sb.append("[queued at ").append(FormatUtils.formatUTCWithMillis(queuedAt)).append("]");
}
if (startedAt >= 0) {
sb.append("[started at ").append(FormatUtils.formatUTCWithMillis(startedAt)).append("]");
}
return sb.toString();
}
@Override
public int compareTo(QueuedEntity<T> o) {
int result = getPriority() < o.getPriority() ? -1 : (getPriority() == o.getPriority() ? 0 : 1);
if (result == 0) {
result = nanos < o.nanos ? -1 : (nanos == o.nanos ? 0 : 1);
}
return result;
}
}