/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.motorolamobility.studio.android.db.core.ui.wizards.createdb;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveRegistry;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import com.motorolamobility.studio.android.db.core.DbCoreActivator;
import com.motorolamobility.studio.android.db.core.i18n.DbCoreNLS;
import com.motorolamobility.studio.android.db.core.model.TableModel;
public class CreateDatabaseWizard extends Wizard
{
private static final String WIZBAN_ICON = "icons/wizban/create_database_ban.png"; //$NON-NLS-1$
//it is an old plugin because of backward compatibility
private static final String DB_PERSPECTIVE = "com.motorola.studio.android.db.perspective"; //$NON-NLS-1$
private static final String SWITCH_MOTODEV_DATABASE_PERSPECTIVE =
"switch.perspective.to.motodevstudio.database"; //$NON-NLS-1$
private final List<String> alreadyAvailableDbs;
private CreateDatabaseWizardPage createDatabaseWizardPage;
private String dbName;
private List<TableModel> tables;
public CreateDatabaseWizard(final List<String> alreadyAvailableDbs)
{
this.alreadyAvailableDbs = alreadyAvailableDbs;
setWindowTitle(DbCoreNLS.CreateDatabaseWizardPage_UI_PageTitle);
setDefaultPageImageDescriptor(DbCoreActivator.imageDescriptorFromPlugin(
DbCoreActivator.PLUGIN_ID, WIZBAN_ICON));
setNeedsProgressMonitor(true);
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
@Override
public void addPages()
{
createDatabaseWizardPage = new CreateDatabaseWizardPage(alreadyAvailableDbs);
addPage(createDatabaseWizardPage);
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish()
{
dbName = createDatabaseWizardPage.getDatabaseName();
tables = createDatabaseWizardPage.getTables();
boolean canProceed = (dbName != null) && !"".equals(dbName); //$NON-NLS-1$
if (canProceed)
{
changePerspective();
}
return canProceed; //$NON-NLS-1$
}
/**
* @return the dbName
*/
public String getDbName()
{
return dbName;
}
/**
* @return the tables
*/
public List<TableModel> getTables()
{
return tables;
}
private boolean confirmPerspectiveSwitch(IWorkbenchWindow window,
IPerspectiveDescriptor perspective)
{
IPreferenceStore store = DbCoreActivator.getDefault().getPreferenceStore();
String preference = store.getString(SWITCH_MOTODEV_DATABASE_PERSPECTIVE);
if (preference.equals("")) //$NON-NLS-1$
{
store.setValue(SWITCH_MOTODEV_DATABASE_PERSPECTIVE, MessageDialogWithToggle.PROMPT);
preference = MessageDialogWithToggle.PROMPT;
}
boolean result;
if (MessageDialogWithToggle.ALWAYS.equals(preference))
{
result = true;
}
else if (MessageDialogWithToggle.NEVER.equals(preference))
{
result = false;
}
else
{
MessageDialogWithToggle dialog =
MessageDialogWithToggle.openYesNoQuestion(window.getShell(),
DbCoreNLS.UI_CreateDatabaseWizard_ChangePerspectiveTitle,
DbCoreNLS.UI_CreateDatabaseWizard_ChangePerspectiveQuestion, null,
false, store, SWITCH_MOTODEV_DATABASE_PERSPECTIVE);
int dialogResult = dialog.getReturnCode();
result = dialogResult == IDialogConstants.YES_ID;
}
return result;
}
/**
* Changes the perspective
*
*/
private void changePerspective()
{
IPerspectiveRegistry reg = PlatformUI.getWorkbench().getPerspectiveRegistry();
IPerspectiveDescriptor perspective = reg.findPerspectiveWithId(DB_PERSPECTIVE);
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page = window.getActivePage();
if (page != null)
{
IPerspectiveDescriptor currentPersp = page.getPerspective();
if ((currentPersp != null) && !DB_PERSPECTIVE.contains(currentPersp.getId()))
{
boolean changePerspective = confirmPerspectiveSwitch(window, perspective);
if (changePerspective)
{
page.setPerspective(perspective);
}
}
}
}
}