blob: 332079a3f800b0f68c8bb2709cf5313f1c971315 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 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.xml.details;
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.jpt.core.internal.content.orm.OrmPackage;
import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitDefaults;
import org.eclipse.jpt.ui.internal.details.BaseJpaController;
import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
import org.eclipse.swt.SWT;
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.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
public class CascadePersistCheckBox extends BaseJpaController
{
private PersistenceUnitDefaults persistenceUnitDefaults;
private Adapter persistenceUnitDefaultsListener;
private Button button;
public CascadePersistCheckBox(Composite parent, CommandStack theCommandStack, TabbedPropertySheetWidgetFactory widgetFactory) {
super(parent, theCommandStack, widgetFactory);
buildPeristenceUnitDefaultsListener();
}
private void buildPeristenceUnitDefaultsListener() {
this.persistenceUnitDefaultsListener = new AdapterImpl() {
public void notifyChanged(Notification notification) {
persistenceUnitDefaultsChanged(notification);
}
};
}
@Override
protected void buildWidget(Composite parent) {
this.button = getWidgetFactory().createButton(
parent,
JptUiXmlMessages.XMLEntityMappingsPage_CascadePersistCheckBox,
SWT.CHECK);
this.button.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
CascadePersistCheckBox.this.cascadePersistSelectionChanged();
}
public void widgetDefaultSelected(SelectionEvent e) {
CascadePersistCheckBox.this.cascadePersistSelectionChanged();
}
});
}
void cascadePersistSelectionChanged() {
boolean cascadePersist = this.button.getSelection();
if (this.persistenceUnitDefaults.isCascadePersist() != cascadePersist) {
this.persistenceUnitDefaults.setCascadePersist(cascadePersist);
}
}
private void persistenceUnitDefaultsChanged(Notification notification) {
if (notification.getFeatureID(PersistenceUnitDefaults.class) ==
OrmPackage.PERSISTENCE_UNIT_DEFAULTS__CASCADE_PERSIST) {
Display.getDefault().asyncExec(
new Runnable() {
public void run() {
populate();
}
});
}
}
@Override
protected void engageListeners() {
if (this.persistenceUnitDefaults != null) {
this.persistenceUnitDefaults.eAdapters().add(this.persistenceUnitDefaultsListener);
}
}
@Override
protected void disengageListeners() {
if (this.persistenceUnitDefaults != null) {
this.persistenceUnitDefaults.eAdapters().remove(this.persistenceUnitDefaultsListener);
}
}
@Override
public void doPopulate(EObject obj) {
this.persistenceUnitDefaults = (PersistenceUnitDefaults) obj;
populateButton();
}
@Override
protected void doPopulate() {
populateButton();
}
private void populateButton() {
boolean cascadePersist = false;
if (this.persistenceUnitDefaults != null) {
cascadePersist = this.persistenceUnitDefaults.isCascadePersist();
}
if (this.button.getSelection() != cascadePersist) {
this.button.setSelection(cascadePersist);
}
}
@Override
public Control getControl() {
return this.button;
}
}