All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.effektif.workflow.api.model.NextRelativeTime Maven / Gradle / Ivy

The newest version!
/* Copyright (c) 2014, Effektif GmbH.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. */
package com.effektif.workflow.api.model;

import org.joda.time.DateTimeConstants;
import org.joda.time.LocalDateTime;

import com.effektif.workflow.api.bpmn.BpmnReader;
import com.effektif.workflow.api.bpmn.BpmnWriter;
import com.effektif.workflow.api.json.TypeName;


/** AFAICT, this is not used.
 * TODO decide to keep it in for future use or kick it out.
 * 
 * @author Tom Baeyens
 */
@TypeName("next")
public class NextRelativeTime extends RelativeTime {

  public static final String HOUR_OF_DAY = "hourOfDay";
  public static final String DAY_OF_WEEK = "dayOfWeek";
  public static final String DAY_OF_MONTH = "dayOfMonth";
  
  protected Integer index;
  protected String indexUnit;

  public NextRelativeTime() {
  }
  
  public NextRelativeTime(Integer index, String indexUnit) {
    this.index = index;
    this.indexUnit = indexUnit;
  }

  @Override
  public void readBpmn(BpmnReader r) {
    super.readBpmn(r);
    this.index = new Integer(r.readStringAttributeEffektif("index"));
    this.indexUnit = r.readStringAttributeEffektif("indexUnit");
  }

  @Override
  public void writeBpmn(BpmnWriter w) {
    super.writeBpmn(w);
    w.writeStringAttributeEffektif("type", NEXT);
    w.writeStringAttributeEffektif("index", index);
    w.writeStringAttributeEffektif("indexUnit", indexUnit);
  }
  
  public static NextRelativeTime hourOfDay(Integer hourOfDay) {
    return new NextRelativeTime(hourOfDay, HOUR_OF_DAY);
  }
  public static NextRelativeTime dayOfWeek(Integer dayOfWeek) {
    return new NextRelativeTime(dayOfWeek, DAY_OF_WEEK);
  }
  public static NextRelativeTime dayOfMonth(Integer dayOfMonth) {
    return new NextRelativeTime(dayOfMonth, DAY_OF_MONTH);
  }

  public Integer getIndex() {
    return this.index;
  }
  public void setIndex(Integer index) {
    this.index = index;
  }

  public String getIndexUnit() {
    return this.indexUnit;
  }
  public void setIndexUnit(String indexUnit) {
    this.indexUnit = indexUnit;
  }

  public String toString() {
    if (HOUR_OF_DAY.equals(indexUnit)) {
      return "next time it's "+atHour+":"+atMinute;
    } else if (DAY_OF_WEEK.equals(indexUnit)) {
      return appendAt("next "+ dayOfWeekToString(index));
    } else if (DAY_OF_MONTH.equals(indexUnit)) {
      return appendAt("next time it's the "+index+"th day of the month");
    }
    return "next unspecified relative time";
  }

  public static String dayOfWeekToString(Integer dayOfWeek) {
    if (dayOfWeek==null) return "unspecified day";
    else if (dayOfWeek==DateTimeConstants.MONDAY) return "Monday"; // 1
    else if (dayOfWeek==DateTimeConstants.TUESDAY) return "Tuesday"; // 2
    else if (dayOfWeek==DateTimeConstants.WEDNESDAY) return "Wednesday"; // 3
    else if (dayOfWeek==DateTimeConstants.THURSDAY) return "Thursday"; // 4
    else if (dayOfWeek==DateTimeConstants.FRIDAY) return "Friday"; // 5
    else if (dayOfWeek==DateTimeConstants.SATURDAY) return "Saturday"; // 6
    else if (dayOfWeek==DateTimeConstants.SUNDAY) return "Sunday"; // 7
    return "invalid day of the week "+dayOfWeek;
  }

  @Override
  public LocalDateTime resolve(LocalDateTime base) {
    LocalDateTime time = null;
    if (HOUR_OF_DAY.equals(indexUnit)) {
      time = base.withTime(index, 0, 0, 0);
      if (!time.isAfter(base)) {
        return time.plusDays(1);
      }
    } else if (DAY_OF_WEEK.equals(indexUnit)) {
      time = base
          .withDayOfWeek(index)
          .withTime(0, 0, 0, 0);
      if (!time.isAfter(base)) {
        time = time.plusWeeks(1);
      }
    } else if (DAY_OF_MONTH.equals(indexUnit)) {
      time = base
          .withDayOfMonth(index)
          .withTime(0, 0, 0, 0);
      if (!time.isAfter(base)) {
        time = time.plusMonths(1);
      }
    }
    if (atHour!=null) {
      time = time.withTime(atHour, atMinute!=null ? atMinute : 0, 0, 0);
    }
    return time;
  }

  @Override
  public boolean valid() {
    return index!=null 
            && (HOUR_OF_DAY.equals(indexUnit)
                || DAY_OF_WEEK.equals(indexUnit)
                || DAY_OF_MONTH.equals(indexUnit));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy