package com.joe.utilities.core.stdfield.domain; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Required; import org.springframework.context.ApplicationContext; import com.joe.utilities.core.serviceLocator.ServiceLocator; import com.joe.utilities.core.util.ReturnStatus; /** * Domain object for StandardField domain object. * @author GRT * * Creation date: 14/10/2009 * Copyright (c) 2009 MEDecision, Inc. All rights reserved. * */ public abstract class AbstractStandardField implements IStandardField { private int numForLimit = 0; @Autowired private ApplicationContext applicationContext; private String code; private String description; private boolean active; public AbstractStandardField() { numForLimit = NUMBER_FOR_LIMIT; } /** * @see com.med.utilities.domain.IStandardField#isActive() */ public boolean isActive() { return active; } /** * @see com.med.utilities.core.ILookup#setActive(boolean) */ public void setActive(boolean active) { this.active = active; } /** * @see com.med.utilities.core.ILookup#setCode(String) */ public void setCode(String code) { this.code = code; } /** * @see com.med.utilities.core.ILookupProfile#getCode() */ public String getCode() { return code; } /** * @see com.med.utilities.core.ILookup#setDescription(String) */ public void setDescription(String description) { this.description = description; } /** * @see com.med.utilities.core.ILookupProfile#getDescription() */ public String getDescription() { return description; } /** * @see com.med.utilities.core.ILookupProfile#getDisplayDescription() */ public String getDisplayDescription() { String text = this.getDescription(); if(text == null) return text; StringBuffer buffer = new StringBuffer(numForLimit); int length = text.length(); if (length > 0 && length > numForLimit) { buffer.append(text.substring(0, numForLimit-3)); buffer.append("..."); }else { buffer.append(text); } return buffer.toString(); } @Override public int hashCode() { return new HashCodeBuilder().append(this.getCode()).toHashCode(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final AbstractStandardField other = (AbstractStandardField) obj; return new EqualsBuilder().append(this.getCode(), other.getCode()) .isEquals(); } /** * @see com.med.standardfield.domain.IStandardField#validate() */ public ReturnStatus validate() { ReturnStatus status = new ReturnStatus(); if (getCode() == null || getCode().trim().length() == 0) { status.addError(IStandardField.ERROR_CODE_IS_NULL, "code is a required field"); } else { String invalidCharacters = this.getInvalidCharacters(getCode()); if (invalidCharacters != null) { Map<String, String> parameterMap = new HashMap<String, String>(); parameterMap.put("invalidCharacters", invalidCharacters); status.addError(IStandardField.ERROR_CODE_CONTAINS_INVALID_CHARACTERS, "Code contains invalid characters.", parameterMap); } } if (getDescription() == null || getDescription().trim().length() == 0) { status.addError(IStandardField.ERROR_DESCRIIPTION_IS_NULL, "description is a required field"); } else { String invalidCharacters = this.getInvalidCharacters(getDescription()); if (invalidCharacters != null) { Map<String, String> parameterMap = new HashMap<String, String>(); parameterMap.put("invalidCharacters", invalidCharacters); status.addError(IStandardField.ERROR_DESCRIIPTION_CONTAINS_INVALID_CHARACTERS, "Description contains invalid characters.", parameterMap); } } return status; } /** * @see com.med.utilities.core.IStandardFieldLookupProfile#isNew() */ public boolean isNew() { return false; } /** * @see com.med.utilities.core.IStandardFieldLookupProfile#setNew(boolean) */ public void setNew(boolean newFlag) { } public Serializable getAuditableID() { return code; } /** * @see java.lang.Object#toString() */ public String toString() { return new ToStringBuilder(this).append("code", code).toString(); } private String getInvalidCharacters(String str) { if (str == null) { return null; } String regEx = "^.*?[" + "\\u0001-\\u001F|" + //ASCII 1-31 "\\u007F-\\uFFFF|" + //ASCII 127-255 and Unicode 256 - 24575 "\\u007E|" + //ASCII "~" "\\u005E|" + //ASCII "^" "\\u007B|" + //ASCII "{" "\\u007D|" + //ASCII "}" "\\u005B|" + //ASCII "[" "\\u005D|" + //ASCII "]" "\\u007C|" + //ASCII "|" "\\u0060|" + //ASCII "`" "\\u005C|" + //ASCII "\" "].*?$"; Pattern p = Pattern.compile(regEx); boolean flag = p.matcher(str).find(); if (flag) { String result = ""; for (int i=0; i<str.length(); i++) { if (p.matcher(String.valueOf(str.charAt(i))).find() && !result.contains(String.valueOf(str.charAt(i)))) { result += "\"" + str.charAt(i) + "\"" + ", "; } } result = result.substring(0, result.length() - 2); return result; } return null; } public void setNumOfLimit(int numForLimit) { this.numForLimit = numForLimit; } }