/** * Add the tag index to the search database. See {@link TagEntry#composeIndexName(String)} for details. * * @param projectUuid * @return Fluent API */ default SearchQueueBatch createTagIndex(String projectUuid) { return createIndex(Tag.composeIndexName(projectUuid), Tag.class); }
@Override protected String composeIndexNameFromEntry(UpdateDocumentEntry entry) { return Tag.composeIndexName(entry.getContext().getProjectUuid()); }
@Override public Set<String> filterUnknownIndices(Set<String> indices) { return db.tx(() -> { Set<String> activeIndices = new HashSet<>(); for (Project project : boot.meshRoot().getProjectRoot().findAll()) { activeIndices.add(Tag.composeIndexName(project.getUuid())); } return indices.stream() .filter(i -> i.startsWith(getType() + "-")) .filter(i -> !activeIndices.contains(i)) .collect(Collectors.toSet()); }); }
@Override public Set<String> getSelectedIndices(InternalActionContext ac) { return db.tx(() -> { Project project = ac.getProject(); if (project != null) { return Collections.singleton(Tag.composeIndexName(project.getUuid())); } else { return getIndices().keySet(); } }); }
@Override public Map<String, IndexInfo> getIndices() { return db.tx(() -> { Map<String, IndexInfo> indexInfo = new HashMap<>(); ProjectRoot projectRoot = boot.meshRoot().getProjectRoot(); for (Project project : projectRoot.findAll()) { String indexName = Tag.composeIndexName(project.getUuid()); IndexInfo info = new IndexInfo(indexName, null, getMappingProvider().getMapping(), "tag"); indexInfo.put(indexName, info); } return indexInfo; }); }
/** * Assert that the tag family was stored in the index. * * @param tag * @return Fluent API */ public DummySearchProviderAssert stored(Tag tag) { assertThat(actual).hasStore(Tag.composeIndexName(tag.getProject().getUuid()), Tag.composeDocumentId(tag.getUuid())); return this; }
@Override public Completable syncIndices() { return Completable.defer(() -> { return db.tx(() -> { ProjectRoot root = boot.meshRoot().getProjectRoot(); Set<Completable> actions = new HashSet<>(); SyncMetric metric = new SyncMetric(getType()); for (Project project : root.findAll()) { String uuid = project.getUuid(); actions.add(diffAndSync(Tag.composeIndexName(uuid), uuid, metric)); } return Completable.merge(actions); }); }); }