/** * Return the currently configured branch name. * * @return */ default String getBranch() { return getParameter(BRANCH_QUERY_PARAM_KEY); }
/** * Set the version. This can be either "draft", "published" or a version number * * @param version * version * @return fluent API */ default VersioningParameters setVersion(String version) { setParameter(VERSION_QUERY_PARAM_KEY, version); return this; }
/** * Request the draft version. Alias for setVersion("draft") * * @return fluent API */ default VersioningParameters draft() { return setVersion("draft"); }
@Override public GraphPermission getReadPermission(InternalActionContext ac) { switch (ContainerType.forVersion(ac.getVersioningParameters().getVersion())) { case PUBLISHED: return GraphPermission.READ_PUBLISHED_PERM; default: return GraphPermission.READ_PERM; } }
@Override public Branch getBranch(Project project) { if (project == null) { project = getProject(); } return branchCache.computeIfAbsent(project, p -> { if (p == null) { // TODO i18n throw error(INTERNAL_SERVER_ERROR, "Cannot get branch without a project"); } Branch branch = null; String branchNameOrUuid = getVersioningParameters().getBranch(); if (!isEmpty(branchNameOrUuid)) { branch = p.getBranchRoot().findByUuid(branchNameOrUuid); if (branch == null) { branch = p.getBranchRoot().findByName(branchNameOrUuid); } if (branch == null) { throw error(BAD_REQUEST, "branch_error_not_found", branchNameOrUuid); } } else { branch = p.getLatestBranch(); } return branch; }); }
/** * Find a node field container that matches the nearest possible value for the language parameter. * * @param ac * @param languageTags * @return Next matching field container or null when no language matches */ default NodeGraphFieldContainer findVersion(InternalActionContext ac, List<String> languageTags) { return findVersion(languageTags, ac.getBranch().getUuid(), ac.getVersioningParameters().getVersion()); }
public Object languagesFetcher(DataFetchingEnvironment env) { NodeContent content = env.getSource(); if (content == null) { return null; } GraphQLContext gc = env.getContext(); Branch branch = gc.getBranch(); ContainerType type = ContainerType.forVersion(gc.getVersioningParameters().getVersion()); Stream<? extends NodeGraphFieldContainer> stream = StreamSupport .stream(content.getNode().getGraphFieldContainersIt(branch, type).spliterator(), false); return stream.map(item -> { return new NodeContent(content.getNode(), item, content.getLanguageFallback()); }).collect(Collectors.toList()); }
/** * Set the branch by name or UUID. * * @param branch * name or uuid * @return fluent API */ default VersioningParameters setBranch(String branch) { setParameter(BRANCH_QUERY_PARAM_KEY, branch); return this; }
/** * Request the published version. Alias for setVersion("published") * * @return fluent API */ default VersioningParameters published() { return setVersion("published"); }
/** * Return the currently configured version. * * @return */ default String getVersion() { String version = "draft"; String versionParameter = getParameter(VERSION_QUERY_PARAM_KEY); if (versionParameter != null) { if ("draft".equalsIgnoreCase(versionParameter) || "published".equalsIgnoreCase(versionParameter)) { version = versionParameter; } else { try { version = new VersionNumber(versionParameter).toString(); } catch (IllegalArgumentException e) { throw error(BAD_REQUEST, "error_illegal_version", versionParameter); } } } return version; }
@Override public Set<String> getSelectedIndices(InternalActionContext ac) { return db.tx(() -> { Set<String> indices = new HashSet<>(); Project project = ac.getProject(); if (project != null) { Branch branch = ac.getBranch(); // Locate all schema versions which need to be taken into consideration when choosing the indices for (SchemaContainerVersion version : branch.findActiveSchemaVersions()) { indices.add(NodeGraphFieldContainer.composeIndexName(project.getUuid(), branch.getUuid(), version.getUuid(), ContainerType .forVersion(ac.getVersioningParameters().getVersion()))); } } else { // The project was not specified. Maybe a global search wants to know which indices must be searched. // In that case we just iterate over all projects and collect index names per branch. for (Project currentProject : boot.meshRoot().getProjectRoot().findAll()) { for (Branch branch : currentProject.getBranchRoot().findAll()) { for (SchemaContainerVersion version : branch.findActiveSchemaVersions()) { indices.add(NodeGraphFieldContainer.composeIndexName(currentProject.getUuid(), branch.getUuid(), version.getUuid(), ContainerType.forVersion(ac.getVersioningParameters().getVersion()))); } } } } return indices; }); }
ContainerType type = ContainerType.forVersion(ac.getVersioningParameters().getVersion()); Language language = boot.languageRoot().findByLanguageTag(languageTag); if (language== null) {
gc.getBranch().getUuid(), gc.getUser(), ContainerType.forVersion(gc.getVersioningParameters().getVersion()) ).spliterator(), false) .map(node -> {
ContainerType type = ContainerType.forVersion(gc.getVersioningParameters().getVersion()); Stack<String> pathStack = new Stack<>(); pathStack.add(nodePath); return null; ContainerType containerType = ContainerType.forVersion(gc.getVersioningParameters().getVersion()); String branchUuid = gc.getBranch().getUuid(); String languageTag = container.getLanguageTag();