Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortle2008-07-22 16:54:35 +0000
committertle2008-07-22 16:54:35 +0000
commitb6440a670c53d0e42951d99d4549ec85bda9cfaf (patch)
tree446a40136ae713ce16628d4736b1eaa5a7e177fe /jpa/plugins
parent2f87e07c31c6edc79ee1789c5adefa71ad2705d4 (diff)
downloadwebtools.dali-b6440a670c53d0e42951d99d4549ec85bda9cfaf.tar.gz
webtools.dali-b6440a670c53d0e42951d99d4549ec85bda9cfaf.tar.xz
webtools.dali-b6440a670c53d0e42951d99d4549ec85bda9cfaf.zip
240340 - Target Database property doesn't allow to set a custom platform class
Diffstat (limited to 'jpa/plugins')
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/EclipseLinkOptions.java71
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/Options.java11
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties2
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java2
-rw-r--r--jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/options/TargetDatabaseComposite.java172
5 files changed, 206 insertions, 52 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/EclipseLinkOptions.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/EclipseLinkOptions.java
index 1dd91de219..d8b8aedda8 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/EclipseLinkOptions.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/EclipseLinkOptions.java
@@ -27,7 +27,7 @@ public class EclipseLinkOptions extends EclipseLinkPersistenceUnitProperties
private String sessionName;
private String sessionsXml;
private Boolean includeDescriptorQueries;
- private TargetDatabase targetDatabase;
+ private String targetDatabase; // storing EclipseLinkStringValue since value can be TargetDatabase or custom class
private String targetServer; // storing EclipseLinkStringValue since value can be TargetServer or custom class
private String eventListener;
@@ -50,13 +50,26 @@ public class EclipseLinkOptions extends EclipseLinkPersistenceUnitProperties
this.getStringValue(ECLIPSELINK_SESSIONS_XML);
this.includeDescriptorQueries =
this.getBooleanValue(ECLIPSELINK_SESSION_INCLUDE_DESCRIPTOR_QUERIES);
- this.targetDatabase =
- this.getEnumValue(ECLIPSELINK_TARGET_DATABASE, TargetDatabase.values());
+ this.targetDatabase = this.getTargetDatabaseFromPersistenceXml();
this.targetServer = this.getTargetServerFromPersistenceXml();
this.eventListener =
this.getStringValue(ECLIPSELINK_SESSION_EVENT_LISTENER);
}
+ protected String getTargetDatabaseFromPersistenceXml() {
+
+ TargetDatabase standardTargetDatabase = this.getEnumValue(ECLIPSELINK_TARGET_DATABASE, TargetDatabase.values());
+ if( ! this.persistenceUnit().containsProperty(ECLIPSELINK_TARGET_DATABASE)) {
+ return(null);
+ }
+ else if(standardTargetDatabase == null) {
+ return(this.getStringValue(ECLIPSELINK_TARGET_DATABASE)); // custom targetDatabase
+ }
+ else {
+ return(getEclipseLinkStringValueOf(standardTargetDatabase));
+ }
+ }
+
protected String getTargetServerFromPersistenceXml() {
TargetServer standardTargetServer = this.getEnumValue(ECLIPSELINK_TARGET_SERVER, TargetServer.values());
@@ -197,26 +210,64 @@ public class EclipseLinkOptions extends EclipseLinkPersistenceUnitProperties
}
// ********** TargetDatabase **********
- public TargetDatabase getTargetDatabase() {
+ /**
+ * Returns TargetDatabase or custom targetDatabase class.
+ *
+ * @return EclipseLink string value for TargetDatabase enum or custom targetDatabase class
+ */
+ public String getTargetDatabase() {
return this.targetDatabase;
}
-
+
+ /**
+ * Sets EclipseLink targetDatabase.
+ *
+ * @param newTargetDatabase - TargetDatabase
+ */
public void setTargetDatabase(TargetDatabase newTargetDatabase) {
- TargetDatabase old = this.targetDatabase;
+ if( newTargetDatabase == null) {
+ this.setTargetDatabase_((String) null);
+ return;
+ }
+ this.setTargetDatabase_(getEclipseLinkStringValueOf(newTargetDatabase));
+ }
+
+ /**
+ * Sets EclipseLink targetDatabase or custom targetDatabase.
+ *
+ * @param newTargetDatabase -
+ * Can be a EclipseLink TargetDatabase literal or
+ * a fully qualified class name of a custom targetDatabase.
+ */
+ public void setTargetDatabase(String newTargetDatabase) {
+ if( newTargetDatabase == null) {
+ this.setTargetDatabase_((String) null);
+ return;
+ }
+ TargetDatabase customTargetDatabase = TargetDatabase.getTargetDatabaseFor(newTargetDatabase);
+ if(customTargetDatabase == null) { // custom TargetDatabase class
+ this.setTargetDatabase_(newTargetDatabase);
+ }
+ else {
+ this.setTargetDatabase(customTargetDatabase);
+ }
+ }
+
+ private void setTargetDatabase_(String newTargetDatabase) {
+ String old = this.targetDatabase;
this.targetDatabase = newTargetDatabase;
this.putProperty(TARGET_DATABASE_PROPERTY, newTargetDatabase);
this.firePropertyChanged(TARGET_DATABASE_PROPERTY, old, newTargetDatabase);
}
private void targetDatabaseChanged(PropertyChangeEvent event) {
- String stringValue = (event.getNewValue() == null) ? null : ((Property) event.getNewValue()).getValue();
- TargetDatabase newValue = getEnumValueOf(stringValue, TargetDatabase.values());
- TargetDatabase old = this.targetDatabase;
+ String newValue = (event.getNewValue() == null) ? null : ((Property) event.getNewValue()).getValue();
+ String old = this.targetDatabase;
this.targetDatabase = newValue;
this.firePropertyChanged(event.getAspectName(), old, newValue);
}
- public TargetDatabase getDefaultTargetDatabase() {
+ public String getDefaultTargetDatabase() {
return DEFAULT_TARGET_DATABASE;
}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/Options.java b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/Options.java
index 16e469ee44..5ce81f2a08 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/Options.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.core/src/org/eclipse/jpt/eclipselink/core/internal/context/options/Options.java
@@ -41,13 +41,15 @@ public interface Options extends PersistenceUnitProperties
static final String ECLIPSELINK_SESSION_INCLUDE_DESCRIPTOR_QUERIES = "eclipselink.session.include.descriptor.queries";
static final Boolean DEFAULT_SESSION_INCLUDE_DESCRIPTOR_QUERIES = Boolean.TRUE;
- TargetDatabase getDefaultTargetDatabase();
- TargetDatabase getTargetDatabase();
- void setTargetDatabase(TargetDatabase newTargetDatabase); // put
+ String getDefaultTargetDatabase();
+ String getTargetDatabase();
+ void setTargetDatabase(String newTargetDatabase);
+ void setTargetDatabase(TargetDatabase newTargetDatabase);
static final String TARGET_DATABASE_PROPERTY = "targetDatabaseProperty";
// EclipseLink key string
static final String ECLIPSELINK_TARGET_DATABASE = "eclipselink.target-database";
- static final TargetDatabase DEFAULT_TARGET_DATABASE = TargetDatabase.auto;
+ static final String DEFAULT_TARGET_DATABASE =
+ EclipseLinkPersistenceUnitProperties.getEclipseLinkStringValueOf(TargetDatabase.auto);
String getDefaultTargetServer();
String getTargetServer();
@@ -66,6 +68,5 @@ public interface Options extends PersistenceUnitProperties
// EclipseLink key string
static final String ECLIPSELINK_SESSION_EVENT_LISTENER = "eclipselink.session-event-listener";
static final String DEFAULT_SESSION_EVENT_LISTENER = null; // no default
-
}
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties
index 0f0d200834..0d972cff18 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/property_files/eclipselink_ui.properties
@@ -227,7 +227,7 @@ TargetDatabaseComposite_derby = Derby
TargetDatabaseComposite_hsql = HSQL
TargetDatabaseComposite_informix = Informix
TargetDatabaseComposite_javadb = JavaDB
-TargetDatabaseComposite_mysql4 = MySQL4
+TargetDatabaseComposite_mysqlplatform = MySQLPlatform
TargetDatabaseComposite_oracle = Oracle
TargetDatabaseComposite_pointbase = PointBase
TargetDatabaseComposite_postgresql = PostgreSQL
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java
index 5db3189283..0b43688205 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/EclipseLinkUiMessages.java
@@ -249,7 +249,7 @@ public class EclipseLinkUiMessages extends NLS
public static String TargetDatabaseComposite_hsql;
public static String TargetDatabaseComposite_informix;
public static String TargetDatabaseComposite_javadb;
- public static String TargetDatabaseComposite_mysql4;
+ public static String TargetDatabaseComposite_mysqlplatform;
public static String TargetDatabaseComposite_oracle;
public static String TargetDatabaseComposite_pointbase;
public static String TargetDatabaseComposite_postgresql;
diff --git a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/options/TargetDatabaseComposite.java b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/options/TargetDatabaseComposite.java
index 2c346c9a4f..3a0bd59e11 100644
--- a/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/options/TargetDatabaseComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.eclipselink.ui/src/org/eclipse/jpt/eclipselink/ui/internal/options/TargetDatabaseComposite.java
@@ -9,77 +9,179 @@
*******************************************************************************/
package org.eclipse.jpt.eclipselink.ui.internal.options;
-import java.util.Collection;
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
import org.eclipse.jpt.eclipselink.core.internal.context.options.Options;
import org.eclipse.jpt.eclipselink.core.internal.context.options.TargetDatabase;
import org.eclipse.jpt.eclipselink.ui.internal.EclipseLinkUiMessages;
-import org.eclipse.jpt.ui.internal.widgets.AbstractFormPane;
-import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
+import org.eclipse.jpt.ui.internal.util.SWTUtil;
+import org.eclipse.jpt.ui.internal.widgets.AbstractPane;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.StringConverter;
+import org.eclipse.jpt.utility.internal.iterators.TransformationIterator;
+import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
+import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
+import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
+import org.eclipse.jpt.utility.internal.model.value.SimpleCollectionValueModel;
+import org.eclipse.jpt.utility.internal.model.value.SortedListValueModelAdapter;
+import org.eclipse.jpt.utility.model.value.CollectionValueModel;
+import org.eclipse.jpt.utility.model.value.ListValueModel;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Composite;
/**
* TargetDatabaseComposite
*/
-public class TargetDatabaseComposite extends AbstractFormPane<Options>
+public class TargetDatabaseComposite extends AbstractPane<Options>
{
/**
* Creates a new <code>TargetDatabaseComposite</code>.
- *
- * @param parentController
- * The parent container of this one
- * @param parent
- * The parent container
+ *
+ * @param parentPane The parent container of this one
+ * @param parent The parent container
*/
public TargetDatabaseComposite(
- AbstractFormPane<? extends Options> parentComposite,
- Composite parent) {
-
- super(parentComposite, parent);
+ AbstractPane<? extends Options> parentPane,
+ Composite parent) {
+
+ super(parentPane, parent);
}
- private EnumFormComboViewer<Options, TargetDatabase> buildTargetDatabaseCombo(Composite container) {
- return new EnumFormComboViewer<Options, TargetDatabase>(this, container) {
+ private PropertyValueModel<String> buildDefaultTargetDatabaseHolder() {
+ return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.DEFAULT_TARGET_DATABASE) {
@Override
- protected void addPropertyNames(Collection<String> propertyNames) {
- super.addPropertyNames(propertyNames);
- propertyNames.add(Options.TARGET_DATABASE_PROPERTY);
+ protected String buildValue_() {
+ return TargetDatabaseComposite.this.defaultValue(subject);
}
+ };
+ }
- @Override
- protected TargetDatabase[] choices() {
- return TargetDatabase.values();
+ private ListValueModel<String> buildDefaultTargetDatabaseListHolder() {
+ return new PropertyListValueModelAdapter<String>(
+ this.buildDefaultTargetDatabaseHolder()
+ );
+ }
+
+ private String buildDisplayString(String targetDatabaseName) {
+
+ return SWTUtil.buildDisplayString(
+ EclipseLinkUiMessages.class,
+ this.getClass(),
+ TargetDatabase.valueOf(targetDatabaseName));
+ }
+
+ private Comparator<String> buildTargetDatabaseComparator() {
+ return new Comparator<String>() {
+ public int compare(String targetDatabase1, String targetDatabase2) {
+ targetDatabase1 = buildDisplayString(targetDatabase1);
+ targetDatabase2 = buildDisplayString(targetDatabase2);
+ return Collator.getInstance().compare(targetDatabase1, targetDatabase2);
}
+ };
+ }
- @Override
- protected TargetDatabase defaultValue() {
- return this.subject().getDefaultTargetDatabase();
+ private StringConverter<String> buildTargetDatabaseConverter() {
+ return new StringConverter<String>() {
+ public String convertToString(String value) {
+ try {
+ TargetDatabase.valueOf(value);
+ value = buildDisplayString(value);
+ }
+ catch (Exception e) {
+ // Ignore since the value is not a TargetDatabase
+ }
+ return value;
}
+ };
+ }
+ private WritablePropertyValueModel<String> buildTargetDatabaseHolder() {
+ return new PropertyAspectAdapter<Options, String>(this.getSubjectHolder(), Options.TARGET_DATABASE_PROPERTY) {
@Override
- protected String displayString(TargetDatabase value) {
- return this.buildDisplayString(EclipseLinkUiMessages.class, TargetDatabaseComposite.this, value);
+ protected String buildValue_() {
+
+ String name = subject.getTargetDatabase();
+ if (name == null) {
+ name = TargetDatabaseComposite.this.defaultValue(subject);
+ }
+ return name;
}
@Override
- protected TargetDatabase getValue() {
- return this.subject().getTargetDatabase();
+ protected void setValue_(String value) {
+
+ if (defaultValue(subject).equals(value)) {
+ value = null;
+ }
+ subject.setTargetDatabase(value);
}
+ };
+ }
+
+ private ListValueModel<String> buildTargetDatabaseListHolder() {
+ ArrayList<ListValueModel<String>> holders = new ArrayList<ListValueModel<String>>(2);
+ holders.add(buildDefaultTargetDatabaseListHolder());
+ holders.add(buildTargetDatabasesListHolder());
+ return new CompositeListValueModel<ListValueModel<String>, String>(holders);
+ }
+ private Iterator<String> buildTargetDatabases() {
+ return new TransformationIterator<TargetDatabase, String>(CollectionTools.iterator(TargetDatabase.values())) {
@Override
- protected void setValue(TargetDatabase value) {
- this.subject().setTargetDatabase(value);
+ protected String transform(TargetDatabase next) {
+ return next.name();
}
};
}
+ private CollectionValueModel<String> buildTargetDatabasesCollectionHolder() {
+ return new SimpleCollectionValueModel<String>(
+ CollectionTools.collection(buildTargetDatabases())
+ );
+ }
+
+ private ListValueModel<String> buildTargetDatabasesListHolder() {
+ return new SortedListValueModelAdapter<String>(
+ buildTargetDatabasesCollectionHolder(),
+ buildTargetDatabaseComparator()
+ );
+ }
+
+ private String defaultValue(Options subject) {
+ String defaultValue = subject.getDefaultTargetDatabase();
+
+ if (defaultValue != null) {
+ return NLS.bind(
+ EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultWithOneParam,
+ defaultValue
+ );
+ }
+ else {
+ return EclipseLinkUiMessages.PersistenceXmlOptionsTab_defaultEmpty;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ */
@Override
protected void initializeLayout(Composite container) {
- this.buildLabeledComposite(
- container,
- EclipseLinkUiMessages.PersistenceXmlOptionsTab_targetDatabaseLabel,
- this.buildTargetDatabaseCombo(container),
- null // TODO IJpaHelpContextIds.
+
+ CCombo combo = buildLabeledEditableCCombo(
+ container,
+ EclipseLinkUiMessages.PersistenceXmlOptionsTab_targetDatabaseLabel,
+ this.buildTargetDatabaseListHolder(),
+ this.buildTargetDatabaseHolder(),
+ this.buildTargetDatabaseConverter(),
+ null // EclipseLinkHelpContextIds.TARGET_DATABASE_NAME
);
+
+ SWTUtil.attachDefaultValueHandler(combo);
}
}

Back to the top