/**
   * Creates a new d l sync event with the primary key. Does not add the d l sync event to the
   * database.
   *
   * @param syncEventId the primary key for the new d l sync event
   * @return the new d l sync event
   */
  @Override
  public DLSyncEvent create(long syncEventId) {
    DLSyncEvent dlSyncEvent = new DLSyncEventImpl();

    dlSyncEvent.setNew(true);
    dlSyncEvent.setPrimaryKey(syncEventId);

    return dlSyncEvent;
  }
  /**
   * Caches the d l sync event in the entity cache if it is enabled.
   *
   * @param dlSyncEvent the d l sync event
   */
  @Override
  public void cacheResult(DLSyncEvent dlSyncEvent) {
    EntityCacheUtil.putResult(
        DLSyncEventModelImpl.ENTITY_CACHE_ENABLED,
        DLSyncEventImpl.class,
        dlSyncEvent.getPrimaryKey(),
        dlSyncEvent);

    FinderCacheUtil.putResult(
        FINDER_PATH_FETCH_BY_TYPEPK, new Object[] {dlSyncEvent.getTypePK()}, dlSyncEvent);

    dlSyncEvent.resetOriginalValues();
  }
  @Override
  public void clearCache(List<DLSyncEvent> dlSyncEvents) {
    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);
    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);

    for (DLSyncEvent dlSyncEvent : dlSyncEvents) {
      EntityCacheUtil.removeResult(
          DLSyncEventModelImpl.ENTITY_CACHE_ENABLED,
          DLSyncEventImpl.class,
          dlSyncEvent.getPrimaryKey());

      clearUniqueFindersCache(dlSyncEvent);
    }
  }
 /**
  * Caches the d l sync events in the entity cache if it is enabled.
  *
  * @param dlSyncEvents the d l sync events
  */
 @Override
 public void cacheResult(List<DLSyncEvent> dlSyncEvents) {
   for (DLSyncEvent dlSyncEvent : dlSyncEvents) {
     if (EntityCacheUtil.getResult(
             DLSyncEventModelImpl.ENTITY_CACHE_ENABLED,
             DLSyncEventImpl.class,
             dlSyncEvent.getPrimaryKey())
         == null) {
       cacheResult(dlSyncEvent);
     } else {
       dlSyncEvent.resetOriginalValues();
     }
   }
 }
  @Override
  protected DLSyncEvent removeImpl(DLSyncEvent dlSyncEvent) throws SystemException {
    dlSyncEvent = toUnwrappedModel(dlSyncEvent);

    Session session = null;

    try {
      session = openSession();

      if (!session.contains(dlSyncEvent)) {
        dlSyncEvent =
            (DLSyncEvent) session.get(DLSyncEventImpl.class, dlSyncEvent.getPrimaryKeyObj());
      }

      if (dlSyncEvent != null) {
        session.delete(dlSyncEvent);
      }
    } catch (Exception e) {
      throw processException(e);
    } finally {
      closeSession(session);
    }

    if (dlSyncEvent != null) {
      clearCache(dlSyncEvent);
    }

    return dlSyncEvent;
  }
  @Override
  public DLSyncEvent updateImpl(com.liferay.portlet.documentlibrary.model.DLSyncEvent dlSyncEvent)
      throws SystemException {
    dlSyncEvent = toUnwrappedModel(dlSyncEvent);

    boolean isNew = dlSyncEvent.isNew();

    Session session = null;

    try {
      session = openSession();

      if (dlSyncEvent.isNew()) {
        session.save(dlSyncEvent);

        dlSyncEvent.setNew(false);
      } else {
        session.merge(dlSyncEvent);
      }
    } catch (Exception e) {
      throw processException(e);
    } finally {
      closeSession(session);
    }

    FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITH_PAGINATION);

    if (isNew || !DLSyncEventModelImpl.COLUMN_BITMASK_ENABLED) {
      FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST_WITHOUT_PAGINATION);
    }

    EntityCacheUtil.putResult(
        DLSyncEventModelImpl.ENTITY_CACHE_ENABLED,
        DLSyncEventImpl.class,
        dlSyncEvent.getPrimaryKey(),
        dlSyncEvent,
        false);

    clearUniqueFindersCache(dlSyncEvent);
    cacheUniqueFindersCache(dlSyncEvent);

    dlSyncEvent.resetOriginalValues();

    return dlSyncEvent;
  }
  protected SyncDLObject checkModifiedTime(SyncDLObject syncDLObject, long typePk) {

    DynamicQuery dynamicQuery = DLSyncEventLocalServiceUtil.dynamicQuery();

    dynamicQuery.add(RestrictionsFactoryUtil.eq("typePK", typePk));

    List<DLSyncEvent> dlSyncEvents = DLSyncEventLocalServiceUtil.dynamicQuery(dynamicQuery);

    if (dlSyncEvents.isEmpty()) {
      return syncDLObject;
    }

    DLSyncEvent dlSyncEvent = dlSyncEvents.get(0);

    syncDLObject.setModifiedTime(dlSyncEvent.getModifiedTime());

    return syncDLObject;
  }
  protected void cacheUniqueFindersCache(DLSyncEvent dlSyncEvent) {
    if (dlSyncEvent.isNew()) {
      Object[] args = new Object[] {dlSyncEvent.getTypePK()};

      FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_TYPEPK, args, Long.valueOf(1));
      FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_TYPEPK, args, dlSyncEvent);
    } else {
      DLSyncEventModelImpl dlSyncEventModelImpl = (DLSyncEventModelImpl) dlSyncEvent;

      if ((dlSyncEventModelImpl.getColumnBitmask() & FINDER_PATH_FETCH_BY_TYPEPK.getColumnBitmask())
          != 0) {
        Object[] args = new Object[] {dlSyncEvent.getTypePK()};

        FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_TYPEPK, args, Long.valueOf(1));
        FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_TYPEPK, args, dlSyncEvent);
      }
    }
  }
  protected void clearUniqueFindersCache(DLSyncEvent dlSyncEvent) {
    DLSyncEventModelImpl dlSyncEventModelImpl = (DLSyncEventModelImpl) dlSyncEvent;

    Object[] args = new Object[] {dlSyncEvent.getTypePK()};

    FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_TYPEPK, args);
    FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_TYPEPK, args);

    if ((dlSyncEventModelImpl.getColumnBitmask() & FINDER_PATH_FETCH_BY_TYPEPK.getColumnBitmask())
        != 0) {
      args = new Object[] {dlSyncEventModelImpl.getOriginalTypePK()};

      FinderCacheUtil.removeResult(FINDER_PATH_COUNT_BY_TYPEPK, args);
      FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_TYPEPK, args);
    }
  }
  protected DLSyncEvent toUnwrappedModel(DLSyncEvent dlSyncEvent) {
    if (dlSyncEvent instanceof DLSyncEventImpl) {
      return dlSyncEvent;
    }

    DLSyncEventImpl dlSyncEventImpl = new DLSyncEventImpl();

    dlSyncEventImpl.setNew(dlSyncEvent.isNew());
    dlSyncEventImpl.setPrimaryKey(dlSyncEvent.getPrimaryKey());

    dlSyncEventImpl.setSyncEventId(dlSyncEvent.getSyncEventId());
    dlSyncEventImpl.setModifiedTime(dlSyncEvent.getModifiedTime());
    dlSyncEventImpl.setEvent(dlSyncEvent.getEvent());
    dlSyncEventImpl.setType(dlSyncEvent.getType());
    dlSyncEventImpl.setTypePK(dlSyncEvent.getTypePK());

    return dlSyncEventImpl;
  }
  /**
   * Returns the d l sync event where typePK = &#63; or returns <code>null</code> if it could not be
   * found, optionally using the finder cache.
   *
   * @param typePK the type p k
   * @param retrieveFromCache whether to use the finder cache
   * @return the matching d l sync event, or <code>null</code> if a matching d l sync event could
   *     not be found
   * @throws SystemException if a system exception occurred
   */
  @Override
  public DLSyncEvent fetchByTypePK(long typePK, boolean retrieveFromCache) throws SystemException {
    Object[] finderArgs = new Object[] {typePK};

    Object result = null;

    if (retrieveFromCache) {
      result = FinderCacheUtil.getResult(FINDER_PATH_FETCH_BY_TYPEPK, finderArgs, this);
    }

    if (result instanceof DLSyncEvent) {
      DLSyncEvent dlSyncEvent = (DLSyncEvent) result;

      if ((typePK != dlSyncEvent.getTypePK())) {
        result = null;
      }
    }

    if (result == null) {
      StringBundler query = new StringBundler(3);

      query.append(_SQL_SELECT_DLSYNCEVENT_WHERE);

      query.append(_FINDER_COLUMN_TYPEPK_TYPEPK_2);

      String sql = query.toString();

      Session session = null;

      try {
        session = openSession();

        Query q = session.createQuery(sql);

        QueryPos qPos = QueryPos.getInstance(q);

        qPos.add(typePK);

        List<DLSyncEvent> list = q.list();

        if (list.isEmpty()) {
          FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_TYPEPK, finderArgs, list);
        } else {
          DLSyncEvent dlSyncEvent = list.get(0);

          result = dlSyncEvent;

          cacheResult(dlSyncEvent);

          if ((dlSyncEvent.getTypePK() != typePK)) {
            FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_TYPEPK, finderArgs, dlSyncEvent);
          }
        }
      } catch (Exception e) {
        FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_TYPEPK, finderArgs);

        throw processException(e);
      } finally {
        closeSession(session);
      }
    }

    if (result instanceof List<?>) {
      return null;
    } else {
      return (DLSyncEvent) result;
    }
  }
  /**
   * Returns an ordered range of all the d l sync events where modifiedTime &gt; &#63;.
   *
   * <p>Useful when paginating results. Returns a maximum of <code>end - start</code> instances.
   * <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result
   * set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start
   * </code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}
   * will return the full result set. If <code>orderByComparator</code> is specified, then the query
   * will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and
   * pagination is required (<code>start</code> and <code>end</code> are not {@link
   * com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default
   * ORDER BY logic from {@link
   * com.liferay.portlet.documentlibrary.model.impl.DLSyncEventModelImpl}. If both <code>
   * orderByComparator</code> and pagination are absent, for performance reasons, the query will not
   * have an ORDER BY clause and the returned result set will be sorted on by the primary key in an
   * ascending order.
   *
   * @param modifiedTime the modified time
   * @param start the lower bound of the range of d l sync events
   * @param end the upper bound of the range of d l sync events (not inclusive)
   * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
   * @return the ordered range of matching d l sync events
   * @throws SystemException if a system exception occurred
   */
  @Override
  public List<DLSyncEvent> findByModifiedTime(
      long modifiedTime, int start, int end, OrderByComparator orderByComparator)
      throws SystemException {
    boolean pagination = true;
    FinderPath finderPath = null;
    Object[] finderArgs = null;

    finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_MODIFIEDTIME;
    finderArgs = new Object[] {modifiedTime, start, end, orderByComparator};

    List<DLSyncEvent> list =
        (List<DLSyncEvent>) FinderCacheUtil.getResult(finderPath, finderArgs, this);

    if ((list != null) && !list.isEmpty()) {
      for (DLSyncEvent dlSyncEvent : list) {
        if ((modifiedTime >= dlSyncEvent.getModifiedTime())) {
          list = null;

          break;
        }
      }
    }

    if (list == null) {
      StringBundler query = null;

      if (orderByComparator != null) {
        query = new StringBundler(3 + (orderByComparator.getOrderByFields().length * 3));
      } else {
        query = new StringBundler(3);
      }

      query.append(_SQL_SELECT_DLSYNCEVENT_WHERE);

      query.append(_FINDER_COLUMN_MODIFIEDTIME_MODIFIEDTIME_2);

      if (orderByComparator != null) {
        appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS, orderByComparator);
      } else if (pagination) {
        query.append(DLSyncEventModelImpl.ORDER_BY_JPQL);
      }

      String sql = query.toString();

      Session session = null;

      try {
        session = openSession();

        Query q = session.createQuery(sql);

        QueryPos qPos = QueryPos.getInstance(q);

        qPos.add(modifiedTime);

        if (!pagination) {
          list = (List<DLSyncEvent>) QueryUtil.list(q, getDialect(), start, end, false);

          Collections.sort(list);

          list = Collections.unmodifiableList(list);
        } else {
          list = (List<DLSyncEvent>) QueryUtil.list(q, getDialect(), start, end);
        }

        cacheResult(list);

        FinderCacheUtil.putResult(finderPath, finderArgs, list);
      } catch (Exception e) {
        FinderCacheUtil.removeResult(finderPath, finderArgs);

        throw processException(e);
      } finally {
        closeSession(session);
      }
    }

    return list;
  }