1 package nl.hippo.cms.workflows.multiplesitesdocument; 2 3 import com.opensymphony.module.propertyset.PropertySet; 4 import com.opensymphony.workflow.WorkflowException; 5 import com.opensymphony.workflow.spi.WorkflowEntry; 6 import java.util.HashMap ; 7 import java.util.HashSet ; 8 import java.util.Iterator ; 9 import java.util.Map ; 10 import java.util.Set ; 11 import nl.hippo.cms.Constants; 12 import nl.hippo.cms.repositorylocation.CommonRepositoryLocationRoles; 13 import nl.hippo.cms.repositorylocation.RepositoryInformation; 14 import nl.hippo.cms.repositorylocation.RepositoryLocation; 15 import nl.hippo.cms.sitesdirectory.SitesDirectory; 16 import nl.hippo.cms.workflows.shared.FunctionProviderComponent; 17 import nl.hippo.cocoon.webdav.Property; 18 import nl.hippo.cocoon.webdav.WebDAVHelper; 19 import nl.hippo.componentcontainers.AvalonSpringBridge; 20 import nl.hippo.servermanager.Project; 21 import nl.hippo.servermanager.ProjectWorkflowRepository; 22 import nl.hippo.servermanager.Server; 23 import nl.hippo.servermanager.ServerManager; 24 import org.apache.commons.httpclient.HttpState; 25 26 public class NotifySitesOfDeletionRequestFunction extends FunctionProviderComponent 27 { 28 29 public NotifySitesOfDeletionRequestFunction() 30 { 31 super(); 32 } 33 34 public void executeImpl(Map transientVars, Map args, PropertySet ps) throws WorkflowException 35 { 36 String projectName = (String ) transientVars.get(MultipleSitesDocumentConstants.PROJECT_NAME_KEY); 37 try 38 { 39 AvalonSpringBridge asb = (AvalonSpringBridge) m_manager.lookup(AvalonSpringBridge.ROLE); 40 try 41 { 42 Server server = ((ServerManager) asb.getBean("serverManager")).getServer(); 43 Project project = server.getProject(projectName); 44 ProjectWorkflowRepository workflowRepo = project.getWorkflowRepository(); 45 46 SitesDirectory sitesDir = (SitesDirectory) m_manager.lookup(SitesDirectory.ROLE); 47 try 48 { 49 WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry"); 50 boolean haveSiteWorkflowIdsChanged = false; 51 Map siteWorkflowIds = (Map )ps.getAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY); 52 if (siteWorkflowIds == null) 53 { 54 siteWorkflowIds = new HashMap (); 55 } 56 Set propertiesToSet = new HashSet (); 57 58 Iterator siteIdsIterator = sitesDir.siteIdsIterator(); 59 String location = ps.getString("location"); 60 RepositoryLocation editorRepoLocation = (RepositoryLocation) m_manager.lookup(CommonRepositoryLocationRoles.EDITOR_REPOSITORY_LOCATION_ROLE); 61 try 62 { 63 RepositoryInformation editorRepoInfo = editorRepoLocation.getRepositoryInformation(); 64 65 String absoluteLocation = editorRepoInfo.getAbsoluteUri(location); 66 while (siteIdsIterator.hasNext()) 67 { 68 String siteId = (String ) siteIdsIterator.next(); 69 Map arguments = new HashMap (); 70 71 Long siteWorkflowIdAsLong = (Long )siteWorkflowIds.get(siteId); 72 if (siteWorkflowIdAsLong == null) 73 { 74 arguments.put("documentLocation", location); 75 arguments.put("documentWorkflowId", new Long (entry.getId())); 76 arguments.put("siteId", siteId); 77 arguments.put("projectName", projectName); 78 long siteWorkflowId = workflowRepo.initialize("MultipleSitesSite", 1002, arguments); 79 siteWorkflowIds.put(siteId, new Long (siteWorkflowId)); 80 propertiesToSet.add(new Property("H", Constants.CMS_1_0_NAMESPACE, siteId + "-workflow-id", String.valueOf(siteWorkflowId))); 81 haveSiteWorkflowIdsChanged = true; 82 } 83 else 84 { 85 long siteWorkflowId = siteWorkflowIdAsLong.longValue(); 86 workflowRepo.doAction(siteWorkflowId, 1102, arguments); 87 } 88 } 89 90 if (haveSiteWorkflowIdsChanged) 91 { 92 ps.setAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY, siteWorkflowIds); 93 HttpState httpState = (HttpState) transientVars.get("httpstate"); 94 WebDAVHelper.proppatch(absoluteLocation, propertiesToSet, null, httpState); 95 } 96 } 97 finally 98 { 99 m_manager.release(editorRepoLocation); 100 } 101 } 102 finally 103 { 104 m_manager.release(sitesDir); 105 } 106 } 107 finally 108 { 109 m_manager.release(asb); 110 } 111 } 112 catch (Exception e) 113 { 114 throw new WorkflowException(e); 115 } 116 } 117 118 } 119 | Popular Tags |