import com.allaire.cfx.Response; import com.allaire.cfx.Request; import com.allaire.cfx.CustomTag; import com.allaire.cfx.Query; import com.fsenablers.fuzzy.FuzzyCompare; public class CFXFuzzyCompare implements CustomTag { public void processRequest( Request request, Response response ) throws Exception { if( request.getQuery() != null ) { processQuery( request, response ); } else { com.fsenablers.fuzzy.FuzzyCompare fc = new com.fsenablers.fuzzy.FuzzyCompare(); String sSource = request.getAttribute( "source" ); String sTarget = request.getAttribute( "target" ); String sVariable = request.getAttribute( "variable" ); if( sVariable.length() == 0 ) { sVariable = "editDistance"; } int iEditDistance = fc.computeEditDistance( sSource, sTarget ); response.setVariable( sVariable, Integer.toString( iEditDistance ) ); } }; private void processQuery( Request request, Response response ) throws Exception { Query query = request.getQuery(); int srcCompanyNameIdx = query.getColumnIndex( "srcCompanyName" ); int srcAddressIdx = query.getColumnIndex( "srcAddress" ); int srcAddress2Idx = query.getColumnIndex( "srcAddress2" ); int companyNameIdx = query.getColumnIndex( "companyName" ); int stdAddressIdx = query.getColumnIndex( "stdAddress" ); int stdAddress2Idx = query.getColumnIndex( "stdAddress2" ); int companyNameEditDistanceIdx = query.getColumnIndex( "companyNameEditDistance" ); int addressEditDistanceIdx = query.getColumnIndex( "addressEditDistance" ); int addressEditDistance2Idx = query.getColumnIndex( "addressEditDistance2" ); int companyNameEditDistance = 255; int addressEditDistance = 255; int addressEditDistance2 = 255; boolean bDebug = request.attributeExists( "debug" ); if( bDebug ) { response.write( "srcCompanyNameIdx=" + srcCompanyNameIdx + "
" ); response.write( "srcAddressIdx=" + srcAddressIdx + "
" ); response.write( "srcAddress2Idx=" + srcAddress2Idx + "
" ); response.write( "companyNameIdx=" + companyNameIdx + "
" ); response.write( "stdAddressIdx=" + stdAddressIdx + "
" ); response.write( "stdAddress2Idx=" + stdAddress2Idx + "
" ); response.write( "companyNameEditDistanceIdx=" + companyNameEditDistanceIdx + "
" ); response.write( "addressEditDistanceIdx=" + addressEditDistanceIdx + "
" ); response.write( "addressEditDistance2Idx=" + addressEditDistance2Idx + "
" ); response.write( "rows = " + query.getRowCount() + "
"); } FuzzyCompare fc = new FuzzyCompare(); String sSource; String sTarget; for( int x = 1; x <= query.getRowCount(); x++ ) { if( bDebug ) { response.write( "Row: " + x + "
" ); } // company name edit distance if( srcCompanyNameIdx > 0 && companyNameIdx > 0 && companyNameEditDistanceIdx > 0 ) { sSource = query.getData( x, srcCompanyNameIdx ); sTarget = query.getData( x, companyNameIdx ); companyNameEditDistance = fc.computeEditDistance( sSource, sTarget ); if( bDebug ) { response.write( "companyName: source: " + sSource + " target: " + sTarget + " distance: " + companyNameEditDistance + "
" ); } } if( companyNameEditDistanceIdx > 0 ) { query.setData( x, companyNameEditDistanceIdx, Integer.toString( companyNameEditDistance )); } if( srcAddressIdx > 0 && stdAddressIdx > 0 && addressEditDistanceIdx > 0 ) { sSource = query.getData( x, srcAddressIdx ); sTarget = query.getData( x, stdAddressIdx ); if( !sSource.equals("") || !sTarget.equals("") ) { addressEditDistance = fc.computeEditDistance( sSource, sTarget ); } else { addressEditDistance = 255; } if( bDebug ) { response.write( "address: source: " + sSource + " target: " + sTarget + " distance: " + addressEditDistance + "
" ); } } if( addressEditDistanceIdx > 0 ) { query.setData( x, addressEditDistanceIdx, Integer.toString( addressEditDistance )); } if( srcAddress2Idx > 0 && stdAddress2Idx > 0 && addressEditDistance2Idx > 0 ) { sSource = query.getData( x, srcAddress2Idx ); sTarget = query.getData( x, stdAddress2Idx ); if( !sSource.equals("") || !sTarget.equals("") ) { addressEditDistance2 = fc.computeEditDistance( sSource, sTarget ); } else { addressEditDistance2 = 255; } if( bDebug ) { response.write( "address2: source: " + sSource + " target: " + sTarget + " distance: " + addressEditDistance2 + "
"); } } if( addressEditDistance2Idx > 0 ) { query.setData( x, addressEditDistance2Idx, Integer.toString( addressEditDistance2 )); } if( bDebug ) { response.write( "
" ); } } } }