[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