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 NotifySitesOfPublicationRequestFunction extends FunctionProviderComponent 27 { 28 29 public static final String UNPUBLICATION_DATE_KEY = "unpublicationDate"; 30 public static final String PUBLICATION_DATE_KEY = "publicationDate"; 31 public NotifySitesOfPublicationRequestFunction() 32 { 33 super(); 34 } 35 36 public void executeImpl(Map transientVars, Map args, PropertySet ps) throws WorkflowException 37 { 38 String projectName = (String ) transientVars.get(MultipleSitesDocumentConstants.PROJECT_NAME_KEY); 39 try 40 { 41 AvalonSpringBridge asb = (AvalonSpringBridge) m_manager.lookup(AvalonSpringBridge.ROLE); 42 try 43 { 44 Server server = ((ServerManager) asb.getBean("serverManager")).getServer(); 45 Project project = server.getProject(projectName); 46 ProjectWorkflowRepository workflowRepo = project.getWorkflowRepository(); 47 48 SitesDirectory sitesDir = (SitesDirectory) m_manager.lookup(SitesDirectory.ROLE); 49 try 50 { 51 WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry"); 52 boolean haveSiteWorkflowIdsChanged = false; 53 Map siteWorkflowIds = (Map )ps.getAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY); 54 if (siteWorkflowIds == null) 55 { 56 siteWorkflowIds = new HashMap (); 57 } 58 Set propertiesToSet = new HashSet (); 59 60 Iterator siteIdsIterator = sitesDir.siteIdsIterator(); 61 String location = ps.getString("location"); 62 RepositoryLocation editorRepoLocation = (RepositoryLocation) m_manager.lookup(CommonRepositoryLocationRoles.EDITOR_REPOSITORY_LOCATION_ROLE); 63 try 64 { 65 RepositoryInformation editorRepoInfo = editorRepoLocation.getRepositoryInformation(); 66 67 String absoluteLocation = editorRepoInfo.getAbsoluteUri(location); 68 while (siteIdsIterator.hasNext()) 69 { 70 String siteId = (String ) siteIdsIterator.next(); 71 Object selection = transientVars.get(siteId + "-selection"); 72 if (selection != null && selection.equals(Boolean.TRUE)) 73 { 74 Map arguments = new HashMap (); 75 String dateArgumentsPrefix = siteId + '-'; 76 Object publicationDateMode = transientVars.get(dateArgumentsPrefix + "publicationDateMode"); 77 arguments.put("publicationDateMode", publicationDateMode); 78 if (publicationDateMode.equals("other")) 79 { 80 arguments.put("publicationDate", transientVars.get(dateArgumentsPrefix + "publicationDate")); 81 } 82 Object unpublicationDateMode = transientVars.get(dateArgumentsPrefix + "unpublicationDateMode"); 83 if (publicationDateMode.equals("other")) 84 { 85 arguments.put("unpublicationDate", transientVars.get(dateArgumentsPrefix + "unpublicationDate")); 86 } 87 arguments.put("unpublicationDateMode", unpublicationDateMode); 88 89 Long siteWorkflowIdAsLong = (Long )siteWorkflowIds.get(siteId); 90 if (siteWorkflowIdAsLong == null) 91 { 92 arguments.put("documentLocation", location); 93 arguments.put("documentWorkflowId", new Long (entry.getId())); 94 arguments.put("siteId", siteId); 95 arguments.put("projectName", projectName); 96 long siteWorkflowId = workflowRepo.initialize("MultipleSitesSite", 1001, arguments); 97 siteWorkflowIds.put(siteId, new Long (siteWorkflowId)); 98 propertiesToSet.add(new Property("H", Constants.CMS_1_0_NAMESPACE, siteId + "-workflow-id", String.valueOf(siteWorkflowId))); 99 haveSiteWorkflowIdsChanged = true; 100 } 101 else 102 { 103 long siteWorkflowId = siteWorkflowIdAsLong.longValue(); 104 workflowRepo.doAction(siteWorkflowId, 1101, arguments); 105 } 106 } 107 } 108 109 if (haveSiteWorkflowIdsChanged) 110 { 111 ps.setAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY, siteWorkflowIds); 112 HttpState httpState = (HttpState) transientVars.get("httpstate"); 113 WebDAVHelper.proppatch(absoluteLocation, propertiesToSet, null, httpState); 114 } 115 } 116 finally 117 { 118 m_manager.release(editorRepoLocation); 119 } 120 } 121 finally 122 { 123 m_manager.release(sitesDir); 124 } 125 } 126 finally 127 { 128 m_manager.release(asb); 129 } 130 } 131 catch (Exception e) 132 { 133 throw new WorkflowException(e); 134 } 135 } 136 137 } 138 | Popular Tags |