use of org.olat.repository.model.SearchRepositoryEntryParameters in project openolat by klemens.
the class RepositoryManagerTest method genericANDQueryWithRoles_owned.
@Test
public void genericANDQueryWithRoles_owned() {
Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("owned-re-");
RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry();
repositoryEntryRelationDao.addRole(owner, re, GroupRoles.owner.name());
dbInstance.commitAndCloseSession();
SearchRepositoryEntryParameters params = new SearchRepositoryEntryParameters();
params.setRoles(new Roles(false, false, false, true, false, false, false));
params.setOnlyOwnedResources(true);
params.setIdentity(owner);
List<RepositoryEntry> myEntries = repositoryManager.genericANDQueryWithRolesRestriction(params, 0, -1, true);
Assert.assertNotNull(myEntries);
Assert.assertEquals(1, myEntries.size());
Assert.assertTrue(myEntries.contains(re));
}
use of org.olat.repository.model.SearchRepositoryEntryParameters in project openolat by klemens.
the class RepositoryManagerTest method genericANDQueryWithRolesRestrictionMembersOnly.
@Test
public void genericANDQueryWithRolesRestrictionMembersOnly() {
// create 2 identities (repo owner and tutor)
Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("re-gen-1-" + UUID.randomUUID().toString());
Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("re-gen-2-" + UUID.randomUUID().toString());
Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("re-gen-3-" + UUID.randomUUID().toString());
RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry(true);
repositoryEntryRelationDao.addRole(id1, re, GroupRoles.owner.name());
BusinessGroup group = businessGroupService.createBusinessGroup(null, "teacherg", "tg", null, null, false, false, re);
businessGroupRelationDao.addRole(id2, group, GroupRoles.coach.name());
dbInstance.commitAndCloseSession();
// check for id 1 (owner of the repository entry)
SearchRepositoryEntryParameters params1 = new SearchRepositoryEntryParameters();
params1.setIdentity(id1);
params1.setRoles(new Roles(false, false, false, false, false, false, false));
params1.setOnlyExplicitMember(true);
List<RepositoryEntry> entries1 = repositoryManager.genericANDQueryWithRolesRestriction(params1, 0, -1, true);
Assert.assertNotNull(entries1);
Assert.assertFalse(entries1.isEmpty());
Assert.assertTrue(entries1.contains(re));
for (RepositoryEntry entry : entries1) {
if (!entry.equals(re)) {
Assert.assertTrue(entry.getAccess() >= RepositoryEntry.ACC_USERS);
}
}
// check for id2 (tutor)
SearchRepositoryEntryParameters params2 = new SearchRepositoryEntryParameters();
params2.setIdentity(id2);
params2.setRoles(new Roles(false, false, false, false, false, false, false));
params2.setOnlyExplicitMember(true);
List<RepositoryEntry> entries2 = repositoryManager.genericANDQueryWithRolesRestriction(params2, 0, -1, true);
Assert.assertNotNull(entries2);
Assert.assertFalse(entries2.isEmpty());
Assert.assertTrue(entries2.contains(re));
for (RepositoryEntry entry : entries2) {
if (!entry.equals(re)) {
Assert.assertTrue(entry.getAccess() >= RepositoryEntry.ACC_USERS);
}
}
// check for id3 (negative test)
SearchRepositoryEntryParameters params3 = new SearchRepositoryEntryParameters();
params3.setIdentity(id3);
params3.setRoles(new Roles(false, false, false, false, false, false, false));
params3.setOnlyExplicitMember(true);
List<RepositoryEntry> entries3 = repositoryManager.genericANDQueryWithRolesRestriction(params3, 0, -1, true);
Assert.assertNotNull(entries3);
Assert.assertFalse(entries3.contains(re));
for (RepositoryEntry entry : entries3) {
Assert.assertTrue(entry.getAccess() >= RepositoryEntry.ACC_USERS);
}
}
use of org.olat.repository.model.SearchRepositoryEntryParameters in project openolat by klemens.
the class CourseTest method testDeleteCourses.
@Test
public void testDeleteCourses() throws IOException, URISyntaxException {
ICourse course = CoursesWebService.createEmptyCourse(admin, "courseToDel", "course to delete", null);
dbInstance.intermediateCommit();
assertTrue(conn.login("administrator", "openolat"));
URI request = UriBuilder.fromUri(getContextURI()).path("/repo/courses/" + course.getResourceableId()).build();
HttpDelete method = conn.createDelete(request, MediaType.APPLICATION_JSON);
HttpResponse response = conn.execute(method);
assertEquals(200, response.getStatusLine().getStatusCode());
List<String> courseType = new ArrayList<String>();
courseType.add(CourseModule.getCourseTypeName());
Roles roles = new Roles(true, true, true, true, false, true, false);
SearchRepositoryEntryParameters params = new SearchRepositoryEntryParameters("*", "*", "*", courseType, null, roles, "");
List<RepositoryEntry> repoEntries = repositoryManager.genericANDQueryWithRolesRestriction(params, 0, -1, true);
assertNotNull(repoEntries);
for (RepositoryEntry entry : repoEntries) {
assertNotSame(entry.getOlatResource().getResourceableId(), course.getResourceableId());
}
}
use of org.olat.repository.model.SearchRepositoryEntryParameters in project openolat by klemens.
the class RepositoryIndexer method doIndex.
/**
* Loops over all repository-entries. Index repository meta data.
* Go further with repository-indexer for certain type if available.
* @see org.olat.search.service.indexer.Indexer#doIndex(org.olat.search.service.SearchResourceContext, java.lang.Object, org.olat.search.service.indexer.OlatFullIndexer)
*/
@Override
public void doIndex(SearchResourceContext parentResourceContext, Object businessObj, OlatFullIndexer indexWriter) throws IOException, InterruptedException {
final Roles roles = new Roles(true, true, true, true, false, true, false);
final SearchRepositoryEntryParameters params = new SearchRepositoryEntryParameters();
params.setRoles(roles);
boolean debug = isLogDebugEnabled();
// loop over all repository-entries
// committing here to make sure the loadBusinessGroup below does actually
// reload from the database and not only use the session cache
// (see org.hibernate.Session.get():
// If the instance, or a proxy for the instance, is already associated with the session, return that instance or proxy.)
dbInstance.commitAndCloseSession();
int counter = 0;
List<RepositoryEntry> repositoryList;
do {
repositoryList = repositoryManager.genericANDQueryWithRolesRestriction(params, counter, BATCH_SIZE, true);
for (RepositoryEntry repositoryEntry : repositoryList) {
try {
// reload the repositoryEntry here before indexing it to make sure it has not been deleted in the meantime
RepositoryEntry reloadedRepositoryEntry = repositoryManager.lookupRepositoryEntry(repositoryEntry.getKey());
if (reloadedRepositoryEntry == null) {
logInfo("doIndex: repositoryEntry was deleted while we were indexing. The deleted repositoryEntry was: " + repositoryEntry);
continue;
}
if (repositoryEntry.getAccess() == RepositoryEntry.DELETED) {
continue;
}
repositoryEntry = reloadedRepositoryEntry;
if (debug) {
logDebug("Index repositoryEntry=" + repositoryEntry + " counter=" + counter++ + " with ResourceableId=" + repositoryEntry.getOlatResource().getResourceableId());
}
if (!isOnBlacklist(repositoryEntry.getOlatResource().getResourceableId())) {
SearchResourceContext searchResourceContext = new SearchResourceContext(parentResourceContext);
searchResourceContext.setBusinessControlFor(repositoryEntry);
searchResourceContext.setTitle(repositoryEntry.getDisplayname());
searchResourceContext.setDescription(repositoryEntry.getDescription());
Document document = documentFactory.createDocument(searchResourceContext, repositoryEntry);
indexWriter.addDocument(document);
// Pass created-date & modified-date in context to child indexer because the child have no dates
searchResourceContext.setLastModified(repositoryEntry.getLastModified());
searchResourceContext.setCreatedDate(repositoryEntry.getCreationDate());
// go further with resource
Indexer repositoryEntryIndexer = getRepositoryEntryIndexer(repositoryEntry);
if (repositoryEntryIndexer != null) {
repositoryEntryIndexer.doIndex(searchResourceContext, repositoryEntry, indexWriter);
} else if (debug) {
// e.g. RepositoryEntry
logDebug("No RepositoryEntryIndexer for " + repositoryEntry.getOlatResource());
}
} else {
logWarn("RepositoryEntry is on black-list and excluded from search-index, repositoryEntry=" + repositoryEntry, null);
}
} catch (Throwable ex) {
// create meaninfull debugging output to find repo entry that is somehow broken
String entryDebug = "NULL";
if (repositoryEntry != null) {
entryDebug = "resId::" + repositoryEntry.getResourceableId() + " resTypeName::" + repositoryEntry.getResourceableTypeName() + " resName::" + repositoryEntry.getResourcename();
}
logWarn("Exception=" + ex.getMessage() + " for repo entry " + entryDebug, ex);
dbInstance.rollbackAndCloseSession();
}
dbInstance.commitAndCloseSession();
}
counter += repositoryList.size();
} while (repositoryList.size() == BATCH_SIZE);
if (debug) {
logDebug("RepositoryIndexer finished. counter=" + counter);
}
}
use of org.olat.repository.model.SearchRepositoryEntryParameters in project openolat by klemens.
the class WikisWebService method getAccessibleWikiRepositoryEntries.
/**
* returns all accessiblewikiRepositoryEntries of type wiki
*
* @param httpRequest
* @return
*/
private static List<RepositoryEntry> getAccessibleWikiRepositoryEntries(HttpServletRequest httpRequest) {
Roles roles = getRoles(httpRequest);
Identity identity = getIdentity(httpRequest);
RepositoryManager rm = RepositoryManager.getInstance();
SearchRepositoryEntryParameters params = new SearchRepositoryEntryParameters(identity, roles, new String[] { WikiResource.TYPE_NAME });
List<RepositoryEntry> res = rm.genericANDQueryWithRolesRestriction(params, 0, -1, true);
return res;
}
Aggregations