KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > nl > hippo > cms > workflows > multiplesitesdocument > NotifySitesOfPublicationRequestFunction


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 JavaDoc;
7 import java.util.HashSet JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.Map JavaDoc;
10 import java.util.Set JavaDoc;
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 JavaDoc UNPUBLICATION_DATE_KEY = "unpublicationDate";
30     public static final String JavaDoc PUBLICATION_DATE_KEY = "publicationDate";
31     public NotifySitesOfPublicationRequestFunction()
32     {
33         super();
34     }
35
36     public void executeImpl(Map JavaDoc transientVars, Map JavaDoc args, PropertySet ps) throws WorkflowException
37     {
38         String JavaDoc projectName = (String JavaDoc) 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 JavaDoc siteWorkflowIds = (Map JavaDoc)ps.getAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY);
54                     if (siteWorkflowIds == null)
55                     {
56                         siteWorkflowIds = new HashMap JavaDoc();
57                     }
58                     Set propertiesToSet = new HashSet JavaDoc();
59                     
60                     Iterator JavaDoc siteIdsIterator = sitesDir.siteIdsIterator();
61                     String JavaDoc 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 JavaDoc absoluteLocation = editorRepoInfo.getAbsoluteUri(location);
68                         while (siteIdsIterator.hasNext())
69                         {
70                             String JavaDoc siteId = (String JavaDoc) siteIdsIterator.next();
71                             Object JavaDoc selection = transientVars.get(siteId + "-selection");
72                             if (selection != null && selection.equals(Boolean.TRUE))
73                             {
74                                 Map JavaDoc arguments = new HashMap JavaDoc();
75                                 String JavaDoc dateArgumentsPrefix = siteId + '-';
76                                 Object JavaDoc 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 JavaDoc 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 JavaDoc siteWorkflowIdAsLong = (Long JavaDoc)siteWorkflowIds.get(siteId);
90                                 if (siteWorkflowIdAsLong == null)
91                                 {
92                                     arguments.put("documentLocation", location);
93                                     arguments.put("documentWorkflowId", new Long JavaDoc(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 JavaDoc(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 JavaDoc e)
132         {
133             throw new WorkflowException(e);
134         }
135     }
136
137 }
138
Popular Tags