diff options
author | tle | 2008-07-22 16:54:35 +0000 |
---|---|---|
committer | tle | 2008-07-22 16:54:35 +0000 |
commit | b6440a670c53d0e42951d99d4549ec85bda9cfaf (patch) | |
tree | 446a40136ae713ce16628d4736b1eaa5a7e177fe /jpa/plugins | |
parent | 2f87e07c31c6edc79ee1789c5adefa71ad2705d4 (diff) | |
download | webtools.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')
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); } } |