litesoft
@ 939
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 |
package org.litesoft.bo.views.server; import org.litesoft.bo.*; import org.litesoft.bo.views.*; import org.litesoft.commonfoundation.exceptions.*; import org.litesoft.commonfoundation.typeutils.*; import org.litesoft.core.simpletypes.*; import org.litesoft.orsup.base.*; import org.litesoft.orsup.otherattributeaccessors.*; import org.litesoft.orsup.selection.*; 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 FACTORY.alwaysFalse(); // todo: Decide what to do about non-derived attributes } 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 FACTORY.alwaysFalse(); // todo: Decide to fix AttributeAccessorSCDpathNode to throw exception or DO NOTHING } 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 FACTORY.isEqual( zSCD, pAttributeValue ); // todo: Form not String? } if ( pEquals ) { return FACTORY.isEqual( zSCD, pAttributeValue ); } String[] zParts = Strings.parseChar( pAttributeValue, '*' ); if ( zParts.length == 1 ) { zParts = Strings.appendString( zParts, "" ); } return FACTORY.like( zSCD, zParts ); } } |
Commits for litesoft/trunk/Java/core/Server/src/org/litesoft/bo/views/server/WhereClauseSupport.java
Revision | Author | Commited | Message |
---|---|---|---|
939 Diff | GeorgeS | Mon 02 Jun, 2014 21:30:31 +0000 | Extracting commonfoundation |
810 Diff | GeorgeS | Thu 16 Aug, 2012 04:16:07 +0000 | |
809 Diff | GeorgeS | Thu 16 Aug, 2012 04:10:46 +0000 | |
802 Diff | GeorgeS | Wed 15 Aug, 2012 04:04:47 +0000 | |
228 | GeorgeS | Sun 22 May, 2011 22:40:21 +0000 |