org.simpleframework.xml.convert.Reference Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of simple-xml Show documentation
Show all versions of simple-xml Show documentation
Simple is a high performance XML serialization and configuration framework for Java
/*
* Reference.java January 2010
*
* Copyright (C) 2010, Niall Gallagher
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package org.simpleframework.xml.convert;
import org.simpleframework.xml.strategy.Value;
/**
* The Reference
object represents a value that holds
* an object instance. If an object instance is to be provided from
* a Strategy
implementation it must be wrapped in a
* value object. The value object can then provide the details of
* the instance and the actual object instance to the serializer.
*
* @author Niall Gallagher
*/
class Reference implements Value {
/**
* This represents the original value returned from a strategy.
*/
private Value value;
/**
* This represents the object instance that this represents.
*/
private Object data;
/**
* This is the actual type of the reference that is represented.
*/
private Class actual;
/**
* Constructor for a Reference
object. To create
* this a value and an object instance is required. The value
* provided may be null, but the instance should be a valid
* object instance to be used by the serializer.
*
* @param value this is the original value from a strategy
* @param data this is the object instance that is wrapped
* @param actual this is the overriding type of the reference
*/
public Reference(Value value, Object data, Class actual){
this.actual = actual;
this.value = value;
this.data = data;
}
/**
* This will return the length of an array reference. Because
* the value will represent the value itself the length is
* never used, as no instance needs to be created.
*
* @return this will always return zero for a reference
*/
public int getLength() {
return 0;
}
/**
* This is the type of the object instance this represents. The
* type returned by this is used to instantiate an object which
* will be set on this value and the internal graph maintained.
*
* @return the type of the object that must be instantiated
*/
public Class getType() {
if(data != null) {
return data.getClass();
}
return actual;
}
/**
* This returns the actual object instance that is held by this
* reference object.
*/
public Object getValue() {
return data;
}
/**
* This will always return true as this Value
object
* will always contain an object instance. Returning true from
* this method tells the serializer that there is no need to
* actually perform any further deserialization.
*
* @return this always returns true as this will be a reference
*/
public boolean isReference() {
return true;
}
/**
* This is used to set the value of the object. If the internal
* Value
is not null then the internal value will
* have the instance set also.
*
* @param data this is the object instance that is to be set
*/
public void setValue(Object data) {
if(value != null) {
value.setValue(data);
}
this.data = data;
}
}