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( "
" );
}
}
}
}