[cvs] expresso commit by mtraum: special case for UserInfo objects: when

JCorporate Ltd jcorp at jcorporate.com
Mon Mar 7 22:37:54 UTC 2005


Log Message:
-----------
special case for UserInfo objects: when updating a user through DBMaint, tabs will now be generated for all of the user's RegistrationDomainObject's, based on the domain they were registered in

Modified Files:
--------------
    expresso/expresso-web/expresso/doc:
        ChangeLog.xml
    expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/services/controller/dbmaint:
        Update.java

Revision Data
-------------
Index: ChangeLog.xml
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc/ChangeLog.xml,v
retrieving revision 1.289
retrieving revision 1.290
diff -Lexpresso-web/expresso/doc/ChangeLog.xml -Lexpresso-web/expresso/doc/ChangeLog.xml -u -r1.289 -r1.290
--- expresso-web/expresso/doc/ChangeLog.xml
+++ expresso-web/expresso/doc/ChangeLog.xml
@@ -5,6 +5,12 @@
 	<project name="Expresso">
 		<version name="5.6.1" releaseDate="Not released yet">
 			<comment>Continued Updates</comment>
+            <new-feature title="DBMaint's update has special case for UserInfo objects">
+                <explanation>When updating a user through DBMaint, tabs will now be generated for all of the
+                user's RegistrationDomainObject's, based on the domain they were registered in.
+                </explanation>
+                <contributor>Mike Traum</contributor>
+            </new-feature>
             <new-feature title="isMutable() and access to actual cached items.">
                 <explanation>a new attribute
                     DBObject.isMutable() is now set on cached copies. This attribute is now
Index: Update.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/services/controller/dbmaint/Update.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/services/controller/dbmaint/Update.java -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/services/controller/dbmaint/Update.java -u -r1.25 -r1.26
--- expresso-web/WEB-INF/src/com/jcorporate/expresso/services/controller/dbmaint/Update.java
+++ expresso-web/WEB-INF/src/com/jcorporate/expresso/services/controller/dbmaint/Update.java
@@ -79,12 +79,18 @@
 import com.jcorporate.expresso.core.dataobjects.Securable;
 import com.jcorporate.expresso.core.db.DBException;
 import com.jcorporate.expresso.core.dbobj.SecuredDBObject;
+import com.jcorporate.expresso.core.misc.ConfigManager;
 import com.jcorporate.expresso.core.misc.StringUtil;
 import com.jcorporate.expresso.core.misc.URLUTF8Encoder;
 import com.jcorporate.expresso.core.security.User;
+import com.jcorporate.expresso.core.security.UserInfo;
 import com.jcorporate.expresso.services.controller.ui.DefaultAutoElement;
+import com.jcorporate.expresso.services.dbobj.RegistrationDomain;
+import com.jcorporate.expresso.services.dbobj.RegistrationObjectMap;
 import com.jcorporate.expresso.services.dbobj.Setup;
 
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.StringTokenizer;
 
@@ -304,10 +310,33 @@
                         masterTrans.addParam("definition", ((Defineable) myDBObj).getDefinitionName());
                     }
 
+                    
+                    // get the detail set
+                    HashSet detailSet = new HashSet();
+                    detailSet.addAll(metadata.getDetailSet());
+                    
+                    HashMap regObjectsKeys = new HashMap();
+                    // special case for UserInfo objects so we can add the appropriate RegistrationDBObject's
+                    if (myDBObj.getClass().getName().equals(ConfigManager.getClassHandler("userInfo"))) {
+                        User user = new User((UserInfo)myDBObj);
+                        
+                        RegistrationDomain regDomain = new RegistrationDomain();
+                        regDomain.setField(RegistrationDomain.FLD_NAME, user.getRegistrationDomain());
+                        if (regDomain.find()) {
+                            RegistrationObjectMap regObjects = new RegistrationObjectMap();
+                            regObjects.setField(RegistrationObjectMap.REG_DOMAIN_ID, regDomain.getField(RegistrationDomain.FLD_REGDOMID));
+                            HashSet regObjectsSet = new HashSet();
+                            for (Iterator i = regObjects.searchAndRetrieveList().iterator(); i.hasNext(); ) {
+                                RegistrationObjectMap oneRegObject = (RegistrationObjectMap) i.next();
+                                regObjectsSet.add(oneRegObject.getField(RegistrationObjectMap.REG_OBJ_CLASS));
+                                regObjectsKeys.put(oneRegObject.getField(RegistrationObjectMap.REG_OBJ_CLASS), oneRegObject.getField("UidField"));
+                            }
+                            detailSet.addAll(regObjectsSet);
+                        }
+                    }
+                    
                     String oneDet = null;
-
-                    for (Iterator ee = metadata.getDetailSet().iterator();
-                         ee.hasNext();) {
+                    for (Iterator ee = detailSet.iterator(); ee.hasNext(); ) {
                         oneDet = (String) ee.next();
 
                         DataObject detDBObj = null;
@@ -333,23 +362,32 @@
                         StringBuffer fieldsString = new StringBuffer();
                         String localFields = metadata.getDetailFieldsLocal(oneDet);
                         String foreignFields = metadata.getDetailFieldsForeign(oneDet);
-                        StringTokenizer stkLocal = new StringTokenizer(localFields, "|");
-                        StringTokenizer stkForeign = new StringTokenizer(foreignFields,
-                                "|");
-                        boolean needsPipe = false;
-
-                        while (stkLocal.hasMoreTokens()) {
-                            if (needsPipe) {
+                        
+                        // special case for UserInfo objects so we can add the appropriate RegistrationDBObject's
+                        if (regObjectsKeys.containsKey(oneDet)) {
+                            fieldsString.append(regObjectsKeys.get(oneDet));
+                            fieldsString.append("|");
+                            fieldsString.append(myDBObj.getField((String)metadata.getKeyFieldListArray().get(0)));
+                        }
+                        else {
+                            StringTokenizer stkLocal = new StringTokenizer(localFields, "|");
+                            StringTokenizer stkForeign = new StringTokenizer(foreignFields,
+                                    "|");
+                            boolean needsPipe = false;
+    
+                            while (stkLocal.hasMoreTokens()) {
+                                if (needsPipe) {
+                                    fieldsString.append("|");
+                                } else {
+                                    needsPipe = true;
+                                }
+    
+                                String localField = stkLocal.nextToken();
+                                String foreignField = stkForeign.nextToken();
+                                fieldsString.append(foreignField);
                                 fieldsString.append("|");
-                            } else {
-                                needsPipe = true;
+                                fieldsString.append(myDBObj.getDataField(localField).asString());
                             }
-
-                            String localField = stkLocal.nextToken();
-                            String foreignField = stkForeign.nextToken();
-                            fieldsString.append(foreignField);
-                            fieldsString.append("|");
-                            fieldsString.append(myDBObj.getDataField(localField).asString());
                         }
 
                         oneTrans.addParam("search", fieldsString.toString());


More information about the cvs mailing list