|
From: Irina Z. <i_z...@us...> - 2004-06-21 17:15:09
|
Update of /cvsroot/cobricks/cobricks2/src/org/cobricks/user In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27296/src/org/cobricks/user Modified Files: UserManagerImpl.java Log Message: Index: UserManagerImpl.java =================================================================== RCS file: /cvsroot/cobricks/cobricks2/src/org/cobricks/user/UserManagerImpl.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- UserManagerImpl.java 6 Jun 2004 22:09:46 -0000 1.18 +++ UserManagerImpl.java 21 Jun 2004 17:15:00 -0000 1.19 @@ -9,7 +9,6 @@ * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. */ - package org.cobricks.user; import java.io.File; @@ -53,10 +52,11 @@ import org.omg.PortableInterceptor.USER_EXCEPTION; /** - * @author mic...@ac... + * @author michael.koch * @version $Date$ + * + * @acm.org **/ - public class UserManagerImpl extends ComponentManagerAdaptor implements UserManager { @@ -100,6 +100,7 @@ "itemid", "avalue" }; + public static final Map userTablesValuesCorresponding = new HashMap(); /** * user_main table fields names @@ -466,7 +467,13 @@ //set attribute for user in cache User currentUser = getUser(userid); - Set attribute = (Set)currentUser.getAttributes().get(attrname); + Set attribute = new HashSet(); + attribute = (Set)currentUser.getAttributes().get(attrname); + + if (attribute == null) { + attribute = new HashSet(); + } + attribute.add(new Integer(objectidToAdd)); // currentUser.getAttributes().remove(attrname); @@ -593,7 +600,6 @@ String sql; //String userclass = UNIVERSITY_USER_ONTOLOGY_CLASS_NAME; - //zwischenergebnis List result; @@ -753,12 +759,15 @@ List userAttrs = new ArrayList(); userAttrs = dbAccess.sqlQuery("select aname, " + userTablesValues[k - 1] + " from " + userTables[k] - + " where userid = " + Integer.toString(userid)); + + " where userid = " + Integer.toString(userid) + + " order by aname"); String aname = ""; String anamePrev = ""; Object avalue = null; + boolean isSet = false; + boolean prevIsSet = false; //loop over result for one table for (Iterator i = userAttrs.iterator(); i.hasNext();) { @@ -769,25 +778,33 @@ AttributeDescriptor attrDescriptor = getAttributeDescriptorManager(result .getAttribute(User.USERCLASS)) .getAttributeDescriptorFor(aname); + AttributeDescriptor prevAttrDesc = getAttributeDescriptorManager(result + .getAttribute(User.USERCLASS)) + .getAttributeDescriptorFor(anamePrev); isSet = attrDescriptor.getOntologyDataType().isSet(); + prevIsSet = prevAttrDesc.getOntologyDataType().isSet(); - if ((!(aname.equalsIgnoreCase(anamePrev)) - && (!anamePrev.equalsIgnoreCase("")) && isSet) - || (!i.hasNext() - && (!anamePrev.equalsIgnoreCase("")) && isSet - && (aname.equalsIgnoreCase(anamePrev)))) { - result.setAttributeLocally(aname, avalue); + if (avalue instanceof Set) { + if ((!(aname.equalsIgnoreCase(anamePrev)) + && (!anamePrev.equalsIgnoreCase("")) + && prevIsSet) + || (!i.hasNext() + && (!anamePrev.equalsIgnoreCase("")) + && prevIsSet + && (aname.equalsIgnoreCase(anamePrev)))) { + result.setAttributeLocally(anamePrev, avalue); + } + } + + if (!aname.equalsIgnoreCase(anamePrev)) { + avalue = null; } - if (!aname.equalsIgnoreCase(anamePrev)){ - avalue = null; - } anamePrev = aname; /*if ((avalue != null) && (attrDescriptor.getOntologyDataType() .isSet()))*/ - if (isSet) { if (avalue != null) { ((Set)avalue).add(elem.get( @@ -1034,8 +1051,8 @@ newUser.setAttributesLocally(attrs); //and sending of an event - ComponentEvent event = - new ComponentEventImpl("user", "user", "create"); + ComponentEvent event = new ComponentEventImpl("user", "user", + "create"); event.setObjectId(userId); if (newUser != null) { @@ -1237,7 +1254,8 @@ List idResult = new ArrayList(); try { - idResult = getUserIdList(attrs, orFlag, sortby, numberOfResults, userclass); + idResult = getUserIdList(attrs, orFlag, sortby, numberOfResults, + userclass); } catch (Exception e) { logger.error("Exception in searchUsers()" + e); } @@ -1349,6 +1367,7 @@ for (Iterator i = attrs.entrySet().iterator(); i.hasNext();) { Map.Entry mEntry = (Map.Entry)i.next(); String aname = (String)(mEntry.getKey()); + Object avalue = mEntry.getValue(); Map attrsForTable = new HashMap(); @@ -1356,67 +1375,75 @@ attrDesc = getAttributeDescriptorManager(uClass) .getAttributeDescriptorFor(aname); - tableName = attrDesc.getTableName(); - attrColumnName = attrDesc.getValueFieldName(); + if (!attrDesc.getOntologyDataType().isSet()) { + tableName = attrDesc.getTableName(); + attrColumnName = attrDesc.getValueFieldName(); - if (!oldAttrs.containsKey(aname)) { - attrDesc = getAttributeDescriptorManager(uClass) - .getAttributeDescriptorFor(aname); + if (!oldAttrs.containsKey(aname)) { + attrDesc = getAttributeDescriptorManager(uClass) + .getAttributeDescriptorFor(aname); - if (tableName.equalsIgnoreCase(TABLE_USER_MAIN)) { - attrsToUpdate.put(attrColumnName, avalue); - } else { - if (toInsert.containsKey(tableName)) { - ((Map)toInsert.get(tableName)).put(aname, avalue); + if (tableName.equalsIgnoreCase(TABLE_USER_MAIN)) { + attrsToUpdate.put(attrColumnName, avalue); } else { - attrsForTable.put(aname, avalue); - toInsert.put(tableName, attrsForTable); - } + if (toInsert.containsKey(tableName)) { + ((Map)toInsert.get(tableName)).put(aname, avalue); + } else { + attrsForTable.put(aname, avalue); + toInsert.put(tableName, attrsForTable); + } - updateUser.setAttributeLocally(aname, avalue); - } - } else { - if (logger.isDebugEnabled()) { - /*logger.debug( - "table in UserManagerImpl in updateUser for attr " - + aname + " (" + attrColumnName + ") " + " is " - + tableName); - */ - } + if (aname.equalsIgnoreCase(User.USERLOGIN)) { + updateUser.setUserLogin((String)mEntry.getValue()); + } else { + updateUser.setAttributeLocally(aname, avalue); + } + } + } else { + if (logger.isDebugEnabled()) { + /*logger.debug( + "table in UserManagerImpl in updateUser for attr " + + aname + " (" + attrColumnName + ") " + " is " + + tableName); + */ + } - if (where_.length() > 0) { - where_.delete(0, where_.length()); - } + if (where_.length() > 0) { + where_.delete(0, where_.length()); + } - if (!tableName.equalsIgnoreCase(TABLE_USER_MAIN)) { - Map entryToUpdate = new HashMap(); - Object value = mEntry.getValue(); - entryToUpdate.put(attrColumnName, value); + if (!tableName.equalsIgnoreCase(TABLE_USER_MAIN)) { + Map entryToUpdate = new HashMap(); + Object value = mEntry.getValue(); + entryToUpdate.put(attrColumnName, value); - if (tableName.equalsIgnoreCase(TABLE_USER_ATTR)) { - String avaluepref = (String)value; + if (tableName.equalsIgnoreCase(TABLE_USER_ATTR)) { + String avaluepref = (String)value; - if (avaluepref.length() > 100) { - entryToUpdate.put(AVALUEPREFIX, - avaluepref.substring(0, 99)); - } else { - entryToUpdate.put(AVALUEPREFIX, avaluepref); + if (avaluepref.length() > 100) { + entryToUpdate.put(AVALUEPREFIX, + avaluepref.substring(0, 99)); + } else { + entryToUpdate.put(AVALUEPREFIX, avaluepref); + } } + + where_.append(" aname = '"); + where_.append((String)mEntry.getKey()); + where_.append("' and "); + where_.append(" userid = "); + where_.append(userid); + where = where_.toString(); + dbAccess.sqlUpdate(tableName, entryToUpdate, where); + } else { // user_main only!!! + attrsToUpdate.put(attrColumnName, mEntry.getValue()); } - where_.append(" aname = '"); - where_.append((String)mEntry.getKey()); - where_.append("' and "); - where_.append(" userid = "); - where_.append(userid); - where = where_.toString(); - dbAccess.sqlUpdate(tableName, entryToUpdate, where); - } else { // user_main only!!! - attrsToUpdate.put(attrColumnName, mEntry.getValue()); + //update attribute of user Object in cache + updateUser.setAttributeLocally(aname, mEntry.getValue()); } - - //update attribute of user Object in cache - updateUser.setAttributeLocally(aname, mEntry.getValue()); + } else { + updateSetAttribute(userid, aname, avalue); } } @@ -1430,7 +1457,9 @@ //for (Iterator i = attrsToUpdate.entrySet().iterator(); i.hasNext();) { // Map.Entry entry = (Map.Entry)i.next(); // String table = (String)entry.getKey(); - dbAccess.sqlUpdate(TABLE_USER_MAIN, attrsToUpdate, where); + if (!attrsToUpdate.isEmpty()) { + dbAccess.sqlUpdate(TABLE_USER_MAIN, attrsToUpdate, where); + } if (logger.isDebugEnabled()) { logger.debug("update table " + TABLE_USER_MAIN); @@ -1457,6 +1486,80 @@ } /** + * help function for updating of user attributes of type Set + **/ + private void updateSetAttribute(int userid, String attrname, + Object attrvalue) { + User currentUser = getUser(userid); + String userclass = currentUser.getAttribute(attrname); + AttributeDescriptor attrDesc = null; + List oldValues = new ArrayList(); + List newValues = new ArrayList(); + + try { + attrDesc = getAttributeDescriptorManager(userclass) + .getAttributeDescriptorFor(attrname); + } catch (CobricksException ce1) { + } + + if (!attrDesc.getOntologyDataType().isSet()) { + return; + } else { + String table = attrDesc.getTableName(); + List oldValuesTmp = dbAccess.sqlQuery("select " + + getValueForTable(table) + " from " + table + + " where userid = " + Integer.toString(userid) + + " and aname = " + "'" + attrname + "'"); + + for (Iterator i = oldValuesTmp.iterator(); i.hasNext();) { + Map entry = (Map)i.next(); + + for (Iterator j = entry.entrySet().iterator(); j.hasNext();) { + Map.Entry mEntry = (Map.Entry)j.next(); + oldValues.add(mEntry.getValue()); + } + } + + StringTokenizer commaTokenizer = new StringTokenizer(((String)attrvalue) + .trim(), ","); + + while (commaTokenizer.hasMoreTokens()) { + newValues.add(commaTokenizer.nextToken().trim()); + } + + for (Iterator i = newValues.iterator(); i.hasNext();) { + String value = (String)i.next(); + + if (!oldValues.contains(value)) { + Map insertValue = new HashMap(); + + if (table.equalsIgnoreCase(TABLE_USER_ATTR)) { + insertValue.put(ANAME, attrname); + insertValue.put(AVALUEPREFIX, value); + insertValue.put(AVALUE, value); + insertValue.put("userid", new Integer(userid)); + } + + dbAccess.sqlInsert(table, insertValue); + } + } + + for (Iterator i = oldValues.iterator(); i.hasNext();) { + String value = (String)i.next(); + + if (!newValues.contains(value)) { + Map deleteValue = new HashMap(); + deleteValue.put(ANAME, attrname); + deleteValue.put("userid", new Integer(userid)); + dbAccess.sqlDelete(table, deleteValue); + } + } + + currentUser.setAttributeLocally(attrname, newValues); + } + } + + /** * caching user objects **/ protected User getUserObjectFromCache(int userid) { @@ -1689,4 +1792,15 @@ return userHandler; } + + private String getValueForTable(String value) { + if (userTablesValuesCorresponding.isEmpty()) { + for (int i = 0; i < userTables.length; i++) { + userTablesValuesCorresponding.put(userTables[i + 1], + userTablesValues[i]); + } + } + + return (String)userTablesValuesCorresponding.get(value); + } } |