<code>
import java.io.Serializable;
import java.util.List;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class AddAspectActionExecuter extends ActionExecuterAbstractBase {
private static Log logger = LogFactory
.getLog(AddAspectActionExecuter.class);
private NodeService nodeService;
private ContentService contentService;
public NodeService getNodeService() {
return nodeService;
}
public void setNodeService(NodeService nodeService) {
this.nodeService = nodeService;
}
public ContentService getContentService() {
return contentService;
}
public void setContentService(ContentService contentService) {
this.contentService = contentService;
}
public static final String NAME = "add-aspect-action";
public static final String PARAM_CONTENT_PROPERTY = "content-property";
@Override
protected void executeImpl(Action action, NodeRef actionedUponNodeRef) {
if (this.nodeService.exists(actionedUponNodeRef) == true) {
// Get the content property
QName contentProperty = (QName) action.getParameterValue(PARAM_CONTENT_PROPERTY);
if (contentProperty == null) {
contentProperty = ContentModel.PROP_CONTENT;
}
Serializable contentProp = nodeService.getProperty(actionedUponNodeRef, contentProperty);
if (contentProp == null) {
logger.info("null content");
return;
}
ContentReader reader = contentService.getReader(actionedUponNodeRef, contentProperty);
if (reader == null || reader.getMimetype() == null) {
if (logger.isDebugEnabled()) {
logger.debug("no content or mimetype - do nothing");
}
return;
}
//parse xml file and generate aspectProperties
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(reader.getContentInputStream());
Map<QName, Serializable> aspectProperties = new HashMap<QName, Serializable>();
//add aspect
this.nodeService.addAspect(actionedUponNodeRef, aspectTypeQName, aspectProperties);
}
}
@Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
paramList.add(new ParameterDefinitionImpl(PARAM_CONTENT_PROPERTY,
DataTypeDefinition.QNAME, false,
getParamDisplayLabel(PARAM_CONTENT_PROPERTY)));
}
}
<code>