/*******************************************************************************
* 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.xml;
import java.awt.Component;
import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContext;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWXmlFieldTransformerAssociation;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWXmlTransformationMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.xml.MWXmlField;
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;
public final class XmlFieldTransformerAssociationEditingDialog
extends FieldTransformerAssociationEditingDialog
{
// **************** Static creators ***************************************
public static void promptToAddFieldTransformerAssociation(
MWXmlTransformationMapping transformationMapping, WorkbenchContext context
) {
MWXmlFieldTransformerAssociation association =
transformationMapping.buildEmptyFieldTransformerAssociation();
XmlFieldTransformerAssociationEditor editor =
new XmlFieldTransformerAssociationEditor(association);
XmlFieldTransformerAssociationEditingDialog dialog
= new XmlFieldTransformerAssociationEditingDialog(editor, context);
dialog.show();
if (dialog.wasConfirmed()) {
editor.commit();
transformationMapping.addFieldTransformerAssociation(association);
}
}
public static void promptToEditFieldTransformerAssociation(
MWXmlFieldTransformerAssociation association, WorkbenchContext context
) {
XmlFieldTransformerAssociationEditor editor =
new XmlFieldTransformerAssociationEditor(association);
XmlFieldTransformerAssociationEditingDialog dialog
= new XmlFieldTransformerAssociationEditingDialog(editor, context);
dialog.show();
if (dialog.wasConfirmed()) {
editor.commit();
}
}
// **************** Constructors ******************************************
private XmlFieldTransformerAssociationEditingDialog(
XmlFieldTransformerAssociationEditor associationEditor,
WorkbenchContext context
) {
super(associationEditor, context);
}
// **************** Initialization ****************************************
protected void initialize(FieldTransformerAssociationEditor associationEditor) {
super.initialize(associationEditor);
this.associationEditor().xpathHolder().addPropertyChangeListener(ValueModel.VALUE, this.validatingListener);
}
protected Component buildMainPanel() {
return new XmlFieldTransformerAssociationEditingPanel(this.associationEditor(), this.getWorkbenchContext());
}
protected void updateMessage() {
super.updateMessage();
if (this.associationEditor().xpath().equals("")) {
this.setErrorMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.NULL_XPATH_ERROR");
}
if (this.associationEditor().xpathIsDuplicate()) {
this.setWarningMessageKey("FIELD_TRANSFORMER_ASSOCIATION_EDITING_DIALOG.DUPLICATE_XPATH_WARNING");
}
}
// **************** Behavior **********************************************
protected void prepareToShow() {
pack();
setSize(Math.max(600, getWidth()), getHeight());
this.setLocationRelativeTo(this.getParent());
}
// **************** Convenience *******************************************
private XmlFieldTransformerAssociationEditor associationEditor() {
return (XmlFieldTransformerAssociationEditor) this.associationEditor;
}
// **************** Member classes ****************************************
private static class XmlFieldTransformerAssociationEditor
extends AbstractFieldTransformerAssociationEditor
implements XmlFieldTransformerAssociationEditingPanel.XmlFieldTransformerAssociationSpec
{
// **************** Variables *****************************************
private ValueModel xmlFieldHolder;
private BufferedPropertyValueModel xpathHolder;
private BufferedPropertyValueModel.Trigger xpathTrigger;
// **************** Constructors **************************************
protected XmlFieldTransformerAssociationEditor(MWXmlFieldTransformerAssociation association) {
super(association);
this.xpathTrigger = new BufferedPropertyValueModel.Trigger();
}
// **************** Convenience ***************************************
private MWXmlFieldTransformerAssociation association() {
return (MWXmlFieldTransformerAssociation) this.association;
}
private MWXmlTransformationMapping transformationMapping() {
return (MWXmlTransformationMapping) this.association().getMapping();
}
// **************** Xml field *****************************************
public ValueModel xmlFieldHolder() {
if (this.xmlFieldHolder == null) {
this.xmlFieldHolder = this.buildXmlFieldHolder();
}
return this.xmlFieldHolder;
}
private PropertyValueModel buildXmlFieldHolder() {
return new PropertyAspectAdapter(MWXmlFieldTransformerAssociation.FIELD_PROPERTY, this.association()) {
protected Object getValueFromSubject() {
return ((MWXmlFieldTransformerAssociation) this.subject).getXmlField();
}
};
}
public MWXmlField xmlField() {
return (MWXmlField) this.xmlFieldHolder.getValue();
}
// **************** Xpath *********************************************
public PropertyValueModel xpathHolder() {
if (this.xpathHolder == null) {
this.xpathHolder = this.buildXpathHolder();
}
return this.xpathHolder;
}
private BufferedPropertyValueModel buildXpathHolder() {
return new BufferedPropertyValueModel(this.buildInternalXpathHolder(), this.xpathTrigger);
}
private PropertyValueModel buildInternalXpathHolder() {
return new PropertyAspectAdapter(this.xmlFieldHolder(), MWXmlField.XPATH_PROPERTY) {
protected Object getValueFromSubject() {
return ((MWXmlField) this.subject).getXpath();
}
protected void setValueOnSubject(Object value) {
((MWXmlField) this.subject).setXpath((String) value);
}
};
}
public String xpath() {
return (String) this.xpathHolder.getValue();
}
public boolean xpathIsDuplicate() {
return this.association().duplicateXpath(this.xpath());
}
// **************** Editing *******************************************
public void commit() {
super.commit();
this.xpathTrigger.accept();
}
}
}