/******************************************************************************* * 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; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContext; import org.eclipse.persistence.tools.workbench.framework.ui.dialog.AbstractValidatingDialog; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWFieldTransformerAssociation; import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.FieldTransformerAssociationEditingPanel.FieldTransformerAssociationSpec; import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.TransformerEditingPanel.TransformerSpec; import org.eclipse.persistence.tools.workbench.uitools.app.ValueModel; public abstract class FieldTransformerAssociationEditingDialog extends AbstractValidatingDialog { // **************** Variables ********************************************* protected FieldTransformerAssociationEditor associationEditor; protected PropertyChangeListener validatingListener; private boolean noError = true; // **************** Constructors ****************************************** protected FieldTransformerAssociationEditingDialog( FieldTransformerAssociationEditor associationEditor, WorkbenchContext context ) { super(context); this.initialize(associationEditor); } // **************** Initialization **************************************** protected void initialize() { super.initialize(); this.setTitle(this.resourceRepository().getString("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.TITLE")); this.getOKAction().setEnabled(false); } protected void initialize(FieldTransformerAssociationEditor associationEditor) { this.associationEditor = associationEditor; this.validatingListener = this.buildValidatingListener(); this.transformerSpec().transformationMethodHolder().addPropertyChangeListener(ValueModel.VALUE, this.validatingListener); this.transformerSpec().transformerClassHolder().addPropertyChangeListener(ValueModel.VALUE, this.validatingListener); // doing this last so that the other holders engage their held value holders first this.transformerSpec().transformerTypeHolder().addPropertyChangeListener(ValueModel.VALUE, this.validatingListener); } private PropertyChangeListener buildValidatingListener() { return new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { FieldTransformerAssociationEditingDialog.this.updateMessage(); FieldTransformerAssociationEditingDialog.this.updateOKAction(); } }; } protected void updateMessage() { if (this.transformerSpec().transformerType() == TransformerSpec.NULL_TRANSFORMER) { this.setErrorMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.NULL_TRANSFORMER_ERROR"); } else if ( this.transformerSpec().transformerType() == TransformerSpec.TRANSFORMER_CLASS && this.transformerSpec().transformerClass() == null ) { this.setErrorMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.NULL_TRANSFORMER_CLASS_ERROR"); } else if ( this.transformerSpec().transformerType() == TransformerSpec.TRANSFORMATION_METHOD && this.transformerSpec().transformationMethod() == null ) { this.setErrorMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.NULL_TRANSFORMATION_METHOD_ERROR"); } else { this.clearErrorMessage(); } if ( this.transformerSpec().transformerType() == TransformerSpec.TRANSFORMATION_METHOD && this.transformerSpec().transformationMethod() != null && ! this.transformerSpec().transformationMethodIsValid() ) { this.setWarningMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.INVALID_TRANSFORMATION_METHOD_WARNING"); } else { this.clearWarningMessage(); } } /** Overridden to set error flag */ protected void setErrorMessage(String message) { super.setErrorMessage(message); this.noError = (message == null); } /** Overridden to clear error flag */ protected void clearErrorMessage() { super.clearErrorMessage(); this.noError = true; } private void updateOKAction() { this.getOKAction().setEnabled(this.noError); } protected String helpTopicId() { return "dialog.editFieldTransformerAssociation"; } // **************** Convenience ******************************************* private TransformerEditingPanel.TransformerSpec transformerSpec() { return this.associationEditor.transformerSpec(); } // **************** Member classes **************************************** public static interface FieldTransformerAssociationEditor extends FieldTransformerAssociationSpec { void commit(); } public static abstract class AbstractFieldTransformerAssociationEditor implements FieldTransformerAssociationEditor { // **************** Variables ***************************************** protected MWFieldTransformerAssociation association; private TransformerEditingDialog.FieldTransformerEditor transformerEditor; // **************** Constructors ************************************** protected AbstractFieldTransformerAssociationEditor(MWFieldTransformerAssociation association) { super(); this.association = association; this.transformerEditor = new TransformerEditingDialog.FieldTransformerEditor(association); } // **************** FieldTransformerAssociationSpec impl ************** public TransformerSpec transformerSpec() { return this.transformerEditor; } // **************** Editing ******************************************* public void commit() { this.transformerEditor.commit(); } } }