blob: c5fdcbc44f65cffbbf67363549d2911fdabd19e3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.context.core;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.mylyn.context.core.IDegreeOfInterest;
import org.eclipse.mylyn.context.core.IInteractionContextScaling;
import org.eclipse.mylyn.monitor.core.InteractionEvent;
/**
* @author Mik Kersten
*/
public class CompositeDegreeOfInterest implements IDegreeOfInterest {
private final Set<IDegreeOfInterest> composed = new HashSet<IDegreeOfInterest>();
protected IInteractionContextScaling contextScaling;
public CompositeDegreeOfInterest(IInteractionContextScaling contextScaling) {
this.contextScaling = contextScaling;
}
public void addEvent(InteractionEvent event) {
for (IDegreeOfInterest info : composed) {
((DegreeOfInterest) info).addEvent(event);
}
}
public List<InteractionEvent> getEvents() {
Set<InteractionEvent> events = new HashSet<InteractionEvent>();
for (IDegreeOfInterest info : composed) {
events.addAll(info.getEvents());
}
return new ArrayList<InteractionEvent>(events);
}
public float getValue() {
float value = 0;
for (IDegreeOfInterest info : composed) {
value += info.getValue();
}
return value;
}
public float getDecayValue() {
float value = 0;
for (IDegreeOfInterest info : composed) {
value += info.getDecayValue();
}
return value;
}
public float getEncodedValue() {
float value = 0;
for (IDegreeOfInterest info : composed) {
value += info.getEncodedValue();
}
return value;
}
/**
* @return true if one is interesting
*/
public boolean isInteresting() {
boolean isInteresting = false;
for (IDegreeOfInterest info : composed) {
if (info.isInteresting()) {
isInteresting = true;
}
}
return isInteresting;
}
/**
* @return true if all are predicted
*/
public boolean isPropagated() {
if (composed.isEmpty()) {
return false;
}
boolean allPropagated = true;
for (IDegreeOfInterest info : composed) {
if (!info.isPropagated()) {
allPropagated = false;
}
}
return allPropagated;
}
public boolean isPredicted() {
if (composed.isEmpty()) {
return false;
}
boolean allPredicted = true;
for (IDegreeOfInterest info : composed) {
if (!info.isPredicted()) {
allPredicted = false;
}
}
return allPredicted;
}
public boolean isLandmark() {
return getValue() >= contextScaling.getLandmark();
}
public Set<IDegreeOfInterest> getComposedDegreesOfInterest() {
return composed;
}
@Override
public String toString() {
StringBuffer result = new StringBuffer();
result.append("composite("); //$NON-NLS-1$
for (IDegreeOfInterest info : composed) {
result.append(info.toString());
}
result.append(")"); //$NON-NLS-1$
return result.toString();
}
}