1 31 32 package org.opencms.workplace.editors; 33 34 import org.opencms.db.CmsUserSettings; 35 import org.opencms.file.CmsFile; 36 import org.opencms.file.CmsFolder; 37 import org.opencms.file.CmsObject; 38 import org.opencms.file.CmsRequestContext; 39 import org.opencms.file.CmsResourceFilter; 40 import org.opencms.file.types.CmsResourceTypeXmlPage; 41 import org.opencms.main.CmsException; 42 import org.opencms.main.CmsLog; 43 import org.opencms.main.OpenCms; 44 import org.opencms.util.CmsStringUtil; 45 import org.opencms.workplace.explorer.CmsExplorerTypeSettings; 46 47 import java.util.ArrayList ; 48 import java.util.HashMap ; 49 import java.util.Iterator ; 50 import java.util.List ; 51 import java.util.Map ; 52 import java.util.SortedMap ; 53 import java.util.TreeMap ; 54 55 import org.apache.commons.logging.Log; 56 57 75 public class CmsWorkplaceEditorManager { 76 77 78 public static final String EDITOR_CONFIGURATION_FILENAME = "editor_configuration.xml"; 79 80 81 public static final String EDITOR_FILENAME = "editor.jsp"; 82 83 84 private static final Log LOG = CmsLog.getLog(CmsWorkplaceEditorManager.class); 85 86 private List m_editorConfigurations; 87 private Map m_preferredEditors; 88 89 94 public CmsWorkplaceEditorManager(CmsObject cms) { 95 96 List editorFolders = new ArrayList (); 98 try { 99 editorFolders = cms.getSubFolders(CmsEditor.PATH_EDITORS); 100 } catch (CmsException e) { 101 LOG.error(Messages.get().getBundle().key(Messages.LOG_READ_EDITIR_FOLDER_FAILED_1, CmsEditor.PATH_EDITORS)); 102 editorFolders = new ArrayList (); 104 } 105 106 m_editorConfigurations = new ArrayList (editorFolders.size()); 107 108 Iterator i = editorFolders.iterator(); 110 while (i.hasNext()) { 111 CmsFolder currentFolder = (CmsFolder)i.next(); 112 String folderName = CmsEditor.PATH_EDITORS + currentFolder.getName(); 113 if (!folderName.endsWith("/")) { 114 folderName += "/"; 115 } 116 CmsFile configFile = null; 117 try { 118 configFile = cms.readFile( 119 folderName + EDITOR_CONFIGURATION_FILENAME, 120 CmsResourceFilter.IGNORE_EXPIRATION); 121 } catch (CmsException e) { 122 if (LOG.isInfoEnabled()) { 124 LOG.info(e); 125 } 126 continue; 127 } 128 byte[] xmlData = configFile.getContents(); 130 CmsWorkplaceEditorConfiguration editorConfig = new CmsWorkplaceEditorConfiguration(xmlData, folderName 131 + EDITOR_FILENAME); 132 if (editorConfig.isValidConfiguration()) { 133 m_editorConfigurations.add(editorConfig); 134 } 135 } 136 m_preferredEditors = new HashMap (m_editorConfigurations.size()); 137 } 138 139 147 public Map getConfigurableEditors() { 148 149 Map configurableEditors = new HashMap (); 150 Iterator i = m_editorConfigurations.iterator(); 151 while (i.hasNext()) { 152 CmsWorkplaceEditorConfiguration currentConfig = (CmsWorkplaceEditorConfiguration)i.next(); 153 Iterator k = currentConfig.getResourceTypes().keySet().iterator(); 155 while (k.hasNext()) { 156 String key = (String )k.next(); 158 159 CmsExplorerTypeSettings settings = OpenCms.getWorkplaceManager().getExplorerTypeSetting(key); 161 if (CmsStringUtil.isNotEmpty(settings.getReference())) { 162 continue; 164 } 165 166 if (currentConfig.getMappingForResourceType(key) == null) { 167 SortedMap editorConfigs = (SortedMap )configurableEditors.get(key); 169 if (editorConfigs == null) { 170 editorConfigs = new TreeMap (); 172 } 173 editorConfigs.put(new Float (currentConfig.getRankingForResourceType(key)), currentConfig); 175 configurableEditors.put(key, editorConfigs); 177 } 178 } 179 } 180 return configurableEditors; 181 } 182 183 190 public String getWidgetEditor(CmsRequestContext context, String userAgent) { 191 192 CmsUserSettings settings = new CmsUserSettings(context.currentUser()); 194 String resourceType = CmsResourceTypeXmlPage.getStaticTypeName(); 195 String preferredEditorSetting = settings.getPreferredEditor(resourceType); 196 if (preferredEditorSetting == null) { 197 Iterator i = m_editorConfigurations.iterator(); 199 while (i.hasNext()) { 200 CmsWorkplaceEditorConfiguration currentConfig = (CmsWorkplaceEditorConfiguration)i.next(); 201 String mapping = currentConfig.getMappingForResourceType(resourceType); 202 if (mapping != null) { 203 preferredEditorSetting = settings.getPreferredEditor(mapping); 204 } 205 if (preferredEditorSetting != null) { 206 break; 207 } 208 } 209 } 210 if (preferredEditorSetting != null) { 211 CmsWorkplaceEditorConfiguration preferredConf = filterPreferredEditor(preferredEditorSetting); 212 if (preferredConf != null && preferredConf.isWidgetEditor() && preferredConf.matchesBrowser(userAgent)) { 213 return preferredConf.getWidgetEditor(); 215 } 216 } 217 218 SortedMap filteredEditors = filterEditorsForResourceType(resourceType); 220 221 while (filteredEditors.size() > 0) { 223 Float key = (Float )filteredEditors.lastKey(); 225 CmsWorkplaceEditorConfiguration conf = (CmsWorkplaceEditorConfiguration)filteredEditors.get(key); 226 if (conf.isWidgetEditor() && conf.matchesBrowser(userAgent)) { 227 return conf.getWidgetEditor(); 228 } 229 filteredEditors.remove(key); 230 } 231 232 return null; 234 } 235 236 244 protected String getDefaultEditorUri(CmsRequestContext context, String resourceType, String userAgent) { 245 246 SortedMap filteredEditors = filterEditorsForResourceType(resourceType); 247 while (filteredEditors.size() > 0) { 248 Float key = (Float )filteredEditors.firstKey(); 250 CmsWorkplaceEditorConfiguration conf = (CmsWorkplaceEditorConfiguration)filteredEditors.get(key); 251 if (conf.matchesBrowser(userAgent)) { 253 return conf.getEditorUri(); 254 } 255 filteredEditors.remove(key); 256 } 257 if (context == null) { 258 return null; 260 } 261 return null; 263 } 264 265 270 protected List getEditorConfigurations() { 271 272 return m_editorConfigurations; 273 } 274 275 283 protected String getEditorUri(CmsRequestContext context, String resourceType, String userAgent) { 284 285 CmsUserSettings settings = new CmsUserSettings(context.currentUser()); 287 String preferredEditorSetting = settings.getPreferredEditor(resourceType); 288 if (preferredEditorSetting == null) { 289 Iterator i = m_editorConfigurations.iterator(); 291 while (i.hasNext()) { 292 CmsWorkplaceEditorConfiguration currentConfig = (CmsWorkplaceEditorConfiguration)i.next(); 293 String mapping = currentConfig.getMappingForResourceType(resourceType); 294 if (mapping != null) { 295 preferredEditorSetting = settings.getPreferredEditor(mapping); 296 } 297 if (preferredEditorSetting != null) { 298 break; 299 } 300 } 301 } 302 if (preferredEditorSetting != null) { 303 CmsWorkplaceEditorConfiguration preferredConf = filterPreferredEditor(preferredEditorSetting); 304 if (preferredConf != null && preferredConf.matchesBrowser(userAgent)) { 305 return preferredConf.getEditorUri(); 307 } 308 } 309 310 SortedMap filteredEditors = filterEditorsForResourceType(resourceType); 312 313 while (filteredEditors.size() > 0) { 315 Float key = (Float )filteredEditors.lastKey(); 317 CmsWorkplaceEditorConfiguration conf = (CmsWorkplaceEditorConfiguration)filteredEditors.get(key); 318 if (conf.matchesBrowser(userAgent)) { 319 return conf.getEditorUri(); 320 } 321 filteredEditors.remove(key); 322 } 323 324 return null; 326 } 327 328 334 private SortedMap filterEditorsForResourceType(String resourceType) { 335 336 SortedMap filteredEditors = new TreeMap (); 337 Iterator i = m_editorConfigurations.iterator(); 338 while (i.hasNext()) { 339 CmsWorkplaceEditorConfiguration currentConfig = (CmsWorkplaceEditorConfiguration)i.next(); 340 if (currentConfig.matchesResourceType(resourceType)) { 341 float key = currentConfig.getRankingForResourceType(resourceType); 342 if (key >= 0) { 343 filteredEditors.put(new Float (key), currentConfig); 344 } 345 } 346 } 347 return filteredEditors; 348 } 349 350 356 private CmsWorkplaceEditorConfiguration filterPreferredEditor(String preferredEditor) { 357 358 if (m_preferredEditors.size() == 0) { 359 Iterator i = m_editorConfigurations.iterator(); 360 while (i.hasNext()) { 361 CmsWorkplaceEditorConfiguration currentConfig = (CmsWorkplaceEditorConfiguration)i.next(); 362 m_preferredEditors.put(currentConfig.getEditorUri(), currentConfig); 363 } 364 } 365 return (CmsWorkplaceEditorConfiguration)m_preferredEditors.get(preferredEditor); 366 } 367 368 } 369 | Popular Tags |