mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
More NodeService.getChildAssocsByPropertyValue (incl. PostgreSQL fix)
- Boolean *must* be passed as a parameter (PostgreSQL only accepts 'TRUE' or 'FALSE') - Moved code next to ChildAssoc-related code - Tested on MySQL and PostgreSQL git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21893 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -786,6 +786,20 @@
|
||||
parentNode.id = #parentNode.id# and
|
||||
a.child_node_id IS NULL
|
||||
</select>
|
||||
|
||||
<select id="select_ChildAssocsByPropertyValue" parameterClass="ChildProperty" resultMap="result_ChildAssoc">
|
||||
<include refid="alfresco.node.select_ChildAssoc_Results"/>
|
||||
<include refid="alfresco.node.select_ChildAssoc_FromSimple"/>
|
||||
join alf_node_properties prop on (childNode.id = prop.node_id)
|
||||
where
|
||||
parentNode.id = #parentNodeId#
|
||||
and prop.qname_id = #propertyQNameId#
|
||||
<isEqual property="value.persistedType" compareValue="6">and prop.string_value = #value.stringValue#</isEqual>
|
||||
<isEqual property="value.persistedType" compareValue="5">and prop.double_value = #value.doubleValue#</isEqual>
|
||||
<isEqual property="value.persistedType" compareValue="3">and prop.long_value = #value.longValue#</isEqual>
|
||||
<isEqual property="value.persistedType" compareValue="1">and prop.boolean_value = #value.booleanValue#</isEqual>
|
||||
<include refid="alfresco.node.select_ChildAssoc_OrderBy"/>
|
||||
</select>
|
||||
|
||||
<select id="select_NodePrimaryChildAcls" parameterClass="ChildAssoc" resultMap="result_NodeAcl">
|
||||
select
|
||||
@@ -921,23 +935,5 @@
|
||||
from
|
||||
alf_transaction
|
||||
</select>
|
||||
|
||||
<select id="select_ChildAssocsByPropertyValue" parameterClass="ChildProperty" resultMap="result_ChildAssoc">
|
||||
<include refid="alfresco.node.select_ChildAssoc_Results"/>
|
||||
<include refid="alfresco.node.select_ChildAssoc_FromSimple"/>
|
||||
join alf_node_properties prop on (childNode.id = prop.node_id)
|
||||
where
|
||||
parentNode.id = #parentNodeId#
|
||||
and prop.qname_id = #propertyQNameId#
|
||||
<isEqual property="value.persistedType" compareValue="6"> and prop.string_value = #value.stringValue#</isEqual>
|
||||
<isEqual property="value.persistedType" compareValue="5"> and prop.double_value = #value.doubleValue#</isEqual>
|
||||
<isEqual property="value.persistedType" compareValue="3"> and prop.long_value = #value.longValue#</isEqual>
|
||||
<isEqual property="value.persistedType" compareValue="1" >
|
||||
<isEqual property="value.booleanValue" compareValue="true" >and prop.boolean_value = 1</isEqual>
|
||||
<isEqual property="value.booleanValue" compareValue="false" >and prop.boolean_value = 0</isEqual>
|
||||
</isEqual>
|
||||
|
||||
<include refid="alfresco.node.select_ChildAssoc_OrderBy"/>
|
||||
</select>
|
||||
|
||||
</sqlMap>
|
@@ -1782,6 +1782,72 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
||||
// done
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specific properties <b>not</b> supported by {@link #getChildAssocsByPropertyValue(NodeRef, QName, Serializable)}
|
||||
*/
|
||||
private static List<QName> getChildAssocsByPropertyValueBannedProps = new ArrayList<QName>();
|
||||
static
|
||||
{
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_NODE_DBID);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_NODE_UUID);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_NAME);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_MODIFIED);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_MODIFIER);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_CREATED);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_CREATOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ChildAssociationRef> getChildAssocsByPropertyValue(
|
||||
NodeRef nodeRef,
|
||||
QName propertyQName,
|
||||
Serializable value)
|
||||
{
|
||||
// Get the node
|
||||
Pair<Long, NodeRef> nodePair = getNodePairNotNull(nodeRef);
|
||||
Long nodeId = nodePair.getFirst();
|
||||
|
||||
// Check the QName is not one of the "special" system maintained ones.
|
||||
|
||||
if (getChildAssocsByPropertyValueBannedProps.contains(propertyQName))
|
||||
{
|
||||
throw new IllegalArgumentException(
|
||||
"getChildAssocsByPropertyValue does not allow search of system maintaied properties: " + propertyQName);
|
||||
}
|
||||
|
||||
final List<ChildAssociationRef> results = new ArrayList<ChildAssociationRef>(10);
|
||||
// We have a callback handler to filter results
|
||||
ChildAssocRefQueryCallback callback = new ChildAssocRefQueryCallback()
|
||||
{
|
||||
public boolean preLoadNodes()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean handle(
|
||||
Pair<Long, ChildAssociationRef> childAssocPair,
|
||||
Pair<Long, NodeRef> parentNodePair,
|
||||
Pair<Long, NodeRef> childNodePair)
|
||||
{
|
||||
results.add(childAssocPair.getSecond());
|
||||
return true;
|
||||
}
|
||||
|
||||
public void done()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
// Get the assocs pointing to it
|
||||
nodeDAO.getChildAssocsByPropertyValue(nodeId, propertyQName, value, callback);
|
||||
|
||||
// sort the results
|
||||
List<ChildAssociationRef> orderedList = reorderChildAssocs(results);
|
||||
|
||||
// Done
|
||||
return orderedList;
|
||||
}
|
||||
|
||||
public void removeAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName)
|
||||
throws InvalidNodeRefException
|
||||
@@ -2221,66 +2287,4 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static List<QName> getChildAssocsByPropertyValueBannedProps = new ArrayList<QName>();
|
||||
static
|
||||
{
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_NODE_DBID);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_NODE_UUID);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_NAME);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_MODIFIED);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_MODIFIER);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_CREATED);
|
||||
getChildAssocsByPropertyValueBannedProps.add(ContentModel.PROP_CREATOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ChildAssociationRef> getChildAssocsByPropertyValue(NodeRef nodeRef,
|
||||
QName propertyQName,
|
||||
Serializable value)
|
||||
{
|
||||
// Get the node
|
||||
Pair<Long, NodeRef> nodePair = getNodePairNotNull(nodeRef);
|
||||
Long nodeId = nodePair.getFirst();
|
||||
|
||||
// Check the QName is not one of the "special" system maintained ones.
|
||||
|
||||
if(getChildAssocsByPropertyValueBannedProps.contains(propertyQName))
|
||||
{
|
||||
throw new IllegalArgumentException("getChildAssocsByPropertyValue does not allow search of system maintaied properties: " + propertyQName);
|
||||
}
|
||||
|
||||
final List<ChildAssociationRef> results = new ArrayList<ChildAssociationRef>(10);
|
||||
// We have a callback handler to filter results
|
||||
ChildAssocRefQueryCallback callback = new ChildAssocRefQueryCallback()
|
||||
{
|
||||
public boolean preLoadNodes()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean handle(
|
||||
Pair<Long, ChildAssociationRef> childAssocPair,
|
||||
Pair<Long, NodeRef> parentNodePair,
|
||||
Pair<Long, NodeRef> childNodePair)
|
||||
{
|
||||
results.add(childAssocPair.getSecond());
|
||||
return true;
|
||||
}
|
||||
|
||||
public void done()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
// Get the assocs pointing to it
|
||||
nodeDAO.getChildAssocsByPropertyValue(nodeId, propertyQName, value, callback);
|
||||
|
||||
// sort the results
|
||||
List<ChildAssociationRef> orderedList = reorderChildAssocs(results);
|
||||
|
||||
// Done
|
||||
return orderedList;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -539,7 +539,5 @@ public class DbNodeServiceImplTest extends BaseNodeServiceTest
|
||||
{
|
||||
// expect to go here
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user