/*******************************************************************************
* 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.oxm.mappings.nullpolicy;
import org.eclipse.persistence.internal.oxm.NullCapableValue;
import org.eclipse.persistence.internal.oxm.XPathNode;
/**
* PUBLIC:
* <b>Description</b>:
* This null policy is the default implementation class.<br>
* Marshal:<br>
* The boolean value of the isSet() state of a node has no effect on whether a node will be written out
* for a null value - a set is always performed unless the isSetPerformedForAbsentNode flag
* is set to false for absent nodes.<br>
* Unmarshal:<br>
*
* <p><b>The following instance field can be set on top of the two from AbstractNullPolicy</b>:<ul>
* <li>isSetPerformedForAbsentNode: </li>
* </ul>
* <p>
* <b>Usage</b>:<br>
* <p><b>Unmarshal null direct element xsi:nil node</b>:
*
* <p><em>Code Sample</em><br>
* <code>
* XMLDescriptor aDescriptor = new XMLDescriptor();<br>
* aDescriptor.setJavaClass(Employee.class);<br>
* aDescriptor.setDefaultRootElement("employee");<br>
* XMLDirectMapping firstNameMapping = new XMLDirectMapping();<br>
* firstNameMapping.setAttributeName("firstname");<br>
* firstNameMapping.setXPath("first-name/text()");<br>
* AbstractNullPolicy aNullPolicy = new NullPolicy();<br>
* aDescriptor.addMapping(firstNameMapping);<br>
* aNullPolicy.setSetPerformedForAbsentNode(false); // no effect<br>
* aNullPolicy.setNullRepresentedByEmptyNodeNode(false); // default or no effect<br>
* aNullPolicy.setNullRepresentedByXsiNil(false); // default or no effect<br>
* </code>
* <p><em>Input XML</em><br>
* <code>
* <employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><br>
* <firstname xsi:nil=true/><br>
* </employee><br>
* </code>
* <p><em>Output Object State</em><br>
* <code>
* anEmployee.getFirstname() = null<br>
* anEmployee.isSet(firstname) = true<br>
* </code>
* <p><b>Marshal null composite object (isSet=true) as empty node</b>: .
*
* <p><em>Code Sample</em><br>
* <code>
* XMLDescriptor aDescriptor = new XMLDescriptor();<br>
* aDescriptor.setJavaClass(Team.class);<br>
* aDescriptor.setDefaultRootElement("team");<br>
* XMLCompositeObjectMapping aManagerMapping = new XMLCompositeObjectMapping();<br>
* aManagerMapping.setAttributeName("manager");<br>
* aManagerMapping.setXPath("manager/text()");<br>
* // do not modify the default NullPolicy or the 3 boolean flags<br>
* AbstractNullPolicy aNullPolicy = afirstNameMapping.getNullPolicy();<br>
* aDescriptor.addMapping(aManagerMapping);<br>
* aNullPolicy.setMarshalNullRepresentation(XMLNullRepresentationType.EMPTY_NODE);<br>
* </code>
*
* <p><em>Input Object State</em><br>
* <code>
* aTeam.getManager() = null<br>
* aTeam.isSet(manager) = no effect<br>
* </code>
* <p><em>Output XML</em><br>
* <code>
* <team xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><br>
* <manager/><br>
* </team><br>
* </code>
*
* @see org.eclipse.persistence.internal.oxm.NullCapableValue
* @since Oracle TopLink 11<i>g</i> Release 1 (11.1.1)
*/
public class NullPolicy extends AbstractNullPolicy {
/**
* Default Constructor
*/
public NullPolicy() {
super();
}
/**
* Specific Constructor to set the Unmarshal flags
* @param anIsSetMethodName
* @param bIsSetPerformedForAbsentNode
* @param bIsNullRepresentedByEmptyNode
* @param bIsNullRepresentedByXsiNil
*/
public NullPolicy(String anIsSetMethodName, //
boolean bIsSetPerformedForAbsentNode, boolean bIsNullRepresentedByEmptyNode, boolean bIsNullRepresentedByXsiNil) {
this();
setSetPerformedForAbsentNode(bIsSetPerformedForAbsentNode);
setNullRepresentedByEmptyNode(bIsNullRepresentedByEmptyNode);
setNullRepresentedByXsiNil(bIsNullRepresentedByXsiNil);
}
/**
* Specific Constructor to set both the Marshal enum and the Unmarshal flags
* @param anIsSetMethodName
* @param bIsSetPerformedForAbsentNode
* @param bIsNullRepresentedByEmptyNode
* @param bIsNullRepresentedByXsiNil
* @param aMarshalNullRepresentation
*/
public NullPolicy(String anIsSetMethodName, //
boolean bIsSetPerformedForAbsentNode, boolean bIsNullRepresentedByEmptyNode, boolean bIsNullRepresentedByXsiNil, //
XMLNullRepresentationType aMarshalNullRepresentation) {
this(anIsSetMethodName, bIsSetPerformedForAbsentNode, bIsNullRepresentedByEmptyNode, bIsNullRepresentedByXsiNil);
setMarshalNullRepresentation(aMarshalNullRepresentation);
}
public void xPathNode(XPathNode xPathNode, NullCapableValue nullCapableValue) {
// No operation for non-isSet modes
}
/**
* Set the isSetPerformedForAbsentNode flag
* @param performSet
*/
public void setSetPerformedForAbsentNode(boolean performSet) {
isSetPerformedForAbsentNode = performSet;
}
}