summaryrefslogtreecommitdiff
path: root/android/ultimate
diff options
context:
space:
mode:
authorGregory.Shrago <gregory.shrago@jetbrains.com>2013-12-12 23:30:19 +0400
committerGregory.Shrago <gregory.shrago@jetbrains.com>2013-12-16 19:50:56 +0400
commit5a03de28c4df5e730041b69b87bb97e516fc6b7d (patch)
tree0ad94d007cf2fb5f7d07d417558a931ad0d3a21f /android/ultimate
parent682f23f4a33c58f24a2d8beb13201da406922422 (diff)
downloadidea-5a03de28c4df5e730041b69b87bb97e516fc6b7d.tar.gz
DB ui cleanup & isModified fixes
Diffstat (limited to 'android/ultimate')
-rw-r--r--android/ultimate/src/org/jetbrains/android/database/AndroidDataSource.java21
-rw-r--r--android/ultimate/src/org/jetbrains/android/database/AndroidDataSourcePropertiesDialog.java92
2 files changed, 77 insertions, 36 deletions
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<String, List<String>> 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<String> dbList = myDatabaseMap.get(selectedPackage);
- myDataBaseComboBox.setModel(new DefaultComboBoxModel(
- dbList != null ? ArrayUtil.toStringArray(dbList) : ArrayUtil.EMPTY_STRING_ARRAY));
+ List<String> 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);
+ }
}