blob: 0b1ff0d07e5cebb08a0d986d30d3f58e6d3da310 [file] [log] [blame]
/*
* 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.devices.ui.preferences;
import java.io.File;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import com.motorolamobility.studio.android.db.devices.DbDevicesPlugin;
import com.motorolamobility.studio.android.db.devices.i18n.DbDevicesNLS;
public class DbPreferencePage extends PreferencePage implements IWorkbenchPreferencePage
{
public static final String LEGACY_PLUGIN_ID = "com.motorola.studio.android.db"; //$NON-NLS-1$
public static final String LEGACY_DB_PATH_PREFERENCE = LEGACY_PLUGIN_ID + ".dbstudiopath"; //$NON-NLS-1$
private DirectoryFieldEditor directoryEditor;
private static final String PREFERENCE_PAGE_HELP = DbDevicesPlugin.PLUGIN_ID
+ ".preference-database"; //$NON-NLS-1$
public DbPreferencePage()
{
setPreferenceStore(DbDevicesPlugin.getDefault().getPreferenceStore());
}
@Override
protected Control createContents(Composite parent)
{
Composite main = new Composite(parent, SWT.FILL);
main.setLayoutData(new GridData(GridData.FILL_BOTH));
main.setLayout(new GridLayout(1, false));
directoryEditor =
new DirectoryFieldEditor(DbDevicesPlugin.DB_TEMP_PATH_PREFERENCE,
DbDevicesNLS.UI_PreferencePage_PathLabel, main);
directoryEditor.getTextControl(main).addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
validateDirectory();
}
});
directoryEditor.setStringValue(getPreferenceStore().getString(
DbDevicesPlugin.DB_TEMP_PATH_PREFERENCE));
PlatformUI.getWorkbench().getHelpSystem().setHelp(main, PREFERENCE_PAGE_HELP);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, PREFERENCE_PAGE_HELP);
return main;
}
public boolean validateDirectory()
{
boolean valid = false;
if (directoryEditor.getStringValue().trim().length() == 0)
{
valid = true;
}
else
{
try
{
File f = new File(directoryEditor.getStringValue());
if (f.isDirectory())
{
File f2 = new File(directoryEditor.getStringValue() + Path.SEPARATOR + "test"); //$NON-NLS-1$
f2.createNewFile();
f2.delete();
valid = true;
}
}
catch (Exception e)
{
valid = false;
}
}
if (!valid)
{
setErrorMessage(DbDevicesNLS.ERR_DbPrefPage_InvalidDir);
setValid(false);
return false;
}
else
{
setErrorMessage(null);
setValid(true);
return true;
}
}
@Override
protected void performDefaults()
{
getPreferenceStore().setToDefault(DbDevicesPlugin.DB_TEMP_PATH_PREFERENCE);
directoryEditor.setStringValue(getPreferenceStore().getString(
DbDevicesPlugin.DB_TEMP_PATH_PREFERENCE));
}
@Override
public boolean performOk()
{
boolean canReturn = true;
if (directoryEditor.getStringValue().trim().length() == 0)
{
performDefaults();
}
else
{
if (!validateDirectory())
{
canReturn = false;
}
else
{
getPreferenceStore().setValue(DbDevicesPlugin.DB_TEMP_PATH_PREFERENCE,
directoryEditor.getStringValue());
canReturn = super.performOk();
}
}
return canReturn;
}
public void init(IWorkbench workbench)
{
//do nothing
}
public static void restoreBackWardPref(IPreferenceStore currentPrefStore)
{
IPreferenceStore preferenceStore =
new ScopedPreferenceStore(InstanceScope.INSTANCE, LEGACY_PLUGIN_ID);
String backwardDbTempPath = preferenceStore.getString(LEGACY_DB_PATH_PREFERENCE);
if (!backwardDbTempPath.isEmpty())
{
currentPrefStore.setValue(DbDevicesPlugin.DB_TEMP_PATH_PREFERENCE, backwardDbTempPath);
preferenceStore.setValue(LEGACY_DB_PATH_PREFERENCE, ""); //$NON-NLS-1$
}
}
}