blob: 4829cdb7012296f367467592898b197f8485c656 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.10) on Mon Dec 05 10:27:04 MSK 2022 -->
<title>DataContextDelegate (cayenne-doc: Cayenne Documentation 4.2.RC2 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2022-12-05">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="DataContextDelegate (cayenne-doc: Cayenne Documentation 4.2.RC2 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/DataContextDelegate.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><a href="http://cayenne.apache.org" target="top">Apache Cayenne</a></div>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.cayenne.access</a></div>
<h2 title="Interface DataContextDelegate" class="title">Interface DataContextDelegate</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public interface <span class="typeNameLabel">DataContextDelegate</span></pre>
<div class="block">Defines API for a DataContext "delegate" - an object that is temporarily passed control
by DataContext at some critical points in the normal flow of execution. A delegate thus
can modify the flow, abort an operation, modify the objects participating in an
operation, or perform any other tasks it deems necessary. DataContextDelegate is shared
by DataContext and its ObjectStore.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.1</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="DataContext.html" title="class in org.apache.cayenne.access"><code>DataContext</code></a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#finishedMergeChanges(org.apache.cayenne.DataObject)">finishedMergeChanges</a></span>&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object)</code></th>
<td class="colLast">
<div class="block">Called after a successful merging of external changes to an object.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#finishedProcessDelete(org.apache.cayenne.DataObject)">finishedProcessDelete</a></span>&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object)</code></th>
<td class="colLast">
<div class="block">Called after a successful processing of externally deleted object.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#shouldMergeChanges(org.apache.cayenne.DataObject,org.apache.cayenne.DataRow)">shouldMergeChanges</a></span>&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object,
<a href="../DataRow.html" title="class in org.apache.cayenne">DataRow</a>&nbsp;snapshotInStore)</code></th>
<td class="colLast">
<div class="block">Invoked by parent DataContext whenever an object change is detected.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#shouldProcessDelete(org.apache.cayenne.DataObject)">shouldProcessDelete</a></span>&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object)</code></th>
<td class="colLast">
<div class="block">Invoked by ObjectStore whenever it is detected that a database row was deleted for
object.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#willPerformGenericQuery(org.apache.cayenne.access.DataContext,org.apache.cayenne.query.Query)">willPerformGenericQuery</a></span>&#8203;(<a href="DataContext.html" title="class in org.apache.cayenne.access">DataContext</a>&nbsp;context,
<a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a>&nbsp;query)</code></th>
<td class="colLast">
<div class="block">Invoked before a Query is executed via <em>DataContext.performGenericQuery</em>.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#willPerformQuery(org.apache.cayenne.access.DataContext,org.apache.cayenne.query.Query)">willPerformQuery</a></span>&#8203;(<a href="DataContext.html" title="class in org.apache.cayenne.access">DataContext</a>&nbsp;context,
<a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a>&nbsp;query)</code></th>
<td class="colLast">
<div class="block">Invoked before a Query is executed via <em>DataContext.performQuery</em>.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="willPerformQuery(org.apache.cayenne.access.DataContext,org.apache.cayenne.query.Query)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>willPerformQuery</h4>
<pre class="methodSignature"><a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a>&nbsp;willPerformQuery&#8203;(<a href="DataContext.html" title="class in org.apache.cayenne.access">DataContext</a>&nbsp;context,
<a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a>&nbsp;query)</pre>
<div class="block">Invoked before a Query is executed via <em>DataContext.performQuery</em>. The
delegate may substitute the Query with a different one or may return null to discard
the query.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.2</dd>
</dl>
</li>
</ul>
<a id="willPerformGenericQuery(org.apache.cayenne.access.DataContext,org.apache.cayenne.query.Query)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>willPerformGenericQuery</h4>
<pre class="methodSignature"><a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a>&nbsp;willPerformGenericQuery&#8203;(<a href="DataContext.html" title="class in org.apache.cayenne.access">DataContext</a>&nbsp;context,
<a href="../query/Query.html" title="interface in org.apache.cayenne.query">Query</a>&nbsp;query)</pre>
<div class="block">Invoked before a Query is executed via <em>DataContext.performGenericQuery</em>.
The delegate may substitute the Query with a different one or may return null to
discard the query.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.2</dd>
</dl>
</li>
</ul>
<a id="shouldMergeChanges(org.apache.cayenne.DataObject,org.apache.cayenne.DataRow)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>shouldMergeChanges</h4>
<pre class="methodSignature">boolean&nbsp;shouldMergeChanges&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object,
<a href="../DataRow.html" title="class in org.apache.cayenne">DataRow</a>&nbsp;snapshotInStore)</pre>
<div class="block">Invoked by parent DataContext whenever an object change is detected. This can be a
change to the object snapshot, or a modification of an "independent" relationship
not resulting in a snapshot change. In the later case snapshot argument may be
null. If a delegate returns <code>true</code>, ObjectStore will attempt to merge
the changes into an object.</div>
</li>
</ul>
<a id="finishedMergeChanges(org.apache.cayenne.DataObject)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>finishedMergeChanges</h4>
<pre class="methodSignature">void&nbsp;finishedMergeChanges&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object)</pre>
<div class="block">Called after a successful merging of external changes to an object. If previosly a
delegate returned <code>false</code> from
<a href="#shouldMergeChanges(org.apache.cayenne.DataObject,org.apache.cayenne.DataRow)"><code>shouldMergeChanges(DataObject, DataRow)</code></a>, this method is not invoked,
since changes were not merged.</div>
</li>
</ul>
<a id="shouldProcessDelete(org.apache.cayenne.DataObject)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>shouldProcessDelete</h4>
<pre class="methodSignature">boolean&nbsp;shouldProcessDelete&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object)</pre>
<div class="block">Invoked by ObjectStore whenever it is detected that a database row was deleted for
object. If a delegate returns <code>true</code>, ObjectStore will change
MODIFIED objects to NEW (resulting in recreating the deleted record on next commit)
and all other objects - to TRANSIENT. To block this behavior, delegate should
return <code>false</code>, and possibly do its own processing.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>object</code> - DataObject that was deleted externally and is still present in the
ObjectStore associated with the delegate.</dd>
</dl>
</li>
</ul>
<a id="finishedProcessDelete(org.apache.cayenne.DataObject)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>finishedProcessDelete</h4>
<pre class="methodSignature">void&nbsp;finishedProcessDelete&#8203;(<a href="../DataObject.html" title="interface in org.apache.cayenne">DataObject</a>&nbsp;object)</pre>
<div class="block">Called after a successful processing of externally deleted object. If previosly a
delegate returned <code>false</code> from
<a href="#shouldProcessDelete(org.apache.cayenne.DataObject)"><code>shouldProcessDelete(DataObject)</code></a>, this method is not invoked, since no
processing was done.</div>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/DataContextDelegate.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><a href="http://cayenne.apache.org" target="top">Apache Cayenne</a></div>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2001&#x2013;2022 <a href="https://cayenne.apache.org/">Apache Cayenne</a>. All rights reserved.</small></p>
</footer>
</body>
</html>