/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational;
import java.awt.Component;
import java.util.Iterator;
import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContext;
import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWColumn;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWRelationalFieldTransformerAssociation;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWRelationalTransformationMapping;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.FieldTransformerAssociationEditingDialog;
import org.eclipse.persistence.tools.workbench.uitools.app.BufferedPropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.PropertyAspectAdapter;
import org.eclipse.persistence.tools.workbench.uitools.app.PropertyValueModel;
import org.eclipse.persistence.tools.workbench.uitools.app.ValueModel;
final class RelationalFieldTransformerAssociationEditingDialog
extends FieldTransformerAssociationEditingDialog
{
// **************** Static creators ***************************************
static void promptToAddFieldTransformerAssociation(
MWRelationalTransformationMapping transformationMapping, WorkbenchContext context
) {
MWRelationalFieldTransformerAssociation association =
transformationMapping.buildEmptyFieldTransformerAssociation();
RelationalFieldTransformerAssociationEditor editor =
new RelationalFieldTransformerAssociationEditor(association);
RelationalFieldTransformerAssociationEditingDialog dialog
= new RelationalFieldTransformerAssociationEditingDialog(editor, context);
dialog.show();
if (dialog.wasConfirmed()) {
editor.commit();
transformationMapping.addFieldTransformerAssociation(association);
}
}
static void promptToEditFieldTransformerAssociation(
MWRelationalFieldTransformerAssociation association, WorkbenchContext context
) {
RelationalFieldTransformerAssociationEditor editor =
new RelationalFieldTransformerAssociationEditor(association);
RelationalFieldTransformerAssociationEditingDialog dialog
= new RelationalFieldTransformerAssociationEditingDialog(editor, context);
dialog.show();
if (dialog.wasConfirmed()) {
editor.commit();
}
}
// **************** Constructors ******************************************
private RelationalFieldTransformerAssociationEditingDialog(
RelationalFieldTransformerAssociationEditor associationEditor,
WorkbenchContext context
) {
super(associationEditor, context);
}
// **************** Initialization ****************************************
protected void initialize(FieldTransformerAssociationEditor associationEditor) {
super.initialize(associationEditor);
this.associationEditor().fieldHolder().addPropertyChangeListener(ValueModel.VALUE, this.validatingListener);
}
protected Component buildMainPanel() {
return new RelationalFieldTransformerAssociationEditingPanel(this.associationEditor(), this.getWorkbenchContext());
}
protected void updateMessage() {
super.updateMessage();
if (this.associationEditor().field() == null) {
this.setErrorMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.NULL_FIELD_ERROR");
}
if (this.associationEditor().fieldIsDuplicate()) {
this.setWarningMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.DUPLICATE_FIELD_WARNING");
}
}
// **************** Behavior **********************************************
protected void prepareToShow() {
pack();
setSize(Math.max(600, getWidth()), getHeight());
this.setLocationRelativeTo(this.getParent());
}
// **************** Convenience *******************************************
private RelationalFieldTransformerAssociationEditor associationEditor() {
return (RelationalFieldTransformerAssociationEditor) this.associationEditor;
}
// **************** Member classes ****************************************
private static class RelationalFieldTransformerAssociationEditor
extends AbstractFieldTransformerAssociationEditor
implements RelationalFieldTransformerAssociationEditingPanel.RelationalFieldTransformerAssociationSpec
{
// **************** Variables *****************************************
private BufferedPropertyValueModel fieldHolder;
private BufferedPropertyValueModel.Trigger fieldTrigger;
// **************** Constructors **************************************
protected RelationalFieldTransformerAssociationEditor(MWRelationalFieldTransformerAssociation association) {
super(association);
this.fieldTrigger = new BufferedPropertyValueModel.Trigger();
}
// **************** Convenience ***************************************
private MWRelationalFieldTransformerAssociation association() {
return (MWRelationalFieldTransformerAssociation) this.association;
}
private MWRelationalTransformationMapping transformationMapping() {
return (MWRelationalTransformationMapping) this.association().getMapping();
}
// **************** "Field" *******************************************
public PropertyValueModel fieldHolder() {
if (this.fieldHolder == null) {
this.fieldHolder = this.buildFieldHolder();
}
return this.fieldHolder;
}
private BufferedPropertyValueModel buildFieldHolder() {
return new BufferedPropertyValueModel(this.buildInternalFieldHolder(), this.fieldTrigger);
}
private PropertyValueModel buildInternalFieldHolder() {
return new PropertyAspectAdapter(MWRelationalFieldTransformerAssociation.FIELD_PROPERTY, this.association()) {
protected Object getValueFromSubject() {
return ((MWRelationalFieldTransformerAssociation) this.subject).getColumn();
}
protected void setValueOnSubject(Object value) {
((MWRelationalFieldTransformerAssociation) this.subject).setColumn((MWColumn) value);
}
};
}
protected MWColumn field() {
return (MWColumn) this.fieldHolder().getValue();
}
public Iterator candidateFields() {
return this.transformationMapping().candidateColumns();
}
public boolean fieldIsDuplicate() {
return this.association().duplicateField(this.field());
}
// **************** Editing *******************************************
public void commit() {
super.commit();
this.fieldTrigger.accept();
}
}
}