1 /* 2 * FCKeditor - The text editor for Internet - http://www.fckeditor.net 3 * Copyright (C) 2004-2009 Frederico Caldeira Knabben 4 * 5 * == BEGIN LICENSE == 6 * 7 * Licensed under the terms of any of the following licenses at your 8 * choice: 9 * 10 * - GNU General Public License Version 2 or later (the "GPL") 11 * http://www.gnu.org/licenses/gpl.html 12 * 13 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") 14 * http://www.gnu.org/licenses/lgpl.html 15 * 16 * - Mozilla Public License Version 1.1 or later (the "MPL") 17 * http://www.mozilla.org/MPL/MPL-1.1.html 18 * 19 * == END LICENSE == 20 */ 21 package net.fckeditor.handlers; 22 23 import javax.servlet.http.HttpServletRequest; 24 25 import net.fckeditor.connector.Connector; 26 import net.fckeditor.requestcycle.UserAction; 27 import net.fckeditor.requestcycle.UserPathBuilder; 28 import net.fckeditor.tool.Utils; 29 30 import org.slf4j.Logger; 31 import org.slf4j.LoggerFactory; 32 33 /** 34 * Handles the {@link UserAction} and {@link UserPathBuilder} interfaces. <br /> 35 * This class instantiates the the chosen implementations and acts as a proxy 36 * for their methods/access. 37 * 38 * @version $Id: RequestCycleHandler.java 3759 2009-06-22 20:02:26Z mosipov $ 39 */ 40 public class RequestCycleHandler { 41 private static final Logger logger = LoggerFactory 42 .getLogger(RequestCycleHandler.class); 43 private static UserAction userAction = null; 44 private static UserPathBuilder userPathBuilder = null; 45 46 static { 47 // If there are more objects to instantiate in future, we could solve 48 // the following by reflection! 49 50 // 1. try to instantiate the UserAction object 51 String className = PropertiesLoader.getUserActionImpl(); 52 if (Utils.isEmpty(className)) 53 logger.error("Empty UserAction implementation class name provided"); 54 else { 55 try { 56 Class<?> clazz = Class.forName(className); 57 userAction = (UserAction) clazz.newInstance(); 58 logger.info("UserAction initialized to {}", className); 59 } catch (Throwable e) { 60 logger.error("UserAction implementation {} could not be instantiated", className); 61 throw new RuntimeException("UserAction implementation " + className + " could not be instantiated", e); //$NON-NLS-1$ 62 } 63 } 64 65 // 2. try to instantiate the UserPathBuilder object 66 className = PropertiesLoader.getUserPathBuilderImpl(); 67 if (Utils.isEmpty(className)) 68 logger.error("Empty UserPathBuilder implementation class name provided"); 69 else { 70 try { 71 Class<?> clazz = Class.forName(className); 72 userPathBuilder = (UserPathBuilder) clazz.newInstance(); 73 logger.info("UserPathBuilder initialized to {}", className); 74 } catch (Throwable e) { 75 logger.error("UserPathBuilder implementation {} could not be instantiated", className); 76 throw new RuntimeException("UserPathBuilder implementation " + className + " could not be instantiated", e); //$NON-NLS-1$ 77 } 78 } 79 } 80 81 /** 82 * Just a wrapper to 83 * {@link UserAction#isEnabledForFileBrowsing(HttpServletRequest)}. 84 * 85 * @return {@link UserAction#isEnabledForFileBrowsing(HttpServletRequest)} 86 * or false if {@link UserAction} isn't set. 87 * @see #isGetResourcesEnabled(HttpServletRequest) 88 * @deprecated Method will be removed in FCKeditor.Java 2.6, user 89 * {@link #isGetResourcesEnabled(HttpServletRequest)}. 90 */ 91 @Deprecated 92 public static boolean isEnabledForFileBrowsing( 93 final HttpServletRequest request) { 94 return (userAction != null && userAction 95 .isEnabledForFileBrowsing(request)); 96 } 97 98 /** 99 * Returns <code>true</code> if user is allowed to list resources. The 100 * behavior is specified by the current UserAction instance. 101 * 102 * @param request 103 * current user request instance 104 * @return true if user is allowed to list resources, false otherwise 105 * @see UserAction#isEnabledForFileBrowsing(HttpServletRequest) 106 */ 107 public static boolean isGetResourcesEnabled(final HttpServletRequest request) { 108 return userAction.isEnabledForFileBrowsing(request); 109 } 110 111 /** 112 * Just a wrapper to 113 * {@link UserAction#isEnabledForFileUpload(HttpServletRequest)}. 114 * 115 * @return {@link UserAction#isEnabledForFileUpload(HttpServletRequest)} or 116 * false if {@link UserAction} isn't set. 117 * @see #isFileUploadEnabled(HttpServletRequest) 118 * @deprecated Method will be removed in FCKeditor.Java 2.6, 119 * {@link #isFileUploadEnabled(HttpServletRequest)}. 120 */ 121 public static boolean isEnabledForFileUpload( 122 final HttpServletRequest request) { 123 return (userAction != null && userAction 124 .isEnabledForFileUpload(request)); 125 } 126 127 /** 128 * Returns <code>true</code> if user is allowed to upload files. The 129 * behavior is specified by the current UserAction instance. 130 * 131 * @param request 132 * current user request instance 133 * @return true if user is allowed to upload files, false otherwise 134 * @see UserAction#isEnabledForFileUpload(HttpServletRequest) 135 */ 136 public static boolean isFileUploadEnabled(HttpServletRequest request) { 137 return userAction.isEnabledForFileUpload(request); 138 } 139 140 /** 141 * Returns <code>true</code> if user is allowed to create folders. The 142 * behavior is specified by the current UserAction instance. 143 * 144 * @param request 145 * current user request instance 146 * @return true if user is allowed to create folders, false otherwise 147 * @see UserAction#isEnabledForFileBrowsing(HttpServletRequest) 148 */ 149 public static boolean isCreateFolderEnabled(final HttpServletRequest request) { 150 return userAction.isCreateFolderEnabled(request); 151 } 152 153 /** 154 * Returns the current userfiles path. The path is specified by the current 155 * UserPathBuilder instance. 156 * 157 * @param request 158 * current user request instance 159 * @return current userfiles path 160 * @see UserPathBuilder#getUserFilesPath(HttpServletRequest) 161 */ 162 public static String getUserFilesPath(final HttpServletRequest request) { 163 return userPathBuilder.getUserFilesPath(request); 164 } 165 166 /** 167 * Returns the current absolute userfiles path. The path is specified by the 168 * current UserPathBuilder instance. <br /> 169 * Note that the path is absolute to the underlying system of the current 170 * {@link Connector} instance. 171 * 172 * @param request 173 * current user request instance 174 * @return current absolute userfiles path 175 * @see UserPathBuilder#getUserFilesAbsolutePath(HttpServletRequest) 176 */ 177 public static String getUserFilesAbsolutePath(final HttpServletRequest request) { 178 return userPathBuilder.getUserFilesAbsolutePath(request); 179 } 180 }