protected DLSync toUnwrappedModel(DLSync dlSync) {
    if (dlSync instanceof DLSyncImpl) {
      return dlSync;
    }

    DLSyncImpl dlSyncImpl = new DLSyncImpl();

    dlSyncImpl.setNew(dlSync.isNew());
    dlSyncImpl.setPrimaryKey(dlSync.getPrimaryKey());

    dlSyncImpl.setSyncId(dlSync.getSyncId());
    dlSyncImpl.setCompanyId(dlSync.getCompanyId());
    dlSyncImpl.setCreateDate(dlSync.getCreateDate());
    dlSyncImpl.setModifiedDate(dlSync.getModifiedDate());
    dlSyncImpl.setFileId(dlSync.getFileId());
    dlSyncImpl.setFileUuid(dlSync.getFileUuid());
    dlSyncImpl.setRepositoryId(dlSync.getRepositoryId());
    dlSyncImpl.setParentFolderId(dlSync.getParentFolderId());
    dlSyncImpl.setName(dlSync.getName());
    dlSyncImpl.setDescription(dlSync.getDescription());
    dlSyncImpl.setEvent(dlSync.getEvent());
    dlSyncImpl.setType(dlSync.getType());
    dlSyncImpl.setVersion(dlSync.getVersion());

    return dlSyncImpl;
  }
  /**
   * Returns an ordered range of all the d l syncs where companyId = ? and modifiedDate >
   * ? and repositoryId = ?.
   *
   * <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.DLSyncModelImpl}. 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 companyId the company ID
   * @param modifiedDate the modified date
   * @param repositoryId the repository ID
   * @param start the lower bound of the range of d l syncs
   * @param end the upper bound of the range of d l syncs (not inclusive)
   * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
   * @return the ordered range of matching d l syncs
   * @throws SystemException if a system exception occurred
   */
  public List<DLSync> findByC_M_R(
      long companyId,
      long modifiedDate,
      long repositoryId,
      int start,
      int end,
      OrderByComparator orderByComparator)
      throws SystemException {
    boolean pagination = true;
    FinderPath finderPath = null;
    Object[] finderArgs = null;

    finderPath = FINDER_PATH_WITH_PAGINATION_FIND_BY_C_M_R;
    finderArgs =
        new Object[] {
          companyId, modifiedDate, repositoryId,
          start, end, orderByComparator
        };

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

    if ((list != null) && !list.isEmpty()) {
      for (DLSync dlSync : list) {
        if ((companyId != dlSync.getCompanyId())
            || (modifiedDate != dlSync.getModifiedDate())
            || (repositoryId != dlSync.getRepositoryId())) {
          list = null;

          break;
        }
      }
    }

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

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

      query.append(_SQL_SELECT_DLSYNC_WHERE);

      query.append(_FINDER_COLUMN_C_M_R_COMPANYID_2);

      query.append(_FINDER_COLUMN_C_M_R_MODIFIEDDATE_2);

      query.append(_FINDER_COLUMN_C_M_R_REPOSITORYID_2);

      if (orderByComparator != null) {
        appendOrderByComparator(query, _ORDER_BY_ENTITY_ALIAS, orderByComparator);
      } else if (pagination) {
        query.append(DLSyncModelImpl.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(companyId);

        qPos.add(modifiedDate);

        qPos.add(repositoryId);

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

          Collections.sort(list);

          list = new UnmodifiableList<DLSync>(list);
        } else {
          list = (List<DLSync>) 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;
  }