refactoring UI in preparation for adding join-table support to 2.0 association overrides
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
index 965c421..bd29441 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
+++ b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
@@ -195,14 +195,14 @@
PrimaryKeyJoinColumnDialog_editDescriptionTitle=Edit Primary Key Join Column
PrimaryKeyJoinColumnDialog_editTitle=Edit Primary Key Join Column
-AttributeOverridesComposite_attributeOverridesSection=Attribute Overrides
-AttributeOverridesComposite_attributeOverridesGroup=Attribute overrides
-AttributeOverridesComposite_overrideDefault=Override default
+OverridesComposite_attributeOverridesSection=Attribute Overrides
+OverridesComposite_attributeOverridesGroup=Attribute overrides
+OverridesComposite_overrideDefault=Override default
OverridesComposite_association=Association Override
OverridesComposite_attribute=Attribute Override
OverridesComposite_noName=<Name not set>
-OverridesComposite_joinColumn=Join columns
+AssociationOverridesComposite_joinColumn=Join columns
InheritanceComposite_detailsGroupBox=Details
InheritanceComposite_discriminatorColumnGroupBox=Discriminator column
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
index 7c924a7..267d179 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
@@ -31,9 +31,9 @@
public static String QueryStateObject_typeMustBeSpecified;
public static String NamedQueryComposite_nameTextLabel;
- public static String AttributeOverridesComposite_attributeOverridesGroup;
- public static String AttributeOverridesComposite_attributeOverridesSection;
- public static String AttributeOverridesComposite_overrideDefault;
+ public static String OverridesComposite_attributeOverridesGroup;
+ public static String OverridesComposite_attributeOverridesSection;
+ public static String OverridesComposite_overrideDefault;
public static String BasicGeneralSection_enumeratedLabel;
public static String BasicGeneralSection_fetchLabel;
public static String BasicGeneralSection_lobLabel;
@@ -228,7 +228,7 @@
public static String OrmSecondaryTablesComposite_defineInXml;
public static String OverridesComposite_association;
public static String OverridesComposite_attribute;
- public static String OverridesComposite_joinColumn;
+ public static String AssociationOverridesComposite_joinColumn;
public static String OverridesComposite_noName;
public static String PrimaryKeyJoinColumnDialog_addDescriptionTitle;
public static String PrimaryKeyJoinColumnDialog_addTitle;
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java
index f7394e3..4aee5d4 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java
@@ -136,10 +136,14 @@
JptUiMappingsMessages.EntityComposite_queries
);
- new QueriesComposite(this, buildQueryContainer(), container);
+ addQueriesComposite(container, buildQueryContainerHolder());
}
- private PropertyValueModel<QueryContainer> buildQueryContainer() {
+ protected void addQueriesComposite(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) {
+ new QueriesComposite(this, queryContainerHolder, container);
+ }
+
+ private PropertyValueModel<QueryContainer> buildQueryContainerHolder() {
return new PropertyAspectAdapter<Entity, QueryContainer>(getSubjectHolder()) {
@Override
protected QueryContainer buildValue_() {
@@ -152,9 +156,13 @@
container = addCollapsableSection(
container,
- JptUiMappingsMessages.AttributeOverridesComposite_attributeOverridesSection
+ JptUiMappingsMessages.OverridesComposite_attributeOverridesSection
);
+ addAttributeOverridesComposite(container);
+ }
+
+ protected void addAttributeOverridesComposite(Composite container) {
new OverridesComposite(this, container);
}
@@ -175,7 +183,11 @@
JptUiMappingsMessages.IdMappingComposite_primaryKeyGenerationSection
);
- new GeneratorsComposite(this, buildGeneratorContainer(), container);
+ addGeneratorsComposite(container, buildGeneratorContainer());
+ }
+
+ protected void addGeneratorsComposite(Composite container, PropertyValueModel<GeneratorContainer> generatorContainerHolder) {
+ new GeneratorsComposite(this, generatorContainerHolder, container);
}
private PropertyValueModel<GeneratorContainer> buildGeneratorContainer() {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractOverridesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractOverridesComposite.java
new file mode 100644
index 0000000..b5fa2f3
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractOverridesComposite.java
@@ -0,0 +1,432 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.ui.internal.mappings.details;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jpt.core.context.AssociationOverride;
+import org.eclipse.jpt.core.context.AttributeOverride;
+import org.eclipse.jpt.core.context.BaseOverride;
+import org.eclipse.jpt.core.context.Entity;
+import org.eclipse.jpt.ui.WidgetFactory;
+import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
+import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
+import org.eclipse.jpt.ui.internal.util.ControlSwitcher;
+import org.eclipse.jpt.ui.internal.util.PaneEnabler;
+import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
+import org.eclipse.jpt.ui.internal.widgets.FormPane;
+import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
+import org.eclipse.jpt.ui.internal.widgets.Pane;
+import org.eclipse.jpt.ui.internal.widgets.AddRemovePane.Adapter;
+import org.eclipse.jpt.utility.internal.StringTools;
+import org.eclipse.jpt.utility.internal.Transformer;
+import org.eclipse.jpt.utility.internal.model.value.CachingTransformationPropertyValueModel;
+import org.eclipse.jpt.utility.internal.model.value.CachingTransformationWritablePropertyValueModel;
+import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
+import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
+import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
+import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
+import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
+import org.eclipse.jpt.utility.internal.model.value.TransformationWritablePropertyValueModel;
+import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
+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.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.part.PageBook;
+
+/**
+ * Here the layout of this pane:
+ * <pre>
+ * -----------------------------------------------------------------------------
+ * | |
+ * | - Attribute Overrides --------------------------------------------------- |
+ * | | --------------------------------------------------------------------- | |
+ * | | | | | |
+ * | | | AddRemoveListPane | | |
+ * | | | | | |
+ * | | --------------------------------------------------------------------- | |
+ * | | | |
+ * | | x Override Default | |
+ * | | | |
+ * | | --------------------------------------------------------------------- | |
+ * | | | | | |
+ * | | | PageBook (attribute/association override composite) | | |
+ * | | | | | |
+ * | | --------------------------------------------------------------------- | |
+ * | ------------------------------------------------------------------------- |
+ * -----------------------------------------------------------------------------</pre>
+ *
+ * @see Entity
+ * @see EntityComposite - The parent container
+ *
+ * @version 2.0
+ * @since 1.0
+ */
+@SuppressWarnings("nls")
+public abstract class AbstractOverridesComposite extends FormPane<Entity>
+{
+ private Pane<AttributeOverride> attributeOverridePane;
+ private Pane<AssociationOverride> associationOverridePane;
+
+ private WritablePropertyValueModel<BaseOverride> selectedOverrideHolder;
+ private WritablePropertyValueModel<Boolean> overrideVirtualOverrideHolder;
+
+ /**
+ * Creates a new <code>OverridesComposite</code>.
+ *
+ * @param parentPane The parent controller of this one
+ * @param parent The parent container
+ */
+ protected AbstractOverridesComposite(FormPane<? extends Entity> parentPane,
+ Composite parent) {
+
+ super(parentPane, parent, false);
+ }
+
+ /**
+ * Creates a new <code>OverridesComposite</code>.
+ *
+ * @param subjectHolder The holder of the subject <code>Entity</code>
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ protected AbstractOverridesComposite(PropertyValueModel<? extends Entity> subjectHolder,
+ Composite parent,
+ WidgetFactory widgetFactory) {
+
+ super(subjectHolder, parent, widgetFactory);
+ }
+
+ @Override
+ protected void initialize() {
+ super.initialize();
+ this.selectedOverrideHolder = buildSelectedOverrideHolder();
+ }
+
+ private WritablePropertyValueModel<BaseOverride> buildSelectedOverrideHolder() {
+ return new SimplePropertyValueModel<BaseOverride>();
+ }
+
+
+ @Override
+ protected void initializeLayout(Composite container) {
+
+ // Overrides group pane
+ container = addTitledGroup(
+ container,
+ JptUiMappingsMessages.OverridesComposite_attributeOverridesGroup
+ );
+
+ // Overrides list pane
+ initializeOverridesList(container);
+
+ int groupBoxMargin = getGroupBoxMargin();
+
+ // Override Default check box
+ Button overrideCheckBox = addCheckBox(
+ addSubPane(container, 0, groupBoxMargin, 0, groupBoxMargin),
+ JptUiMappingsMessages.OverridesComposite_overrideDefault,
+ getOverrideVirtualOverrideHolder(),
+ null
+ );
+ SWTTools.controlVisibleState(buildSelectedOverrideBooleanHolder(), overrideCheckBox);
+
+ // Property pane
+ PageBook pageBook = addPageBook(container);
+ initializeAttributeOverridePane(pageBook);
+ initializeAssociationOverridePane(pageBook);
+ installOverrideControlSwitcher(this.selectedOverrideHolder, pageBook);
+ }
+
+ private PropertyValueModel<Boolean> buildSelectedOverrideBooleanHolder() {
+ return new TransformationPropertyValueModel<BaseOverride, Boolean>(this.selectedOverrideHolder) {
+ @Override
+ protected Boolean transform(BaseOverride value) {
+ return Boolean.valueOf(value != null);
+ }
+ };
+ }
+
+ private AddRemoveListPane<Entity> initializeOverridesList(Composite container) {
+
+ return new AddRemoveListPane<Entity>(
+ this,
+ addSubPane(container, 8),
+ buildOverridesAdapter(),
+ buildOverridesListModel(),
+ this.selectedOverrideHolder,
+ buildOverrideLabelProvider(),
+ JpaHelpContextIds.ENTITY_ATTRIBUTE_OVERRIDES
+ )
+ {
+ @Override
+ protected void initializeButtonPane(Composite container, String helpId) {
+ //no buttons: no way to add/remove/edit overrides, they are all defaulted in
+ }
+
+ @Override
+ protected void updateButtons() {
+ //no buttons: no way to add/remove/edit overrides, they are all defaulted in
+ }
+ };
+ }
+
+ private void initializeAttributeOverridePane(PageBook pageBook) {
+ PropertyValueModel<AttributeOverride> attributeOverrideHolder = buildAttributeOverrideHolder();
+ this.attributeOverridePane = buildAttributeOverridePane(pageBook, attributeOverrideHolder);
+ installAttributeOverridePaneEnabler(this.attributeOverridePane, attributeOverrideHolder);
+ }
+
+ protected abstract Pane<AttributeOverride> buildAttributeOverridePane(PageBook pageBook, PropertyValueModel<AttributeOverride> attributeOverrideHolder);
+
+ private void installAttributeOverridePaneEnabler(Pane<AttributeOverride> pane, PropertyValueModel<AttributeOverride> overrideHolder) {
+ new PaneEnabler(
+ buildOverrideBooleanHolder(overrideHolder),
+ pane
+ );
+ }
+
+ private PropertyValueModel<Boolean> buildOverrideBooleanHolder(PropertyValueModel<? extends BaseOverride> overrideHolder) {
+ return new CachingTransformationPropertyValueModel<BaseOverride, Boolean>(overrideHolder) {
+ @Override
+ protected Boolean transform_(BaseOverride value) {
+ return Boolean.valueOf(!value.isVirtual());
+ }
+ };
+ }
+
+ private void initializeAssociationOverridePane(PageBook pageBook) {
+ PropertyValueModel<AssociationOverride> associationOverrideHolder = buildAssociationOverrideHolder();
+ this.associationOverridePane = buildAssociationOverridePane(pageBook, associationOverrideHolder);
+ installAssociationOverridePaneEnabler(this.associationOverridePane, associationOverrideHolder);
+ }
+
+ protected abstract Pane<AssociationOverride> buildAssociationOverridePane(PageBook pageBook, PropertyValueModel<AssociationOverride> associationOverrideHolder);
+
+ private void installAssociationOverridePaneEnabler(Pane<AssociationOverride> pane, PropertyValueModel<AssociationOverride> overrideHolder) {
+ new PaneEnabler(
+ buildOverrideBooleanHolder(overrideHolder),
+ pane
+ );
+ }
+
+ private void installOverrideControlSwitcher(PropertyValueModel<BaseOverride> overrideHolder,
+ PageBook pageBook) {
+
+ new ControlSwitcher(
+ overrideHolder,
+ buildPaneTransformer(),
+ pageBook
+ );
+ }
+
+ private WritablePropertyValueModel<AssociationOverride> buildAssociationOverrideHolder() {
+ return new TransformationWritablePropertyValueModel<BaseOverride, AssociationOverride>(this.selectedOverrideHolder) {
+ @Override
+ protected AssociationOverride transform_(BaseOverride value) {
+ return (value instanceof AssociationOverride) ? (AssociationOverride) value : null;
+ }
+ };
+ }
+
+ private WritablePropertyValueModel<AttributeOverride> buildAttributeOverrideHolder() {
+ return new TransformationWritablePropertyValueModel<BaseOverride, AttributeOverride>(this.selectedOverrideHolder) {
+ @Override
+ protected AttributeOverride transform_(BaseOverride value) {
+ return (value instanceof AttributeOverride) ? (AttributeOverride) value : null;
+ }
+ };
+ }
+
+ private ListValueModel<AssociationOverride> buildDefaultAssociationOverridesListHolder() {
+ return new ListAspectAdapter<Entity, AssociationOverride>(getSubjectHolder(), Entity.VIRTUAL_ASSOCIATION_OVERRIDES_LIST) {
+ @Override
+ protected ListIterator<AssociationOverride> listIterator_() {
+ return this.subject.virtualAssociationOverrides();
+ }
+
+ @Override
+ protected int size_() {
+ return this.subject.virtualAssociationOverridesSize();
+ }
+ };
+ }
+
+ private ListValueModel<AttributeOverride> buildDefaultAttributeOverridesListHolder() {
+ return new ListAspectAdapter<Entity, AttributeOverride>(getSubjectHolder(), Entity.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST) {
+ @Override
+ protected ListIterator<AttributeOverride> listIterator_() {
+ return this.subject.virtualAttributeOverrides();
+ }
+
+ @Override
+ protected int size_() {
+ return this.subject.virtualAttributeOverridesSize();
+ }
+ };
+ }
+
+ protected WritablePropertyValueModel<Boolean> getOverrideVirtualOverrideHolder() {
+ if (this.overrideVirtualOverrideHolder == null) {
+ this.overrideVirtualOverrideHolder = buildOverrideVirtualOverrideHolder();
+ }
+ return this.overrideVirtualOverrideHolder;
+ }
+
+
+ private WritablePropertyValueModel<Boolean> buildOverrideVirtualOverrideHolder() {
+ return new CachingTransformationWritablePropertyValueModel<BaseOverride, Boolean>(this.selectedOverrideHolder) {
+ @Override
+ public void setValue(Boolean value) {
+ updateOverride(value.booleanValue());
+ }
+
+ @Override
+ protected Boolean transform_(BaseOverride value) {
+ return Boolean.valueOf(!value.isVirtual());
+ }
+ };
+ }
+
+ private String buildOverrideDisplayString(BaseOverride override) {
+ String overrideType;
+
+ // Retrieve the type
+ if (override instanceof AssociationOverride) {
+ overrideType = JptUiMappingsMessages.OverridesComposite_association;
+ }
+ else {
+ overrideType = JptUiMappingsMessages.OverridesComposite_attribute;
+ }
+
+ // Format the name
+ String name = override.getName();
+
+ if (StringTools.stringIsEmpty(name)) {
+ name = JptUiMappingsMessages.OverridesComposite_noName;
+ }
+
+ // Format: <name> (Attribute/Association Override)
+ StringBuilder sb = new StringBuilder();
+ sb.append(name);
+ sb.append(" (");
+ sb.append(overrideType);
+ sb.append(") ");
+ return sb.toString();
+ }
+
+ private ILabelProvider buildOverrideLabelProvider() {
+ return new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ return buildOverrideDisplayString((BaseOverride) element);
+ }
+ };
+ }
+
+ private Adapter buildOverridesAdapter() {
+ return new AddRemoveListPane.AbstractAdapter() {
+
+ public void addNewItem(ObjectListSelectionModel listSelectionModel) {
+ //no way to add/remove/edit overrides, they are all defaulted in
+ }
+
+ public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) {
+ //no way to add/remove/edit overrides, they are all defaulted in
+ }
+ };
+ }
+
+ private ListValueModel<BaseOverride> buildOverridesListHolder() {
+ List<ListValueModel<? extends BaseOverride>> list = new ArrayList<ListValueModel<? extends BaseOverride>>();
+ list.add(buildSpecifiedAttributeOverridesListHolder());
+ list.add(buildDefaultAttributeOverridesListHolder());
+ list.add(buildSpecifiedAssociationOverridesListHolder());
+ list.add(buildDefaultAssociationOverridesListHolder());
+ return new CompositeListValueModel<ListValueModel<? extends BaseOverride>, BaseOverride>(list);
+ }
+
+ private ListValueModel<BaseOverride> buildOverridesListModel() {
+ return new ItemPropertyListValueModelAdapter<BaseOverride>(
+ buildOverridesListHolder(),
+ BaseOverride.NAME_PROPERTY
+ );
+ }
+
+ private Transformer<BaseOverride, Control> buildPaneTransformer() {
+ return new Transformer<BaseOverride, Control>() {
+ public Control transform(BaseOverride override) {
+
+ if (override instanceof AttributeOverride) {
+ return AbstractOverridesComposite.this.attributeOverridePane.getControl();
+ }
+
+ if (override instanceof AssociationOverride) {
+ return AbstractOverridesComposite.this.associationOverridePane.getControl();
+ }
+
+ return null;
+ }
+ };
+ }
+
+ private ListValueModel<AssociationOverride> buildSpecifiedAssociationOverridesListHolder() {
+ return new ListAspectAdapter<Entity, AssociationOverride>(getSubjectHolder(), Entity.SPECIFIED_ASSOCIATION_OVERRIDES_LIST) {
+ @Override
+ protected ListIterator<AssociationOverride> listIterator_() {
+ return this.subject.specifiedAssociationOverrides();
+ }
+
+ @Override
+ protected int size_() {
+ return this.subject.specifiedAssociationOverridesSize();
+ }
+ };
+ }
+
+ private ListValueModel<AttributeOverride> buildSpecifiedAttributeOverridesListHolder() {
+ return new ListAspectAdapter<Entity, AttributeOverride>(getSubjectHolder(), Entity.SPECIFIED_ATTRIBUTE_OVERRIDES_LIST) {
+ @Override
+ protected ListIterator<AttributeOverride> listIterator_() {
+ return this.subject.specifiedAttributeOverrides();
+ }
+
+ @Override
+ protected int size_() {
+ return this.subject.specifiedAttributeOverridesSize();
+ }
+ };
+ }
+
+ private void updateOverride(boolean selected) {
+
+ if (isPopulating()) {
+ return;
+ }
+
+ setPopulating(true);
+
+ try {
+ BaseOverride override = this.selectedOverrideHolder.getValue();
+
+ BaseOverride newOverride = override.setVirtual(!selected);
+ this.selectedOverrideHolder.setValue(newOverride);
+ }
+ finally {
+ setPopulating(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AssociationOverrideComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AssociationOverrideComposite.java
new file mode 100644
index 0000000..ff510cb
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AssociationOverrideComposite.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.ui.internal.mappings.details;
+
+import java.util.ListIterator;
+import org.eclipse.jpt.core.context.AssociationOverride;
+import org.eclipse.jpt.core.context.Entity;
+import org.eclipse.jpt.core.context.JoinColumn;
+import org.eclipse.jpt.core.context.JoinColumnJoiningStrategy;
+import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
+import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.JoinColumnsEditor;
+import org.eclipse.jpt.ui.internal.widgets.FormPane;
+import org.eclipse.jpt.ui.internal.widgets.PostExecution;
+import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+/**
+ * Here the layout of this pane:
+ * <pre>
+ * -----------------------------------------------------------------------------
+ * | |
+ * | JoinColumnsComposite |
+ * | |
+ * -----------------------------------------------------------------------------</pre>
+ *
+ * @see AssociationOverride
+ * @see OverridesComposite - The parent container
+ * @see JoinColumnsComposite
+ *
+ * @version 2.2
+ * @since 1.0
+ */
+public class AssociationOverrideComposite extends FormPane<AssociationOverride>
+{
+ private Composite joinColumnsPane;
+ private JoinColumnsComposite<JoinColumnJoiningStrategy> joinColumnsComposite;
+
+ private PropertyValueModel<JoinColumnJoiningStrategy> selectedJoinColumnJoiningStrategyHolder;
+
+ /**
+ * Creates a new <code>AssociationOverrideComposite</code>.
+ *
+ * @param subjectHolder The holder of the subject <code>AssociationOverride</code>
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public AssociationOverrideComposite(FormPane<?> parentPane,
+ PropertyValueModel<? extends AssociationOverride> subjectHolder,
+ Composite parent) {
+
+ super(parentPane, subjectHolder, parent);
+ }
+
+ @Override
+ protected void initialize() {
+ super.initialize();
+ this.selectedJoinColumnJoiningStrategyHolder = buildJoinColumnJoiningStrategyHolder();
+ }
+
+ private PropertyValueModel<JoinColumnJoiningStrategy> buildJoinColumnJoiningStrategyHolder() {
+ return new TransformationPropertyValueModel<AssociationOverride, JoinColumnJoiningStrategy>(getSubjectHolder()) {
+ @Override
+ protected JoinColumnJoiningStrategy transform_(AssociationOverride value) {
+ return value.getRelationshipReference().getJoinColumnJoiningStrategy();
+ }
+ };
+ }
+
+ @Override
+ protected void initializeLayout(Composite container) {
+ this.joinColumnsPane = addSubPane(container);
+
+ Group joinColumnsGroupPane = addTitledGroup(
+ this.joinColumnsPane,
+ JptUiMappingsMessages.AssociationOverridesComposite_joinColumn
+ );
+
+ // Join Columns list pane (for AssociationOverride)
+ this.joinColumnsComposite =
+ new JoinColumnsComposite<JoinColumnJoiningStrategy>(
+ this,
+ this.selectedJoinColumnJoiningStrategyHolder,
+ joinColumnsGroupPane,
+ buildJoinColumnsEditor(),
+ false
+ );
+ }
+
+ private JoinColumnsProvider buildJoinColumnsEditor() {
+ return new JoinColumnsProvider();
+ }
+
+ private void addJoinColumn(JoinColumnJoiningStrategy subject) {
+
+ JoinColumnInJoiningStrategyDialog dialog =
+ new JoinColumnInJoiningStrategyDialog(getShell(), subject, null);
+
+ dialog.openDialog(buildAddJoinColumnPostExecution());
+ }
+
+ private PostExecution<JoinColumnInJoiningStrategyDialog> buildAddJoinColumnPostExecution() {
+ return new PostExecution<JoinColumnInJoiningStrategyDialog>() {
+ public void execute(JoinColumnInJoiningStrategyDialog dialog) {
+ if (dialog.wasConfirmed()) {
+ addJoinColumn(dialog.getSubject());
+ }
+ }
+ };
+ }
+
+ private void addJoinColumn(JoinColumnInJoiningStrategyStateObject stateObject) {
+
+ JoinColumnJoiningStrategy joiningStrategy = stateObject.getOwner();
+ int index = joiningStrategy.specifiedJoinColumnsSize();
+
+ JoinColumn joinColumn = joiningStrategy.addSpecifiedJoinColumn(index);
+ stateObject.updateJoinColumn(joinColumn);
+ this.joinColumnsComposite.setSelectedJoinColumn(joinColumn);
+ }
+
+
+ private void editJoinColumn(JoinColumn joinColumn) {
+
+ JoinColumnInJoiningStrategyDialog dialog =
+ new JoinColumnInJoiningStrategyDialog(
+ getShell(),
+ this.selectedJoinColumnJoiningStrategyHolder.getValue(),
+ joinColumn
+ );
+
+ dialog.openDialog(buildEditJoinColumnPostExecution());
+ }
+
+ private PostExecution<JoinColumnInJoiningStrategyDialog> buildEditJoinColumnPostExecution() {
+ return new PostExecution<JoinColumnInJoiningStrategyDialog>() {
+ public void execute(JoinColumnInJoiningStrategyDialog dialog) {
+ if (dialog.wasConfirmed()) {
+ editJoinColumn(dialog.getSubject());
+ }
+ }
+ };
+ }
+
+ private void editJoinColumn(JoinColumnInJoiningStrategyStateObject stateObject) {
+ stateObject.updateJoinColumn(stateObject.getJoinColumn());
+ }
+
+ @Override
+ public void enableWidgets(boolean enabled) {
+ super.enableWidgets(enabled);
+ this.joinColumnsComposite.enableWidgets(enabled);
+ }
+
+ private class JoinColumnsProvider implements JoinColumnsEditor<JoinColumnJoiningStrategy> {
+
+ public void addJoinColumn(JoinColumnJoiningStrategy subject) {
+ AssociationOverrideComposite.this.addJoinColumn(subject);
+ }
+
+ public JoinColumn getDefaultJoinColumn(JoinColumnJoiningStrategy subject) {
+ //association overrides have no default join column
+ return null;
+ }
+
+ public String getDefaultPropertyName() {
+ return JoinColumnJoiningStrategy.DEFAULT_JOIN_COLUMN_PROPERTY;
+ }
+
+ public void editJoinColumn(JoinColumnJoiningStrategy subject, JoinColumn joinColumn) {
+ AssociationOverrideComposite.this.editJoinColumn(joinColumn);
+ }
+
+ public boolean hasSpecifiedJoinColumns(JoinColumnJoiningStrategy subject) {
+ return subject.hasSpecifiedJoinColumns();
+ }
+
+ public void removeJoinColumns(JoinColumnJoiningStrategy subject, int[] selectedIndices) {
+ for (int index = selectedIndices.length; --index >= 0; ) {
+ subject.removeSpecifiedJoinColumn(selectedIndices[index]);
+ }
+ }
+
+ public ListIterator<JoinColumn> specifiedJoinColumns(JoinColumnJoiningStrategy subject) {
+ return subject.specifiedJoinColumns();
+ }
+
+ public int specifiedJoinColumnsSize(JoinColumnJoiningStrategy subject) {
+ return subject.specifiedJoinColumnsSize();
+ }
+
+ public String getSpecifiedJoinColumnsListPropertyName() {
+ return JoinColumnJoiningStrategy.SPECIFIED_JOIN_COLUMNS_LIST;
+ }
+ }
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AttributeOverrideComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AttributeOverrideComposite.java
new file mode 100644
index 0000000..48b6b4e
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AttributeOverrideComposite.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2009 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.ui.internal.mappings.details;
+
+import org.eclipse.jpt.core.context.AttributeOverride;
+import org.eclipse.jpt.core.context.Column;
+import org.eclipse.jpt.ui.internal.widgets.FormPane;
+import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Here the layout of this pane:
+ * <pre>
+ * -----------------------------------------------------------------------------
+ * | |
+ * | ColumnComposite |
+ * | |
+ * -----------------------------------------------------------------------------</pre>
+ *
+ * @see AttributeOverride
+ * @see OverridesComposite - The parent container
+ * @see ColumnComposite
+ *
+ * @version 2.0
+ * @since 1.0
+ */
+public class AttributeOverrideComposite extends FormPane<AttributeOverride>
+{
+
+ /**
+ * Creates a new <code>AttributeOverrideComposite</code>.
+ *
+ * @param subjectHolder The holder of the subject <code>AttributeOverride</code>
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public AttributeOverrideComposite(FormPane<?> parentPane,
+ PropertyValueModel<? extends AttributeOverride> subjectHolder,
+ Composite parent) {
+
+ super(parentPane, subjectHolder, parent);
+ }
+
+ @Override
+ protected void initializeLayout(Composite container) {
+ new ColumnComposite(
+ this,
+ buildColumnHolder(),
+ container,
+ false
+ );
+ }
+
+ private PropertyValueModel<Column> buildColumnHolder() {
+ return new TransformationPropertyValueModel<AttributeOverride, Column>(getSubjectHolder()) {
+ @Override
+ protected Column transform_(AttributeOverride value) {
+ return value.getColumn();
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java
index f088cac..9892a75 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java
@@ -133,7 +133,7 @@
// Attribute Overrides group box
container = addTitledGroup(
container,
- JptUiMappingsMessages.AttributeOverridesComposite_attributeOverridesGroup
+ JptUiMappingsMessages.OverridesComposite_attributeOverridesGroup
);
// Attribute Overrides list
@@ -148,7 +148,7 @@
// Override Default check box
Button overrideDefaultButton = addUnmanagedCheckBox(
addSubPane(container, 0, getGroupBoxMargin()),
- JptUiMappingsMessages.AttributeOverridesComposite_overrideDefault,
+ JptUiMappingsMessages.OverridesComposite_overrideDefault,
getOverrideVirtualAttributeOverrideHolder(),
null
);
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java
index 50f072b..2b0155f 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java
@@ -20,7 +20,6 @@
import org.eclipse.jpt.ui.WidgetFactory;
import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
import org.eclipse.jpt.ui.internal.widgets.FormPane;
import org.eclipse.jpt.ui.internal.widgets.AddRemovePane.AbstractAdapter;
@@ -269,8 +268,10 @@
};
}
- protected void installJoinColumnsPaneEnabler(PropertyValueModel<Boolean> joinColumnsPaneEnablerHolder) {
- new PaneEnabler(joinColumnsPaneEnablerHolder, this.listPane);
+ @Override
+ public void enableWidgets(boolean enabled) {
+ super.enableWidgets(enabled);
+ this.listPane.enableWidgets(enabled);
}
public void setSelectedJoinColumn(JoinColumn joinColumn) {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java
index 8b5965c..9c7a100 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java
@@ -23,6 +23,7 @@
import org.eclipse.jpt.ui.internal.mappings.db.SchemaCombo;
import org.eclipse.jpt.ui.internal.mappings.db.TableCombo;
import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.JoinColumnsEditor;
+import org.eclipse.jpt.ui.internal.util.PaneEnabler;
import org.eclipse.jpt.ui.internal.widgets.FormPane;
import org.eclipse.jpt.ui.internal.widgets.PostExecution;
import org.eclipse.jpt.utility.internal.model.value.CachingTransformationPropertyValueModel;
@@ -35,9 +36,6 @@
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.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
@@ -205,11 +203,11 @@
}
private void installInverseJoinColumnsPaneEnabler(JoinColumnsComposite<JoinTable> pane) {
- pane.installJoinColumnsPaneEnabler(new InverseJoinColumnPaneEnablerHolder());
+ new PaneEnabler(new InverseJoinColumnPaneEnablerHolder(), pane);
}
private void installJoinColumnsPaneEnabler(JoinColumnsComposite<JoinTable> pane) {
- pane.installJoinColumnsPaneEnabler(new JoinColumnPaneEnablerHolder());
+ new PaneEnabler(new JoinColumnPaneEnablerHolder(), pane);
}
private void addInverseJoinColumn(JoinTable joinTable) {
@@ -340,24 +338,6 @@
};
}
- private SelectionListener buildOverrideDefaultInverseSelectionListener() {
- return new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- updateInverseJoinColumns();
- }
- };
- }
-
- private SelectionListener buildOverrideDefaultSelectionListener() {
- return new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- updateJoinColumns();
- }
- };
- }
-
private Composite addPane(Composite container, int groupBoxMargin) {
return addSubPane(container, 0, groupBoxMargin, 10, groupBoxMargin);
}
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoiningStrategyJoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoiningStrategyJoinColumnsComposite.java
index 294de1a..96b9d4c 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoiningStrategyJoinColumnsComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoiningStrategyJoinColumnsComposite.java
@@ -15,6 +15,7 @@
import org.eclipse.jpt.core.context.JoinColumnJoiningStrategy;
import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.JoinColumnsEditor;
+import org.eclipse.jpt.ui.internal.util.PaneEnabler;
import org.eclipse.jpt.ui.internal.widgets.FormPane;
import org.eclipse.jpt.ui.internal.widgets.PostExecution;
import org.eclipse.jpt.utility.internal.model.value.CachingTransformationPropertyValueModel;
@@ -74,7 +75,7 @@
this.joinColumnsComposite = new JoinColumnsComposite<JoinColumnJoiningStrategy>(this, container, buildJoinColumnsProvider());
- this.joinColumnsComposite.installJoinColumnsPaneEnabler(new JoinColumnPaneEnablerHolder());
+ new PaneEnabler(new JoinColumnPaneEnablerHolder(), this.joinColumnsComposite);
}
private JoinColumnsEditor<JoinColumnJoiningStrategy> buildJoinColumnsProvider() {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java
index 3fd91b9..e868e96 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/OverridesComposite.java
@@ -9,46 +9,14 @@
******************************************************************************/
package org.eclipse.jpt.ui.internal.mappings.details;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ListIterator;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jpt.core.context.AssociationOverride;
import org.eclipse.jpt.core.context.AttributeOverride;
-import org.eclipse.jpt.core.context.BaseOverride;
-import org.eclipse.jpt.core.context.Column;
import org.eclipse.jpt.core.context.Entity;
-import org.eclipse.jpt.core.context.JoinColumn;
-import org.eclipse.jpt.core.context.JoinColumnJoiningStrategy;
import org.eclipse.jpt.ui.WidgetFactory;
-import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
-import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
-import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.JoinColumnsEditor;
-import org.eclipse.jpt.ui.internal.util.ControlSwitcher;
-import org.eclipse.jpt.ui.internal.util.PaneEnabler;
-import org.eclipse.jpt.ui.internal.utility.swt.SWTTools;
import org.eclipse.jpt.ui.internal.widgets.FormPane;
-import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane;
-import org.eclipse.jpt.ui.internal.widgets.PostExecution;
-import org.eclipse.jpt.ui.internal.widgets.AddRemovePane.Adapter;
-import org.eclipse.jpt.utility.internal.StringTools;
-import org.eclipse.jpt.utility.internal.Transformer;
-import org.eclipse.jpt.utility.internal.model.value.CachingTransformationWritablePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
-import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.TransformationWritablePropertyValueModel;
-import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
-import org.eclipse.jpt.utility.model.value.ListValueModel;
+import org.eclipse.jpt.ui.internal.widgets.Pane;
import org.eclipse.jpt.utility.model.value.PropertyValueModel;
-import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
-import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.part.PageBook;
/**
@@ -67,7 +35,7 @@
* | | | |
* | | --------------------------------------------------------------------- | |
* | | | | | |
- * | | | PageBook (JoinColumnsComposite or ColumnComposite) | | |
+ * | | | PageBook (AttributeOverrideComposite/AssociationOverrideComposite)| | |
* | | | | | |
* | | --------------------------------------------------------------------- | |
* | ------------------------------------------------------------------------- |
@@ -75,22 +43,15 @@
*
* @see Entity
* @see EntityComposite - The parent container
- * @see ColumnComposite
- * @see JoinColumnsComposite
+ * @see AttributeOverrideComposite
+ * @see AssociationOverrideComposite
*
* @version 2.0
* @since 1.0
*/
-@SuppressWarnings("nls")
-public class OverridesComposite extends FormPane<Entity>
+public class OverridesComposite extends AbstractOverridesComposite
{
- private Composite columnPane;
- private Composite joinColumnsPane;
- private JoinColumnsComposite<JoinColumnJoiningStrategy> joinColumnsComposite;
- private WritablePropertyValueModel<BaseOverride> selectedOverrideHolder;
- private WritablePropertyValueModel<Boolean> overrideVirtualOverrideHolder;
- private WritablePropertyValueModel<JoinColumnJoiningStrategy> selectedJoinColumnJoiningStrategyHolder;
/**
* Creates a new <code>OverridesComposite</code>.
*
@@ -100,7 +61,7 @@
public OverridesComposite(FormPane<? extends Entity> parentPane,
Composite parent) {
- super(parentPane, parent, false);
+ super(parentPane, parent);
}
/**
@@ -118,458 +79,12 @@
}
@Override
- protected void initialize() {
- super.initialize();
- this.selectedOverrideHolder = buildSelectedOverrideHolder();
- this.selectedJoinColumnJoiningStrategyHolder = buildJoinColumnJoiningStrategyHolder();
+ protected Pane<AttributeOverride> buildAttributeOverridePane(PageBook pageBook, PropertyValueModel<AttributeOverride> attributeOverrideHolder) {
+ return new AttributeOverrideComposite(this, attributeOverrideHolder, pageBook);
}
- private WritablePropertyValueModel<BaseOverride> buildSelectedOverrideHolder() {
- return new SimplePropertyValueModel<BaseOverride>();
- }
-
-
@Override
- protected void initializeLayout(Composite container) {
-
- // Overrides group pane
- container = addTitledGroup(
- container,
- JptUiMappingsMessages.AttributeOverridesComposite_attributeOverridesGroup
- );
-
- // Overrides list pane
- initializeOverridesList(container);
-
- int groupBoxMargin = getGroupBoxMargin();
-
- // Override Default check box
- Button overrideCheckBox = addCheckBox(
- addSubPane(container, 0, groupBoxMargin, 0, groupBoxMargin),
- JptUiMappingsMessages.AttributeOverridesComposite_overrideDefault,
- getOverrideVirtualOverrideHolder(),
- null
- );
- SWTTools.controlVisibleState(buildSelectedOverrideBooleanHolder(), overrideCheckBox);
-
- // Property pane
- PageBook pageBook = addPageBook(container);
- initializeJoinColumnsPane(pageBook);
- initializeColumnPane(pageBook);
- installOverrideControlSwitcher(this.selectedOverrideHolder, pageBook);
- }
-
- private PropertyValueModel<Boolean> buildSelectedOverrideBooleanHolder() {
- return new TransformationPropertyValueModel<BaseOverride, Boolean>(this.selectedOverrideHolder) {
- @Override
- protected Boolean transform(BaseOverride value) {
- return Boolean.valueOf(value != null);
- }
- };
- }
-
- private AddRemoveListPane<Entity> initializeOverridesList(Composite container) {
-
- return new AddRemoveListPane<Entity>(
- this,
- addSubPane(container, 8),
- buildOverridesAdapter(),
- buildOverridesListModel(),
- this.selectedOverrideHolder,
- buildOverrideLabelProvider(),
- JpaHelpContextIds.ENTITY_ATTRIBUTE_OVERRIDES
- )
- {
- @Override
- protected void initializeButtonPane(Composite container, String helpId) {
- //no buttons: no way to add/remove/edit overrides, they are all defaulted in
- }
-
- @Override
- protected void updateButtons() {
- //no buttons: no way to add/remove/edit overrides, they are all defaulted in
- }
- };
- }
-
- private void initializeColumnPane(PageBook pageBook) {
- this.columnPane = addSubPane(pageBook, 5);
-
- // Column widgets (for IOverrideAttribute)
- ColumnComposite columnComposite = new ColumnComposite(
- this,
- buildColumnHolder(buildAttributeOverrideHolder()),
- this.columnPane,
- false
- );
-
- installColumnsPaneEnabler(columnComposite, buildAttributeOverrideHolder());
- }
-
- private void installColumnsPaneEnabler(ColumnComposite pane, PropertyValueModel<AttributeOverride> overrideHolder) {
- new PaneEnabler(
- buildOverrideBooleanHolder(overrideHolder),
- pane
- );
- }
-
- private PropertyValueModel<Boolean> buildOverrideBooleanHolder(PropertyValueModel<? extends BaseOverride> overrideHolder) {
- return new TransformationPropertyValueModel<BaseOverride, Boolean>(overrideHolder) {
- @Override
- protected Boolean transform_(BaseOverride value) {
- return Boolean.valueOf(!value.isVirtual());
- }
- };
- }
-
- private void initializeJoinColumnsPane(PageBook pageBook) {
- this.joinColumnsPane = addSubPane(pageBook);
-
- Group joinColumnsGroupPane = addTitledGroup(
- this.joinColumnsPane,
- JptUiMappingsMessages.OverridesComposite_joinColumn
- );
-
- // Join Columns list pane (for AssociationOverride)
- this.joinColumnsComposite =
- new JoinColumnsComposite<JoinColumnJoiningStrategy>(
- this,
- this.selectedJoinColumnJoiningStrategyHolder,
- joinColumnsGroupPane,
- buildJoinColumnsEditor(),
- false
- );
-
- installJoinColumnsPaneEnabler(this.joinColumnsComposite, buildAssociationOverrideHolder());
- }
-
- private void installJoinColumnsPaneEnabler(JoinColumnsComposite<JoinColumnJoiningStrategy> pane, PropertyValueModel<AssociationOverride> overrideHolder) {
- pane.installJoinColumnsPaneEnabler(buildOverrideBooleanHolder(overrideHolder));
- }
-
- private void installOverrideControlSwitcher(PropertyValueModel<BaseOverride> overrideHolder,
- PageBook pageBook) {
-
- new ControlSwitcher(
- overrideHolder,
- buildPaneTransformer(),
- pageBook
- );
- }
-
- private void addJoinColumn(JoinColumnJoiningStrategy subject) {
-
- JoinColumnInJoiningStrategyDialog dialog =
- new JoinColumnInJoiningStrategyDialog(getShell(), subject, null);
-
- dialog.openDialog(buildAddJoinColumnPostExecution());
- }
-
- private PostExecution<JoinColumnInJoiningStrategyDialog> buildAddJoinColumnPostExecution() {
- return new PostExecution<JoinColumnInJoiningStrategyDialog>() {
- public void execute(JoinColumnInJoiningStrategyDialog dialog) {
- if (dialog.wasConfirmed()) {
- addJoinColumn(dialog.getSubject());
- }
- }
- };
- }
-
- private void addJoinColumn(JoinColumnInJoiningStrategyStateObject stateObject) {
-
- JoinColumnJoiningStrategy joiningStrategy = stateObject.getOwner();
- int index = joiningStrategy.specifiedJoinColumnsSize();
-
- JoinColumn joinColumn = joiningStrategy.addSpecifiedJoinColumn(index);
- stateObject.updateJoinColumn(joinColumn);
- this.joinColumnsComposite.setSelectedJoinColumn(joinColumn);
- }
-
- private WritablePropertyValueModel<JoinColumnJoiningStrategy> buildJoinColumnJoiningStrategyHolder() {
- return new TransformationWritablePropertyValueModel<AssociationOverride, JoinColumnJoiningStrategy>(this.buildAssociationOverrideHolder()) {
- @Override
- protected JoinColumnJoiningStrategy transform_(AssociationOverride value) {
- return value.getRelationshipReference().getJoinColumnJoiningStrategy();
- }
- };
- }
-
- private WritablePropertyValueModel<AssociationOverride> buildAssociationOverrideHolder() {
- return new TransformationWritablePropertyValueModel<BaseOverride, AssociationOverride>(this.selectedOverrideHolder) {
- @Override
- protected AssociationOverride transform_(BaseOverride value) {
- return (value instanceof AssociationOverride) ? (AssociationOverride) value : null;
- }
- };
- }
-
- private WritablePropertyValueModel<AttributeOverride> buildAttributeOverrideHolder() {
- return new TransformationWritablePropertyValueModel<BaseOverride, AttributeOverride>(this.selectedOverrideHolder) {
- @Override
- protected AttributeOverride transform_(BaseOverride value) {
- return (value instanceof AttributeOverride) ? (AttributeOverride) value : null;
- }
- };
- }
-
- private PropertyValueModel<Column> buildColumnHolder(PropertyValueModel<AttributeOverride> attributeOverrideHolder) {
- return new TransformationPropertyValueModel<AttributeOverride, Column>(attributeOverrideHolder) {
- @Override
- protected Column transform_(AttributeOverride value) {
- return value.getColumn();
- }
- };
- }
-
- private ListValueModel<AssociationOverride> buildDefaultAssociationOverridesListHolder() {
- return new ListAspectAdapter<Entity, AssociationOverride>(getSubjectHolder(), Entity.VIRTUAL_ASSOCIATION_OVERRIDES_LIST) {
- @Override
- protected ListIterator<AssociationOverride> listIterator_() {
- return this.subject.virtualAssociationOverrides();
- }
-
- @Override
- protected int size_() {
- return this.subject.virtualAssociationOverridesSize();
- }
- };
- }
-
- private ListValueModel<AttributeOverride> buildDefaultAttributeOverridesListHolder() {
- return new ListAspectAdapter<Entity, AttributeOverride>(getSubjectHolder(), Entity.VIRTUAL_ATTRIBUTE_OVERRIDES_LIST) {
- @Override
- protected ListIterator<AttributeOverride> listIterator_() {
- return this.subject.virtualAttributeOverrides();
- }
-
- @Override
- protected int size_() {
- return this.subject.virtualAttributeOverridesSize();
- }
- };
- }
-
- private PostExecution<JoinColumnInJoiningStrategyDialog> buildEditJoinColumnPostExecution() {
- return new PostExecution<JoinColumnInJoiningStrategyDialog>() {
- public void execute(JoinColumnInJoiningStrategyDialog dialog) {
- if (dialog.wasConfirmed()) {
- editJoinColumn(dialog.getSubject());
- }
- }
- };
- }
-
- private JoinColumnsProvider buildJoinColumnsEditor() {
- return new JoinColumnsProvider();
- }
-
- protected WritablePropertyValueModel<Boolean> getOverrideVirtualOverrideHolder() {
- if (this.overrideVirtualOverrideHolder == null) {
- this.overrideVirtualOverrideHolder = buildOverrideVirtualOverrideHolder();
- }
- return this.overrideVirtualOverrideHolder;
- }
-
-
- private WritablePropertyValueModel<Boolean> buildOverrideVirtualOverrideHolder() {
- return new CachingTransformationWritablePropertyValueModel<BaseOverride, Boolean>(this.selectedOverrideHolder) {
- @Override
- public void setValue(Boolean value) {
- updateOverride(value.booleanValue());
- }
-
- @Override
- protected Boolean transform_(BaseOverride value) {
- return Boolean.valueOf(!value.isVirtual());
- }
- };
- }
-
- private String buildOverrideDisplayString(BaseOverride override) {
- String overrideType;
-
- // Retrieve the type
- if (override instanceof AssociationOverride) {
- overrideType = JptUiMappingsMessages.OverridesComposite_association;
- }
- else {
- overrideType = JptUiMappingsMessages.OverridesComposite_attribute;
- }
-
- // Format the name
- String name = override.getName();
-
- if (StringTools.stringIsEmpty(name)) {
- name = JptUiMappingsMessages.OverridesComposite_noName;
- }
-
- // Format: <name> (Attribute/Association Override)
- StringBuilder sb = new StringBuilder();
- sb.append(name);
- sb.append(" (");
- sb.append(overrideType);
- sb.append(") ");
- return sb.toString();
- }
-
- private ILabelProvider buildOverrideLabelProvider() {
- return new LabelProvider() {
- @Override
- public String getText(Object element) {
- return buildOverrideDisplayString((BaseOverride) element);
- }
- };
- }
-
- private Adapter buildOverridesAdapter() {
- return new AddRemoveListPane.AbstractAdapter() {
-
- public void addNewItem(ObjectListSelectionModel listSelectionModel) {
- //no way to add/remove/edit overrides, they are all defaulted in
- }
-
- public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) {
- //no way to add/remove/edit overrides, they are all defaulted in
- }
- };
- }
-
- private ListValueModel<BaseOverride> buildOverridesListHolder() {
- List<ListValueModel<? extends BaseOverride>> list = new ArrayList<ListValueModel<? extends BaseOverride>>();
- list.add(buildSpecifiedAttributeOverridesListHolder());
- list.add(buildDefaultAttributeOverridesListHolder());
- list.add(buildSpecifiedAssociationOverridesListHolder());
- list.add(buildDefaultAssociationOverridesListHolder());
- return new CompositeListValueModel<ListValueModel<? extends BaseOverride>, BaseOverride>(list);
- }
-
- private ListValueModel<BaseOverride> buildOverridesListModel() {
- return new ItemPropertyListValueModelAdapter<BaseOverride>(
- buildOverridesListHolder(),
- BaseOverride.NAME_PROPERTY
- );
- }
-
- private Transformer<BaseOverride, Control> buildPaneTransformer() {
- return new Transformer<BaseOverride, Control>() {
- public Control transform(BaseOverride override) {
-
- if (override instanceof AttributeOverride) {
- return OverridesComposite.this.columnPane;
- }
-
- if (override instanceof AssociationOverride) {
- return OverridesComposite.this.joinColumnsPane;
- }
-
- return null;
- }
- };
- }
-
- private ListValueModel<AssociationOverride> buildSpecifiedAssociationOverridesListHolder() {
- return new ListAspectAdapter<Entity, AssociationOverride>(getSubjectHolder(), Entity.SPECIFIED_ASSOCIATION_OVERRIDES_LIST) {
- @Override
- protected ListIterator<AssociationOverride> listIterator_() {
- return this.subject.specifiedAssociationOverrides();
- }
-
- @Override
- protected int size_() {
- return this.subject.specifiedAssociationOverridesSize();
- }
- };
- }
-
- private ListValueModel<AttributeOverride> buildSpecifiedAttributeOverridesListHolder() {
- return new ListAspectAdapter<Entity, AttributeOverride>(getSubjectHolder(), Entity.SPECIFIED_ATTRIBUTE_OVERRIDES_LIST) {
- @Override
- protected ListIterator<AttributeOverride> listIterator_() {
- return this.subject.specifiedAttributeOverrides();
- }
-
- @Override
- protected int size_() {
- return this.subject.specifiedAttributeOverridesSize();
- }
- };
- }
-
- private void editJoinColumn(JoinColumn joinColumn) {
-
- JoinColumnInJoiningStrategyDialog dialog =
- new JoinColumnInJoiningStrategyDialog(
- getShell(),
- this.selectedJoinColumnJoiningStrategyHolder.getValue(),
- joinColumn
- );
-
- dialog.openDialog(buildEditJoinColumnPostExecution());
- }
-
- private void editJoinColumn(JoinColumnInJoiningStrategyStateObject stateObject) {
- stateObject.updateJoinColumn(stateObject.getJoinColumn());
- }
-
-
- private void updateOverride(boolean selected) {
-
- if (isPopulating()) {
- return;
- }
-
- setPopulating(true);
-
- try {
- BaseOverride override = this.selectedOverrideHolder.getValue();
-
- BaseOverride newOverride = override.setVirtual(!selected);
- this.selectedOverrideHolder.setValue(newOverride);
- }
- finally {
- setPopulating(false);
- }
- }
-
- private class JoinColumnsProvider implements JoinColumnsEditor<JoinColumnJoiningStrategy> {
-
- public void addJoinColumn(JoinColumnJoiningStrategy subject) {
- OverridesComposite.this.addJoinColumn(subject);
- }
-
- public JoinColumn getDefaultJoinColumn(JoinColumnJoiningStrategy subject) {
- //association overrides have no default join column
- return null;
- }
-
- public String getDefaultPropertyName() {
- return JoinColumnJoiningStrategy.DEFAULT_JOIN_COLUMN_PROPERTY;
- }
-
- public void editJoinColumn(JoinColumnJoiningStrategy subject, JoinColumn joinColumn) {
- OverridesComposite.this.editJoinColumn(joinColumn);
- }
-
- public boolean hasSpecifiedJoinColumns(JoinColumnJoiningStrategy subject) {
- return subject.hasSpecifiedJoinColumns();
- }
-
- public void removeJoinColumns(JoinColumnJoiningStrategy subject, int[] selectedIndices) {
- for (int index = selectedIndices.length; --index >= 0; ) {
- subject.removeSpecifiedJoinColumn(selectedIndices[index]);
- }
- }
-
- public ListIterator<JoinColumn> specifiedJoinColumns(JoinColumnJoiningStrategy subject) {
- return subject.specifiedJoinColumns();
- }
-
- public int specifiedJoinColumnsSize(JoinColumnJoiningStrategy subject) {
- return subject.specifiedJoinColumnsSize();
- }
-
- public String getSpecifiedJoinColumnsListPropertyName() {
- return JoinColumnJoiningStrategy.SPECIFIED_JOIN_COLUMNS_LIST;
- }
+ protected Pane<AssociationOverride> buildAssociationOverridePane(PageBook pageBook, PropertyValueModel<AssociationOverride> associationOverrideHolder) {
+ return new AssociationOverrideComposite(this, associationOverrideHolder, pageBook);
}
}
\ No newline at end of file