KickJava   Java API By Example, From Geeks To Geeks.

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


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 CreateSiteWorkflowsFunction extends FunctionProviderComponent
27 {
28
29     public CreateSiteWorkflowsFunction()
30     {
31         super();
32     }
33
34     public void executeImpl(Map JavaDoc transientVars, Map JavaDoc args, PropertySet ps) throws WorkflowException
35     {
36         String JavaDoc projectName = (String JavaDoc) 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 JavaDoc siteWorkflowIds = (Map JavaDoc)ps.getAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY);
52                     if (siteWorkflowIds == null)
53                     {
54                         siteWorkflowIds = new HashMap JavaDoc();
55                     }
56                     Set propertiesToSet = new HashSet JavaDoc();
57                     
58                     Iterator JavaDoc siteIdsIterator = sitesDir.siteIdsIterator();
59                     String JavaDoc 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 JavaDoc absoluteLocation = editorRepoInfo.getAbsoluteUri(location);
66                         while (siteIdsIterator.hasNext())
67                         {
68                             String JavaDoc siteId = (String JavaDoc) siteIdsIterator.next();
69                             Long JavaDoc siteWorkflowIdAsLong = (Long JavaDoc)siteWorkflowIds.get(siteId);
70                             if (siteWorkflowIdAsLong == null)
71                             {
72                                 Map JavaDoc arguments = new HashMap JavaDoc();
73                                 
74                                 arguments.put("documentLocation", location);
75                                 arguments.put("documentWorkflowId", new Long JavaDoc(entry.getId()));
76                                 arguments.put("siteId", siteId);
77                                 arguments.put("projectName", projectName);
78                                 long siteWorkflowId = workflowRepo.initialize("MultipleSitesSite", 1004, arguments);
79                                 siteWorkflowIds.put(siteId, new Long JavaDoc(siteWorkflowId));
80                                 propertiesToSet.add(new Property("H", Constants.CMS_1_0_NAMESPACE, siteId + "-workflow-id", String.valueOf(siteWorkflowId)));
81                                 haveSiteWorkflowIdsChanged = true;
82                             }
83                         }
84                         
85                         if (haveSiteWorkflowIdsChanged)
86                         {
87                             ps.setAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY, siteWorkflowIds);
88                             HttpState httpState = (HttpState) transientVars.get("httpstate");
89                             WebDAVHelper.proppatch(absoluteLocation, propertiesToSet, null, httpState);
90                         }
91                     }
92                     finally
93                     {
94                         m_manager.release(editorRepoLocation);
95                     }
96                 }
97                 finally
98                 {
99                     m_manager.release(sitesDir);
100                 }
101             }
102             finally
103             {
104                 m_manager.release(asb);
105             }
106         }
107         catch (Exception JavaDoc e)
108         {
109             throw new WorkflowException(e);
110         }
111     }
112
113 }
114
Popular Tags