From 5a03de28c4df5e730041b69b87bb97e516fc6b7d Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 12 Dec 2013 23:30:19 +0400 Subject: DB ui cleanup & isModified fixes --- .../android/database/AndroidDataSource.java | 21 +++++ .../AndroidDataSourcePropertiesDialog.java | 92 +++++++++++++--------- 2 files changed, 77 insertions(+), 36 deletions(-) (limited to 'android/ultimate') diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java index 236cf65ee60..91d1da6799a 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java @@ -2,9 +2,11 @@ package org.jetbrains.android.database; import com.intellij.javaee.module.view.dataSource.LocalDataSource; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.ModificationTracker; import com.intellij.openapi.util.io.FileUtil; import com.intellij.persistence.database.DataSourceInfo; +import com.intellij.persistence.database.DataSourceTemplate; import com.intellij.util.ui.classpath.SimpleClasspathElement; import com.intellij.util.ui.classpath.SimpleClasspathElementFactory; import com.intellij.util.xmlb.annotations.Tag; @@ -139,6 +141,25 @@ class AndroidDataSource extends LocalDataSource implements DataSourceInfo, Modif return AndroidIcons.Android; } + @Override + public DataSourceTemplate getTemplate() { + return AndroidDbManager.DEFAULT_TEMPLATE; + } + + @Override + public boolean equalConfiguration(@NotNull LocalDataSource o) { + if (!(o instanceof AndroidDataSource)) return super.equalConfiguration(o); + + State s = ((AndroidDataSource)o).getState(); + if (!Comparing.equal(myState.myDeviceId, s.myDeviceId)) return false; + if (!Comparing.equal(myState.myPackageName, s.myPackageName)) return false; + if (!Comparing.equal(myState.myDatabaseName, s.myDatabaseName)) return false; + if (!Comparing.equal(myState.myExternal, s.myExternal)) return false; + if (!Comparing.equal(myState.myExternal, s.myExternal)) return false; + + return true; + } + @Tag("data-source") public static class State { private String myName = ""; diff --git a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java index e1f9756956e..dc7f082a4f0 100644 --- a/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java +++ b/android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java @@ -12,6 +12,7 @@ import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.persistence.database.DbImplUtil; import com.intellij.ui.FieldPanel; import com.intellij.ui.IdeBorderFactory; @@ -59,16 +60,22 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu private Map> myDatabaseMap; private final AndroidDebugBridge.IDeviceChangeListener myDeviceListener; + private final AndroidDataSource myTempDataSource; + protected AndroidDataSourcePropertiesDialog(@NotNull AndroidDbManager manager, @NotNull Project project, @NotNull AndroidDataSource dataSource) { super(manager, dataSource, project); + myTempDataSource = dataSource.copy(); + myConfigurationPanel.setBorder(IdeBorderFactory.createEmptyBorder(10, 0, 0, 0)); myNameField.setLabelText("Name:"); myNameField.createComponent(); - - final AndroidDataSource.State state = dataSource.getState(); - myInternalStorageRadioButton.setSelected(!state.isExternal()); - myExternalStorageRadioButton.setSelected(state.isExternal()); + myNameField.setChangeListener(new Runnable() { + @Override + public void run() { + fireStateChanged(); + } + }); myDeviceComboBox.setRenderer(new DeviceComboBoxRenderer() { @Override @@ -119,24 +126,17 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu myPackageNameComboBox.addActionListener(l); updateDbCombo(); - final String name = dataSource.getName(); - myNameField.setText(name != null ? name : ""); - - final String packageName = state.getPackageName(); - myPackageNameComboBox.getEditor().setItem(packageName != null ? packageName : ""); - final String dbName = state.getDatabaseName(); - myDataBaseComboBox.getEditor().setItem(dbName != null ? dbName : ""); myDeviceComboBox.setPreferredSize(new Dimension(300, myDeviceComboBox.getPreferredSize().height)); myExternalStorageRadioButton.addActionListener(l); myInternalStorageRadioButton.addActionListener(l); + } - setChangeListener(myNameField); - setChangeListener(myPackageNameComboBox); - setChangeListener(myDataBaseComboBox); - setChangeListener(myDeviceComboBox); - setChangeListener(myExternalStorageRadioButton); - setChangeListener(myInternalStorageRadioButton); + @NotNull + @Override + public AndroidDataSource getTempDataSource() { + saveData(myTempDataSource); + return myTempDataSource; } private void addDeviceToComboBoxIfNeeded(@NotNull final IDevice device) { @@ -214,6 +214,7 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu } private void updateDataBases() { + if (!myPanel.isShowing()) return; final Object selectedItem = myDeviceComboBox.getSelectedItem(); IDevice selectedDevice = selectedItem instanceof IDevice ? (IDevice)selectedItem : null; @@ -231,12 +232,12 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu } private void updateDbCombo() { - final String selectedPackage = getSelectedPackage(); + if (!myPanel.isShowing()) return; // comboboxes do weird stuff when loosing focus + String selectedPackage = getSelectedPackage(); if (myInternalStorageRadioButton.isSelected()) { - final List dbList = myDatabaseMap.get(selectedPackage); - myDataBaseComboBox.setModel(new DefaultComboBoxModel( - dbList != null ? ArrayUtil.toStringArray(dbList) : ArrayUtil.EMPTY_STRING_ARRAY)); + List dbList = myDatabaseMap.get(selectedPackage); + myDataBaseComboBox.setModel(new DefaultComboBoxModel(ArrayUtil.toStringArray(dbList))); } else { myDataBaseComboBox.setModel(new DefaultComboBoxModel(DEFAULT_EXTERNAL_DB_PATTERNS)); @@ -317,13 +318,12 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu return result; } - @NotNull private String getSelectedDeviceId() { - final Object item = myDeviceComboBox.getSelectedItem(); + Object item = myDeviceComboBox.getSelectedItem(); + if (item == null) return null; // "no devices" case should not throw AE + + if (item instanceof String) return (String)item; - if (item instanceof String) { - return (String)item; - } assert item instanceof IDevice; final String deviceId = AndroidDbUtil.getDeviceId((IDevice)item); return deviceId != null ? deviceId : ""; @@ -347,28 +347,40 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu return myPanel; } - @Override - public void apply() { - myDataSource.setName(getNameValue()); - final AndroidDataSource.State state = myDataSource.getState(); + public void saveData(@NotNull AndroidDataSource dataSource) { + dataSource.setName(getNameValue()); + AndroidDataSource.State state = dataSource.getState(); state.setDeviceId(getSelectedDeviceId()); state.setPackageName(getSelectedPackage()); state.setDatabaseName(getSelectedDatabase()); state.setExternal(myExternalStorageRadioButton.isSelected()); - myDataSource.resetUrl(); + dataSource.resetUrl(); + } - AndroidSynchronizeHandler.doSynchronize(myProject, Collections.singletonList(myDataSource)); + @Override + public void apply() { + saveData(myDataSource); - setModified(false); + boolean canConnect = StringUtil.isNotEmpty(myDataSource.getState().getDeviceId()); + if (canConnect) { + AndroidSynchronizeHandler.doSynchronize(myProject, Collections.singletonList(myDataSource)); + } - if (!isDataSourcePersisted()) { + if (isNewDataSource()) { myManager.processAddOrRemove(myDataSource, true); } } @Override public void reset() { - setModified(false); + AndroidDataSource.State state = myDataSource.getState(); + myNameField.setText(StringUtil.notNullize(myDataSource.getName())); + + myInternalStorageRadioButton.setSelected(!state.isExternal()); + myExternalStorageRadioButton.setSelected(state.isExternal()); + + myPackageNameComboBox.getEditor().setItem(StringUtil.notNullize(state.getPackageName())); + myDataBaseComboBox.getEditor().setItem(StringUtil.notNullize(state.getDatabaseName())); } @Override @@ -395,7 +407,7 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu @Nullable @Override public String getHelpTopic() { - return null; + return null; // todo } private void checkDriverPresence() { @@ -421,4 +433,12 @@ public class AndroidDataSourcePropertiesDialog extends AbstractDataSourceConfigu myEditController.showErrorNotification(null); } } + + public boolean isModified() { + if (isNewDataSource()) return true; + AndroidDataSource tempDataSource = getTempDataSource(); + + if (!StringUtil.equals(tempDataSource.getName(), myDataSource.getName())) return true; + return !tempDataSource.equalConfiguration(myDataSource); + } } -- cgit v1.2.3