blob: 47ebb8695a2415181024656cfe3c23d9164a6dfc [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.queries;
/**
* <p><b>Purpose</b>:
* Provide a means of controlling the behavior of in-memory and conforming queries
* that access un-instantiated indirection objects in processing the query against cached objects.
*
* <p><b>Description</b>:
* This class defines the valid constant values for handling in-memory querying.
* The constants should be set into the query's inMemoryQueryIndirectionPolicy.
*
* @author Gordon Yorke
* @since TopLink/Java 3.6.3
*/
public class InMemoryQueryIndirectionPolicy implements java.io.Serializable {
/** If a non-instantiated indirection object is encountered an exception is thrown. */
public static final int SHOULD_THROW_INDIRECTION_EXCEPTION = 0;
/** If a non-instantiated indirection object is encountered an exception it is instantiated. Caution should be used in using this option. */
public static final int SHOULD_TRIGGER_INDIRECTION = 1;
/** If a non-instantiated indirection object is encountered the object is assumed to conform. */
public static final int SHOULD_IGNORE_EXCEPTION_RETURN_CONFORMED = 2;
/** If a non-instantiated indirection object is encountered the object is assumed to not conform. */
public static final int SHOULD_IGNORE_EXCEPTION_RETURN_NOT_CONFORMED = 3;
protected int policy;
/** Used to set the policy state in the query. */
protected ObjectLevelReadQuery query;
public InMemoryQueryIndirectionPolicy() {
this.policy = SHOULD_THROW_INDIRECTION_EXCEPTION;
}
public InMemoryQueryIndirectionPolicy(int policyValue) {
this.policy = policyValue;
}
public InMemoryQueryIndirectionPolicy(int policy, ObjectLevelReadQuery query) {
this.policy = policy;
this.query = query;
}
public boolean shouldTriggerIndirection() {
return this.policy == SHOULD_TRIGGER_INDIRECTION;
}
public boolean shouldThrowIndirectionException() {
return this.policy == SHOULD_THROW_INDIRECTION_EXCEPTION;
}
public boolean shouldIgnoreIndirectionExceptionReturnConformed() {
return this.policy == SHOULD_IGNORE_EXCEPTION_RETURN_CONFORMED;
}
public boolean shouldIgnoreIndirectionExceptionReturnNotConformed() {
return this.policy == SHOULD_IGNORE_EXCEPTION_RETURN_NOT_CONFORMED;
}
public void ignoreIndirectionExceptionReturnNotConformed() {
setPolicy(SHOULD_IGNORE_EXCEPTION_RETURN_NOT_CONFORMED);
}
public void ignoreIndirectionExceptionReturnConformed() {
setPolicy(SHOULD_IGNORE_EXCEPTION_RETURN_CONFORMED);
}
public void triggerIndirection() {
setPolicy(SHOULD_TRIGGER_INDIRECTION);
}
public void throwIndirectionException() {
setPolicy(SHOULD_THROW_INDIRECTION_EXCEPTION);
}
public int getPolicy() {
return this.policy;
}
public void setPolicy(int policy) {
this.policy = policy;
if (this.query != null) {
this.query.setInMemoryQueryIndirectionPolicyState(policy);
}
}
/**
* INTERNAL:
* Return the query.
*/
public ObjectLevelReadQuery getQuery() {
return query;
}
/**
* INTERNAL:
* Set the query.
*/
public void setQuery(ObjectLevelReadQuery query) {
this.query = query;
}
}