blob: 796ee4f213dac90fcaada48e79317d81fc2fc16a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.jpa.ui.internal.jpa2_1.persistence;
import java.util.Collection;
import org.eclipse.jpt.common.ui.JptCommonUiMessages;
import org.eclipse.jpt.common.ui.internal.widgets.EnumFormComboViewer;
import org.eclipse.jpt.common.ui.internal.widgets.Pane;
import org.eclipse.jpt.common.ui.internal.widgets.TriStateCheckBox;
import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter;
import org.eclipse.jpt.common.utility.internal.model.value.TransformationPropertyValueModel;
import org.eclipse.jpt.common.utility.model.value.ModifiablePropertyValueModel;
import org.eclipse.jpt.common.utility.model.value.PropertyValueModel;
import org.eclipse.jpt.jpa.core.jpa2_1.context.persistence.SchemaGenerationAction;
import org.eclipse.jpt.jpa.core.jpa2_1.context.persistence.SchemaGenerationTarget;
import org.eclipse.jpt.jpa.core.jpa2_1.context.persistence.schemagen.SchemaGeneration2_1;
import org.eclipse.jpt.jpa.ui.jpa2_1.persistence.JptJpaUiPersistenceMessages2_1;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
/**
* SchemaGenerationComposite
*/
public class SchemaGenerationComposite<T extends SchemaGeneration2_1> extends Pane<T>
{
public SchemaGenerationComposite(Pane<T> subjectHolder, Composite container) {
super(subjectHolder, container);
}
@Override
protected Composite addComposite(Composite parent) {
return this.addTitledGroup(
parent,
JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_schemaGenerationGroupTitle,
2,
null
);
}
@Override
protected void initializeLayout(Composite parentComposite) {
// DatabaseAction
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_databaseAction);
this.buildDatabaseActionCombo(parentComposite);
// ScriptsAction
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_scriptsGeneration);
this.buildScriptsActionCombo(parentComposite);
// CreateSource
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_metadataAndScriptCreation);
this.buildCreateSourceCombo(parentComposite);
// DropSource
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_metadataAndScriptDropping);
this.buildDropSourceCombo(parentComposite);
// Create Database Schemas
TriStateCheckBox createDatabaseSchemasCheckBox = this.buildCreateDatabaseSchemasCheckBox(parentComposite);
GridData gridData = new GridData();
gridData.horizontalSpan = 2;
createDatabaseSchemasCheckBox.getCheckBox().setLayoutData(gridData);
// ScriptsCreateTarget
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_scriptsCreateTarget);
this.addText(parentComposite, this.buildScriptsCreateTargetHolder());
// ScriptsDropTarget
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_scriptsDropTarget);
this.addText(parentComposite, this.buildScriptsDropTargetHolder());
// DatabaseProductName
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_databaseProductName);
this.addText(parentComposite, this.buildDatabaseProductNameHolder());
// DatabaseMajorVersion
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_databaseMajorVersion);
this.addText(parentComposite, this.buildDatabaseMajorVersionHolder());
// DatabaseMinorVersion
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_databaseMinorVersion);
this.addText(parentComposite, this.buildDatabaseMinorVersionHolder());
// CreateScriptSource
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_createScriptSource);
this.addText(parentComposite, this.buildCreateScriptSourceHolder());
// DropScriptSource
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_dropScriptSource);
this.addText(parentComposite, this.buildDropScriptSourceHolder());
// Connection
this.addLabel(parentComposite, JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_connection);
this.addText(parentComposite, this.buildConnectionHolder());
}
// ********** ScriptsCreateTarget **********
private ModifiablePropertyValueModel<String> buildScriptsCreateTargetHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.SCRIPTS_CREATE_TARGET_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getScriptsCreateTarget();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setScriptsCreateTarget(value);
}
};
}
// ********** ScriptsDropTarget **********
private ModifiablePropertyValueModel<String> buildScriptsDropTargetHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.SCRIPTS_DROP_TARGET_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getScriptsDropTarget();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setScriptsDropTarget(value);
}
};
}
// ********** DatabaseProductName **********
private ModifiablePropertyValueModel<String> buildDatabaseProductNameHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.DATABASE_PRODUCT_NAME_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getDatabaseProductName();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setDatabaseProductName(value);
}
};
}
// ********** DatabaseMajorVersion **********
private ModifiablePropertyValueModel<String> buildDatabaseMajorVersionHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.DATABASE_MAJOR_VERSION_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getDatabaseMajorVersion();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setDatabaseMajorVersion(value);
}
};
}
// ********** DatabaseMinorVersion **********
private ModifiablePropertyValueModel<String> buildDatabaseMinorVersionHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.DATABASE_MINOR_VERSION_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getDatabaseMinorVersion();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setDatabaseMinorVersion(value);
}
};
}
// ********** CreateScriptSource **********
private ModifiablePropertyValueModel<String> buildCreateScriptSourceHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.CREATE_SCRIPT_SOURCE_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getCreateScriptSource();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setCreateScriptSource(value);
}
};
}
// ********** DropScriptSource **********
private ModifiablePropertyValueModel<String> buildDropScriptSourceHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.DROP_SCRIPT_SOURCE_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getDropScriptSource();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setDropScriptSource(value);
}
};
}
// ********** Connection **********
private ModifiablePropertyValueModel<String> buildConnectionHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, String>(
this.getSubjectHolder(),
SchemaGeneration2_1.CONNECTION_PROPERTY)
{
@Override
protected String buildValue_() {
return this.subject.getConnection();
}
@Override
protected void setValue_(String value) {
if (value.length() == 0) {
value = null;
}
this.subject.setConnection(value);
}
};
}
// ********* Create Database Schemas **********
private TriStateCheckBox buildCreateDatabaseSchemasCheckBox(Composite container) {
return this.addTriStateCheckBoxWithDefault(
container,
JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_createDatabaseSchemasLabel,
this.buildCreateDatabaseSchemasHolder(),
this.buildCreateDatabaseSchemasStringHolder(),
null // TODO HelpContextIds
);
}
private ModifiablePropertyValueModel<Boolean> buildCreateDatabaseSchemasHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, Boolean>(
this.getSubjectHolder(),
SchemaGeneration2_1.CREATE_DATABASE_SCHEMAS_PROPERTY)
{
@Override
protected Boolean buildValue_() {
return this.subject.getCreateDatabaseSchemas();
}
@Override
protected void setValue_(Boolean value) {
this.subject.setCreateDatabaseSchemas(value);
}
};
}
private PropertyValueModel<String> buildCreateDatabaseSchemasStringHolder() {
return new TransformationPropertyValueModel<Boolean, String>(
this.buildDefaultCreateDatabaseSchemasHolder())
{
@Override
protected String transform(Boolean value) {
if (value != null) {
String defaultStringValue = value.booleanValue() ? JptCommonUiMessages.BOOLEAN_TRUE : JptCommonUiMessages.BOOLEAN_FALSE;
return NLS.bind(JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_defaultCreateDatabaseSchemasLabel, defaultStringValue);
}
return JptJpaUiPersistenceMessages2_1.SchemaGenerationComposite_createDatabaseSchemasLabel;
}
};
}
private PropertyValueModel<Boolean> buildDefaultCreateDatabaseSchemasHolder() {
return new PropertyAspectAdapter<SchemaGeneration2_1, Boolean>(
this.getSubjectHolder(),
SchemaGeneration2_1.CREATE_DATABASE_SCHEMAS_PROPERTY)
{
@Override
protected Boolean buildValue_() {
if (this.subject.getCreateDatabaseSchemas() != null) {
return null;
}
return this.subject.getDefaultCreateDatabaseSchemas();
}
};
}
// ********** DatabaseAction **********
private EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationAction> buildDatabaseActionCombo(Composite container) {
return new EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationAction>(this,
this.getSubjectHolder(),
container) {
@Override
protected void addPropertyNames(Collection<String> propertyNames) {
super.addPropertyNames(propertyNames);
propertyNames.add(SchemaGeneration2_1.SCHEMAGEN_DATABASE_ACTION_PROPERTY);
}
@Override
protected SchemaGenerationAction[] getChoices() {
return SchemaGenerationAction.values();
}
@Override
protected SchemaGenerationAction getDefaultValue() {
return this.getSubject().getDefaultSchemaGenDatabaseAction();
}
@Override
protected String displayString(SchemaGenerationAction value) {
switch (value) {
case none :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_none;
case create :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_create;
case drop_and_create :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_drop_and_create;
case drop :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_drop;
default :
throw new IllegalStateException();
}
}
@Override
protected SchemaGenerationAction getValue() {
return this.getSubject().getSchemaGenDatabaseAction();
}
@Override
protected void setValue(SchemaGenerationAction value) {
this.getSubject().setSchemaGenDatabaseAction(value);
}
// @Override
// protected String getHelpId() {
// return // TODO -
// }
};
}
// ********** ScriptsAction **********
private EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationAction> buildScriptsActionCombo(Composite container) {
return new EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationAction>(this,
this.getSubjectHolder(),
container) {
@Override
protected void addPropertyNames(Collection<String> propertyNames) {
super.addPropertyNames(propertyNames);
propertyNames.add(SchemaGeneration2_1.SCHEMAGEN_SCRIPTS_ACTION_PROPERTY);
}
@Override
protected SchemaGenerationAction[] getChoices() {
return SchemaGenerationAction.values();
}
@Override
protected SchemaGenerationAction getDefaultValue() {
return this.getSubject().getDefaultSchemaGenScriptsAction();
}
@Override
protected String displayString(SchemaGenerationAction value) {
switch (value) {
case none :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_none;
case create :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_create;
case drop_and_create :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_drop_and_create;
case drop :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationAction_drop;
default :
throw new IllegalStateException();
}
}
@Override
protected SchemaGenerationAction getValue() {
return this.getSubject().getSchemaGenScriptsAction();
}
@Override
protected void setValue(SchemaGenerationAction value) {
this.getSubject().setSchemaGenScriptsAction(value);
}
// @Override
// protected String getHelpId() {
// return // TODO -
// }
};
}
// ********** CreateSource **********
private EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationTarget> buildCreateSourceCombo(Composite container) {
return new EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationTarget>(this,
this.getSubjectHolder(),
container) {
@Override
protected void addPropertyNames(Collection<String> propertyNames) {
super.addPropertyNames(propertyNames);
propertyNames.add(SchemaGeneration2_1.SCHEMAGEN_CREATE_SOURCE_PROPERTY);
}
@Override
protected SchemaGenerationTarget[] getChoices() {
return SchemaGenerationTarget.values();
}
@Override
protected SchemaGenerationTarget getDefaultValue() {
return this.getSubject().getDefaultSchemaGenCreateSource();
}
@Override
protected String displayString(SchemaGenerationTarget value) {
switch (value) {
case metadata :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_metadata;
case script :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_script;
case metadata_then_script :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_metadata_then_script;
case script_then_metadata :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_script_then_metadata;
default :
throw new IllegalStateException();
}
}
@Override
protected SchemaGenerationTarget getValue() {
return this.getSubject().getSchemaGenCreateSource();
}
@Override
protected void setValue(SchemaGenerationTarget value) {
this.getSubject().setSchemaGenCreateSource(value);
}
// @Override
// protected String getHelpId() {
// return // TODO -
// }
};
}
// ********** DropSource **********
private EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationTarget> buildDropSourceCombo(Composite container) {
return new EnumFormComboViewer<SchemaGeneration2_1, SchemaGenerationTarget>(this,
this.getSubjectHolder(),
container) {
@Override
protected void addPropertyNames(Collection<String> propertyNames) {
super.addPropertyNames(propertyNames);
propertyNames.add(SchemaGeneration2_1.SCHEMAGEN_DROP_SOURCE_PROPERTY);
}
@Override
protected SchemaGenerationTarget[] getChoices() {
return SchemaGenerationTarget.values();
}
@Override
protected SchemaGenerationTarget getDefaultValue() {
return this.getSubject().getDefaultSchemaGenDropSource();
}
@Override
protected String displayString(SchemaGenerationTarget value) {
switch (value) {
case metadata :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_metadata;
case script :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_script;
case metadata_then_script :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_metadata_then_script;
case script_then_metadata :
return JptJpaUiPersistenceMessages2_1.SchemaGenerationTarget_script_then_metadata;
default :
throw new IllegalStateException();
}
}
@Override
protected SchemaGenerationTarget getValue() {
return this.getSubject().getSchemaGenDropSource();
}
@Override
protected void setValue(SchemaGenerationTarget value) {
this.getSubject().setSchemaGenDropSource(value);
}
// @Override
// protected String getHelpId() {
// return // TODO -
// }
};
}
}