Skip to content

Commit

Permalink
Select the first dbms-type if the suggested one doesn't exist
Browse files Browse the repository at this point in the history
This might happen if you switch from one database to another.
  • Loading branch information
Emil Forslund committed Mar 29, 2016
1 parent 66f9227 commit 0d7f451
Showing 1 changed file with 33 additions and 43 deletions.
Expand Up @@ -44,10 +44,13 @@
import com.speedment.internal.ui.config.DbmsProperty;
import com.speedment.internal.ui.util.Loader;
import com.speedment.internal.util.Settings;
import com.speedment.internal.util.document.DocumentDbUtil;
import static com.speedment.internal.util.document.DocumentDbUtil.dbmsTypeOf;

import de.jensd.fx.glyphs.GlyphsDude;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toCollection;

/**
*
Expand Down Expand Up @@ -89,14 +92,16 @@ public void initialize(URL location, ResourceBundle resources) {

fieldType.setItems(
getDbmsTypes()
.map(DbmsType::getName)
.collect(Collectors.toCollection(FXCollections::observableArrayList))
.collect(toCollection(FXCollections::observableArrayList))
);

fieldType.getSelectionModel().selectedItemProperty().addListener((observable, old, next) -> {
if (!next.isEmpty()) {
final DbmsType item = findDbmsType(next)
.orElseThrow(() -> dbmsTypeNotInstalledException(next));
final DbmsProperty dbms = session.getProject().mutator().addNewDbms();

fieldType.getSelectionModel().selectedItemProperty().addListener((observable, old, typeName) -> {
dbms.typeNameProperty().setValue(typeName);

if (!typeName.isEmpty()) {
final DbmsType item = dbmsTypeOf(session.getSpeedment(), dbms);

if (fieldHost.textProperty().getValue().isEmpty()) {
fieldHost.textProperty().setValue(DEFAULT_HOST);
Expand All @@ -115,8 +120,6 @@ public void initialize(URL location, ResourceBundle resources) {
}
});

final DbmsProperty dbms = session.getProject().mutator().addNewDbms();

Bindings.bindBidirectional(fieldPort.textProperty(), dbms.portProperty(), new StringConverter<Number>() {
@Override
public String toString(Number object) {
Expand All @@ -131,26 +134,31 @@ public Number fromString(String string) {
}
});

fieldSchema.setText(Settings.inst().get("last_known_schema", ""));
fieldPort.setText(Settings.inst().get("last_known_port", ""));
fieldSchema.setText(Settings.inst().get("last_known_schema"));
fieldPort.setText(Settings.inst().get("last_known_port"));
fieldHost.setText(Settings.inst().get("last_known_host", DEFAULT_HOST));
fieldUser.setText(Settings.inst().get("last_known_user", DEFAULT_USER));
fieldName.setText(Settings.inst().get("last_known_name", DEFAULT_NAME));

try {
fieldType.getSelectionModel().select(
Settings.inst().get(
"last_known_dbtype",
getDbmsTypes()
.map(DbmsType::getName)
.findFirst()
.orElseThrow(() -> new SpeedmentException(
"Could not find any installed JDBC drivers. Make sure to" +
"include at least one JDBC driver as a dependency in the " +
"projects pom.xml-file."
))
)
// Find the prefered dbms-type
final String prefered = Settings.inst().get(
"last_known_dbtype",
getDbmsTypes()
.findFirst()
.orElseThrow(() -> new SpeedmentException(
"Could not find any installed JDBC drivers. Make sure to" +
"include at least one JDBC driver as a dependency in the " +
"projects pom.xml-file."
))
);

// If the prefered dbms-type isn't loaded, select the first one.
if (getDbmsTypes().anyMatch(prefered::equals)) {
fieldType.getSelectionModel().select(prefered);
} else {
fieldType.getSelectionModel().select(getDbmsTypes().findFirst().get());
}
} catch (final SpeedmentException ex) {
session.showError("Couldn't find any installed JDBC drivers",
ex.getMessage(), ex
Expand All @@ -159,10 +167,6 @@ public Number fromString(String string) {
throw ex;
}

fieldType.getSelectionModel().selectedItemProperty().addListener((ob, o, n) -> {
dbms.typeNameProperty().setValue(n);
});

dbms.ipAddressProperty().bindBidirectional(fieldHost.textProperty());
dbms.nameProperty().bindBidirectional(fieldName.textProperty());
dbms.usernameProperty().bindBidirectional(fieldUser.textProperty());
Expand Down Expand Up @@ -210,24 +214,10 @@ public static void createAndShow(UISession session) {
Loader.createAndShow(session, "Connect", ConnectController::new);
}

private Stream<DbmsType> getDbmsTypes() {
return session.getSpeedment()
.getDbmsHandlerComponent()
.supportedDbmsTypes();
}

private Optional<DbmsType> findDbmsType(String dbmsTypeName) {
requireNonNull(dbmsTypeName);
private Stream<String> getDbmsTypes() {
return session.getSpeedment()
.getDbmsHandlerComponent()
.findByName(dbmsTypeName);
}

private static SpeedmentException dbmsTypeNotInstalledException(String dbmsTypeName) {
requireNonNull(dbmsTypeName);
return new SpeedmentException(
"Required " + DbmsType.class.getSimpleName() +
" '" + dbmsTypeName + "' is not installed correctly."
);
.supportedDbmsTypes()
.map(DbmsType::getName);
}
}

0 comments on commit 0d7f451

Please sign in to comment.