/*******************************************************************************
* 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.mappingsmodel.mapping.relational;
import org.eclipse.persistence.tools.workbench.mappingsmodel.MWModel;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWMappingDescriptor;
import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWColumnHandle;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWConverter;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWConverterMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWDirectMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClassAttribute;
import org.eclipse.persistence.tools.workbench.mappingsmodel.project.relational.MWRelationalProject;
import org.eclipse.persistence.tools.workbench.utility.filters.Filter;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.mappings.DirectToFieldMapping;
import org.eclipse.persistence.mappings.converters.ObjectTypeConverter;
import org.eclipse.persistence.mappings.converters.SerializedObjectConverter;
import org.eclipse.persistence.mappings.converters.TypeConversionConverter;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.oxm.mappings.XMLTransformationMapping;
public final class MWDirectToFieldMapping
extends MWRelationalDirectMapping
{
// **************** Constructors ***************
/** Default constructor - for TopLink use only */
private MWDirectToFieldMapping() {
super();
}
MWDirectToFieldMapping(MWMappingDescriptor parent, MWClassAttribute attribute, String name) {
super(parent, attribute, name);
}
// **************** MWQueryable implementation ***************
/** Direct mappings can never have sub queryable elements */
public boolean allowsChildren() {
return false;
}
public boolean allowsOuterJoin() {
return allowsChildren();
}
/** A direct mapping will always be a leaf */
public boolean isLeaf(Filter queryableFilter) {
return true;
}
public boolean isTraversableForReadAllQueryOrderable() {
return true;
}
public boolean isValidForReadAllQueryOrderable() {
return true;
}
public boolean isValidForReportQueryAttribute() {
return true;
}
public boolean isTraversableForReportQueryAttribute() {
return true;
}
public boolean isTraversableForQueryExpression() {
return true;
}
public boolean isValidForQueryExpression() {
return true;
}
public String iconKey() {
return getConverter().iconKey();
}
public MWMappingDescriptor getParentDescriptor() {
return (MWMappingDescriptor) getParent();
}
public String accessibleNameKey() {
return getConverter().accessibleNameKey();
}
// ***************** Morphing ******************
public MWDirectMapping asMWDirectMapping() {
if (!getConverter().getType().equals(MWConverter.NO_CONVERTER)) {
this.setNullConverter();
}
return this;
}
public MWDirectMapping asMWObjectTypeMapping() {
if (!getConverter().getType().equals(MWConverter.OBJECT_TYPE_CONVERTER)) {
this.setObjectTypeConverter();
}
return this;
}
public MWDirectMapping asMWTypeConversionMapping() {
if (!getConverter().getType().equals(MWConverter.TYPE_CONVERSION_CONVERTER)) {
this.setTypeConversionConverter();
}
return this;
}
public MWDirectMapping asMWSerializedMapping() {
if (!getConverter().getType().equals(MWConverter.SERIALIZED_OBJECT_CONVERTER)) {
this.setSerializedObjectConverter();
}
return this;
}
protected void initializeOn(MWMapping newMapping) {
newMapping.initializeFromMWDirectToFieldMapping(this);
}
protected void initializeFromMWConverterMapping(MWConverterMapping converterMapping) {
// only initialize my converter if I already have the same type of converter
if (this.getConverter().getType() == converterMapping.getConverter().getType()) {
super.initializeFromMWConverterMapping(converterMapping);
}
}
// **************** Runtime Conversion ****************
protected DatabaseMapping buildRuntimeMapping() {
if (((MWRelationalProject) getProject()).isGenerateDeprecatedDirectMappings()) {
if (getConverter().getType().equals((MWConverter.NO_CONVERTER))) {
return new DirectToFieldMapping();
}
else if (getConverter().getType().equals((MWConverter.TYPE_CONVERSION_CONVERTER))) {
DirectToFieldMapping mapping = new DirectToFieldMapping();
mapping.setConverter(new TypeConversionConverter());
return mapping;
}
else if (getConverter().getType().equals((MWConverter.OBJECT_TYPE_CONVERTER))) {
DirectToFieldMapping mapping = new DirectToFieldMapping();
mapping.setConverter(new ObjectTypeConverter());
return mapping;
}
else {
DirectToFieldMapping mapping = new DirectToFieldMapping();
mapping.setConverter(new SerializedObjectConverter());
return mapping;
}
}
else {
return new DirectToFieldMapping();
}
}
//********** display methods **********
public void toString(StringBuffer sb) {
sb.append(this.getName());
sb.append(" => ");
sb.append(this.getColumn() == null ? "null" : this.getColumn().qualifiedName());
}
// **************** TopLink Methods *****************
public static XMLDescriptor buildDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(MWDirectToFieldMapping.class);
descriptor.getInheritancePolicy().setParentClass(MWRelationalDirectMapping.class);
return descriptor;
}
}