| 1 31 32 package org.opencms.workplace.explorer; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.i18n.CmsMessages; 36 import org.opencms.main.CmsLog; 37 import org.opencms.main.OpenCms; 38 import org.opencms.security.CmsPermissionSet; 39 import org.opencms.util.CmsStringUtil; 40 import org.opencms.workplace.CmsWorkplace; 41 42 import java.util.ArrayList ; 43 import java.util.Collections ; 44 import java.util.HashMap ; 45 import java.util.Iterator ; 46 import java.util.List ; 47 48 import org.apache.commons.logging.Log; 49 50 63 public class CmsExplorerContextMenu { 64 65 66 private static final Log LOG = CmsLog.getLog(CmsExplorerContextMenu.class); 67 68 69 private List m_allEntries; 70 71 private HashMap m_generatedScripts; 72 73 private boolean m_multiMenu; 74 75 78 public CmsExplorerContextMenu() { 79 80 m_allEntries = new ArrayList (); 81 m_generatedScripts = new HashMap (); 82 } 83 84 91 public void addEntries(List entries) { 92 93 m_allEntries.addAll(entries); 94 sortEntries(); 95 } 96 97 104 public void addEntry(CmsExplorerContextMenuItem entry) { 105 106 m_allEntries.add(entry); 107 sortEntries(); 108 } 109 110 119 public void addMenuEntry(String key, String uri, String rules, String target, String order) { 120 121 Integer orderValue = new Integer (0); 122 try { 123 orderValue = Integer.valueOf(order); 124 } catch (Exception e) { 125 if (LOG.isErrorEnabled()) { 126 LOG.error(Messages.get().getBundle().key(Messages.LOG_WRONG_ORDER_CONTEXT_MENU_1, key)); 127 } 128 } 129 CmsExplorerContextMenuItem item = new CmsExplorerContextMenuItem( 130 CmsExplorerContextMenuItem.TYPE_ENTRY, 131 key, 132 uri, 133 rules, 134 target, 135 orderValue); 136 137 addEntry(item); 138 if (LOG.isDebugEnabled()) { 139 LOG.debug(Messages.get().getBundle().key(Messages.LOG_ADD_MENU_ENTRY_2, key, order)); 140 } 141 } 142 143 148 public void addMenuSeparator(String order) { 149 150 Integer orderValue = new Integer (0); 151 try { 152 orderValue = Integer.valueOf(order); 153 } catch (Exception e) { 154 LOG.error(Messages.get().getBundle().key(Messages.LOG_WRONG_MENU_SEP_ORDER_0, order)); 155 } 156 CmsExplorerContextMenuItem item = new CmsExplorerContextMenuItem( 157 CmsExplorerContextMenuItem.TYPE_SEPARATOR, 158 null, 159 null, 160 null, 161 null, 162 orderValue); 163 addEntry(item); 164 if (LOG.isDebugEnabled()) { 165 LOG.debug(Messages.get().getBundle().key(Messages.LOG_WRONG_MENU_SEP_ORDER_0, order)); 166 } 167 } 168 169 172 public Object clone() { 173 174 CmsExplorerContextMenu objectClone = new CmsExplorerContextMenu(); 175 objectClone.setMultiMenu(m_multiMenu); 176 objectClone.setAllEntries(m_allEntries); 177 return objectClone; 178 } 179 180 185 public List getAllEntries() { 186 187 return m_allEntries; 188 } 189 190 199 public String getJSEntries(CmsObject cms, CmsExplorerTypeSettings settings, int resTypeId, CmsMessages messages) { 200 201 String entries = (String )m_generatedScripts.get(messages.getLocale()); 203 204 if (entries == null) { 205 207 StringBuffer result = new StringBuffer (4096); 209 String jspWorkplaceUri = OpenCms.getLinkManager().substituteLink(cms, CmsWorkplace.PATH_WORKPLACE); 210 211 if (!isMultiMenu()) { 212 result.append("\nvi.resource[").append(resTypeId).append("]=new res(\"").append(settings.getName()).append( 214 "\", "); 215 result.append("\""); 216 result.append(messages.key(settings.getKey())); 217 result.append("\", vi.skinPath + \"filetypes/"); 218 result.append(settings.getIcon()); 219 result.append("\", \""); 220 result.append(settings.getNewResourceUri()); 221 result.append("\", true);\n"); 222 } 223 224 Iterator i = getAllEntries().iterator(); 225 while (i.hasNext()) { 226 CmsExplorerContextMenuItem item = (CmsExplorerContextMenuItem)i.next(); 228 result.append("addMenuEntry("); 229 if (isMultiMenu()) { 230 result.append("'multi'"); 231 } else { 232 result.append(resTypeId); 233 } 234 result.append(", "); 235 if (CmsExplorerContextMenuItem.TYPE_ENTRY.equals(item.getType())) { 236 result.append("\"").append(messages.key(item.getKey())).append("\", "); 238 result.append("\""); 239 if (item.getUri().startsWith("/")) { 240 result.append(OpenCms.getLinkManager().substituteLink(cms, item.getUri())); 241 } else { 242 result.append(jspWorkplaceUri); 243 result.append(item.getUri()); 244 } 245 246 result.append("\", "); 247 String target = item.getTarget(); 249 if (target == null) { 250 target = ""; 251 } 252 result.append("\"'"); 253 result.append(target); 254 result.append("'\", "); 255 String rules = CmsStringUtil.substitute(item.getRules(), " ", ""); 257 rules = parseRules(rules, item.getKey()); 259 result.append("\""); 260 result.append(rules); 261 result.append("\");\n"); 262 } else { 264 result.append("\"-\", \" \", \"''\", \"\");\n"); 266 } 268 } 269 entries = result.toString(); 270 m_generatedScripts.put(messages.getLocale(), entries); 272 } 273 274 if (!isMultiMenu()) { 275 CmsPermissionSet permissions = settings.getAccess().getPermissions(cms); 277 if (!permissions.requiresWritePermission()) { 278 entries += "vi.resource[" + resTypeId + "].editable = false;\n"; 280 } 281 } 282 283 return entries; 284 } 285 286 291 public boolean isEmpty() { 292 293 boolean empty = true; 294 if (m_allEntries.size() > 0) { 295 empty = false; 296 } 297 return empty; 298 } 299 300 305 public boolean isMultiMenu() { 306 307 return m_multiMenu; 308 } 309 310 317 public void setAllEntries(List entries) { 318 319 m_allEntries = entries; 320 sortEntries(); 321 } 322 323 328 public void setMultiMenu(boolean multiMenu) { 329 330 m_multiMenu = multiMenu; 331 } 332 333 336 public void sortEntries() { 337 338 Collections.sort(m_allEntries); 339 } 340 341 348 private String parseRules(String rules, String key) { 349 350 if (CmsStringUtil.isEmptyOrWhitespaceOnly(rules)) { 351 return ""; 352 } 353 StringBuffer newRules = new StringBuffer (rules.length() + 4); 354 newRules.append(rules.substring(0, 6)); 355 if (Messages.GUI_EXPLORER_CONTEXT_LOCK_0.equalsIgnoreCase(key) 356 || Messages.GUI_EXPLORER_CONTEXT_UNLOCK_0.equalsIgnoreCase(key)) { 357 newRules.append(rules.substring(2, 6)); 359 } else { 360 newRules.append(rules.substring(6, 10)); 362 } 363 newRules.append(rules.substring(6)); 364 return newRules.toString(); 365 } 366 } | Popular Tags |