/*
* Copyright (C) 2011 Andrea Schweer
*
* This file is part of the Digital Parrot.
*
* The Digital Parrot is free software; you can redistribute it and/or modify
* it under the terms of the Eclipse Public License as published by the Eclipse
* Foundation or its Agreement Steward, either version 1.0 of the License, or
* (at your option) any later version.
*
* The Digital Parrot is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License for
* more details.
*
* You should have received a copy of the Eclipse Public License along with the
* Digital Parrot. If not, see http://www.eclipse.org/legal/epl-v10.html.
*
*/
package net.schweerelos.parrot.model.filters;
import net.schweerelos.parrot.model.NodeWrapper;
import net.schweerelos.parrot.model.NotTimedThingException;
import net.schweerelos.parrot.model.ParrotModel;
import net.schweerelos.parrot.model.TimedThingsHelper;
import net.schweerelos.timeline.model.IntervalChain;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import org.joda.time.Interval;
import com.hp.hpl.jena.ontology.OntResource;
public class IntervalChainBasedFilter extends SimpleNodeFilter {
private IntervalChain<NodeWrapper> intervals;
private ParrotModel model;
public IntervalChainBasedFilter(IntervalChain<NodeWrapper> intervals, ParrotModel model) {
this.intervals = intervals;
this.model = model;
}
protected boolean matches(NodeWrapper nodeWrapper) {
if (intervals == null) {
Logger logger = Logger.getLogger(IntervalChainBasedFilter.class);
logger.warn("no intervals!");
return false;
}
if (!nodeWrapper.isOntResource()) {
return false;
}
OntResource node = nodeWrapper.getOntResource();
if (!TimedThingsHelper.isTimedThing(node, model)) {
return false;
}
try {
DateTime startsAt = TimedThingsHelper.extractStartDate(node, model);
DateTime endsAt = TimedThingsHelper.extractEndDate(node, model);
return intervals.contains(new Interval(startsAt, endsAt));
} catch (NotTimedThingException ntte) {
return false;
}
}
@Override
public String toString() {
StringBuilder result = new StringBuilder();
switch (getMode()) {
case HIGHLIGHT:
result.append("Highlight");
break;
case RESTRICT:
result.append("Restrict to");
break;
}
result.append(" everything");
if (intervals != null) {
result.append(" in ");
result.append(intervals.toString());
}
return result.toString();
}
}