package org.sakaiproject.metaobj.shared.mgt;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom.Element;
import org.sakaiproject.content.api.ContentResource;
import org.sakaiproject.component.cover.ComponentManager;
import org.sakaiproject.time.api.Time;
import org.sakaiproject.entity.api.EntityPropertyNotDefinedException;
import org.sakaiproject.entity.api.EntityPropertyTypeException;
import org.sakaiproject.user.api.User;
import org.sakaiproject.user.api.UserDirectoryService;
import org.sakaiproject.user.api.UserNotDefinedException;
import java.util.Date;
/**
* Created by IntelliJ IDEA.
* User: johnellis
* Date: Feb 10, 2007
* Time: 11:36:29 AM
* To change this template use File | Settings | File Templates.
*/
public class ContentHostingUtil {
private static final Log log = LogFactory.getLog(ContentHostingUtil.class);
public static Element createRepoNode(ContentResource contentResource) {
Element repositoryNode;
repositoryNode = new Element("repositoryNode");
Date created = getDate(contentResource,
contentResource.getProperties().getNamePropCreationDate());
if (created != null) {
repositoryNode.addContent(createNode("created",
created.toString()));
}
Date modified = getDate(contentResource,
contentResource.getProperties().getNamePropModifiedDate());
if (modified != null) {
repositoryNode.addContent(createNode("modified",
modified.toString()));
}
UserDirectoryService uds = (UserDirectoryService) ComponentManager.get(UserDirectoryService.class);
String createdUser = contentResource.getProperties().getProperty(
contentResource.getProperties().getNamePropCreator());
if (createdUser != null) {
try {
User owner = uds.getUser(createdUser);
repositoryNode.addContent(createUserNode("owner", owner));
}
catch (UserNotDefinedException e) {
//we have something created by somebody we don't know -- this is worth logging
log.warn("Cannot find owner of content resource with reference: " + contentResource.getReference());
}
}
String modifiedUser = contentResource.getProperties().getProperty(
contentResource.getProperties().getNamePropModifiedBy());
if (modifiedUser != null) {
try {
User modifiedBy = uds.getUser(modifiedUser);
repositoryNode.addContent(createUserNode("modifiedBy", modifiedBy));
}
catch (UserNotDefinedException e) {
//we have something modified by somebody we don't know -- this is worth logging
log.warn("Cannot find modifier of content resource with reference: " + contentResource.getReference());
}
}
return repositoryNode;
}
private static Element createUserNode(String elementName, User user) {
Element userNode = new Element(elementName);
userNode.addContent(createNode("id", user.getId()));
userNode.addContent(createNode("eid", user.getEid()));
userNode.addContent(createNode("displayName", user.getDisplayName()));
userNode.addContent(createNode("email", user.getEmail()));
userNode.addContent(createNode("firstName", user.getFirstName()));
userNode.addContent(createNode("lastName", user.getLastName()));
return userNode;
}
public static Element createNode(String name, String value) {
Element newNode = new Element(name);
newNode.addContent(value);
return newNode;
}
public static Date getDate(ContentResource resource, String propName) {
try {
Time time = resource.getProperties().getTimeProperty(propName);
return new Date(time.getTime());
}
catch (EntityPropertyNotDefinedException e) {
return null;
}
catch (EntityPropertyTypeException e) {
throw new RuntimeException(e);
}
}
}