Java tutorial
/* * Copyright 2009, OpenIAM LLC * This file is part of the OpenIAM Identity and Access Management Suite * * OpenIAM Identity and Access Management Suite is free software: * you can redistribute it and/or modify * it under the terms of the GNU General Public License * version 3 as published by the Free Software Foundation. * * OpenIAM 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 * Lesser GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenIAM. If not, see <http://www.gnu.org/licenses/>. * */ /** * */ package org.openiam.provision.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openiam.base.AttributeOperationEnum; import org.openiam.idm.srvc.auth.dto.Login; import org.openiam.idm.srvc.auth.login.LoginDataService; import org.openiam.idm.srvc.continfo.dto.Address; import org.openiam.idm.srvc.continfo.dto.EmailAddress; import org.openiam.idm.srvc.continfo.dto.Phone; import org.openiam.idm.srvc.grp.dto.Group; import org.openiam.idm.srvc.role.dto.Role; import org.openiam.idm.srvc.user.dto.User; import org.openiam.idm.srvc.user.dto.UserAttribute; import org.openiam.idm.srvc.user.dto.UserStatusEnum; import org.openiam.provision.dto.ProvisionUser; import org.openiam.provision.type.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.*; /** * User to extract the full list of attributes in a User object that is used for * provisioning. * * @author suneet * */ public class UserAttributeHelper { protected static final Log log = LogFactory.getLog(UserAttributeHelper.class); protected static LoginDataService loginManager; public static ExtensibleUser newUser(ProvisionUser pUser) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z"); ExtensibleUser extUser = new ExtensibleUser(); if (pUser == null) { throw new NullPointerException("Provision user is null"); } // use reflection to the list of attributes that are part of user User user = pUser.getUser(); Class userClass = user.getClass(); Method[] userMethod = userClass.getDeclaredMethods(); if (userMethod != null && userMethod.length > 0) { for (Method m : userMethod) { String methName = m.getName(); String returnType = m.getReturnType().getName(); // log.info("Return type:=" + returnType ) ; // log.info("MethodName=" + methName); String value = null; if (methName.startsWith("get")) { if (returnType.contains("String")) { value = (String) m.invoke(pUser, null); } if (returnType.contains("Date")) { Date temp = (Date) m.invoke(pUser, null); if (temp != null) { value = df.format(temp); // value = temp.toString(); } } if (returnType.contains("UserStatusEnum")) { UserStatusEnum temp = (UserStatusEnum) m.invoke(pUser, null); if (temp != null) { value = temp.getValue(); } } // build the method name - to show the object that the value // came from // get rid of the "get" in the name methName = "USER." + methName.substring(3); extUser.getAttributes().add(new ExtensibleAttribute(methName, value, 1, "String")); } } } // get the user attributes Map<String, UserAttribute> userAttr = (Map<String, UserAttribute>) pUser.getUserAttributes(); Collection<UserAttribute> attrCol = userAttr.values(); for (UserAttribute attr : attrCol) { String name = extUser.getName(); name = "USER_ATTRIBUTE." + attr.getName(); extUser.getAttributes().add(new ExtensibleAttribute(name, attr.getValue(), attr.getMetadataId())); } // primary identity List<Login> principalList = pUser.getPrincipalList(); if (principalList != null && principalList.size() > 0) { for (Login lg : principalList) { try { if (lg.getManagedSysId().equalsIgnoreCase("0")) { extUser.getAttributes().add(new ExtensibleAttribute("IDENTITY.PRINCIPAL.", lg.getLogin())); extUser.getAttributes() .add(new ExtensibleAttribute("IDENTITY_PSWD.PRINCIPAL", lg.getPassword())); extUser.getAttributes().add(new ExtensibleAttribute("IDENTITY_STATUS.PRINCIPAL", lg.getStatus() == null ? "" : lg.getStatus().name())); } else { extUser.getAttributes() .add(new ExtensibleAttribute("IDENTITY." + lg.getManagedSysId(), lg.getLogin())); extUser.getAttributes().add( new ExtensibleAttribute("IDENTITY_PSWD." + lg.getManagedSysId(), lg.getPassword())); extUser.getAttributes() .add(new ExtensibleAttribute("IDENTITY_STATUS." + lg.getManagedSysId(), lg.getStatus() == null ? "" : lg.getStatus().name())); } } catch (Exception e) { log.error(e); return null; } } } /* * Login lg = getPrimaryPrincipal(principalList); if (lg != null) { * extUser.getAttributes().add(new * ExtensibleAttribute("PRINCIPAL.IDENTITY", lg.getLogin())); * extUser.getAttributes().add(new * ExtensibleAttribute("PRINCIPAL.IDENTITY_PSWD", lg.getPassword())); } */ // groups Set<Group> groupSet = pUser.getGroups(); if (groupSet != null) { for (Group grp : groupSet) { ExtensibleGroup extGroup = new ExtensibleGroup(grp); log.info("Group being added to extGroup=" + grp); extUser.getGroup().add(extGroup); } } // roles Set<Role> roleSet = pUser.getRoles(); if (roleSet != null) { for (Role rl : roleSet) { ExtensibleRole extRole = new ExtensibleRole(rl); log.info("Role being added to extRole=" + rl); extUser.getRole().add(extRole); } } // address Set<Address> addressList = pUser.getAddresses(); if (addressList != null) { Iterator<Address> adrIt = addressList.iterator(); while (adrIt.hasNext()) { Address adr = adrIt.next(); ExtensibleAddress extAddress = new ExtensibleAddress(adr); extUser.getAddress().add(extAddress); } } // email Set<EmailAddress> emailAddressList = pUser.getEmailAddresses(); if (emailAddressList != null) { Iterator<EmailAddress> emailIt = emailAddressList.iterator(); while (emailIt.hasNext()) { EmailAddress email = emailIt.next(); ExtensibleEmailAddress extEmail = new ExtensibleEmailAddress(email); extUser.getEmail().add(extEmail); } } // phone Set<Phone> phoneList = pUser.getPhones(); if (phoneList != null) { Iterator<Phone> phoneIt = phoneList.iterator(); while (phoneIt.hasNext()) { Phone phone = phoneIt.next(); ExtensiblePhone extPhone = new ExtensiblePhone(phone); extUser.getPhone().add(extPhone); } } return extUser; } private static Login getPrimaryPrincipal(List<Login> principalList) { if (principalList == null) { return null; } for (Login lg : principalList) { try { if (lg.getManagedSysId().equalsIgnoreCase("0")) { return lg; } } catch (Exception e) { log.error(e); return null; } } return null; } public static ExtensibleUser modifyUser(User origUser2, List<Role> curRoleList, List<Group> curGroupList, ProvisionUser pUser) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z"); ExtensibleUser extUser = new ExtensibleUser(); if (pUser == null) { throw new NullPointerException("Provision user is null"); } // use reflection to the list of attributes that are part of user User user = pUser.getUser(); determineUserChanges(extUser, user, origUser2); // get the user attributes Map<String, UserAttribute> userAttr = (Map<String, UserAttribute>) pUser.getUserAttributes(); Collection<UserAttribute> attrCol = userAttr.values(); for (UserAttribute attr : attrCol) { String name = extUser.getName(); name = "USER_ATTRIBUTE." + attr.getName(); ExtensibleAttribute extAttr = new ExtensibleAttribute(name, attr.getValue(), attr.getMetadataId()); if (attr.getOperation() == (AttributeOperationEnum.DELETE)) { extAttr.setOperation(AttributeOperationEnum.DELETE.getValue()); } else { // find the attribute log.info("Attribute name=" + attr.getName()); UserAttribute tempAttr = origUser2.getAttribute(attr.getName()); if (tempAttr != null) { // log.info("Attribute found=" + name + " - val=" + // tempAttr.getValue()); // log.info("Attribute orgi=" + attr.getValue()); // match found. if (attr.getValue() == null && tempAttr.getValue() != null) { extAttr.setOperation(AttributeOperationEnum.REPLACE.getValue()); } else if (attr.getValue() != null && tempAttr.getValue() == null) { extAttr.setOperation(AttributeOperationEnum.REPLACE.getValue()); } else if (!attr.getValue().equalsIgnoreCase(tempAttr.getValue())) { log.info("attr object values are not equal "); extAttr.setOperation(AttributeOperationEnum.REPLACE.getValue()); } else { extAttr.setOperation(AttributeOperationEnum.NO_CHANGE.getValue()); } } else { // not found extAttr.setOperation(AttributeOperationEnum.ADD.getValue()); } } extUser.getAttributes().add(extAttr); } // check if we have attributes in the original that we dont have here Map<String, UserAttribute> origUserAttr = (Map<String, UserAttribute>) origUser2.getUserAttributes(); Collection<UserAttribute> origUserAttrCol = origUserAttr.values(); User newUser = pUser.getUser(); for (UserAttribute attr : origUserAttrCol) { UserAttribute tempAttr2 = newUser.getAttribute(attr.getName()); if (tempAttr2 == null) { // not found add to the ExtensibleAttribute extAttr = new ExtensibleAttribute("USER_ATTRIBUTE." + attr.getName(), attr.getValue(), attr.getMetadataId()); extAttr.setOperation(AttributeOperationEnum.NO_CHANGE.getValue()); extUser.getAttributes().add(extAttr); } } // primary identity List<Login> principalList = pUser.getPrincipalList(); if (principalList != null && principalList.size() > 0) { for (Login lg : principalList) { try { if (lg.getManagedSysId().equalsIgnoreCase("0")) { extUser.getAttributes() .add(new ExtensibleAttribute("IDENTITY.PRINCIPAL.", lg.getLogin(), 0, "String")); String p = lg.getPassword(); if (p != null && p.length() > 12) { p = loginManager.decryptPassword(lg.getUserId(), p); extUser.getAttributes() .add(new ExtensibleAttribute("IDENTITY_PSWD.PRINCIPAL", p, 0, "String")); } else { extUser.getAttributes() .add(new ExtensibleAttribute("IDENTITY_PSWD.PRINCIPAL", p, 0, "String")); } extUser.getAttributes() .add(new ExtensibleAttribute("IDENTITY_STATUS.PRINCIPAL", lg.getStatus().name())); } else { extUser.getAttributes().add(new ExtensibleAttribute("IDENTITY." + lg.getManagedSysId(), lg.getLogin(), 0, "String")); String p = lg.getPassword(); if (p != null && p.length() > 12) { p = loginManager.decryptPassword(lg.getUserId(), p); extUser.getAttributes().add(new ExtensibleAttribute( "IDENTITY_PSWD." + lg.getManagedSysId(), p, 0, "String")); } else { extUser.getAttributes().add(new ExtensibleAttribute( "IDENTITY_PSWD." + lg.getManagedSysId(), p, 0, "String")); } // extUser.getAttributes().add(new // ExtensibleAttribute("IDENTITY_PSWD."+lg.getManagedSysId(), // lg.getPassword(),0)); extUser.getAttributes().add(new ExtensibleAttribute( "IDENTITY_STATUS." + lg.getManagedSysId(), lg.getStatus().name())); } } catch (Exception e) { log.error(e); return null; } } } /* * Login lg = getPrimaryPrincipal(principalList); if (lg != null) { * extUser.getAttributes().add(new * ExtensibleAttribute("PRINCIPAL.IDENTITY", lg.getLogin())); * extUser.getAttributes().add(new * ExtensibleAttribute("PRINCIPAL.IDENTITY_PSWD", lg.getPassword())); } */ // groups Set<Group> groupSet = pUser.getGroups(); if (groupSet != null) { for (Group grp : groupSet) { ExtensibleGroup extGroup = new ExtensibleGroup(grp); log.info("Group being added to extGroup=" + grp); // Check the current list. if not found, then the operation is // an add if (grp.getOperation() != AttributeOperationEnum.DELETE) { if (curGroupList != null) { boolean found = false; for (Group cGroup : curGroupList) { if (cGroup.getId().equals(grp.getId())) { found = true; } } if (!found) { extGroup.setOperation(1); } } else { extGroup.setOperation(1); } } extUser.getGroup().add(extGroup); } } // add the groups there were in the original but not in the current if (curGroupList != null) { for (Group g : curGroupList) { // check if its in the new list. If not, add it on if (groupSet != null) { boolean found = false; for (Group newGroup : groupSet) { if (g.getId().equalsIgnoreCase(newGroup.getId())) { found = true; } } if (!found) { ExtensibleGroup extGroup = new ExtensibleGroup(g); extGroup.setOperation(0); extUser.getGroup().add(extGroup); } } else { ExtensibleGroup extGroup = new ExtensibleGroup(g); extGroup.setOperation(0); extUser.getGroup().add(extGroup); } } } // roles Set<Role> roleSet = pUser.getRoles(); if (roleSet != null) { for (Role rl : roleSet) { ExtensibleRole extRole = new ExtensibleRole(rl); log.info("Role being added to extRole=" + rl); if (rl.getOperation() != AttributeOperationEnum.DELETE) { if (curRoleList != null) { boolean found = false; for (Role cRl : curRoleList) { if (cRl.getId().equals(rl.getId())) { found = true; } } if (!found) { extRole.setOperation(1); } } else { extRole.setOperation(1); } } extUser.getRole().add(extRole); } } // add the roles that were in teh orginal, but not in the current if (curRoleList != null) { for (Role rl : curRoleList) { // check if its in the new list. If not, add it on if (roleSet != null) { boolean found = false; for (Role newRole : roleSet) { if (rl.getId().equalsIgnoreCase(newRole.getId())) { found = true; } } if (!found) { ExtensibleRole extRole = new ExtensibleRole(rl); extRole.setOperation(0); extUser.getRole().add(extRole); } } else { ExtensibleRole extRole = new ExtensibleRole(rl); extRole.setOperation(0); extUser.getRole().add(extRole); } } } // address log.info("Processing address list"); Set<Address> addressList = getFullAddressList(pUser.getAddresses(), origUser2.getAddresses()); // Set<Address> addressList = pUser.getAddresses(); if (addressList != null) { Iterator<Address> adrIt = addressList.iterator(); while (adrIt.hasNext()) { Address adr = adrIt.next(); ExtensibleAddress extAddress = new ExtensibleAddress(adr); extUser.getAddress().add(extAddress); } } // email log.info("Processing emailAddress list"); Set<EmailAddress> emailAddressList = getFullEmailList(pUser.getEmailAddresses(), origUser2.getEmailAddresses()); // Set<EmailAddress> emailAddressList = pUser.getEmailAddress(); if (emailAddressList != null) { Iterator<EmailAddress> emailIt = emailAddressList.iterator(); while (emailIt.hasNext()) { EmailAddress email = emailIt.next(); ExtensibleEmailAddress extEmail = new ExtensibleEmailAddress(email); extUser.getEmail().add(extEmail); } } // phone log.info("Processing phoneList"); Set<Phone> phoneList = getFullPhoneList(pUser.getPhones(), origUser2.getPhones()); // Set<Phone> phoneList = pUser.getPhone(); if (phoneList != null) { Iterator<Phone> phoneIt = phoneList.iterator(); while (phoneIt.hasNext()) { Phone phone = phoneIt.next(); ExtensiblePhone extPhone = new ExtensiblePhone(phone); extUser.getPhone().add(extPhone); } } return extUser; } static private Set<Address> getFullAddressList(Set<Address> newAddressList, Set<Address> origAddressList) { Set<Address> addressSet = new HashSet<Address>(); log.info("getFullAddress list called."); log.info("origAddress list=" + origAddressList); log.info("newAddress list=" + newAddressList); if (origAddressList == null && (newAddressList != null && newAddressList.size() > 0)) { addressSet.addAll(newAddressList); return addressSet; } if ((origAddressList != null && origAddressList.size() > 0) && (newAddressList == null || newAddressList.size() == 0)) { log.info("origAddress list size =" + origAddressList.size()); addressSet.addAll(origAddressList); return addressSet; } // if in new address, but not in old, then add it with operation 1 // else add with operation 2 Iterator<Address> it = newAddressList.iterator(); while (it.hasNext()) { Address addr = it.next(); // check the old list Iterator<Address> origIt = origAddressList.iterator(); boolean found = false; while (origIt.hasNext()) { Address origAdr = origIt.next(); if (origAdr.getAddressId().equals(addr.getAddressId())) { found = true; } } if (!found) { addr.setOperation(AttributeOperationEnum.ADD); addressSet.add(addr); } else { if (addr.getOperation() == AttributeOperationEnum.DELETE) { addressSet.add(addr); } else { addr.setOperation(AttributeOperationEnum.REPLACE); addressSet.add(addr); } } } // if the old address is not in the list, the add it Iterator<Address> curIt = origAddressList.iterator(); if (curIt.hasNext()) { Address adr = curIt.next(); addressSet.add(adr); } return addressSet; } static private Set<Phone> getFullPhoneList(Set<Phone> newPhoneList, Set<Phone> origPhoneList) { Set<Phone> phoneSet = new HashSet<Phone>(); if (origPhoneList == null && newPhoneList != null) { phoneSet.addAll(newPhoneList); return phoneSet; } if ((origPhoneList != null && origPhoneList.size() > 0) && (newPhoneList == null || newPhoneList.size() == 0)) { phoneSet.addAll(origPhoneList); return phoneSet; } // if in new address, but not in old, then add it with operation 1 // else add with operation 2 Iterator<Phone> it = newPhoneList.iterator(); while (it.hasNext()) { Phone addr = it.next(); // check the old list Iterator<Phone> origIt = origPhoneList.iterator(); boolean found = false; while (origIt.hasNext()) { Phone origAdr = origIt.next(); if (origAdr.getPhoneId().equals(addr.getPhoneId())) { found = true; } } if (!found) { addr.setOperation(AttributeOperationEnum.ADD); phoneSet.add(addr); } else { if (addr.getOperation() == AttributeOperationEnum.DELETE) { phoneSet.add(addr); } else { addr.setOperation(AttributeOperationEnum.REPLACE); phoneSet.add(addr); } } } // if the old address is not in the list, the add it Iterator<Phone> curIt = origPhoneList.iterator(); if (curIt.hasNext()) { Phone adr = curIt.next(); phoneSet.add(adr); } return phoneSet; } static private Set<EmailAddress> getFullEmailList(Set<EmailAddress> newPhoneList, Set<EmailAddress> origEmailList) { Set<EmailAddress> emailSet = new HashSet<EmailAddress>(); log.info("orig email list=" + origEmailList); if (origEmailList == null && newPhoneList != null) { log.info("New email list is not null"); emailSet.addAll(newPhoneList); return emailSet; } if ((origEmailList != null && origEmailList.size() > 0) && (newPhoneList == null || newPhoneList.size() == 0)) { log.info("orig email list is not null"); emailSet.addAll(origEmailList); return emailSet; } // if in new address, but not in old, then add it with operation 1 // else add with operation 2 Iterator<EmailAddress> it = newPhoneList.iterator(); while (it.hasNext()) { EmailAddress addr = it.next(); // check the old list Iterator<EmailAddress> origIt = origEmailList.iterator(); boolean found = false; while (origIt.hasNext()) { EmailAddress origAdr = origIt.next(); if (origAdr.getEmailId().equals(addr.getEmailId())) { found = true; } } if (!found) { addr.setOperation(AttributeOperationEnum.ADD); emailSet.add(addr); } else { if (addr.getOperation() == AttributeOperationEnum.DELETE) { emailSet.add(addr); } else { addr.setOperation(AttributeOperationEnum.REPLACE); emailSet.add(addr); } } } // if the old address is not in the list, the add it Iterator<EmailAddress> curIt = origEmailList.iterator(); if (curIt.hasNext()) { EmailAddress adr = curIt.next(); emailSet.add(adr); } return emailSet; } static public User cloneUser(User user) { User newUser = new User(); newUser.setBirthdate(user.getBirthdate()); newUser.setCompanyOwnerId(user.getCompanyOwnerId()); newUser.setCreateDate(user.getCreateDate()); newUser.setCreatedBy(user.getCreatedBy()); newUser.setEmployeeId(user.getEmployeeId()); newUser.setEmployeeTypeId(user.getEmployeeTypeId()); newUser.setFirstName(user.getFirstName()); newUser.setJobCodeId(user.getJobCodeId()); newUser.setLastName(user.getLastName()); newUser.setLastUpdate(user.getLastUpdate()); newUser.setLastUpdatedBy(user.getLastUpdatedBy()); newUser.setLocationCd(user.getLocationCd()); newUser.setLocationName(user.getLocationName()); newUser.setMdTypeId(user.getMdTypeId()); newUser.setClassification(user.getClassification()); newUser.setMiddleInit(user.getMiddleInit()); newUser.setPrefix(user.getPrefix()); newUser.setSex(user.getSex()); newUser.setStatus(user.getStatus()); newUser.setSecondaryStatus(user.getSecondaryStatus()); newUser.setSuffix(user.getSuffix()); newUser.setTitle(user.getTitle()); newUser.setId(user.getId()); newUser.setUserTypeInd(user.getUserTypeInd()); newUser.setMailCode(user.getMailCode()); newUser.setCostCenter(user.getCostCenter()); newUser.setStartDate(user.getStartDate()); newUser.setLastDate(user.getLastDate()); newUser.setClaimDate(user.getClaimDate()); newUser.setNickname(user.getNickname()); newUser.setMaidenName(user.getMaidenName()); newUser.setPasswordTheme(user.getPasswordTheme()); newUser.setEmail(user.getEmail()); newUser.setShowInSearch(user.getShowInSearch()); newUser.setAlternateContactId(user.getAlternateContactId()); // HashMap<String, UserAttribute> userAttributes = new HashMap<String, UserAttribute>(0); userAttributes.putAll(user.getUserAttributes()); newUser.setUserAttributes(userAttributes); newUser.setPhones(user.getPhones()); newUser.setAddresses(user.getAddresses()); newUser.setEmailAddresses(user.getEmailAddresses()); return newUser; } static private void determineUserChanges(ExtensibleUser extUser, User newUser, User origUser) { SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z"); // for each field in the user object // - check the null conditions // - check if the values are different // set the operation // set up the origUser object for reflection Class origUserClass = origUser.getClass(); origUserClass.getDeclaredMethods(); Class newUserClass = newUser.getClass(); Method[] userMethod = newUserClass.getDeclaredMethods(); if (userMethod != null && userMethod.length > 0) { // loop through the methods for (Method m : userMethod) { String methName = m.getName(); String returnType = m.getReturnType().getName(); // log.info("MethodName=" + methName); // log.info("Return type:=" + returnType ) ; String value = null; String origValue = null; int operation = 0; try { if (methName.startsWith("get")) { if (returnType.contains("String")) { value = (String) m.invoke(newUser, null); operation = getStringOperationValue(origUser, origUserClass, methName, value); } if (returnType.contains("Date")) { Date temp = (Date) m.invoke(newUser, null); long time = 0; if (temp != null) { time = temp.getTime(); value = df.format(temp); // value = temp.toString(); operation = getDateOperationValue(origUser, origUserClass, methName, time); } } if (returnType.contains("UserStatusEnum")) { UserStatusEnum temp = (UserStatusEnum) m.invoke(newUser, null); if (temp != null) { value = temp.getValue(); operation = getStatusOperationValue(origUser, origUserClass, methName, value); } } // get the original value // build the method name - to show the object that the // value came from // get rid of the "get" in the name methName = "USER." + methName.substring(3); extUser.getAttributes().add(new ExtensibleAttribute(methName, value, operation, "String")); } } catch (Exception it) { it.printStackTrace(); } } } } static private int getStatusOperationValue(User origUser, Class origUserClass, String methName, String value) { int operation = 0; try { Method method = origUserClass.getMethod(methName, null); UserStatusEnum origValue = (UserStatusEnum) method.invoke(origUser, null); // log.info("operation check: method name=" + method + " value=" + // value + " " + origValue); // check what has changed if (origValue == null && value != null) { return 2; } if (origValue != null && value == null) { return 2; } if (origValue != null && !origValue.getValue().equalsIgnoreCase(value)) { return 2; } return 0; } catch (Exception e) { e.printStackTrace(); } return operation; } static private int getDateOperationValue(User origUser, Class origUserClass, String methName, long newTime) { int operation = 0; long origTime = 0; try { Method method = origUserClass.getMethod(methName, null); Date origValue = (Date) method.invoke(origUser, null); if (origValue != null) { origTime = origValue.getTime(); } // log.info("date comparison=" + origTime + " - " + newTime); if (origTime != newTime) { return 2; } return 0; } catch (Exception e) { e.printStackTrace(); } return operation; } static private int getStringOperationValue(User origUser, Class origUserClass, String methName, String value) { int operation = 0; try { Method method = origUserClass.getMethod(methName, null); String origValue = (String) method.invoke(origUser, null); // .info("operation check: method name=" + method + " value=" + // value + " " + origValue); // check what has changed if (origValue == null && value != null) { return 2; } if (origValue != null && value == null) { return 2; } if (origValue != null && !origValue.equalsIgnoreCase(value)) { return 2; } return 0; } catch (Exception e) { e.printStackTrace(); } return operation; } public LoginDataService getLoginManager() { return loginManager; } public void setLoginManager(LoginDataService loginManager) { this.loginManager = loginManager; } }