Activity Service - fix first/last name lookup

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9669 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka 2008-07-07 16:03:06 +00:00
parent 07a4f36aaf
commit a1da364950
2 changed files with 111 additions and 68 deletions

View File

@ -114,7 +114,7 @@ public class ActivityServiceImpl implements ActivityService
*/ */
public void postActivity(String activityType, String network, String appTool, String activityData) public void postActivity(String activityType, String network, String appTool, String activityData)
{ {
postActivity(activityType, network, appTool, activityData, ActivityPostDAO.STATUS.POSTED); postActivity(activityType, network, appTool, activityData, ActivityPostDAO.STATUS.PENDING);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@ -27,7 +27,6 @@ package org.alfresco.repo.activities.post.lookup;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.activities.post.ActivityPostDAO; import org.alfresco.repo.activities.post.ActivityPostDAO;
@ -42,14 +41,14 @@ import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.transaction.TransactionService; import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.JSONtoFmModel;
import org.alfresco.util.Pair; import org.alfresco.util.Pair;
import org.alfresco.util.PropertyCheck; import org.alfresco.util.PropertyCheck;
import org.alfresco.util.VmShutdownListener; import org.alfresco.util.VmShutdownListener;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONStringer; import org.json.JSONObject;
import org.json.JSONTokener;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
/** /**
@ -120,33 +119,37 @@ public class PostLookup
} }
for (ActivityPostDAO activityPost : activityPosts) for (ActivityPostDAO activityPost : activityPosts)
{ {
Map<String, Object> model = JSONtoFmModel.convertJSONObjectToMap(activityPost.getActivityData());
String postUserId = activityPost.getUserId();
String name = (String)model.get("name"); // can be null
String nodeRefStr = (String)model.get("nodeRef"); // required
NodeRef nodeRef = new NodeRef(nodeRefStr);
String parentNodeRefStr = (String)model.get("parentNodeRef"); // optional
NodeRef parentNodeRef = null;
if (parentNodeRefStr != null)
{
parentNodeRef = new NodeRef(parentNodeRefStr);
}
String typeQName = (String)model.get("typeQName");
try try
{ {
postDaoService.startTransaction(); postDaoService.startTransaction();
Pair<String, String> siteNetworkActivityData = lookup(activityPost.getSiteNetwork(), nodeRef, name, typeQName, parentNodeRef, postUserId); JSONObject jo = new JSONObject(new JSONTokener(activityPost.getActivityData()));
String postUserId = activityPost.getUserId();
activityPost.setSiteNetwork(siteNetworkActivityData.getFirst()); if (! jo.isNull("nodeRef"))
activityPost.setActivityData(siteNetworkActivityData.getSecond()); {
String nodeRefStr = jo.getString("nodeRef");
NodeRef nodeRef = new NodeRef(nodeRefStr);
// lookup additional node data
JSONObject activityData = lookupNode(nodeRef, postUserId, jo);
activityPost.setActivityData(activityData.toString());
}
else
{
// lookup additional person data
Pair<String, String> firstLastName = lookupPerson(postUserId);
if (firstLastName != null)
{
jo.put("firstName", firstLastName.getFirst());
jo.put("lastName", firstLastName.getSecond());
activityPost.setActivityData(jo.toString());
}
}
activityPost.setLastModified(new Date()); activityPost.setLastModified(new Date());
postDaoService.updatePost(activityPost.getId(), activityPost.getSiteNetwork(), activityPost.getActivityData(), ActivityPostDAO.STATUS.POSTED); postDaoService.updatePost(activityPost.getId(), activityPost.getSiteNetwork(), activityPost.getActivityData(), ActivityPostDAO.STATUS.POSTED);
@ -193,7 +196,7 @@ public class PostLookup
} }
} }
private Pair<String, String> lookup(final String networkIn, final NodeRef nodeRef, final String nameIn, final String typeQNameIn, final NodeRef parentNodeRef, final String postUserId) throws JSONException private Pair<String, String> lookupPerson(final String postUserId) throws JSONException
{ {
return AuthenticationUtil.runAs(new RunAsWork<Pair<String, String>>() return AuthenticationUtil.runAs(new RunAsWork<Pair<String, String>>()
{ {
@ -206,12 +209,6 @@ public class PostLookup
{ {
public Pair<String, String> execute() throws Throwable public Pair<String, String> execute() throws Throwable
{ {
String jsonString = null;
String displayPath = "";
String name = nameIn;
String network = networkIn;
String typeQName = typeQNameIn;
Path path = null;
String firstName = ""; String firstName = "";
String lastName = ""; String lastName = "";
@ -221,29 +218,93 @@ public class PostLookup
firstName = (String)nodeService.getProperty(personRef, ContentModel.PROP_FIRSTNAME); firstName = (String)nodeService.getProperty(personRef, ContentModel.PROP_FIRSTNAME);
lastName = (String)nodeService.getProperty(personRef, ContentModel.PROP_LASTNAME); lastName = (String)nodeService.getProperty(personRef, ContentModel.PROP_LASTNAME);
return new Pair<String, String>(firstName, lastName);
}
return null;
}
};
// execute in txn
return txnHelper.doInTransaction(lookup, true);
}
}, AuthenticationUtil.getSystemUserName());
}
private JSONObject lookupNode(final NodeRef nodeRef, final String postUserId, final JSONObject jo) throws JSONException
{
return AuthenticationUtil.runAs(new RunAsWork<JSONObject>()
{
public JSONObject doWork() throws Exception
{
RetryingTransactionHelper txnHelper = transactionService.getRetryingTransactionHelper();
// wrap to make the request in a transaction
RetryingTransactionCallback<JSONObject> lookup = new RetryingTransactionCallback<JSONObject>()
{
public JSONObject execute() throws Throwable
{
String name = "";
if (! jo.isNull("name"))
{
name = jo.getString("name");
} }
if (((name == null) || (name.length() == 0)) && (nodeRef != null) && (nodeService.exists(nodeRef))) NodeRef parentNodeRef = null;
if (! jo.isNull("parentNodeRef"))
{ {
// node exists, lookup node name parentNodeRef = new NodeRef(jo.getString("parentNodeRef"));
if ((name == null) || (name.length() == 0)) }
String typeQName = "";
if (! jo.isNull("typeQName"))
{
typeQName = jo.getString("typeQName");
}
String displayPath = "";
Path path = null;
String firstName = "";
String lastName = "";
if (personService.personExists(postUserId))
{
// lookup firstname, lastname
NodeRef personRef = personService.getPerson(postUserId);
firstName = (String)nodeService.getProperty(personRef, ContentModel.PROP_FIRSTNAME);
lastName = (String)nodeService.getProperty(personRef, ContentModel.PROP_LASTNAME);
}
if ((nodeRef != null) && (nodeService.exists(nodeRef)))
{
if (name.length() == 0)
{ {
// lookup node name
name = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); name = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME);
} }
path = nodeService.getPath(nodeRef); if (typeQName.length() == 0)
{
// lookup type
typeQName = nodeService.getType(nodeRef).toPrefixString(); // TODO: missing the prefix ?
}
// TODO: missing the prefix ? if (parentNodeRef == null)
typeQName = nodeService.getType(nodeRef).toPrefixString(); {
// lookup parent node
parentNodeRef = nodeService.getPrimaryParent(nodeRef).getParentRef();
}
} }
if (((path == null) || (path.size() == 0)) && (parentNodeRef != null) && (nodeService.exists(parentNodeRef))) if ((parentNodeRef != null) && (nodeService.exists(parentNodeRef)))
{ {
// parent node exists, lookup parent node path // parent node exists, lookup parent node path
path = nodeService.getPath(parentNodeRef); path = nodeService.getPath(parentNodeRef);
} }
if (path != null) if (path != null)
{ {
// lookup display path // lookup display path
@ -253,34 +314,16 @@ public class PostLookup
displayPath += "/" + name; displayPath += "/" + name;
} }
if (name == null) // merge with existing activity data
{ jo.put("name", name);
name = ""; jo.put("nodeRef", nodeRef.toString());
} jo.put("typeQName", typeQName);
jo.put("parentNodeRef", (parentNodeRef != null ? parentNodeRef.toString() : null));
if (typeQName == null) jo.put("displayPath", displayPath);
{ jo.put("firstName", firstName);
typeQName = ""; jo.put("lastName", lastName);
}
// activity data
jsonString = new JSONStringer()
.object()
.key("name")
.value(name)
.key("nodeRef")
.value(nodeRef)
.key("typeQName")
.value(typeQName)
.key("displayPath")
.value(displayPath)
.key("firstName")
.value(firstName)
.key("lastName")
.value(lastName)
.endObject().toString();
return new Pair<String, String>(network, jsonString); return jo;
} }
}; };