Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java')
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java337
1 files changed, 337 insertions, 0 deletions
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
new file mode 100644
index 0000000000..e150c6766b
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java
@@ -0,0 +1,337 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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.Iterator;
+import java.util.List;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jpt.core.internal.mappings.IAttributeOverride;
+import org.eclipse.jpt.core.internal.mappings.IEmbedded;
+import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
+import org.eclipse.jpt.ui.internal.IJpaHelpContextIds;
+import org.eclipse.jpt.ui.internal.details.BaseJpaComposite;
+import org.eclipse.jpt.ui.internal.mappings.JpaUiMappingsMessages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
+
+public class EmbeddedAttributeOverridesComposite extends BaseJpaComposite
+{
+ private ListViewer listViewer;
+
+ private IEmbedded embedded;
+ private Adapter embeddedListener;
+
+ private IAttributeOverride attributeOverride;
+ private Adapter attributeOverrideListener;
+
+ protected ColumnComposite columnComposite;
+
+ private Button overrideDefaultButton;
+
+ public EmbeddedAttributeOverridesComposite(Composite parent, CommandStack commandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
+ super(parent, SWT.NULL, commandStack, widgetFactory);
+ this.embeddedListener = buildEmbeddedListener();
+ this.attributeOverrideListener = buildAttributeOverrideListener();
+ }
+
+ private Adapter buildEmbeddedListener() {
+ return new AdapterImpl() {
+ public void notifyChanged(Notification notification) {
+ embeddedChanged(notification);
+ }
+ };
+ }
+
+ private Adapter buildAttributeOverrideListener() {
+ return new AdapterImpl() {
+ public void notifyChanged(Notification notification) {
+ attributeOverrideChanged(notification);
+ }
+ };
+ }
+
+
+ @Override
+ protected void initializeLayout(Composite composite) {
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginWidth = 0;
+ composite.setLayout(layout);
+
+ Group attributeOverridesGroup = getWidgetFactory().createGroup(
+ composite, JpaUiMappingsMessages.AttributeOverridesComposite_attributeOverrides);
+ attributeOverridesGroup.setLayout(new GridLayout(2, true));
+ GridData gridData = new GridData();
+ gridData.horizontalAlignment = SWT.FILL;
+ gridData.verticalAlignment = SWT.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace= true;
+ attributeOverridesGroup.setLayoutData(gridData);
+
+ this.listViewer = buildAttributeOverridesListViewer(attributeOverridesGroup);
+ gridData = new GridData();
+ gridData.verticalSpan = 2;
+ gridData.horizontalAlignment = SWT.FILL;
+ gridData.verticalAlignment = SWT.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace= true;
+ this.listViewer.getList().setLayoutData(gridData);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(this.listViewer.getList(), IJpaHelpContextIds.MAPPING_EMBEDDED_ATTRIBUTE_OVERRIDES);
+
+ this.overrideDefaultButton = getWidgetFactory().createButton(attributeOverridesGroup, "Override Default", SWT.CHECK);
+ this.overrideDefaultButton.addSelectionListener(buildOverrideDefaultSelectionListener());
+ gridData = new GridData();
+ gridData.verticalAlignment = SWT.BEGINNING;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.horizontalAlignment = SWT.FILL;
+ this.overrideDefaultButton.setLayoutData(gridData);
+
+
+ this.columnComposite = new ColumnComposite(attributeOverridesGroup, commandStack, getWidgetFactory());
+ gridData = new GridData();
+ gridData.verticalAlignment = SWT.BEGINNING;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.horizontalAlignment = SWT.FILL;
+ this.columnComposite.getControl().setLayoutData(gridData);
+
+ }
+
+ private SelectionListener buildOverrideDefaultSelectionListener() {
+ return new SelectionListener(){
+
+ public void widgetSelected(SelectionEvent e) {
+ overrideDefaultButtonSelected(e);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ overrideDefaultButtonSelected(e);
+ }
+ };
+ }
+
+ private void overrideDefaultButtonSelected(SelectionEvent e) {
+ boolean selection = this.overrideDefaultButton.getSelection();
+ if (selection) {
+ int index = this.embedded.getSpecifiedAttributeOverrides().size();
+ IAttributeOverride attributeOverride = this.embedded.createAttributeOverride(index);
+ this.embedded.getSpecifiedAttributeOverrides().add(attributeOverride);
+ attributeOverride.setName(this.attributeOverride.getName());
+ attributeOverride.getColumn().setSpecifiedName(this.attributeOverride.getColumn().getName());
+ }
+ else {
+ this.embedded.getSpecifiedAttributeOverrides().remove(this.attributeOverride);
+ }
+ }
+
+
+ private ListViewer buildAttributeOverridesListViewer(Composite parent) {
+ ListViewer listViewer = new ListViewer(parent, SWT.SINGLE | SWT.BORDER);
+ listViewer.setLabelProvider(buildAttributeOverridesLabelProvider());
+ listViewer.setContentProvider(buildAttributeOverridesContentProvider());
+
+ listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ attributeOverridesListSelectionChanged(event);
+ }
+ });
+
+ return listViewer;
+ }
+
+ protected void attributeOverridesListSelectionChanged(SelectionChangedEvent event) {
+ if (((StructuredSelection) event.getSelection()).isEmpty()) {
+ this.columnComposite.populate(null);
+ this.columnComposite.enableWidgets(false);
+ this.overrideDefaultButton.setSelection(false);
+ this.overrideDefaultButton.setEnabled(false);
+ }
+ else {
+ this.attributeOverride = getSelectedAttributeOverride();
+ boolean specifiedOverride = this.embedded.getSpecifiedAttributeOverrides().contains(this.attributeOverride);
+ this.overrideDefaultButton.setSelection(specifiedOverride);
+ this.columnComposite.populate(this.attributeOverride.getColumn());
+ this.columnComposite.enableWidgets(specifiedOverride);
+ this.overrideDefaultButton.setEnabled(true);
+ }
+ }
+
+ private ILabelProvider buildAttributeOverridesLabelProvider() {
+ return new LabelProvider() {
+ public String getText(Object element) {
+ //TODO also display column name somehow
+ return ((IAttributeOverride) element).getName();
+ }
+ };
+ }
+
+
+ private IContentProvider buildAttributeOverridesContentProvider() {
+ return new IStructuredContentProvider() {
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ public void dispose() {
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return ((IEmbedded) inputElement).getAttributeOverrides().toArray();
+ }
+ };
+ }
+
+ private IAttributeOverride getSelectedAttributeOverride() {
+ return (IAttributeOverride) ((StructuredSelection) this.listViewer.getSelection()).getFirstElement();
+ }
+
+
+ public void doPopulate(EObject obj) {
+ this.embedded = (IEmbedded) obj;
+ if (this.embedded == null) {
+ this.attributeOverride = null;
+ this.columnComposite.populate(null);
+ return;
+ }
+
+ if (this.listViewer.getInput() != this.embedded) {
+ this.listViewer.setInput(this.embedded);
+ }
+ if (!this.embedded.getAttributeOverrides().isEmpty()) {
+ if (this.listViewer.getSelection().isEmpty()) {
+ IAttributeOverride attributeOverride = this.embedded.getAttributeOverrides().get(0);
+ this.listViewer.setSelection(new StructuredSelection(attributeOverride));
+ }
+ else {
+ this.columnComposite.enableWidgets(true);
+ this.columnComposite.populate(((IAttributeOverride)((StructuredSelection) this.listViewer.getSelection()).getFirstElement()).getColumn());
+ }
+ }
+ else {
+ this.columnComposite.populate(null);
+ this.columnComposite.enableWidgets(false);
+ }
+ }
+
+ @Override
+ protected void doPopulate() {
+ this.columnComposite.doPopulate();
+ }
+
+ @Override
+ protected void engageListeners() {
+ if (this.embedded != null) {
+ this.embedded.eAdapters().add(this.embeddedListener);
+ for (IAttributeOverride attributeOverride : this.embedded.getAttributeOverrides()) {
+ attributeOverride.eAdapters().add(this.attributeOverrideListener);
+ }
+ }
+ }
+
+ @Override
+ protected void disengageListeners() {
+ if (this.embedded != null) {
+ this.embedded.eAdapters().remove(this.embeddedListener);
+ for (IAttributeOverride attributeOverride : this.embedded.getAttributeOverrides()) {
+ attributeOverride.eAdapters().remove(this.attributeOverrideListener);
+ }
+ }
+ }
+
+
+ protected void embeddedChanged(Notification notification) {
+ switch (notification.getFeatureID(IEmbedded.class)) {
+ case JpaCoreMappingsPackage.IEMBEDDED__SPECIFIED_ATTRIBUTE_OVERRIDES :
+ case JpaCoreMappingsPackage.IEMBEDDED__DEFAULT_ATTRIBUTE_OVERRIDES :
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ if (listViewer.getList().isDisposed()) {
+ return;
+ }
+ listViewer.refresh();
+ columnComposite.enableWidgets(!listViewer.getSelection().isEmpty());
+ if (listViewer.getSelection().isEmpty()) {
+ columnComposite.populate(null);
+ }
+ }
+ });
+ if (notification.getEventType() == Notification.ADD) {
+ ((IAttributeOverride) notification.getNewValue()).eAdapters().add(this.attributeOverrideListener);
+ final Object newValue = notification.getNewValue();
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ if (listViewer.getList().isDisposed()) {
+ return;
+ }
+ listViewer.setSelection(new StructuredSelection(newValue));
+ }
+ });
+ }
+ else if (notification.getEventType() == Notification.ADD_MANY) {
+ List addedList = (List) notification.getNewValue();
+ for (Iterator<IAttributeOverride> i = addedList.iterator(); i.hasNext(); ) {
+ IAttributeOverride override = i.next();
+ override.eAdapters().add(this.attributeOverrideListener);
+ }
+ }
+ else if (notification.getEventType() == Notification.REMOVE) {
+ ((IAttributeOverride) notification.getOldValue()).eAdapters().remove(this.attributeOverrideListener);
+ }
+ else if (notification.getEventType() == Notification.REMOVE_MANY) {
+ List removedList = (List) notification.getOldValue();
+ for (Iterator<IAttributeOverride> i = removedList.iterator(); i.hasNext(); ) {
+ IAttributeOverride override = i.next();
+ override.eAdapters().remove(this.attributeOverrideListener);
+ }
+ }
+ break;
+ default :
+ break;
+ }
+ }
+
+ protected void attributeOverrideChanged(Notification notification) {
+ switch (notification.getFeatureID(IAttributeOverride.class)) {
+ case JpaCoreMappingsPackage.IATTRIBUTE_OVERRIDE__NAME :
+ final IAttributeOverride attributeOverride = (IAttributeOverride) notification.getNotifier();
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ listViewer.refresh(attributeOverride);
+ }
+ });
+ break;
+ default :
+ break;
+ }
+ }
+
+ public void dispose() {
+ this.columnComposite.dispose();
+ super.dispose();
+ }
+}

Back to the top