blob: 27f8cd2aaf0ad6cf5d5b59428c6c65ff28ccd388 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2013 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0, which accompanies this distribution
* and is available at https://www.eclipse.org/legal/epl-2.0/.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.jpa.ui.internal.details;
import org.eclipse.jpt.common.ui.internal.widgets.Pane;
import org.eclipse.jpt.common.utility.internal.iterable.SuperListIterableWrapper;
import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter;
import org.eclipse.jpt.common.utility.internal.model.value.ListPropertyValueModelAdapter;
import org.eclipse.jpt.common.utility.iterable.ListIterable;
import org.eclipse.jpt.common.utility.model.value.ListValueModel;
import org.eclipse.jpt.common.utility.model.value.PropertyValueModel;
import org.eclipse.jpt.common.utility.model.value.ModifiablePropertyValueModel;
import org.eclipse.jpt.jpa.core.context.SpecifiedJoinColumn;
import org.eclipse.jpt.jpa.core.context.SpecifiedJoinColumnRelationship;
import org.eclipse.jpt.jpa.core.context.SpecifiedJoinColumnRelationshipStrategy;
import org.eclipse.jpt.jpa.core.context.JoinColumn;
import org.eclipse.jpt.jpa.core.context.JoinColumnRelationshipStrategy;
import org.eclipse.jpt.jpa.ui.details.JptJpaUiDetailsMessages;
import org.eclipse.swt.widgets.Composite;
public class JoiningStrategyJoinColumnsWithOverrideOptionComposite
extends Pane<JoinColumnRelationshipStrategy>
{
private JoiningStrategyJoinColumnsComposite joiningStrategyComposite;
public JoiningStrategyJoinColumnsWithOverrideOptionComposite(
Pane<?> parentPane,
PropertyValueModel<JoinColumnRelationshipStrategy> subjectHolder,
Composite parent) {
super(parentPane, subjectHolder, parent);
}
@Override
protected void initializeLayout(Composite container) {
// Override Default Join Columns check box
addCheckBox(
container,
JptJpaUiDetailsMessages.JOINING_STRATEGY_JOIN_COLUMNS_COMPOSITE_OVERRIDE_DEFAULT_JOIN_COLUMNS,
buildOverrideDefaultJoinColumnHolder(),
null
);
this.joiningStrategyComposite = new JoiningStrategyJoinColumnsComposite(this, container);
}
void setSelectedJoinColumn(SpecifiedJoinColumn joinColumn) {
this.joiningStrategyComposite.setSelectedJoinColumn(joinColumn);
}
private ModifiablePropertyValueModel<Boolean> buildOverrideDefaultJoinColumnHolder() {
return new OverrideDefaultJoinColumnHolder();
}
ListValueModel<JoinColumn> buildSpecifiedJoinColumnsListHolder() {
return new ListAspectAdapter<JoinColumnRelationshipStrategy, JoinColumn>(
getSubjectHolder(), JoinColumnRelationshipStrategy.SPECIFIED_JOIN_COLUMNS_LIST) {
@Override
protected ListIterable<JoinColumn> getListIterable() {
return new SuperListIterableWrapper<JoinColumn>(this.subject.getSpecifiedJoinColumns());
}
@Override
protected int size_() {
return this.subject.getSpecifiedJoinColumnsSize();
}
};
}
private class OverrideDefaultJoinColumnHolder
extends ListPropertyValueModelAdapter<Boolean>
implements ModifiablePropertyValueModel<Boolean>
{
public OverrideDefaultJoinColumnHolder() {
super(buildSpecifiedJoinColumnsListHolder());
}
@Override
protected Boolean buildValue() {
return Boolean.valueOf(this.listModel.size() > 0);
}
public void setValue(Boolean value) {
updateJoinColumns(value.booleanValue());
}
private void updateJoinColumns(boolean selected) {
if (isPopulating()) {
return;
}
setPopulating(true);
try {
SpecifiedJoinColumnRelationshipStrategy subject = (SpecifiedJoinColumnRelationshipStrategy) getSubject();
if (selected) {
if (subject.getDefaultJoinColumn() != null) {//TODO can this be null, disable override default check box? or have it checked if there are not default join columns?
subject.convertDefaultJoinColumnsToSpecified();
JoiningStrategyJoinColumnsWithOverrideOptionComposite.this.setSelectedJoinColumn(subject.getSpecifiedJoinColumn(0));
}
}
else {
subject.clearSpecifiedJoinColumns();
}
}
finally {
setPopulating(false);
}
}
}
}