/*
* Copyright (c) 2005-2011 Grameen Foundation USA
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
* See also http://www.apache.org/licenses/LICENSE-2.0.html for an
* explanation of the license and how it is applied.
*/
package org.mifos.framework.components.audit.util.helpers;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.hibernate.EntityMode;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.proxy.LazyInitializer;
import org.hibernate.type.ComponentType;
import org.hibernate.type.Type;
import org.mifos.accounts.productdefinition.business.LoanOfferingFeesEntity;
import org.mifos.accounts.productdefinition.business.PrdStatusEntity;
import org.mifos.application.master.business.MasterDataEntity;
import org.mifos.application.meeting.business.MeetingBO;
import org.mifos.customers.personnel.business.PersonnelLevelEntity;
import org.mifos.customers.personnel.business.PersonnelStatusEntity;
import org.mifos.framework.business.AbstractBusinessObject;
import org.mifos.framework.hibernate.helper.StaticHibernateUtil;
import org.mifos.framework.util.helpers.DateUtils;
import org.mifos.framework.util.helpers.Money;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SuppressWarnings("unchecked")
public class InterceptHelper {
private static final Logger logger = LoggerFactory.getLogger(InterceptHelper.class);
private Map<Object, Object> initialValues;
private Map<Object, Object> changedValues;
private Map<Object, Object> columnNames;
private Locale locale;
private Short localeId;
private String entityName;
private Integer entityId;
private StringBuilder initialArray = null;
private StringBuilder changeArray = null;
public InterceptHelper() {
initialValues = new HashMap<Object, Object>();
changedValues = new HashMap<Object, Object>();
columnNames = new HashMap<Object, Object>();
}
public boolean isInitialValueMapEmpty() {
if (initialValues == null || initialValues.size() == 0) {
return true;
}
return false;
}
public Map getInitialValueMap() {
return initialValues;
}
public Map getChangeValueMap() {
return changedValues;
}
public Map getPropertyNames() {
return columnNames;
}
public Object getInitialValue(Object key) {
return initialValues.get(key);
}
public Object getChangeValue(Object key) {
return changedValues.get(key);
}
public Object getPropertyName(Object key) {
return columnNames.get(key);
}
public String getEntityName() {
return entityName;
}
public Integer getEntityId() {
return entityId;
}
public Map hibernateMeta(Object object, String state) {
logger.debug("object : " + object);
ClassMetadata customMeta = StaticHibernateUtil.getSessionFactory().getClassMetadata(object.getClass());
Object[] propertyValues = customMeta.getPropertyValues(object, EntityMode.POJO);
String[] propertyNames = customMeta.getPropertyNames();
Type[] propertyTypes = customMeta.getPropertyTypes();
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
// locale=((BusinessObject)object).getUserContext().getMfiLocale();
locale = ((AbstractBusinessObject) object).getUserContext().getCurrentLocale();
// localeId=((BusinessObject)object).getUserContext().getMfiLocaleId();
localeId = ((AbstractBusinessObject) object).getUserContext().getLocaleId();
logger.debug("initial path class: " + AuditConfiguration.getEntityToClassPath(object.getClass().getName()));
entityName = AuditConfiguration.getEntityToClassPath(object.getClass().getName());
entityId = Integer.valueOf(customMeta.getIdentifier(object, EntityMode.POJO).toString());
}
setPrimaryKeyValues(customMeta, object, customMeta.getIdentifierPropertyName(), state);
for (int i = 0; i < propertyNames.length; i++) {
if (!propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType()
&& !propertyTypes[i].isComponentType()) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = propertyNames[i];
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
initialValues.put(propertyNames[i], value);
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
initialValues.put(propertyNames[i], ((Calendar) propertyValues[i]).getTime());
} else if (propertyValues[i] instanceof byte[] && propertyValues[i] != null) {
initialValues.put(propertyNames[i], new String((byte[]) propertyValues[i]));
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
try {
Date date = (Date) propertyValues[i];
initialValues.put(propertyNames[i], DateUtils.getUserLocaleDate(locale,
new java.sql.Date(date.getTime()).toString()));
} catch (Exception e) {
initialValues.put(propertyNames[i], propertyValues[i].toString());
}
} else {
initialValues.put(propertyNames[i], propertyValues[i]);
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(propertyNames[i], columnName);
} else {
columnNames.put(propertyNames[i], propertyNames[i]);
}
} else {
String name = propertyNames[i];
logger.debug("c hibernateMeta " + name + " : " + propertyValues[i]);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
changedValues.put(propertyNames[i], value);
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
changedValues.put(propertyNames[i], ((Calendar) propertyValues[i]).getTime());
} else if (propertyValues[i] instanceof byte[] && propertyValues[i] != null) {
changedValues.put(propertyNames[i], new String((byte[]) propertyValues[i]));
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
try {
Date date = (Date) propertyValues[i];
changedValues.put(propertyNames[i], DateUtils.getUserLocaleDate(locale,
new java.sql.Date(date.getTime()).toString()));
} catch (Exception e) {
changedValues.put(propertyNames[i], propertyValues[i].toString());
}
} else {
changedValues.put(propertyNames[i], propertyValues[i]);
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(propertyNames[i], columnName);
} else {
columnNames.put(propertyNames[i], propertyNames[i]);
}
}
}
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& propertyValues[i] instanceof MasterDataEntity
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], null)) {
String personnelStatusName = AuditConstants.PERSONNELSTATUSPATH;
String personnelLevelName = AuditConstants.PERSONNELLEVELPATH;
if (propertyValues[i].getClass().getName().startsWith(personnelStatusName)) {
Short id = ((PersonnelStatusEntity) propertyValues[i]).getId();
populateValueForObjectsOfTypeMasterDataEntity(id, state, propertyNames[i]);
} else if (propertyValues[i].getClass().getName().startsWith(personnelLevelName)) {
Short id = ((PersonnelLevelEntity) propertyValues[i]).getId();
populateValueForObjectsOfTypeMasterDataEntity(id, state, propertyNames[i]);
} else {
populateValueForObjectsOfTypeMasterDataEntity(propertyValues[i], state, propertyNames[i]);
}
}
// Reading Collection Types
if (propertyTypes[i].isCollectionType()
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], null)
&& AuditConfiguration.isObjectPropertiesToBeMerged(entityName, propertyNames[i], null)) {
populateAndMergeCollectionTypes(state, propertyValues[i], propertyNames[i], null);
}
if (propertyTypes[i].isCollectionType()
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], null)
&& !AuditConfiguration.isObjectPropertiesToBeMerged(entityName, propertyNames[i], null)) {
Iterator iterator = ((Set) propertyValues[i]).iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
if (obj != null) {
if (obj instanceof LoanOfferingFeesEntity) {
LoanOfferingFeesEntity loanOfferingFeesEntity = (LoanOfferingFeesEntity) obj;
if (propertyNames[i].equalsIgnoreCase("loanOfferingFees")
&& loanOfferingFeesEntity.getPrdOfferingFeeId() != null) {
readLoanOfferingFeesCollection(loanOfferingFeesEntity, state);
} else {
readFurtherMetaForCollectionType(obj, propertyNames[i], state);
}
} else {
readFurtherMetaForCollectionType(obj, propertyNames[i], state);
}
}
}
}
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], null)) {
Object obj = propertyValues[i];
if (obj != null) {
readFurtherMeta(obj, propertyNames[i], state);
}
}
// Reading further Money type
if (!propertyTypes[i].isEntityType() && propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity) && (propertyValues[i] instanceof Money)) {
Object obj1 = propertyValues[i];
if (obj1 != null) {
readFurtherMoneyType(obj1, propertyNames[i], state);
}
}
// Reading further component type
if (!propertyTypes[i].isEntityType() && propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], null)) {
Object obj1 = propertyValues[i];
if (obj1 != null) {
readFurtherComponenetMeta(obj1, propertyNames[i], state, propertyTypes[i]);
}
}
}
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
return initialValues;
} else {
return changedValues;
}
}
private void readFurtherMeta(Object obj, String firstName, String state) {
Class clazz = getClazz(obj);
ClassMetadata customMeta = StaticHibernateUtil.getSessionFactory().getClassMetadata(clazz);
Object[] propertyValues = customMeta.getPropertyValues(obj, EntityMode.POJO);
String[] propertyNames = customMeta.getPropertyNames();
Type[] propertyTypes = customMeta.getPropertyTypes();
String prdStatusName = AuditConstants.PRDSTATUSPATH;
if (obj.getClass().getName().startsWith(prdStatusName)) {
Short id = ((PrdStatusEntity) obj).getOfferingStatusId();
setPrimaryKeyValues(id, firstName.concat(customMeta.getIdentifierPropertyName()), state);
} else {
setPrimaryKeyValues(customMeta, obj, firstName.concat(customMeta.getIdentifierPropertyName()), state);
}
for (int i = 0; i < propertyNames.length; i++) {
logger.debug("readFurtherMeta property : " + propertyNames[i]);
setColumnValues(propertyTypes[i], propertyNames[i], firstName, state, propertyValues[i]);
// Reading masterdata Types
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& propertyValues[i] instanceof MasterDataEntity
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
populateValueForObjectsOfTypeMasterDataEntity(propertyValues[i], state, firstName
.concat(propertyNames[i]));
}
// Reading Collection Types
if (propertyTypes[i].isCollectionType()
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)
&& !AuditConfiguration.isObjectPropertiesToBeMerged(entityName, propertyNames[i], firstName)) {
Iterator iterator = ((Set) propertyValues[i]).iterator();
while (iterator.hasNext()) {
Object valueFromSet = iterator.next();
readFurtherMetaForCollectionType(valueFromSet, propertyNames[i], state);
}
}
// Reading Collection Types
if (propertyTypes[i].isCollectionType()
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)
&& AuditConfiguration.isObjectPropertiesToBeMerged(entityName, propertyNames[i], firstName)) {
populateAndMergeCollectionTypes(state, propertyValues[i], propertyNames[i], firstName);
}
// Reading further entity type
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
Object obj1 = propertyValues[i];
if (obj1 != null) {
if (obj1 instanceof MeetingBO) {
MeetingBO meeting = (MeetingBO) obj1;
if (propertyNames[i].equalsIgnoreCase("meeting") && meeting.getMeetingId() != null) {
readMeetingEntity(meeting, propertyNames[i], state);
} else {
readFurtherMeta(obj1, propertyNames[i], state);
}
} else {
readFurtherMeta(obj1, propertyNames[i], state);
}
}
}
// Reading further component type
if (!propertyTypes[i].isEntityType() && propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
Object obj1 = propertyValues[i];
if (obj1 != null) {
readFurtherComponenetMeta(obj1, propertyNames[i], state, propertyTypes[i]);
}
}
// Reading further Money type
if (!propertyTypes[i].isEntityType() && propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity) && (propertyValues[i] instanceof Money)) {
Object obj1 = propertyValues[i];
if (obj1 != null) {
readFurtherMoneyType(obj1, firstName.concat(propertyNames[i]), state);
}
}
}
}
private void readMeetingEntity(MeetingBO meeting, String firstName, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
// Logggig meeting place
String name = firstName.concat("meetingPlace");
logger.debug("i readMeetingEntity " + name + " : " + meeting.getMeetingPlace());
initialValues.put(name, meeting.getMeetingPlace());
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "meetingPlace");
}
// Logging meeting recurrence type
name = "recurrenceTyperecurrenceId";
logger.debug("i readMeetingEntity " + name + " : "
+ meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting.getMeetingDetails()
.getRecurrenceType().getRecurrenceId(), localeId);
if (!value.equals("")) {
initialValues.put(name, value);
} else {
initialValues.put(name, meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
}
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
// Logging recur after
name = "meetingDetailsrecurAfter";
logger.debug("i readMeetingEntity " + name + " : " + meeting.getMeetingDetails().getRecurAfter());
initialValues.put(name, meeting.getMeetingDetails().getRecurAfter());
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
} else {
// Logggig meeting place
String name = firstName.concat("meetingPlace");
logger.debug("c readMeetingEntity " + name + " : " + meeting.getMeetingPlace());
changedValues.put(name, meeting.getMeetingPlace());
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "meetingPlace");
}
// Logging meeting recurrence type
name = "recurrenceTyperecurrenceId";
logger.debug("i readMeetingEntity " + name + " : "
+ meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting.getMeetingDetails()
.getRecurrenceType().getRecurrenceId(), localeId);
if (!value.equals("")) {
changedValues.put(name, value);
} else {
changedValues.put(name, meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
}
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
// Logging recur after
name = "meetingDetailsrecurAfter";
logger.debug("i readMeetingEntity " + name + " : " + meeting.getMeetingDetails().getRecurAfter());
changedValues.put(name, meeting.getMeetingDetails().getRecurAfter());
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
}
}
private void readFurtherMoneyType(Object obj, String name, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
logger.debug("i readFurtherMoneyType " + name + " : " + obj);
if (obj.toString().equalsIgnoreCase("0.0")) {
initialValues.put(name, "");
} else {
initialValues.put(name, obj.toString());
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, name);
}
} else {
logger.debug("c readFurtherMoneyType " + name + " : " + obj);
if (obj.toString().equalsIgnoreCase("0.0")) {
changedValues.put(name, "");
} else {
changedValues.put(name, obj.toString());
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, name);
}
}
}
private void readFurtherComponenetMeta(Object obj, String firstName, String state, Type propertyType) {
ComponentType componentType = (ComponentType) propertyType;
Object[] propertyValues = componentType.getPropertyValues(obj, EntityMode.POJO);
String[] propertyNames = componentType.getPropertyNames();
for (int i = 0; i < propertyNames.length; i++) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = firstName.concat(propertyNames[i]);
logger.debug("i setColumnValues " + name + " : " + propertyValues[i]);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
initialValues.put(name, value);
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
initialValues.put(name, ((Calendar) propertyValues[i]).getTime());
} else if (propertyValues[i] instanceof byte[] && propertyValues[i] != null) {
initialValues.put(name, new String((byte[]) propertyValues[i]));
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
try {
Date date = (Date) propertyValues[i];
initialValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date
.getTime()).toString()));
} catch (Exception e) {
initialValues.put(name, propertyValues[i].toString());
}
} else {
initialValues.put(name, propertyValues[i]);
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyNames[i]);
}
} else {
String name = firstName.concat(propertyNames[i]);
logger.debug("c setColumnValues " + name + " : " + propertyValues[i]);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
changedValues.put(name, value);
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
changedValues.put(name, ((Calendar) propertyValues[i]).getTime());
} else if (propertyValues[i] instanceof byte[] && propertyValues[i] != null) {
changedValues.put(name, new String((byte[]) propertyValues[i]));
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
Date date = (Date) propertyValues[i];
changedValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date.getTime())
.toString()));
} else {
changedValues.put(name, propertyValues[i]);
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyNames[i]);
}
}
}
}
private void setColumnValues(Type propertyType, String propertyName, String firstName, String state,
Object propertyValue) {
if (!propertyType.isEntityType() && !propertyType.isComponentType() && !propertyType.isCollectionType()) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = firstName.concat(propertyName);
logger.debug("i setColumnValues " + name + " : " + propertyValue);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValue,
localeId);
initialValues.put(name, value);
} else {
if (propertyValue != null && propertyValue instanceof Calendar) {
initialValues.put(name, ((Calendar) propertyValue).getTime());
} else if (propertyValue != null && propertyValue instanceof byte[]) {
initialValues.put(name, new String((byte[]) propertyValue));
} else if (propertyValue != null && propertyValue instanceof Date) {
try {
Date date = (Date) propertyValue;
initialValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date
.getTime()).toString()));
} catch (Exception e) {
initialValues.put(name, propertyValue.toString());
}
} else {
initialValues.put(name, propertyValue);
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyName);
}
} else {
String name = firstName.concat(propertyName);
logger.debug("c setColumnValues " + name + " : " + propertyValue);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValue,
localeId);
changedValues.put(name, value);
} else {
if (propertyValue != null && propertyValue instanceof Calendar) {
changedValues.put(name, ((Calendar) propertyValue).getTime());
} else if (propertyValue != null && propertyValue instanceof byte[]) {
changedValues.put(name, new String((byte[]) propertyValue));
} else if (propertyValue != null && propertyValue instanceof Date) {
try {
Date date = (Date) propertyValue;
changedValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date
.getTime()).toString()));
} catch (Exception e) {
changedValues.put(name, propertyValue.toString());
}
} else {
changedValues.put(name, propertyValue);
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyName);
}
}
}
}
private void readLoanOfferingFeesCollection(LoanOfferingFeesEntity loanOfferingFeesEntity, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = "feesfeeName";
logger.debug("i readFurtherMetaForCollectionType : " + name + " : "
+ loanOfferingFeesEntity.getFees().getFeeName());
String oldValue = getOldValueToKey(initialValues, name);
String value = loanOfferingFeesEntity.getFees().getFeeName();
if (!oldValue.equals("")) {
initialValues.put(name, value.concat(",").concat(oldValue));
} else {
initialValues.put(name, value);
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "feeName");
}
} else {
String name = "feesfeeName";
logger.debug("c readFurtherMetaForCollectionType : " + name + " : "
+ loanOfferingFeesEntity.getFees().getFeeName());
String oldValue = getOldValueToKey(changedValues, name);
String value = loanOfferingFeesEntity.getFees().getFeeName();
if (!value.equals("")) {
changedValues.put(name, value.concat(",").concat(oldValue));
} else {
changedValues.put(name, oldValue);
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "feeName");
}
}
}
private void readFurtherMetaForCollectionType(Object obj, String firstName, String state) {
Class l = getClazz(obj);
ClassMetadata customMeta = StaticHibernateUtil.getSessionFactory().getClassMetadata(l);
Object[] propertyValues = customMeta.getPropertyValues(obj, EntityMode.POJO);
String[] propertyNames = customMeta.getPropertyNames();
Type[] propertyTypes = customMeta.getPropertyTypes();
setPrimaryKeyValueForCollectionType(customMeta, obj, firstName.concat(customMeta.getIdentifierPropertyName()),
state);
for (int i = 0; i < propertyNames.length; i++) {
if (!propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& !propertyTypes[i].isCollectionType()) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = firstName.concat(propertyNames[i]);
logger.debug("i readFurtherMetaForCollectionType : " + name + " : " + propertyValues[i]);
String oldValue = getOldValueToKey(initialValues, name);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
if (!oldValue.equals("")) {
initialValues.put(name, value.concat(",").concat(oldValue));
} else {
initialValues.put(name, value);
}
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
if (!oldValue.equals("")) {
initialValues.put(name, ((Calendar) propertyValues[i]).getTime().toString().concat(",")
.concat(oldValue));
} else {
initialValues.put(name, ((Calendar) propertyValues[i]).getTime());
}
} else if (!(propertyValues[i] instanceof Calendar) && !(propertyValues[i] instanceof Date)
&& propertyValues[i] != null) {
if (!oldValue.equals("")) {
initialValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
} else {
initialValues.put(name, propertyValues[i]);
}
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
if (!oldValue.equals("")) {
try {
Date date = (Date) propertyValues[i];
initialValues.put(name, DateUtils.getUserLocaleDate(locale,
new java.sql.Date(date.getTime()).toString()).toString().concat(",")
.concat(oldValue));
} catch (Exception e) {
initialValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
}
} else {
try {
Date date = (Date) propertyValues[i];
initialValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date
.getTime()).toString()));
} catch (Exception e) {
initialValues.put(name, propertyValues[i].toString());
}
}
} else {
if (!oldValue.equals("")) {
initialValues.put(name, oldValue);
} else {
initialValues.put(name, propertyValues[i]);
}
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyNames[i]);
}
} else {
String name = firstName.concat(propertyNames[i].toString());
logger.debug("c readFurtherMetaForCollectionType : " + name + " : " + propertyValues[i]);
String oldValue = getOldValueToKey(changedValues, name);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
if (!value.equals("")) {
changedValues.put(name, value.concat(",").concat(oldValue));
} else {
changedValues.put(name, oldValue);
}
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
if (!oldValue.equals("")) {
changedValues.put(name, ((Calendar) propertyValues[i]).getTime().toString().concat(",")
.concat(oldValue));
} else {
changedValues.put(name, ((Calendar) propertyValues[i]).getTime());
}
} else if (!(propertyValues[i] instanceof Calendar) && !(propertyValues[i] instanceof Date)
&& propertyValues[i] != null) {
if (!oldValue.equals("")) {
changedValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
} else {
changedValues.put(name, propertyValues[i]);
}
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
if (!oldValue.equals("")) {
try {
Date date = (Date) propertyValues[i];
changedValues.put(name, DateUtils.getUserLocaleDate(locale,
new java.sql.Date(date.getTime()).toString()).toString().concat(",")
.concat(oldValue));
} catch (Exception e) {
changedValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
}
} else {
try {
Date date = (Date) propertyValues[i];
changedValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date
.getTime()).toString()));
} catch (Exception e) {
changedValues.put(name, propertyValues[i].toString());
}
}
} else {
if (!oldValue.equals("")) {
changedValues.put(name, oldValue);
} else {
changedValues.put(name, propertyValues[i]);
}
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyNames[i]);
}
}
}
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& propertyValues[i] instanceof MasterDataEntity
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
populateValueForObjectsOfTypeMasterDataEntityInCollections(propertyValues[i], state, firstName
.concat(propertyNames[i]));
}
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
Object object = propertyValues[i];
if (object != null) {
if (object instanceof MeetingBO) {
MeetingBO meeting = (MeetingBO) object;
if (propertyNames[i].equalsIgnoreCase("meeting") && meeting.getMeetingId() != null) {
readMeetingCollection(meeting, propertyNames[i], state);
} else {
readFurtherMetaForCollectionType(object, propertyNames[i], state);
}
} else {
readFurtherMetaForCollectionType(object, propertyNames[i], state);
}
}
}
// Reading further Money type
/*
* if (!propertyTypes[i].isEntityType() &&
* propertyTypes[i].isComponentType() && !(propertyValues[i]
* instanceof MasterDataEntity) && (propertyValues[i] instanceof
* Money)) { Object obj1 = propertyValues[i]; if (obj1 != null) {
* readFurtherMoneyType(obj1,
* firstName.concat(propertyNames[i]),state); } }
*/
// Reading further component type
if (!propertyTypes[i].isEntityType() && propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
Object obj1 = propertyValues[i];
if (obj1 != null) {
readComponenetTypeInCollectionTypeWithoutMerge(obj1, propertyNames[i], state, propertyTypes[i]);
}
}
}
}
private void readMeetingCollection(MeetingBO meeting, String firstName, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
// Logggig meeting place
String name = firstName.concat("meetingPlace");
logger.debug("i readMeetingCollection " + name + " : " + meeting.getMeetingPlace());
String oldValue = getOldValueToKey(initialValues, name);
String value = meeting.getMeetingPlace();
if (!oldValue.equals("")) {
initialValues.put(name, value.concat(",").concat(oldValue));
} else {
initialValues.put(name, value);
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "meetingPlace");
}
// Logging meeting recurrence type
name = "recurrenceTyperecurrenceId";
logger.debug("i readMeetingCollection " + name + " : "
+ meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting.getMeetingDetails()
.getRecurrenceType().getRecurrenceId(), localeId);
oldValue = getOldValueToKey(initialValues, name);
if (!oldValue.equals("")) {
initialValues.put(name, value.concat(",").concat(oldValue));
} else {
initialValues.put(name, value);
}
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
// Logging recur after
name = "meetingDetailsrecurAfter";
logger.debug("i readMeetingCollection " + name + " : " + meeting.getMeetingDetails().getRecurAfter());
value = meeting.getMeetingDetails().getRecurAfter().toString();
oldValue = getOldValueToKey(initialValues, name);
if (!oldValue.equals("")) {
initialValues.put(name, value.concat(",").concat(oldValue));
} else {
initialValues.put(name, value);
}
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
} else {
// Logggig meeting place
String name = firstName.concat("meetingPlace");
logger.debug("i readMeetingCollection " + name + " : " + meeting.getMeetingPlace());
String oldValue = getOldValueToKey(initialValues, name);
String value = meeting.getMeetingPlace();
if (!oldValue.equals("")) {
changedValues.put(name, value.concat(",").concat(oldValue));
} else {
changedValues.put(name, value);
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "meetingPlace");
}
// Logging meeting recurrence type
name = "recurrenceTyperecurrenceId";
logger.debug("i readMeetingCollection " + name + " : "
+ meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting.getMeetingDetails()
.getRecurrenceType().getRecurrenceId(), localeId);
oldValue = getOldValueToKey(initialValues, name);
if (!oldValue.equals("")) {
changedValues.put(name, value.concat(",").concat(oldValue));
} else {
changedValues.put(name, value);
}
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
// Logging recur after
name = "meetingDetailsrecurAfter";
logger.debug("i readMeetingCollection " + name + " : " + meeting.getMeetingDetails().getRecurAfter());
value = meeting.getMeetingDetails().getRecurAfter().toString();
oldValue = getOldValueToKey(initialValues, name);
if (!oldValue.equals("")) {
changedValues.put(name, value.concat(",").concat(oldValue));
} else {
changedValues.put(name, value);
}
columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, "recurrenceId");
}
}
}
private void readAndMergeCollectionTypes(Object obj, String firstName, String parentName, String state) {
Class l = getClazz(obj);
ClassMetadata customMeta = StaticHibernateUtil.getSessionFactory().getClassMetadata(l);
Object[] propertyValues = customMeta.getPropertyValues(obj, EntityMode.POJO);
String[] propertyNames = customMeta.getPropertyNames();
Type[] propertyTypes = customMeta.getPropertyTypes();
setPrimaryKeyValueForCollectionTypeAndMerge(customMeta, obj, firstName.concat(customMeta
.getIdentifierPropertyName()), state);
for (int i = 0; i < propertyNames.length; i++) {
logger.debug("property Name : " + propertyNames[i] + " value : " + propertyValues[i]);
if (!propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& !propertyTypes[i].isCollectionType()) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = firstName.concat(propertyNames[i]);
logger.debug("i readFurtherMetaForCollectionType " + name + " value : " + propertyValues[i]);
if (isValueLoggable(propertyNames[i], firstName)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name,
propertyValues[i], localeId);
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(value);
} else if (value.trim().length() != 0) {
initialArray.append("-").append(value);
}
} else {
if (propertyValues[i] != null) {
if (initialArray.toString().trim().length() == 0
|| initialArray.toString().endsWith(",")) {
initialArray.append(propertyValues[i]);
} else if (propertyValues[i].toString().trim().length() != 0) {
initialArray.append("-").append(propertyValues[i]);
}
}
}
}
} else {
String name = firstName.concat(propertyNames[i].toString());
logger.debug("c readFurtherMetaForCollectionType " + name + " value : " + propertyValues[i]);
if (isValueLoggable(propertyNames[i], firstName)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name,
propertyValues[i], localeId);
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(value);
} else if (value.trim().length() != 0) {
changeArray.append("-").append(value);
}
} else {
if (propertyValues[i] != null) {
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(propertyValues[i]);
} else if (propertyValues[i].toString().trim().length() != 0) {
changeArray.append("-").append(propertyValues[i]);
}
}
}
}
}
}
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& propertyValues[i] instanceof MasterDataEntity
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
populateAndMergeValueForObjectsOfTypeMasterDataEntityInCollections(propertyValues[i], state, firstName
.concat(propertyNames[i]));
}
if (propertyTypes[i].isEntityType() && !propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
Object object = propertyValues[i];
if (object != null) {
if (object instanceof MeetingBO) {
MeetingBO meeting = (MeetingBO) object;
if (propertyNames[i].equalsIgnoreCase("meeting") && meeting.getMeetingId() != null) {
readAndMergeMeetingCollection(meeting, propertyNames[i], state);
} else {
readAndMergeCollectionTypes(object, propertyNames[i], firstName, state);
}
} else {
readAndMergeCollectionTypes(object, propertyNames[i], firstName, state);
}
}
}
// Reading further Money type
/*
* if (!propertyTypes[i].isEntityType() &&
* propertyTypes[i].isComponentType() && !(propertyValues[i]
* instanceof MasterDataEntity) && (propertyValues[i] instanceof
* Money)) { Object obj1 = propertyValues[i]; if (obj1 != null) {
* readFurtherMoneyType(obj1,
* firstName.concat(propertyNames[i]),state); } }
*/
// Reading further component type
if (!propertyTypes[i].isEntityType() && propertyTypes[i].isComponentType()
&& !(propertyValues[i] instanceof MasterDataEntity)
&& AuditConfiguration.isObjectToBeLogged(entityName, propertyNames[i], firstName)) {
Object obj1 = propertyValues[i];
if (obj1 != null) {
readComponenetTypeInCollectionTypeWithMerge(obj1, propertyNames[i], state, propertyTypes[i]);
}
}
}
}
private void readAndMergeMeetingCollection(MeetingBO meeting, String firstName, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
// Logggig meeting place
String name = firstName.concat("meetingPlace");
logger.debug("i readAndMergeMeetingCollection " + name + " : " + meeting.getMeetingPlace());
if (isValueLoggable("meetingPlace", firstName)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting
.getMeetingPlace(), localeId);
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(value);
} else if (value.trim().length() != 0) {
initialArray.append("-").append(value);
}
} else {
if (meeting.getMeetingPlace() != null) {
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(meeting.getMeetingPlace());
} else if (meeting.getMeetingPlace().toString().trim().length() != 0) {
initialArray.append("-").append(meeting.getMeetingPlace());
}
}
}
}
// Logggig reccurence
name = "recurrenceTyperecurrenceId";
logger.debug("i readAndMergeMeetingCollection " + name + " : "
+ meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
if (isValueLoggable("recurrenceId", "recurrenceType")) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting
.getMeetingDetails().getRecurrenceType().getRecurrenceId(), localeId);
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(value);
} else if (value.trim().length() != 0) {
initialArray.append("-").append(value);
}
} else {
if (meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId() != null) {
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
} else if (meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId().toString().trim()
.length() != 0) {
initialArray.append("-").append(
meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
}
}
}
}
// Logggig recur after
name = "meetingDetailsrecurAfter";
if (isValueLoggable("recurAfter", "meetingDetails")) {
logger.debug("i readAndMergeMeetingCollection " + name + " : "
+ meeting.getMeetingDetails().getRecurAfter());
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting
.getMeetingDetails().getRecurAfter(), localeId);
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(value);
} else if (value.trim().length() != 0) {
initialArray.append("-").append(value);
}
} else {
if (meeting.getMeetingDetails().getRecurAfter() != null) {
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(meeting.getMeetingDetails().getRecurAfter());
} else if (meeting.getMeetingDetails().getRecurAfter().toString().trim().length() != 0) {
initialArray.append("-").append(meeting.getMeetingDetails().getRecurAfter());
}
}
}
}
} else {
// Logggig meeting place
String name = firstName.concat("meetingPlace");
if (isValueLoggable("meetingPlace", firstName)) {
logger.debug("c readAndMergeMeetingCollection " + name + " : " + meeting.getMeetingPlace());
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting
.getMeetingPlace(), localeId);
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(value);
} else if (value.trim().length() != 0) {
changeArray.append("-").append(value);
}
} else {
if (meeting.getMeetingPlace() != null) {
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(meeting.getMeetingPlace());
} else if (meeting.getMeetingPlace().toString().trim().length() != 0) {
changeArray.append("-").append(meeting.getMeetingPlace());
}
}
}
}
// Logggig reccurence
name = "recurrenceTyperecurrenceId";
if (isValueLoggable("recurrenceId", "recurrenceType")) {
logger.debug("c readAndMergeMeetingCollection " + name + " : "
+ meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting
.getMeetingDetails().getRecurrenceType().getRecurrenceId(), localeId);
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(value);
} else if (value.trim().length() != 0) {
changeArray.append("-").append(value);
}
} else {
if (meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId() != null) {
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
} else if (meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId().toString().trim()
.length() != 0) {
changeArray.append("-").append(
meeting.getMeetingDetails().getRecurrenceType().getRecurrenceId());
}
}
}
}
// Logggig recur after
name = "meetingDetailsrecurAfter";
if (isValueLoggable("recurAfter", "meetingDetails")) {
logger.debug("c readAndMergeMeetingCollection " + name + " : "
+ meeting.getMeetingDetails().getRecurAfter());
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, meeting
.getMeetingDetails().getRecurAfter(), localeId);
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(value);
} else if (value.trim().length() != 0) {
changeArray.append("-").append(value);
}
} else {
if (meeting.getMeetingDetails().getRecurAfter() != null) {
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(meeting.getMeetingDetails().getRecurAfter());
} else if (meeting.getMeetingDetails().getRecurAfter().toString().trim().length() != 0) {
changeArray.append("-").append(meeting.getMeetingDetails().getRecurAfter());
}
}
}
}
}
}
private void readComponenetTypeInCollectionTypeWithMerge(Object obj, String firstName, String state,
Type propertyType) {
ComponentType componentType = (ComponentType) propertyType;
Object[] propertyValues = componentType.getPropertyValues(obj, EntityMode.POJO);
String[] propertyNames = componentType.getPropertyNames();
for (int i = 0; i < propertyNames.length; i++) {
logger.debug("property Name : " + propertyNames[i] + " value : " + propertyValues[i]);
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = firstName.concat(propertyNames[i]);
logger.debug("i readComponenetTypeInCollectionTypeWithMerge " + name + " value : " + propertyValues[i]);
if (isValueLoggable(propertyNames[i], firstName)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(value);
} else if (value.trim().length() != 0) {
initialArray.append("-").append(value);
}
} else {
if (propertyValues[i] != null) {
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(propertyValues[i]);
} else if (propertyValues[i].toString().trim().length() != 0) {
initialArray.append("-").append(propertyValues[i]);
}
}
}
}
} else {
String name = firstName.concat(propertyNames[i].toString());
logger.debug("c readComponenetTypeInCollectionTypeWithMerge " + name + " value : " + propertyValues[i]);
if (isValueLoggable(propertyNames[i], firstName)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(value);
} else if (value.trim().length() != 0) {
changeArray.append("-").append(value);
}
} else {
if (propertyValues[i] != null) {
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(propertyValues[i]);
} else if (propertyValues[i].toString().trim().length() != 0) {
changeArray.append("-").append(propertyValues[i]);
}
}
}
}
}
}
}
private void readComponenetTypeInCollectionTypeWithoutMerge(Object obj, String firstName, String state,
Type propertyType) {
ComponentType componentType = (ComponentType) propertyType;
Object[] propertyValues = componentType.getPropertyValues(obj, EntityMode.POJO);
String[] propertyNames = componentType.getPropertyNames();
for (int i = 0; i < propertyNames.length; i++) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String name = firstName.concat(propertyNames[i]);
logger.debug("i readComponenetTypeInCollectionTypeWithoutMerge : " + name + " value : "
+ propertyValues[i]);
String oldValue = getOldValueToKey(initialValues, name);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
if (!oldValue.equals("")) {
initialValues.put(name, value.concat(",").concat(oldValue));
} else {
initialValues.put(name, value);
}
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
if (!oldValue.equals("")) {
initialValues.put(name, ((Calendar) propertyValues[i]).getTime().toString().concat(",")
.concat(oldValue));
} else {
initialValues.put(name, ((Calendar) propertyValues[i]).getTime());
}
} else if (!(propertyValues[i] instanceof Calendar) && !(propertyValues[i] instanceof Date)
&& propertyValues[i] != null) {
if (!oldValue.equals("")) {
initialValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
} else {
initialValues.put(name, propertyValues[i]);
}
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
if (!oldValue.equals("")) {
try {
Date date = (Date) propertyValues[i];
initialValues.put(name, DateUtils.getUserLocaleDate(locale,
new java.sql.Date(date.getTime()).toString()).toString().concat(",").concat(
oldValue));
} catch (Exception e) {
initialValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
}
} else {
try {
Date date = (Date) propertyValues[i];
initialValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date
.getTime()).toString()));
} catch (Exception e) {
initialValues.put(name, propertyValues[i].toString());
}
}
} else {
if (!oldValue.equals("")) {
initialValues.put(name, oldValue);
} else {
initialValues.put(name, propertyValues[i]);
}
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyNames[i]);
}
} else {
String name = firstName.concat(propertyNames[i].toString());
logger.debug("c readComponenetTypeInCollectionTypeWithoutMerge : " + name + " value : "
+ propertyValues[i]);
String oldValue = getOldValueToKey(changedValues, name);
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, propertyValues[i],
localeId);
if (!value.equals("")) {
changedValues.put(name, value.concat(",").concat(oldValue));
} else {
changedValues.put(name, oldValue);
}
} else {
if (propertyValues[i] instanceof Calendar && propertyValues[i] != null) {
if (!oldValue.equals("")) {
changedValues.put(name, ((Calendar) propertyValues[i]).getTime().toString().concat(",")
.concat(oldValue));
} else {
changedValues.put(name, ((Calendar) propertyValues[i]).getTime());
}
} else if (!(propertyValues[i] instanceof Calendar) && !(propertyValues[i] instanceof Date)
&& propertyValues[i] != null) {
if (!oldValue.equals("")) {
changedValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
} else {
changedValues.put(name, propertyValues[i]);
}
} else if (propertyValues[i] instanceof Date && propertyValues[i] != null) {
if (!oldValue.equals("")) {
try {
Date date = (Date) propertyValues[i];
changedValues.put(name, DateUtils.getUserLocaleDate(locale,
new java.sql.Date(date.getTime()).toString()).toString().concat(",").concat(
oldValue));
} catch (Exception e) {
changedValues.put(name, propertyValues[i].toString().concat(",").concat(oldValue));
}
} else {
try {
Date date = (Date) propertyValues[i];
changedValues.put(name, DateUtils.getUserLocaleDate(locale, new java.sql.Date(date
.getTime()).toString()));
} catch (Exception e) {
changedValues.put(name, propertyValues[i].toString());
}
}
} else {
if (!oldValue.equals("")) {
changedValues.put(name, oldValue);
} else {
changedValues.put(name, propertyValues[i]);
}
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, propertyNames[i]);
}
}
}
}
private void setPrimaryKeyValueForCollectionType(ClassMetadata customMeta, Object obj, String name, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
String oldValue = getOldValueToKey(initialValues, name);
logger.debug("i setPrimaryKeyValueForCollectionType : " + name + " value : "
+ customMeta.getIdentifier(obj, EntityMode.POJO));
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, customMeta.getIdentifier(
obj, EntityMode.POJO), localeId);
if (!oldValue.equals("")) {
initialValues.put(name, value.concat(",").concat(oldValue));
} else {
initialValues.put(name, value);
}
} else {
if (customMeta.getIdentifier(obj, EntityMode.POJO) != null) {
if (!oldValue.equals("")) {
initialValues.put(name, customMeta.getIdentifier(obj, EntityMode.POJO).toString().concat(",")
.concat(oldValue));
} else {
initialValues.put(name, customMeta.getIdentifier(obj, EntityMode.POJO));
}
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, customMeta.getIdentifierPropertyName());
}
} else {
String oldValue = getOldValueToKey(changedValues, name);
logger.debug("c setPrimaryKeyValueForCollectionType : " + name + " value : "
+ customMeta.getIdentifier(obj, EntityMode.POJO));
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, customMeta.getIdentifier(
obj, EntityMode.POJO), localeId);
if (!oldValue.equals("")) {
changedValues.put(name, value.concat(",").concat(oldValue));
} else {
changedValues.put(name, value);
}
} else {
if (customMeta.getIdentifier(obj, EntityMode.POJO) != null) {
if (!oldValue.equals("")) {
changedValues.put(name, customMeta.getIdentifier(obj, EntityMode.POJO).toString().concat(",")
.concat(oldValue));
} else {
changedValues.put(name, customMeta.getIdentifier(obj, EntityMode.POJO));
}
}
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, customMeta.getIdentifierPropertyName());
}
}
}
private void setPrimaryKeyValueForCollectionTypeAndMerge(ClassMetadata customMeta, Object obj, String name,
String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
logger.debug("i setPrimaryKeyValueForCollectionTypeAndMerge : " + name + " value : "
+ customMeta.getIdentifier(obj, EntityMode.POJO));
if (isValueLoggable(name, null)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, customMeta
.getIdentifier(obj, EntityMode.POJO), localeId);
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(value);
} else if (value.trim().length() != 0) {
initialArray.append("-").append(value);
}
} else {
if (initialArray.toString().trim().length() == 0 || initialArray.toString().endsWith(",")) {
initialArray.append(customMeta.getIdentifier(obj, EntityMode.POJO));
} else if (customMeta.getIdentifier(obj, EntityMode.POJO).toString().trim().length() != 0) {
initialArray.append("-").append(customMeta.getIdentifier(obj, EntityMode.POJO));
}
}
}
} else {
logger.debug("c setPrimaryKeyValueForCollectionTypeAndMerge : " + name + " value : "
+ customMeta.getIdentifier(obj, EntityMode.POJO));
if (isValueLoggable(name, null)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, customMeta
.getIdentifier(obj, EntityMode.POJO), localeId);
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(value);
} else if (value.trim().length() != 0) {
changeArray.append("-").append(value);
}
} else {
if (changeArray.toString().trim().length() == 0 || changeArray.toString().endsWith(",")) {
changeArray.append(customMeta.getIdentifier(obj, EntityMode.POJO));
} else if (customMeta.getIdentifier(obj, EntityMode.POJO).toString().trim().length() != 0) {
changeArray.append("-").append(customMeta.getIdentifier(obj, EntityMode.POJO));
}
}
}
}
}
private void setPrimaryKeyValues(ClassMetadata customMeta, Object obj, String name, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, customMeta.getIdentifier(
obj, EntityMode.POJO), localeId);
initialValues.put(name, value);
logger.debug("i setPrimaryKeyValues " + name + " value : " + value);
} else {
initialValues.put(name, customMeta.getIdentifier(obj, EntityMode.POJO));
logger.debug("i setPrimaryKeyValues " + name + " value : "
+ customMeta.getIdentifier(obj, EntityMode.POJO));
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, customMeta.getIdentifierPropertyName());
}
} else {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, customMeta.getIdentifier(
obj, EntityMode.POJO), localeId);
logger.debug("c setPrimaryKeyValues " + name + " value : " + value);
changedValues.put(name, value);
} else {
changedValues.put(name, customMeta.getIdentifier(obj, EntityMode.POJO));
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, customMeta.getIdentifierPropertyName());
}
}
}
private void setPrimaryKeyValues(Short id, String name, String state) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, id, localeId);
initialValues.put(name, value);
logger.debug("i setPrimaryKeyValues " + name + " value : " + value);
} else {
initialValues.put(name, id);
logger.debug("i setPrimaryKeyValues " + name + " value : " + id);
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, id);
}
} else {
if (AuditConfiguration.checkForPropertyName(entityName, name, localeId)) {
String value = AuditConfiguration.getValueOfCorrespondingId(entityName, name, id, localeId);
logger.debug("c setPrimaryKeyValues " + name + " value : " + value);
changedValues.put(name, value);
} else {
changedValues.put(name, id);
}
String columnName = AuditConfiguration.getColumnNameForPropertyName(entityName, name);
if (columnName != null && !columnName.equals("")) {
columnNames.put(name, columnName);
} else {
columnNames.put(name, id);
}
}
}
private void populateValueForObjectsOfTypeMasterDataEntity(Short id, String state, String name) {
setPrimaryKeyValues(id, name, state);
}
private void populateValueForObjectsOfTypeMasterDataEntity(Object obj, String state, String name) {
Class clazz = getClazz(obj);
ClassMetadata customMeta = StaticHibernateUtil.getSessionFactory().getClassMetadata(clazz);
setPrimaryKeyValues(customMeta, obj, name, state);
}
private void populateValueForObjectsOfTypeMasterDataEntityInCollections(Object obj, String state, String name) {
Class clazz = getClazz(obj);
ClassMetadata customMeta = StaticHibernateUtil.getSessionFactory().getClassMetadata(clazz);
setPrimaryKeyValueForCollectionType(customMeta, obj, name, state);
}
private void populateAndMergeValueForObjectsOfTypeMasterDataEntityInCollections(Object obj, String state,
String name) {
Class clazz = getClazz(obj);
ClassMetadata customMeta = StaticHibernateUtil.getSessionFactory().getClassMetadata(clazz);
setPrimaryKeyValueForCollectionTypeAndMerge(customMeta, obj, name, state);
}
private Class getClazz(Object obj) {
try {
HibernateProxy hibernateProxy = (HibernateProxy) obj;
LazyInitializer lazyInitializer = hibernateProxy.getHibernateLazyInitializer();
return lazyInitializer.getPersistentClass();
} catch (ClassCastException e) {
return obj.getClass();
}
}
private String getOldValueToKey(Map map, String key) {
String value = null;
if (map.get(key) != null) {
value = map.get(key).toString();
if (!value.trim().equals("")) {
return value;
} else {
return "";
}
} else {
return "";
}
}
private boolean isValueLoggable(String propertyName, String parentName) {
if (propertyName.equalsIgnoreCase(AuditConstants.VERSIONNO)
|| propertyName.equalsIgnoreCase(AuditConstants.CREATEDBY)
|| propertyName.equalsIgnoreCase(AuditConstants.CREATEDDATE)
|| propertyName.equalsIgnoreCase(AuditConstants.UPDATEDBY)
|| propertyName.equalsIgnoreCase(AuditConstants.UPDATEDDATE)
|| propertyName.equalsIgnoreCase(AuditConstants.LOOKUPID)) {
return false;
}
if (parentName != null
&& AuditConfiguration.getColumnNameForPropertyName(entityName, parentName.concat(propertyName))
.equalsIgnoreCase(XMLConstants.DONOTLOGTHISPROPERTY)) {
return false;
} else if (AuditConfiguration.getColumnNameForPropertyName(entityName, propertyName).equalsIgnoreCase(
XMLConstants.DONOTLOGTHISPROPERTY)) {
return false;
}
return true;
}
private void populateAndMergeCollectionTypes(String state, Object propertyValue, String propertyName,
String parentName) {
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
initialArray = new StringBuilder();
} else {
changeArray = new StringBuilder();
}
Iterator iterator = ((Set) propertyValue).iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
readAndMergeCollectionTypes(obj, propertyName, parentName, state);
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
initialArray.append(",");
} else {
changeArray.append(",");
}
}
if (state.equalsIgnoreCase(AuditConstants.TRANSACTIONBEGIN)) {
initialValues.put(propertyName, initialArray);
if (parentName != null) {
propertyName = parentName.concat(propertyName);
}
columnNames.put(propertyName, AuditConfiguration.getColumnNameForPropertyName(entityName, propertyName));
} else {
changedValues.put(propertyName, changeArray);
if (parentName != null) {
propertyName = parentName.concat(propertyName);
}
columnNames.put(propertyName, AuditConfiguration.getColumnNameForPropertyName(entityName, propertyName));
}
}
}