@Transactional(readOnly = true) public Object doWork(SqlAction sql) { return idsInDb(sql); } });
/** * Given the current files on disk, {@link #unregister(Long, SqlAction)} * all files which have been removed from disk. */ public long removeMissingFilesFromDb(SqlAction sqlAction, Session session, List<OriginalFile> filesOnDisk) { List<Long> idsInDb = idsInDb(sqlAction); if (idsInDb.size() != filesOnDisk.size()) { log.info(String.format( "Script missing from disk: %s in db, %s on disk!", idsInDb.size(), filesOnDisk.size())); } Set<Long> setInDb = new HashSet<Long>(); Set<Long> setOnDisk = new HashSet<Long>(); setInDb.addAll(idsInDb); for (OriginalFile f : filesOnDisk) { setOnDisk.add(f.getId()); } // Now contains only those which are missing setInDb.removeAll(setOnDisk); for (Long l : setInDb) { if (readOnly.isReadOnlyDb()) { log.info("read-only database so ignoring missing script ID {}", l); } else { unregister(l, sqlAction); } } return setInDb.size(); }
public Object call() throws Exception { final QueryBuilder qb = new QueryBuilder(); qb.select("o").from("OriginalFile", "o"); if (!parseAcceptsList(qb, acceptsList)) { long gid = factory.sessionManager .getEventContext(factory.principal) .getCurrentGroupId(); qb.and("o.details.group.id = " + gid); } List<Long> officialIds = scripts.idsInDb(); if (officialIds != null && officialIds.size() > 0) { qb.and("o.id not in (:ids) "); qb.paramList("ids", officialIds); } List<OriginalFile> files = (List<OriginalFile>) factory.executor.execute(__current.ctx, factory.principal, new Executor.SimpleWork(this, "getUserScripts") { @Transactional(readOnly = true) public Object doWork(Session session, ServiceFactory sf) { return qb.query(session).list(); } }); IceMapper mapper = new IceMapper(); return mapper.map(files); } });