Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * The SmartWeb Framework
   * Copyright (C) 2004-2006
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  *
  * For further informations on the SmartWeb Framework please visit
  *
  *                        http://smartweb.sourceforge.net
  */
  
 package net.smartlab.web.registry;
 
TODO documentation

Author(s):
rlogiacco
Uml.dependency:
supplier="net.smartlab.web.registry.Locality"
 
 public class GenericDeduplicationStrategy implements DeduplicationStrategy {
 
 	/* #net.smartlab.web.registry.GenericDeduplicationCode code */

Logger for this class.
 
 	protected final Log logger = LogFactory.getLog(this.getClass());

Special characters to remove from anywhere.
 
 	public final static char[] SPECIAL_CHARS = "\\.\'-()/\",*%:;_��+=?!$&�>< ".toCharArray();

Prefixes to be removed.
 
 	public final static String[] PREFIXES = new String[] {
 			"\\bSANTISSIMO",
 			"\\bSANTISSIMA",
 			"\\bSANTISSIMI",
 			"\\bSANTISSIME",
 			"\\bSANTO",
 			"\\bSAN",
 			"\\bSANT'",
 			"\\bSANTO",
 			"\\bSANTA",
 			"\\bSANTI",
 			"\\bSANTE",
 			"\\bSAINT",
 			"\\bST",
 			"\\bS"};

Infissi che non devono comparire nel numero civico.
 
 	public final static String[] INFIXES = new String[] {"SNC""SC.*""INT.*""/.*"};

 
 	public DeduplicationCode digest(Entity entity) {
 		// Compute
 		StringBuffer buffer = null;
 		MailAddress address = null;
 		if (entity instanceof Person) {
 			Person person = (Person)entity;
 			Name name = person.getName();
 			String firstname = this.cleanup(name.getFirstname());
 			buffer = new StringBuffer(4);
 			try {
 				buffer.append(firstname.charAt(0));
 				for (int i = 1, count = 0; i < firstname.length() && count < 3; i++) {
 					char c = firstname.charAt(i);
 					if (!this.isWovel(c)) {
 						buffer.append(c);
 						count++;
 					}
 				}
 				if (buffer.length() > 0) {
 					result.setFirstname(buffer.toString());
 				}
catch (IndexOutOfBoundsException ioobe) {
				.warn("firstname not valorized");
			}
			String lastname = this.cleanup(name.getLastname());
			buffer = new StringBuffer(4);
			try {
				buffer.append(lastname.charAt(0));
				for (int i = 1, count = 0; i < lastname.length() && count < 3; i++) {
					char c = lastname.charAt(i);
					if (!this.isWovel(c)) {
						buffer.append(c);
						count++;
					}
				}
				if (buffer.length() > 0) {
					result.setLastname(buffer.toString());
				}
				result.setLength(lastname.length());
catch (IndexOutOfBoundsException ioobe) {
				.warn("lastname not valorized");
			}
			address = person.getResidence();
else if (entity instanceof Corporation) {
			Corporation corporation = (Corporation)entity;
			String name = this.cleanup(entity.getDisplay(), null);
			buffer = new StringBuffer(4);
			try {
				buffer.append(name.charAt(0));
				for (int i = 1, count = 0; i < name.length() && count < 3; i++) {
					char c = name.charAt(i);
					if (!this.isWovel(c)) {
						buffer.append(c);
						count++;
					}
				}
				if (buffer.length() > 0) {
					result.setLastname(buffer.toString());
				}
				for (int i = name.length() - 1, count = 0; i > -1 && count < 4; i++) {
					char c = name.charAt(i);
					if (!this.isWovel(c)) {
						buffer.append(c);
						count++;
					}
				}
				if (buffer.length() > 0) {
					result.setFirstname(buffer.toString());
				}
catch (IndexOutOfBoundsException ioobe) {
				.warn("name not valorized");
			}
			address = corporation.getLegalSitus();
		}
		if (address != null) {
			buffer = new StringBuffer(4);
			String street = this.cleanup(address.getStreet(), );
			for (int i = street.length() - 1, count = 0; i > -1 && count < 4; i--) {
				buffer.append(street.charAt(i));
				count++;
			}
			if (buffer.length() > 0) {
				result.setStreet(buffer.toString());
			}
			buffer = new StringBuffer(6);
			String city = this.cleanup(address.getLocality().getCity(), );
			for (int i = city.length() - 1, count = 0; i > -1 && count < 6; i--) {
				char c = city.charAt(i);
				if (!this.isWovel(c)) {
					if (count < 4) {
						buffer.insert(0, c);
						count++;
else {
						buffer.append(c);
						count++;
					}
				}
			}
			if (buffer.length() > 0) {
				result.setCity(buffer.toString());
			}
			String zipCode = this.cleanup(address.getZipCode());
			if (zipCode.length() > 0) {
				result.setZipCode(zipCode);
			}
			String civic = this.cleanup(address.getCivic(), );
			if (civic.length() > 0) {
				result.setCivic(civic);
			}
		}
		return result;
	}

Throws:
org.hibernate.HibernateException
See also:
net.smartlab.web.registry.DeduplicationStrategy#getCriteria(net.sf.hibernate.Criteria , net.smartlab.web.registry.DeduplicationCode )
	public Criteria getCriteria(Criteria criteriaDeduplicationCode codethrows HibernateException {
		return criteria.createCriteria("item").add(Example.create(code).excludeZeroes());
	}

Removes from the string the special characters.

Parameters:
source the string to be cleaned up.
Returns:
the string cleaned up.
	protected String cleanup(String source) {
		return this.cleanup(sourcenull);
	}

Removes from the string the special characters and a list of regular expression patterns.

Parameters:
source the string to be cleaned up.
removable the list of regular expression patterns to remove.
Returns:
the string cleaned up.
	protected String cleanup(String sourceString[] removable) {
		if (source != null) {
			source = source.toUpperCase();
			if (removable != null) {
				for (int i = 0; i < removable.lengthi++) {
					source = source.replaceAll(removable[i], "");
				}
			}
			StringBuffer result = new StringBuffer(source.length());
			char[] chars = source.toCharArray();
			for (int i = 0; i < chars.lengthi++) {
				if (Character.isDigit(chars[i])) {
					result.append(chars[i]);
else {
					if (i == 0 || (i > 0 && chars[i] != chars[i - 1])) {
						boolean special = false;
						for (int j = 0; j < .j++) {
							if (chars[i] == [j]) {
								special = true;
								break;
							}
						}
						if (!special) {
							result.append(chars[i]);
						}
					}
				}
			}
			return result.toString();
else {
			return "";
		}
	}

Identifies non wovel characters.

Parameters:
c the character to identify.
Returns:
true only if the providen character is a letter and is not a wovel.
	protected boolean isWovel(char c) {
		switch (c) {
			case 'A':
			case 'E':
			case 'I':
			case 'O':
			case 'U':
			case 'Y':
				return true;
			default:
				return false;
		}
	}
New to GrepCode? Check out our FAQ X