コード例 #1
0
  /** @return {@code true} if this schedule was triggered. */
  public boolean trigger() {
    Date triggerDate = getTriggerDate();

    if (triggerDate == null || !triggerDate.before(new Date())) {
      return false;
    }

    LOGGER.debug("Triggering [{}] schedule", getLabel());

    try {
      beginWrites();

      for (Object draftObject :
          Query.fromAll()
              .where("com.psddev.cms.db.Draft/schedule = ?", this)
              .master()
              .noCache()
              .resolveInvisible()
              .selectAll()) {
        if (!(draftObject instanceof Draft)) {
          continue;
        }

        Draft draft = (Draft) draftObject;
        Object object = draft.getObject();

        LOGGER.debug("Processing [{}] draft in [{}] schedule", draft.getLabel(), getLabel());

        if (object != null) {
          ToolUser triggerUser = getTriggerUser();

          if (triggerUser == null) {
            triggerUser = draft.as(Content.ObjectModification.class).getUpdateUser();

            if (triggerUser == null) {
              triggerUser = draft.getOwner();
            }
          }

          State state = State.getInstance(object);
          Content.ObjectModification contentData = state.as(Content.ObjectModification.class);

          if (!state.isVisible()) {
            state.getExtras().put(FIRST_TRIGGER_EXTRA, Boolean.TRUE);
          }

          contentData.setDraft(false);
          contentData.setPublishDate(triggerDate);
          contentData.setPublishUser(triggerUser);
          state.as(BulkUploadDraft.class).setRunAfterSave(true);
          Content.Static.publish(object, getTriggerSite(), triggerUser);
        }

        draft.delete();
      }

      delete();
      commitWrites();
      return true;

    } finally {
      endWrites();
    }
  }