litesoft
@ 809
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
package org.litesoft.boviews.podataproviders.support; import org.litesoft.bo.*; import org.litesoft.bo.views.*; import org.litesoft.core.*; import org.litesoft.core.simpletypes.*; import org.litesoft.core.typeutils.*; import org.litesoft.orsup.base.*; import org.litesoft.orsup.otherattributeaccessors.*; import org.litesoft.orsup.selection.*; import org.litesoft.util.*; public class WhereClauseSupport { private static final WhereClauseFactory FACTORY = WhereClauseFactory.INSTANCE; private Finder mFinder; private MetaDataForPO mPoMetaData; private DerivedFromAttributeSource mDerivedFromAttributeSource; public WhereClauseSupport( Finder pFinder, MetaDataForPO pPoMetaData, DerivedFromAttributeSource pDerivedFromAttributeSource ) { mFinder = pFinder == null ? DataStoreLocator.get().getUnfilteredFinder() : pFinder; mPoMetaData = pPoMetaData; mDerivedFromAttributeSource = pDerivedFromAttributeSource; } public WhereClause createWhereClause( SSMap... pORed_ANDFiltersNotNullNotEmpty ) { if ( pORed_ANDFiltersNotNullNotEmpty.length == 0 ) { return FACTORY.alwaysTrue(); } WhereClause zWhereClause = FACTORY.alwaysFalse(); for ( SSMap zMap : pORed_ANDFiltersNotNullNotEmpty ) { WhereClause zMapWhereClause = createWhereClause( zMap ); if ( FACTORY.alwaysTrue() == zMapWhereClause ) { return zMapWhereClause; } zWhereClause = FACTORY.or( zWhereClause, zMapWhereClause ); } return zWhereClause; } protected WhereClause createWhereClause( SSMap pFilters ) { if ( pFilters instanceof NoRowsMatchingFilterMap ) { return FACTORY.alwaysFalse(); } WhereClause zWhereClause = FACTORY.alwaysTrue(); if ( (pFilters != null) && !pFilters.isEmpty() ) { boolean zEquals = (pFilters instanceof EqualsMatchingFilterMap); for ( String zAttributeName : pFilters.keySet() ) { WhereClause zWhereClauseForAttribute = createWhereClause( zEquals, zAttributeName, pFilters.get( zAttributeName ).trim() ); if ( zWhereClauseForAttribute == FACTORY.alwaysFalse() ) { return FACTORY.alwaysFalse(); } zWhereClause = FACTORY.and( zWhereClause, zWhereClauseForAttribute ); } } return zWhereClause; } protected WhereClause createWhereClause( boolean pEquals, String pAttributeName, String pAttributeValue ) { if ( pAttributeValue.length() == 0 ) { return FACTORY.alwaysFalse(); } String zAttributePath = mDerivedFromAttributeSource.getDerivedFromAttributePath( pAttributeName ); if ( zAttributePath == null ) { return createWhereClauseForNonDerivedAttribute( pEquals, pAttributeName, pAttributeValue ); } AttributeAccessorSCDpath.Node[] zPathNodes = new AttributeAccessorSCDpath( mFinder, mPoMetaData ) { @Override protected boolean isAcceptableLeaf( AttributeAccessorSCD pSCD ) { return (pSCD instanceof AttributeAccessorSCDsimplePersistedRegular) || (null != getAcceptableRelationship( pSCD )); } }.createPath( zAttributePath ); if ( Objects.isNullOrEmpty( zPathNodes ) ) { return createWhereClauseForUnacceptableAttributePath( pEquals, pAttributeName, pAttributeValue, zAttributePath ); } AttributeAccessorSCD zLastAA = zPathNodes[zPathNodes.length - 1].getAttributeAccessor(); boolean zIsString = BoAttribute.AttributeType.String.equals( zLastAA.getAMD().getType().getBoAttributeType() ); if ( zPathNodes.length > 1 ) { throw new NotImplementedYetException( "relationships: " + zAttributePath ); } AttributeAccessorSCD zSCD = zPathNodes[0].getAttributeAccessor(); if ( !zIsString ) { return createWhereClauseForAttributeTypeNotString( pEquals, pAttributeName, pAttributeValue, zSCD ); } if ( pEquals ) { return FACTORY.isEqual( zSCD, pAttributeValue ); } String[] zParts = Strings.parseChar( pAttributeValue, '*' ); if ( zParts.length == 1 ) { zParts = Utils.appendString( zParts, "" ); } return FACTORY.like( zSCD, zParts ); } @SuppressWarnings({"UnusedParameters"}) protected WhereClause createWhereClauseForNonDerivedAttribute( boolean pEquals, String pAttributeName, String pAttributeValue ) { return FACTORY.alwaysFalse(); // todo: Decide what to do about non-dervived attributes } @SuppressWarnings({"UnusedParameters"}) protected WhereClause createWhereClauseForUnacceptableAttributePath( boolean pEquals, String pAttributeName, String pAttributeValue, String pAttributePath ) { return FACTORY.alwaysFalse(); // todo: Decide to fix AttributeAccessorSCDpathNode to throw exception or DO NOTHING } @SuppressWarnings({"UnusedParameters"}) protected WhereClause createWhereClauseForAttributeTypeNotString( boolean pEquals, String pAttributeName, String pAttributeValue, AttributeAccessorSCD pSCD ) { return FACTORY.isEqual( pSCD, pAttributeValue ); // todo: Form not String? } } |