1 16 package nl.hippo.cms.workflows.multiplesitesdocument; 17 18 import com.opensymphony.module.propertyset.PropertySet; 19 import com.opensymphony.workflow.WorkflowException; 20 import java.io.IOException ; 21 import java.util.HashMap ; 22 import java.util.Iterator ; 23 import java.util.Map ; 24 import nl.hippo.cms.Constants; 25 import nl.hippo.cms.repositorylocation.CommonRepositoryLocationRoles; 26 import nl.hippo.cms.repositorylocation.RepositoryInformation; 27 import nl.hippo.cms.repositorylocation.RepositoryLocation; 28 import nl.hippo.cms.sitesdirectory.SitesDirectory; 29 import nl.hippo.cocoon.webdav.WebDAVHelper; 30 import nl.hippo.componentcontainers.AvalonSpringBridge; 31 import nl.hippo.servermanager.Project; 32 import nl.hippo.servermanager.ProjectWorkflowRepository; 33 import org.apache.avalon.framework.service.ServiceException; 34 import org.apache.avalon.framework.service.ServiceManager; 35 import org.apache.commons.httpclient.HttpState; 36 37 public class MultipleSitesDocumentUtil 38 { 39 40 private MultipleSitesDocumentUtil() 41 { 42 super(); 43 } 44 45 public static int getNumberOfCheckedSites(ServiceManager serviceManager, Map transientVars) 46 throws WorkflowException 47 { 48 int result; 49 50 try 51 { 52 SitesDirectory sitesDir = (SitesDirectory) serviceManager.lookup(SitesDirectory.ROLE); 53 try 54 { 55 if (sitesDir.getNumberOfSites() == 1) 56 { 57 result = 1; 58 } 59 else 60 { 61 result = 0; 62 Iterator siteIdsIter = sitesDir.siteIdsIterator(); 63 while (siteIdsIter.hasNext()) 64 { 65 String siteId = (String ) siteIdsIter.next(); 66 Object siteSelection = transientVars.get(siteId + "-selection"); 67 if (siteSelection != null && siteSelection.equals(Boolean.TRUE)) 68 { 69 result += 1; 70 } 71 } 72 } 73 } 74 finally 75 { 76 serviceManager.release(sitesDir); 77 } 78 } 79 catch (ServiceException e) 80 { 81 throw new WorkflowException(e); 82 } 83 84 return result; 85 } 86 87 public static boolean isPublishedOnSite(String uri, String siteId, Project project, 88 HttpState httpState) throws IOException 89 { 90 boolean result = false; 91 92 String siteWorkflowId = WebDAVHelper.propfindAsString(uri, Constants.CMS_1_0_NAMESPACE, 93 siteId + "-workflow-id", httpState); 94 if (siteWorkflowId != null && !siteWorkflowId.equals("")) 95 { 96 ProjectWorkflowRepository workflowRepository = project.getWorkflowRepository(); 97 PropertySet sitePropertySet = workflowRepository.getPropertySet(Long.parseLong(siteWorkflowId)); 98 int publishedVersion = sitePropertySet.getInt("publishedVersion"); 99 100 result = publishedVersion != 0; 101 } 102 103 return result; 104 } 105 106 public static VersionInformation getPublishedVersionInformation(String uri, Project project, 107 String siteId, ServiceManager manager) throws ServiceException, IOException 108 { 109 int publishedVersion = 0; 110 String versionComment = ""; 111 112 AvalonSpringBridge avalonSpringBridge = (AvalonSpringBridge) manager 113 .lookup(AvalonSpringBridge.ROLE); 114 try 115 { 116 HttpState httpState = (HttpState) avalonSpringBridge.getBean("httpState"); 117 String workflowIdAsString = WebDAVHelper.propfindAsString(uri, Constants.CMS_1_0_NAMESPACE, Constants.WORKFLOW_ID_PROPERTY_NAME, httpState); 118 if (workflowIdAsString != null) 119 { 120 long workflowId =Long.parseLong(workflowIdAsString); 121 ProjectWorkflowRepository workflow = project.getWorkflowRepository(); 122 PropertySet documentPropertySet = workflow.getPropertySet(workflowId); 123 124 Map siteWorkflowIds = (Map ) documentPropertySet.getAsActualType(MultipleSitesDocumentConstants.SITE_WORKFLOW_IDS_KEY); 125 if (siteWorkflowIds == null) 126 { 127 siteWorkflowIds = new HashMap (); 128 } 129 130 Long siteWorkflowIdAsLong = (Long )siteWorkflowIds.get(siteId); 131 if (siteWorkflowIdAsLong != null) 132 { 133 long siteWorkflowId = (siteWorkflowIdAsLong).longValue(); 134 PropertySet sitePropertySet = workflow.getPropertySet(siteWorkflowId); 135 publishedVersion = sitePropertySet.getInt("publishedVersion"); 136 String relativeLocation = documentPropertySet.getString("location"); 137 RepositoryLocation historyLocation = (RepositoryLocation) manager.lookup(CommonRepositoryLocationRoles.HISTORY_REPOSITORY_LOCATION_ROLE); 138 try 139 { 140 RepositoryInformation historyInfo = historyLocation.getRepositoryInformation(); 141 String absoluteLocation = historyInfo.getAbsoluteUri(relativeLocation + "/" + publishedVersion + ".xml"); 142 versionComment = WebDAVHelper.propfindAsString(absoluteLocation, Constants.CMS_1_0_NAMESPACE, "versionComment", httpState); 143 } 144 finally 145 { 146 manager.release(historyLocation); 147 } 148 } 149 } 150 } 151 finally 152 { 153 manager.release(avalonSpringBridge); 154 } 155 156 return new VersionInformation(publishedVersion, versionComment); 157 } 158 159 } 160 | Popular Tags |