/*
* Created on 09.11.2004
*/
package biz.ganttproject.core.time;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
/**
* @author bard
*/
public interface TimeUnitStack {
TimeUnit getDefaultTimeUnit();
TimeUnitPair[] getTimeUnitPairs();
String getName();
DateFormat[] getDateFormats();
DateFormat getTimeFormat();
TimeUnit findTimeUnit(String code);
String encode(TimeUnit timeUnit);
TimeDuration createDuration(TimeUnit timeUnit, int count);
TimeDuration createDuration(TimeUnit timeUnit, Date startDate, Date endDate);
TimeDuration parseDuration(String duration) throws ParseException;
class Util {
/**
* @return a common TimeUnit for the given units or null if none if found
* (should not happen since all should be derived from atom)
*/
public static TimeUnit findCommonUnit(TimeUnit unit1, TimeUnit unit2) {
// Create (cache) list with TimeUnits which can be derived from unit1
ArrayList<TimeUnit> units1 = new ArrayList<TimeUnit>();
TimeUnit current = unit1;
do {
units1.add(current);
} while ((current = current.getDirectAtomUnit()) != null);
// Now compare lists to find a common unit
current = unit2;
while (current != null) {
Iterator<TimeUnit> u1Iterator = units1.iterator();
while (u1Iterator.hasNext()) {
TimeUnit nextU1 = u1Iterator.next();
if (current.equals(nextU1)) {
return current;
}
}
current = current.getDirectAtomUnit();
}
return null;
}
}
}