/** * Lets return a safe JSON value */ protected static Object toSafeJsonValue(Object value) { if (value == null) { return null; } else { if (value instanceof Number) { return value; } if (value instanceof ProjectProvider) { ProjectProvider projectProvider = (ProjectProvider) value; return projectProvider.getType(); } if (value instanceof ProjectType) { ProjectType projectType = (ProjectType) value; return projectType.getType(); } return value.toString(); } }
private Iterable<Class<? extends ProvidedProjectFacet>> getMissingProvidedProjectFacets(ProjectProvider buildSystem, Iterable<Class<? extends ProvidedProjectFacet>> requiredFacets) { Set<Class<? extends ProvidedProjectFacet>> result = new HashSet<>(); Iterable<Class<? extends ProvidedProjectFacet>> providedFacetTypes = buildSystem.getProvidedFacetTypes(); if (requiredFacets != null && providedFacetTypes != null) { for (Class<? extends ProvidedProjectFacet> required : requiredFacets) { boolean found = false; for (Class<? extends ProvidedProjectFacet> provided : providedFacetTypes) { if (provided.isAssignableFrom(required)) found = true; } if (!found) result.add(required); } } return result; }
@Override public Iterable<ProjectProvider> call() throws Exception { List<ProjectProvider> result = new ArrayList<>(); for (ProjectProvider buildSystemType : buildSystems) { ProjectType projectType = type.getValue(); if (projectType != null) { if (projectType.isEnabled(uiContext) && isProjectTypeBuildable(projectType, buildSystemType)) result.add(buildSystemType); } else result.add(buildSystemType); } Collections.sort(result, (left, right) -> left.priority() - right.priority()); return result; } });
isBuildable(projectProvider, facetTypes), "The provided build system [" + projectProvider.getType() + "] cannot create a project that requires facets of the following types: " + getMissingProvidedProjectFacets(projectProvider, getRequiredProvidedProjectFacets(facetTypes))); Project result = projectProvider.createProject(target); if (result != null)
if (projectProvider.containsProject(target)) result = projectProvider.createProject(target);
@Override public boolean containsProject(Resource<?> target, ProjectProvider buildSystem) { Assert.notNull(target, "Target resource must not be null."); Assert.notNull(buildSystem, "Project build system must not be null."); boolean found = false; Resource<?> r = target; while (r != null && !found) { found = buildSystem.containsProject(r); r = r.getParent(); } return found; }
Class<? extends ProjectFacet> buildSystemFacet = buildSystemValue.resolveProjectFacet(facet); if (!project.hasFacet(buildSystemFacet))
@Override public boolean containsProject(Resource<?> bound, Resource<?> target, ProjectProvider buildSystem) { Assert.notNull(bound, "Boundary should not be null"); Assert.isTrue(bound.equals(target) || isParent(bound, target), "Target should be a child of bound"); boolean found = false; Resource<?> r = bound; while (r != null && !found) { found = buildSystem.containsProject(r); if (target.equals(r)) { break; } r = r.getParent(); } return found; }
ProjectProvider.class); buildSystem = factory.createSelectOne("buildSystem", ProjectProvider.class).setLabel("Build system") .setRequired(true).setItemLabelConverter((source) -> source.getType()); buildSystem.setValueChoices(new Callable<Iterable<ProjectProvider>>()
private boolean isProjectTypeBuildable(ProjectType type, ProjectProvider buildSystem) { boolean result = false; Iterable<Class<? extends ProvidedProjectFacet>> requiredFacets = getRequiredBuildSystemFacets(type); if (requiredFacets == null || !requiredFacets.iterator().hasNext()) { result = true; } else { for (Class<? extends ProvidedProjectFacet> required : requiredFacets) { result = false; for (Class<? extends ProvidedProjectFacet> provided : buildSystem.getProvidedFacetTypes()) { if (provided.isAssignableFrom(required)) result = true; } if (!result) break; } } return result; }