⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gptimeunitstack.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
字号:
/* * Created on 08.11.2004 */package net.sourceforge.ganttproject.time.gregorian;import java.text.DateFormat;import java.text.ParseException;import java.util.ArrayList;import java.util.Arrays;import java.util.Calendar;import java.util.Date;import java.util.List;import net.sourceforge.ganttproject.language.GanttLanguage;import net.sourceforge.ganttproject.time.TimeFrame;import net.sourceforge.ganttproject.time.TimeUnit;import net.sourceforge.ganttproject.time.TimeUnitFunctionOfDate;import net.sourceforge.ganttproject.time.TimeUnitGraph;import net.sourceforge.ganttproject.time.TimeUnitPair;import net.sourceforge.ganttproject.time.TimeUnitStack;/** * @author bard */public class GPTimeUnitStack implements TimeUnitStack {    private TimeUnitGraph ourGraph = new TimeUnitGraph();    public final TimeUnit HOUR;        public final TimeUnit DAY;    public final TimeUnit WEEK;    public final TimeUnitFunctionOfDate MONTH;    public TimeUnit QUARTER;    public TimeUnitFunctionOfDate YEAR = null;    private TimeUnitPair[] myPairs;    //private TimeUnit MONTH_FROM_WEEKS;    public final TimeUnit WEEK_AS_BOTTOM_UNIT;    private TimeUnit myDefaultTimeUnit;    private TimeUnit myMaximalTimeUnit;    private final TimeUnitPair[] AVAILABLE_PAIRS;    private List<TimeUnitStack.Listener> myListeners = new ArrayList<TimeUnitStack.Listener>();    /**     *      */    public GPTimeUnitStack(GanttLanguage i18n) {        TimeUnit atom = ourGraph.createAtomTimeUnit("atom");        HOUR = ourGraph.createDateFrameableTimeUnit("hour", atom, 1, new FramerImpl(Calendar.HOUR_OF_DAY));        HOUR.setTextFormatter(new HourTextFormatter());        DAY = ourGraph.createDateFrameableTimeUnit("day", HOUR, 24,                new FramerImpl(Calendar.DATE));        DAY.setTextFormatter(new DayTextFormatter());        MONTH = ourGraph.createTimeUnitFunctionOfDate("month", DAY,                new FramerImpl(Calendar.MONTH));        MONTH.setTextFormatter(new MonthTextFormatter());        WEEK = ourGraph.createDateFrameableTimeUnit("week", DAY, 7,                new WeekFramerImpl());//        MONTH_FROM_WEEKS = ourGraph.createTimeUnitFunctionOfDate(//                "month_from_weeks", WEEK, new FramerImpl(Calendar.MONTH));        WEEK.setTextFormatter(new WeekTextFormatter(i18n.getText("week")                + " {0}"));        WEEK_AS_BOTTOM_UNIT = ourGraph.createDateFrameableTimeUnit("week", DAY,                7, new WeekFramerImpl());        WEEK_AS_BOTTOM_UNIT.setTextFormatter(new WeekTextFormatter("{0}"));        YEAR = ourGraph.createTimeUnitFunctionOfDate("year", DAY,                new FramerImpl(Calendar.YEAR));        YEAR.setTextFormatter(new YearTextFormatter());        AVAILABLE_PAIRS = new TimeUnitPair[] {                new MyTimeUnitPair(DAY, HOUR),                new MyTimeUnitPair(DAY, HOUR),                new MyTimeUnitPair(DAY, HOUR),                new MyTimeUnitPair(WEEK, DAY),                new MyTimeUnitPair(WEEK, DAY),                 new MyTimeUnitPair(MONTH, DAY),                new MyTimeUnitPair(MONTH, WEEK_AS_BOTTOM_UNIT),                new MyTimeUnitPair(MONTH, WEEK_AS_BOTTOM_UNIT),                new MyTimeUnitPair(MONTH, WEEK_AS_BOTTOM_UNIT),                new MyTimeUnitPair(MONTH, WEEK_AS_BOTTOM_UNIT),                new MyTimeUnitPair(YEAR, WEEK_AS_BOTTOM_UNIT),                new MyTimeUnitPair(YEAR, WEEK_AS_BOTTOM_UNIT),         };        myDefaultTimeUnit = HOUR;        myMaximalTimeUnit = YEAR;        recalculatePairs();    }    public TimeFrame createTimeFrame(Date baseDate, TimeUnit topUnit,            TimeUnit bottomUnit) {        // if (topUnit instanceof TimeUnitFunctionOfDate) {        // topUnit = ((TimeUnitFunctionOfDate)topUnit).createTimeUnit(baseDate);        // }        return new TimeFrameImpl(baseDate, topUnit, bottomUnit);    }    public String getName() {        return "default";    }    public TimeUnit getDefaultTimeUnit() {        return myDefaultTimeUnit;    }    public TimeUnitPair[] getTimeUnitPairs() {        return myPairs;    }        public List<TimeUnit> getTimeUnits() {        return Arrays.asList(new TimeUnit[] {HOUR, DAY, WEEK_AS_BOTTOM_UNIT, MONTH, YEAR});    }    private class MyTimeUnitPair extends TimeUnitPair {        MyTimeUnitPair(TimeUnit topUnit, TimeUnit bottomUnit) {            super(topUnit, bottomUnit, GPTimeUnitStack.this);        }        public boolean equals(Object obj) {            if (obj instanceof TimeUnitPair) {                TimeUnitPair rvalue = (TimeUnitPair) obj;                return getTopTimeUnit()==rvalue.getTopTimeUnit() && getBottomTimeUnit()==rvalue.getBottomTimeUnit();            }            return false;        }            }    public void setTimeUnitRange(TimeUnit minimalTimeUnit, TimeUnit maximalTimeUnit) {        myDefaultTimeUnit = minimalTimeUnit;        myMaximalTimeUnit = maximalTimeUnit==null ? YEAR : maximalTimeUnit;        recalculatePairs();    }    private void recalculatePairs() {        List<TimeUnitPair> newPairs = new ArrayList<TimeUnitPair>();        int state=0;        TimeUnit stopUnit = null;        for (int i=0; i<AVAILABLE_PAIRS.length; i++) {            if (AVAILABLE_PAIRS[i].getBottomTimeUnit()==myDefaultTimeUnit && state==0) {                state = 1;            }            if (AVAILABLE_PAIRS[i].getTopTimeUnit()==myMaximalTimeUnit && state==1) {                state = 2;            }            if (AVAILABLE_PAIRS[i].getTopTimeUnit()!=myMaximalTimeUnit && state==2) {                state = 3;                stopUnit = AVAILABLE_PAIRS[i].getTopTimeUnit();             }            if (AVAILABLE_PAIRS[i].getTopTimeUnit()!=stopUnit && state==3) {                break;            }            if (state>0) {                newPairs.add(AVAILABLE_PAIRS[i]);            }        }        myPairs = newPairs.toArray(new TimeUnitPair[0]);        fireStackChanged();    }    public void addTimeUnitStackListener(Listener listener) {        myListeners.add(listener);    }    public void removeTimeUnitStackListener(Listener listener) {        myListeners.remove(listener);    }    void fireStackChanged() {        for (TimeUnitStack.Listener nextListener : myListeners) {            nextListener.timeUnitStackChanged();        }    }    public TimeUnit findTimeUnit(String code) {        assert code!=null;        code = code.trim();        if (isHour(code)) {            return HOUR;        }        if (isDay(code)) {            return DAY;        }        if (isWeek(code)) {            return WEEK_AS_BOTTOM_UNIT;        }        return null;    }    private boolean isWeek(String code) {        return "w".equalsIgnoreCase(code);    }    private boolean isDay(String code) {        return "d".equalsIgnoreCase(code);    }    private boolean isHour(String code) {        return "h".equalsIgnoreCase(code);    }    public String encode(TimeUnit timeUnit) {        if (timeUnit==HOUR) {            return "h";        }        if (timeUnit==DAY) {            return "d";        }        if (timeUnit==WEEK_AS_BOTTOM_UNIT) {            return "w";        }        throw new IllegalArgumentException();    }    	public DateFormat[] getDateFormats() {		DateFormat[] result;		if (HOUR.isConstructedFrom(getDefaultTimeUnit())) {			result = new DateFormat[] {				DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT),				DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT),			};		}		else {			result = new DateFormat[] {				DateFormat.getDateInstance(DateFormat.LONG),				DateFormat.getDateInstance(DateFormat.MEDIUM),				DateFormat.getDateInstance(DateFormat.SHORT),							};		}		return result;	}    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -