blob: 38211bdb42ed61e688c2fcb32f2022389b089bc5 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// dmccann - September 15/2009 - 1.2 - Initial implementation
package org.eclipse.persistence.sdo;
import org.eclipse.persistence.internal.localization.ExceptionLocalization;
import org.eclipse.persistence.oxm.XMLContext;
import org.eclipse.persistence.sdo.helper.SDOCopyHelper;
import org.eclipse.persistence.sdo.helper.SDODataFactory;
import org.eclipse.persistence.sdo.helper.SDODataHelper;
import org.eclipse.persistence.sdo.helper.SDOEqualityHelper;
import org.eclipse.persistence.sdo.helper.SDOHelperContext;
import org.eclipse.persistence.sdo.helper.SDOTypeHelper;
import org.eclipse.persistence.sdo.helper.SDOXMLHelper;
import org.eclipse.persistence.sdo.helper.SDOXSDHelper;
import org.eclipse.persistence.sdo.types.SDOChangeSummaryType;
import org.eclipse.persistence.sdo.types.SDODataObjectType;
import org.eclipse.persistence.sdo.types.SDODataType;
import org.eclipse.persistence.sdo.types.SDOObjectType;
import org.eclipse.persistence.sdo.types.SDOOpenSequencedType;
import org.eclipse.persistence.sdo.types.SDOPropertyType;
import org.eclipse.persistence.sdo.types.SDOTypeType;
import org.eclipse.persistence.sdo.types.SDOWrapperType;
import org.eclipse.persistence.sdo.types.SDOXMLHelperLoadOptionsType;
import commonj.sdo.ChangeSummary;
import commonj.sdo.DataObject;
import commonj.sdo.Property;
import commonj.sdo.Sequence;
import commonj.sdo.Type;
import commonj.sdo.helper.CopyHelper;
import commonj.sdo.helper.DataFactory;
import commonj.sdo.helper.DataHelper;
import commonj.sdo.helper.EqualityHelper;
import commonj.sdo.helper.HelperContext;
import commonj.sdo.helper.TypeHelper;
import commonj.sdo.helper.XMLHelper;
import commonj.sdo.helper.XSDHelper;
import commonj.sdo.impl.HelperProvider;
/**
* This class provides a mechanism to obtain the EclipseLink implementation of various SDO runtime
* classes based on a given SDO class/interface. This is useful for accessing extended EclipseLink
* features. Using this helper class will alleviate the need for consumers of EclipseLink SDO to
* perform casts where their code makes use of the standard SDO API. In addition, a given SDO
* class/interface can be unwrapped based on a user-specified class. This will allow access - in
* certain cases - to a given SDO implementation class' underlying class(es). For example, an
* XMLHelper could be unwrapped resulting in an EclipseLink SDOXMLHelper or its underlying
* XMLContext.
*/
public class SDOHelper {
private SDOHelper() {
//no instance please
}
/**
* Return the EclipseLink implementation of Type. The given Type is assumed to be an instance of
* {@link org.eclipse.persistence.sdo.SDOType}. If not, an exception will be thrown.
*
* @param type
* @return
* @throws IllegalArgumentException
*/
public static SDOType getType(Type type) throws IllegalArgumentException {
try {
return (SDOType) type;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_type", new Object[] { type.getClass() }));
}
}
/**
* Return the EclipseLink implementation of Property. The given Property is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.SDOProperty}. If not, an exception will be
* thrown.
*
* @param property
* @return
* @throws IllegalArgumentException
*/
public static SDOProperty getProperty(Property property) throws IllegalArgumentException {
try {
return (SDOProperty) property;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_property", new Object[] { property.getClass() }));
}
}
/**
* Return the EclipseLink implementation of DataObject. The given DataObject is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.SDODataObject}. If not, an exception will be
* thrown.
*
* @param dataObject
* @return
* @throws IllegalArgumentException
*/
public static SDODataObject getDataObject(DataObject dataObject) throws IllegalArgumentException {
try {
return (SDODataObject) dataObject;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_dataobject", new Object[] { dataObject.getClass() }));
}
}
/**
* Return the EclipseLink implementation of ChangeSummary. The given ChangeSummary is assumed to
* be an instance of {@link org.eclipse.persistence.sdo.SDOChangeSummary}. If not, an exception
* will be thrown.
*
* @param changeSummary
* @return
* @throws IllegalArgumentException
*/
public static SDOChangeSummary getChangeSummary(ChangeSummary changeSummary) throws IllegalArgumentException {
try {
return (SDOChangeSummary) changeSummary;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_changesummary", new Object[] { changeSummary.getClass() }));
}
}
/**
* Return the EclipseLink implementation of Sequence. The given Sequence is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.SDOSequence}. If not, an exception will be
* thrown.
*
* @param sequence
* @return
* @throws IllegalArgumentException
*/
public static SDOSequence getSequence(Sequence sequence) throws IllegalArgumentException {
try {
return (SDOSequence) sequence;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_sequence", new Object[] { sequence.getClass() }));
}
}
/**
* Return the EclipseLink implementation of HelperContext. If the given HelperContext
* is an instance of the DefaultContext, an SDOHelperContext will be obtained via
* SDOHelperContext.getHelperContext(). Otherwise, the given HelperContext is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDOHelperContext}. If not, an exception
* will be thrown.
* @param helperContext
* @return
* @throws IllegalArgumentException
*/
public static SDOHelperContext getHelperContext(HelperContext helperContext) throws IllegalArgumentException {
if (helperContext == HelperProvider.getDefaultContext()) {
return (SDOHelperContext) SDOHelperContext.getHelperContext();
}
try {
return (SDOHelperContext) helperContext;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_helpercontext", new Object[] { helperContext.getClass() }));
}
}
/**
* Return the EclipseLink implementation of CopyHelper. The given CopyHelper is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDOCopyHelper}. If not, an exception
* will be thrown.
*
* @param copyHelper
* @return
* @throws IllegalArgumentException
*/
public static SDOCopyHelper getCopyHelper(CopyHelper copyHelper) throws IllegalArgumentException {
try {
return (SDOCopyHelper) copyHelper;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_copyhelper", new Object[] { copyHelper.getClass() }));
}
}
/**
* Return the EclipseLink implementation of DataFactory. The given DataFactory is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDODataFactory}. If not, an exception
* will be thrown.
*
* @param dataFactory
* @return
* @throws IllegalArgumentException
*/
public static SDODataFactory getDataFactory(DataFactory dataFactory) throws IllegalArgumentException {
try {
return (SDODataFactory) dataFactory;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_datafactory", new Object[] { dataFactory.getClass() }));
}
}
/**
* Return the EclipseLink implementation of DataHelper. The given DataHelper is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDODataHelper}. If not, an exception
* will be thrown.
*
* @param dataHelper
* @return
* @throws IllegalArgumentException
*/
public static SDODataHelper getDataHelper(DataHelper dataHelper) throws IllegalArgumentException {
try {
return (SDODataHelper) dataHelper;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_datahelper", new Object[] { dataHelper.getClass() }));
}
}
/**
* Return the EclipseLink implementation of EqualityHelper. The given EqualityHelper is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDOEqualityHelper}. If not, an exception
* will be thrown.
*
* @param equalityHelper
* @return
* @throws IllegalArgumentException
*/
public static SDOEqualityHelper getEqualityHelper(EqualityHelper equalityHelper) throws IllegalArgumentException {
try {
return (SDOEqualityHelper) equalityHelper;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_equalityhelper", new Object[] { equalityHelper.getClass() }));
}
}
/**
* Return the EclipseLink implementation of TypeHelper. The given TypeHelper is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDOTypeHelper}. If not, an exception
* will be thrown.
*
* @param typeHelper
* @return
* @throws IllegalArgumentException
*/
public static SDOTypeHelper getTypeHelper(TypeHelper typeHelper) throws IllegalArgumentException {
try {
return (SDOTypeHelper) typeHelper;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_typehelper", new Object[] { typeHelper.getClass() }));
}
}
/**
* Return the EclipseLink implementation of XMLHelper. The given XMLHelper is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDOXMLHelper}. If not, an exception
* will be thrown.
*
* @param xmlHelper
* @return
* @throws IllegalArgumentException
*/
public static SDOXMLHelper getXMLHelper(XMLHelper xmlHelper) throws IllegalArgumentException {
try {
return (SDOXMLHelper) xmlHelper;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_xmlhelper", new Object[] { xmlHelper.getClass() }));
}
}
/**
* Return the EclipseLink implementation of XSDHelper. The given XSDHelper is assumed to be an
* instance of {@link org.eclipse.persistence.sdo.helper.SDOXSDHelper}. If not, an exception
* will be thrown.
*
* @param xsdHelper
* @return
* @throws IllegalArgumentException
*/
public static SDOXSDHelper getXSDHelper(XSDHelper xsdHelper) throws IllegalArgumentException {
try {
return (SDOXSDHelper) xsdHelper;
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_xsdhelper", new Object[] { xsdHelper.getClass() }));
}
}
/**
* Unwraps a given Type resulting in an EclipseLink SDOType. Assumes that the
* given Type is an instance of EclipseLink SDOType, and clazz is one of:
* org.eclipse.persistence.sdo.SDOType,
* org.eclipse.persistence.sdo.type.SDOTypeType,
* org.eclipse.persistence.sdo.type.SDOPropertyType,
* org.eclipse.persistence.sdo.type.SDOChangeSummaryType,
* org.eclipse.persistence.sdo.type.SDODataObjectType,
* org.eclipse.persistence.sdo.type.SDODataType,
* org.eclipse.persistence.sdo.type.SDOOpenSequencedType,
* org.eclipse.persistence.sdo.type.SDOObjectType,
* org.eclipse.persistence.sdo.type.SDOWrapperType,
* org.eclipse.persistence.sdo.type.SDOXMLHelperLoadOptionsType
*
* @param <T>
* @param type
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(Type type, Class<T> clazz) throws IllegalArgumentException {
if (clazz == SDOType.class) {
return (T) getType(type);
}
try {
if (clazz == SDOTypeType.class) {
return (T) type;
}
if (clazz == SDOPropertyType.class) {
return (T) type;
}
if (clazz == SDOChangeSummaryType.class) {
return (T) type;
}
if (clazz == SDODataObjectType.class) {
return (T) type;
}
if (clazz == SDODataType.class) {
return (T) type;
}
if (clazz == SDOOpenSequencedType.class) {
return (T) type;
}
if (clazz == SDOWrapperType.class) {
return (T) type;
}
if (clazz == SDOXMLHelperLoadOptionsType.class) {
return (T) type;
}
if (clazz == SDOObjectType.class) {
return (T) type;
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_type", new Object[] { clazz }));
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_type", new Object[] { type.getClass() }));
}
}
/**
* Unwraps a given Property resulting in an EclipseLink SDOProperty. Assumes that the
* given Property is an instance of EclipseLink SDOProperty, and clazz is
* org.eclipse.persistence.sdo.SDOProperty.
*
* @param <T>
* @param property
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(Property property, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.SDOProperty.class) {
return (T) getProperty(property);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_property", new Object[] { clazz }));
}
/**
* Unwraps a given DataObject resulting in an EclipseLink SDODataObject. Assumes that the
* given DataObject is an instance of EclipseLink SDODataObject, and clazz is
* org.eclipse.persistence.sdo.SDODataObject.
*
* @param <T>
* @param dataObject
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(DataObject dataObject, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.SDODataObject.class) {
return (T) getDataObject(dataObject);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_dataobject", new Object[] { clazz }));
}
/**
* Unwraps a given ChangeSummary resulting in an EclipseLink SDOChangeSummary. Assumes that the
* given ChangeSummary is an instance of EclipseLink SDOChangeSummary, and clazz is
* org.eclipse.persistence.sdo.SDOChangeSummary.
*
* @param <T>
* @param changeSummary
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(ChangeSummary changeSummary, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.SDOChangeSummary.class) {
return (T) getChangeSummary(changeSummary);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_changesummary", new Object[] { clazz }));
}
/**
* Unwraps a given Sequence resulting in an EclipseLink SDOSequence. Assumes that the
* given Sequence is an instance of EclipseLink SDOSequence, and clazz is
* org.eclipse.persistence.sdo.SDOSequence.
*
* @param <T>
* @param sequence
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(Sequence sequence, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.SDOSequence.class) {
return (T) getSequence(sequence);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_sequence", new Object[] { clazz }));
}
/**
* Unwraps a given HelperContext resulting in an EclipseLink SDOHelperContext. Assumes that the
* given HelperContext is an instance of EclipseLink SDOHelperContext, and clazz is
* org.eclipse.persistence.sdo.helper.SDOHelperContext.
*
* @param <T>
* @param helperContext
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(HelperContext helperContext, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.helper.SDOHelperContext.class) {
return (T) getHelperContext(helperContext);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_helpercontext", new Object[] { clazz }));
}
/**
* Unwraps a given CopyHelper resulting in an EclipseLink SDOCopyHelper. Assumes that the
* given CopyHelper is an instance of EclipseLink SDOCopyHelper, and clazz is
* org.eclipse.persistence.sdo.helper.SDOCopyHelper.
*
* @param <T>
* @param copyHelper
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(CopyHelper copyHelper, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.helper.SDOCopyHelper.class) {
return (T) getCopyHelper(copyHelper);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_copyhelper", new Object[] { clazz }));
}
/**
* Unwraps a given DataFactory resulting in an EclipseLink SDODataFactory. Assumes that the
* given DataFactory is an instance of EclipseLink SDODataFactory, and clazz is
* org.eclipse.persistence.sdo.helper.SDODataFactory.
*
* @param <T>
* @param dataFactory
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(DataFactory dataFactory, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.helper.SDODataFactory.class) {
return (T) getDataFactory(dataFactory);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_datafactory", new Object[] { clazz }));
}
/**
* Unwraps a given DataHelper resulting in an EclipseLink SDODataHelper. Assumes that the
* given DataHelper is an instance of EclipseLink SDODataHelper, and clazz is
* org.eclipse.persistence.sdo.helper.SDODataHelper.
*
* @param <T>
* @param dataHelper
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(DataHelper dataHelper, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.helper.SDODataHelper.class) {
return (T) getDataHelper(dataHelper);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_datahelper", new Object[] { clazz }));
}
/**
* Unwraps a given EqualityHelper resulting in an EclipseLink SDOEqualityHelper. Assumes that the
* given EqualityHelper is an instance of EclipseLink SDOEqualityHelper, and clazz is
* org.eclipse.persistence.sdo.helper.SDOEqualityHelper.
*
* @param <T>
* @param equalityHelper
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(EqualityHelper equalityHelper, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.helper.SDOEqualityHelper.class) {
return (T) getEqualityHelper(equalityHelper);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_equalityhelper", new Object[] { clazz }));
}
/**
* Unwraps a given TypeHelper resulting in an EclipseLink SDOTypeHelper. Assumes that the
* given TypeHelper is an instance of EclipseLink SDOTypeHelper, and clazz is
* org.eclipse.persistence.sdo.helper.SDOTypeHelper.
*
* @param <T>
* @param typeHelper
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(TypeHelper typeHelper, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.helper.SDOTypeHelper.class) {
return (T) getTypeHelper(typeHelper);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_typehelper", new Object[] { clazz }));
}
/**
* Unwraps a given XMLHelper resulting in an EclipseLink SDOXMLHelper or an EclipseLink
* XMLContext depending on clazz. Assumes that the given XMLHelper is an instance of
* EclipseLink SDOXMLHelper, and clazz is one of
* org.eclipse.persistence.sdo.helper.SDOXMLHelper, or
* org.eclipse.persistence.oxm.XMLContext. If not, an exception will be thrown.
*
* @param <T>
* @param xmlHelper
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(XMLHelper xmlHelper, Class<T> clazz) throws IllegalArgumentException {
try {
org.eclipse.persistence.sdo.helper.SDOXMLHelper xmlHelperImpl = (org.eclipse.persistence.sdo.helper.SDOXMLHelper) xmlHelper;
if (clazz == org.eclipse.persistence.sdo.helper.SDOXMLHelper.class) {
return (T) xmlHelperImpl;
}
if (clazz == XMLContext.class) {
return (T) xmlHelperImpl.getXmlContext();
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_xmlhelper", new Object[] { clazz }));
} catch (ClassCastException e) {
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_xmlhelper", new Object[] { xmlHelper.getClass() }));
}
}
/**
* Unwraps a given XSDHelper resulting in an EclipseLink SDOXSDHelper. Assumes that the
* given XSDHelper is an instance of EclipseLink SDOXSDHelper, and clazz is
* org.eclipse.persistence.sdo.helper.SDOXSDHelper.
*
* @param <T>
* @param xsdHelper
* @param clazz
* @return
* @throws IllegalArgumentException
*/
public static <T> T unwrap(XSDHelper xsdHelper, Class<T> clazz) throws IllegalArgumentException {
if (clazz == org.eclipse.persistence.sdo.helper.SDOXSDHelper.class) {
return (T) getXSDHelper(xsdHelper);
}
throw new IllegalArgumentException(ExceptionLocalization
.buildMessage("sdo_helper_invalid_target_for_xsdhelper", new Object[] { clazz }));
}
}