Friday, 21 November 2014

Creating Custom Perge and delete Action in Web Content Managment

Use-case :- When ever a item gets expired or in some times after publish based on some conditions like time factor you want to delete the content.

Step1 :- Create a dynamic web-project and place below plugin.xml in it

<?xml version="1.0" encoding="UTF-8"?>
<plugin id="com.poc.purgeaction.CustomPurgeAction" name="Custom Purge Action Factory" version="1.0.0" provider-name="IBM"> 
<extension-point id= "CustomPurgeFactory" name="CustomPurgeFactory" />
<extension point="com.ibm.workplace.wcm.api.CustomWorkflowActionFactory" id= "CustomPergeAction" >
<provider class= "com.poc.purge.factory.CustomPurgeFactory"/>
</extension>

</plugin>

Step2 :- Now create two classes one implementing CustomWorkflowActionFactory and other is CustomWorkflowAction

CustomPurgeFactory

package com.poc.purge.factory;

import java.util.Locale;

import com.ibm.workplace.wcm.api.Document;
import com.ibm.workplace.wcm.api.custom.CustomWorkflowAction;
import com.ibm.workplace.wcm.api.custom.CustomWorkflowActionFactory;
import com.poc.purgeaction.CustomPurgeAction;

public class CustomPurgeFactory implements CustomWorkflowActionFactory {

public static final String ActionName = "PocPurgeAction";

@Override
public CustomWorkflowAction getAction(String arg0, Document arg1) {
// TODO Auto-generated method stub
return new CustomPurgeAction();
}

@Override
public String getActionDescription(Locale arg0, String arg1) {
// TODO Auto-generated method stub
return ActionName;
}

@Override
public String[] getActionNames() {
// TODO Auto-generated method stub
return new String[]{ActionName};
}

@Override
public String getActionTitle(Locale arg0, String arg1) {
// TODO Auto-generated method stub
return ActionName;
}

@Override
public String getName() {
// TODO Auto-generated method stub
return ActionName;
}

@Override
public String getTitle(Locale arg0) {
// TODO Auto-generated method stub
return ActionName;
}

}

CustomPurgeAction

package com.poc.purgeaction;

import java.util.Date;

import javax.naming.InitialContext;

import com.ibm.workplace.wcm.api.Document;
import com.ibm.workplace.wcm.api.WebContentCustomWorkflowService;
import com.ibm.workplace.wcm.api.custom.CustomWorkflowAction;
import com.ibm.workplace.wcm.api.custom.CustomWorkflowActionResult;
import com.ibm.workplace.wcm.api.custom.Directive;
import com.ibm.workplace.wcm.api.custom.Directives;
import com.ibm.workplace.wcm.api.custom.DeleteDirectiveParams;

public class CustomPurgeAction implements CustomWorkflowAction {

@Override
public CustomWorkflowActionResult execute(Document arg0) {
WebContentCustomWorkflowService wfService = null;
CustomWorkflowActionResult _results = null;
Directive directive = Directives.DELETE;
//Without the following line, it would softly delete the document
((DeleteDirectiveParams)directive.createDirectiveParams()).setPermanentDelete(true);
try {
InitialContext ctx = new InitialContext();
// Retrieve WebContentCustomWorkflowService using JNDI name
wfService = (WebContentCustomWorkflowService) ctx.lookup("portal:service/wcm/WebContentCustomWorkflowService");
_results = wfService.createResult(directive, "Our client document is permanently deleted ");
} catch(Exception e) { e.printStackTrace();
}
return _results;
}

@Override
public Date getExecuteDate(Document arg0) {
// TODO Auto-generated method stub
return DATE_EXECUTE_NOW;
}

}

Step3 :-  Now you apply above custom action to expire stage. So once item is moved to expire stage the content will be deleted by default.

No comments:

Post a Comment

Custom single threaded java server

 package com.diffengine.csv; import java.io.*; import java.net.*; import java.util.Date; public class Server { public static void main(Str...