private List<String> getVersionsFor(DatabaseType type) { if (type == null) { return Collections.emptyList(); } else { return dependencyResolver .resolveVersions(DependencyQueryBuilder.create(type.getDriverCoordinate())) .stream().map(Coordinate::getVersion).collect(Collectors.toList()); } }
public static List<DatabaseType> getTypesWithDriverSet() { return Arrays.asList(DatabaseType.values()) .stream() .filter(DatabaseType::isDriverCoordinateSet) .collect(Collectors.toList()); } }
@Override public void initializeUI(UIBuilder builder) throws Exception { dependencyResolver = SimpleContainer.getServices(getClass().getClassLoader(), DependencyResolver.class).get(); InputComponentFactory factory = builder.getInputComponentFactory(); dbType = factory.createSelectOne("dbType", DatabaseType.class).setLabel("Database Type") .setDescription("The database driver to be added to this project").setRequired(true) .setNote(() -> { return (dbType.hasValue()) ? dbType.getValue().getDriverCoordinate().toString() : null; }) .setValueChoices(DatabaseType.getTypesWithDriverSet()); version = factory.createInput("version", String.class).setLabel("Driver Version") .setDescription("The JDBC driver version to be used") .setCompleter(new UICompleter<String>() { @Override public Iterable<String> getCompletionProposals(UIContext context, InputComponent<?, String> input, String value) { return Completers.fromValues(getVersionsFor(dbType.getValue())).getCompletionProposals(context, input, value); } }); scope = factory.createSelectOne("scope", String.class).setLabel("Dependency Scope") .setDescription("The scope this database driver dependency should use when added to this project") .setRequired(true) .setDefaultValue("runtime") .setValueChoices(Arrays.asList("compile", "provided", "runtime", "test")); builder.add(dbType).add(version).add(scope); }
@Override public void validate(UIValidationContext validator) { final DatabaseType database = dbType.getValue(); final DatabaseDriver driver = DatabaseDriver.fromProductName(database.name()); if (driver.equals(DatabaseDriver.UNKNOWN)) { // Spring Boot doesn't know about this DB validator.addValidationError(dbType, "Spring Boot doesn't know about DB '" + dbType.getName() + "'"); } if (isNotEmbeddedDB(database) && !databaseURL.hasValue() && !dataSourceName.hasValue()) { validator.addValidationError(dataSourceName, "Either DataSource name or database URL is required"); validator.addValidationError(databaseURL, "Either DataSource name or database URL is required"); } }
@Override public Result execute(UIExecutionContext context) throws Exception { DatabaseType chosenDbType = dbType.getValue(); String chosenScope = scope.getValue(); String chosenVersion = version.getValue(); if (chosenVersion == null) { List<String> versions = getVersionsFor(chosenDbType); if (!versions.isEmpty()) { chosenVersion = versions.get(versions.size() - 1); } } if (chosenVersion == null) { return Results.fail("No version specified or found for " + chosenDbType.getDriverCoordinate()); } Project project = getSelectedProject(context); DependencyBuilder dependency = DependencyBuilder.create() .setCoordinate(chosenDbType.getDriverCoordinate()) .setVersion(chosenVersion) .setScopeType(chosenScope); DependencyFacet dependencyFacet = project.getFacet(DependencyFacet.class); dependencyFacet.addDirectDependency(dependency); return Results.success("JDBC Driver Dependency " + dependency + " installed"); }
public boolean hasNonDefaultDatabase() { return !DatabaseType.DEFAULT.equals(getDatabase()); }
@Override public Result execute(final UIExecutionContext context) throws Exception { final UIContext uiContext = context.getUIContext(); applyUIValues(uiContext); // add driver dependency final Project project = helper.getProject(uiContext); final DatabaseType database = dbType.getValue(); final Coordinate driverCoordinate = database.getDriverCoordinate(); SpringBootHelper.addDependency(project, driverCoordinate.getGroupId(), driverCoordinate.getArtifactId()) .setScopeType("runtime"); SpringBootHelper.addSpringBootDependency(project, SpringBootFacet.SPRING_BOOT_STARTER_DATA_JPA_ARTIFACT) .setScopeType("runtime"); return Results.success("Spring Boot JPA successfully set up!"); }