/******************************************************************************* * Copyright (c) 2017 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.hibernate.ui.bot.test.factory; import java.util.List; import org.jboss.reddeer.eclipse.datatools.ui.DriverDefinition; import org.jboss.reddeer.eclipse.datatools.ui.DriverTemplate; import org.jboss.reddeer.eclipse.datatools.ui.preference.DriverDefinitionPreferencePage; import org.jboss.reddeer.eclipse.datatools.ui.wizard.DriverDefinitionPage; import org.jboss.reddeer.eclipse.datatools.ui.wizard.DriverDefinitionWizard; import org.jboss.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog; import org.jboss.reddeer.requirements.db.DatabaseConfiguration; import org.jboss.reddeer.swt.api.Shell; import org.jboss.reddeer.swt.api.TableItem; import org.jboss.reddeer.swt.condition.ShellIsAvailable; import org.jboss.reddeer.swt.impl.button.PushButton; import org.jboss.reddeer.swt.impl.button.YesButton; import org.jboss.reddeer.swt.impl.shell.DefaultShell; import org.jboss.reddeer.swt.impl.table.DefaultTable; import org.jboss.reddeer.swt.impl.table.DefaultTableItem; import org.jboss.reddeer.common.wait.WaitWhile; /** * Driver Definition Factory helps to create driver definition based on * database configuration * * @author Jiri Peterka * */ public class DriverDefinitionFactory { /** * Creates Driver definition based on DatabaseRequirement configuration * @param conf given database requirement configuration */ public static void createDatabaseDriverDefinition(DatabaseConfiguration cfg) { DriverTemplate dt = getDriverTemplate(cfg); DriverDefinition dd = getDriverDefinition(cfg); // Driver Definition creation WorkbenchPreferenceDialog preferenceDialog = new WorkbenchPreferenceDialog(); preferenceDialog.open(); DriverDefinitionPreferencePage preferencePage = new DriverDefinitionPreferencePage(); preferenceDialog.select(preferencePage); //TODO implement this in preference page //TODO dont create new driver def if it already exists List<TableItem> items = new DefaultTable().getItems(); for (int i = 0; i < items.size(); i++) { new DefaultTableItem(0).select(); new PushButton("Remove").click(); Shell confirm = new DefaultShell("Confirm Driver Removal"); new YesButton().click(); new WaitWhile(new ShellIsAvailable(confirm)); new DefaultShell("Preferences"); } DriverDefinitionWizard ddw = preferencePage.addDriverDefinition(); DriverDefinitionPage page = new DriverDefinitionPage(); page.selectDriverTemplate(dt.getType(),dt.getVersion()); page.setName(cfg.getDriverName()); page.addDriverLibrary(dd.getDriverLibrary()); page.setDriverClass(cfg.getDriverClass()); ddw.finish(); preferenceDialog.ok(); } /** * Returns Driver Template instance based on configuration * @param cfg given configuration * @return driver template */ public static DriverTemplate getDriverTemplate(DatabaseConfiguration cfg) { DriverTemplate dt = new DriverTemplate(cfg.getDriverType(),cfg.getDriverTypeVersion()); return dt; } /** * Returns Driver Definition instance based on configuration * @param cfg given configuration * @return driver definition */ public static DriverDefinition getDriverDefinition(DatabaseConfiguration cfg) { // Driver definition DriverDefinition dd = new DriverDefinition(); dd.setDriverClass(cfg.getDriverClass()); dd.setDriverLibrary(cfg.getDriverPath()); dd.setDriverName(cfg.getDriverName()); dd.setDriverTemplate(getDriverTemplate(cfg)); return dd; } }