001: package org.airtodo.gui_common.components.widgets;
002:
003: import static org.air.framework.gui.box.Gap.small;
004:
005: import java.awt.Dimension;
006: import java.util.Date;
007: import java.util.Map;
008:
009: import javax.swing.Box;
010: import javax.swing.JLabel;
011: import javax.swing.JProgressBar;
012:
013: import org.air.framework.core.Utils;
014: import org.air.framework.gui.box.BxX;
015: import org.air.framework.gui.dialogs.login.ConnectDialog;
016: import org.air.framework.i18n.NlsMessages;
017: import org.airtodo.db.types.Period;
018: import org.airtodo.db.types.PeriodUtils;
019: import org.airtodo.records.Projects;
020: import org.apache.commons.lang.SerializationUtils;
021:
022: public class WidgetPeriodFieldProject extends WidgetPeriodFieldTask {
023: public static enum NLS {
024: LABEL_REMAIN
025: }
026:
027: private static final String NLS_LABEL_REMAIN = NlsMessages
028: .getString(NLS.LABEL_REMAIN);
029: private Date serverDateYMD = ConnectDialog.getServerDateYMD();
030:
031: private Enum enumColumn;
032:
033: public WidgetPeriodFieldProject(Enum enumColumn) {
034: super (enumColumn);
035: this .enumColumn = enumColumn;
036: add(small());
037: add(getProgressBar());
038: add(new BxX(getLabel(), Box.createHorizontalGlue()));
039: }
040:
041: public void setInterval(final Period interval) {
042: super .setInterval(interval);
043: //
044: getProgressBar().setVisible(false);
045: getLabel().setVisible(false);
046: //
047: if (interval != null && interval.isValid()) {
048: long intervalValue = interval.getValue();
049: if (PeriodUtils.isInProgress(interval)) {
050: Period periodRemain = PeriodUtils
051: .calcRemainPeriod(interval);
052: long lo = 100 - 100 * periodRemain.getValue()
053: / intervalValue;
054: int val = Integer.parseInt("" + lo);
055: getProgressBar().setString(
056: String.format(NLS_LABEL_REMAIN, periodRemain
057: .toString()));
058: getProgressBar().setValue(val);
059: getProgressBar().setVisible(true);
060: } else {
061: PeriodUtils.remainPeriodDecorator(getLabel(), interval);
062: getLabel().setVisible(true);
063: }
064: }
065: }
066:
067: private JLabel label;
068:
069: private JLabel getLabel() {
070: if (label == null) {
071: label = new JLabel();
072: label.setVisible(false);
073: }
074: return label;
075: }
076:
077: private JProgressBar progressBar;
078:
079: private JProgressBar getProgressBar() {
080: if (progressBar == null) {
081: progressBar = new JProgressBar();
082: progressBar.setVisible(false);
083: progressBar.setStringPainted(true);
084: progressBar.setMinimumSize(new Dimension(Integer.MAX_VALUE,
085: 20));
086: }
087: return progressBar;
088: }
089:
090: public void fromGui(Map map) {
091: if (getInterval() != null) {
092: map.put(Utils.getColumnIdentifier(enumColumn),
093: getInterval());
094: Period remain = (Period) SerializationUtils
095: .clone(getInterval());
096: remain.setRemain(true);
097: map.put(Utils.getColumnIdentifier(Projects.REMAIN), remain);
098: }
099: }
100:
101: public void toGui(Map map) {
102: setInterval((Period) map.get(Utils
103: .getColumnIdentifier(enumColumn)));
104: }
105:
106: }
|