| /* |
| * 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$ |
| } |
| } |
| |
| } |