1 20 21 package com.fredck.FCKeditor.connector; 22 23 import java.io.*; 24 import javax.servlet.*; 25 import javax.servlet.http.*; 26 import java.util.*; 27 28 29 import org.apache.commons.fileupload.*; 30 31 32 import javax.xml.parsers.*; 33 import org.w3c.dom.*; 34 import javax.xml.transform.*; 35 import javax.xml.transform.dom.DOMSource ; 36 import javax.xml.transform.stream.StreamResult ; 37 38 import com.Yasna.forum.Authorization; 39 import com.Yasna.forum.util.SkinUtils; 40 41 42 56 57 public class ConnectorServlet extends HttpServlet { 58 59 private static String baseDir; 60 private static boolean debug=false; 61 62 68 public void init() throws ServletException { 69 baseDir=getInitParameter("baseDir"); 70 debug=(new Boolean (getInitParameter("debug"))).booleanValue(); 71 if(baseDir==null) 72 baseDir="/UserFiles/"; 73 String realBaseDir=getServletContext().getRealPath(baseDir); 74 File baseFile=new File(realBaseDir); 75 if(!baseFile.exists()){ 76 baseFile.mkdir(); 77 } 78 } 79 80 88 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 89 90 if (debug) System.out.println("--- BEGIN DOGET ---"); 91 92 response.setContentType("text/xml; charset=UTF-8"); 93 response.setHeader("Cache-Control","no-cache"); 94 PrintWriter out = response.getWriter(); 95 96 Authorization authToken = SkinUtils.getUserAuthorization(request,response); 97 String userdir=request.getRemoteAddr(); 98 if( authToken != null ) { 99 userdir = Integer.toString(authToken.getUserID()); 100 } 101 String realBaseDir=getServletContext().getRealPath(baseDir+userdir); 102 File baseFile=new File(realBaseDir); 103 if(!baseFile.exists()){ 104 baseFile.mkdir(); 105 } 106 107 108 String commandStr=request.getParameter("Command"); 109 String typeStr=request.getParameter("Type"); 110 String currentFolderStr=request.getParameter("CurrentFolder"); 111 112 String currentPath=baseDir+userdir+"/"+typeStr+currentFolderStr; 113 String currentDirPath=getServletContext().getRealPath(currentPath); 114 115 File currentDir=new File(currentDirPath); 116 if(!currentDir.exists()){ 117 currentDir.mkdir(); 118 } 119 120 Document document=null; 121 try { 122 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 123 DocumentBuilder builder = factory.newDocumentBuilder(); 124 document=builder.newDocument(); 125 } catch (ParserConfigurationException pce) { 126 pce.printStackTrace(); 127 } 128 129 Node root=CreateCommonXml(document,commandStr,typeStr,currentFolderStr,request.getContextPath()+currentPath); 130 131 if (debug) System.out.println("Command = " + commandStr); 132 133 if(commandStr.equals("GetFolders")) { 134 getFolders(currentDir,root,document); 135 } 136 else if (commandStr.equals("GetFoldersAndFiles")) { 137 getFolders(currentDir,root,document); 138 getFiles(currentDir,root,document); 139 } 140 else if (commandStr.equals("CreateFolder")) { 141 String newFolderStr=request.getParameter("NewFolderName"); 142 File newFolder=new File(currentDir,newFolderStr); 143 String retValue="110"; 144 145 if(newFolder.exists()){ 146 retValue="101"; 147 } 148 else { 149 try { 150 boolean dirCreated = newFolder.mkdir(); 151 if(dirCreated) 152 retValue="0"; 153 else 154 retValue="102"; 155 }catch(SecurityException sex) { 156 retValue="103"; 157 } 158 159 } 160 setCreateFolderResponse(retValue,root,document); 161 } 162 163 document.getDocumentElement().normalize(); 164 try { 165 TransformerFactory tFactory = TransformerFactory.newInstance(); 166 Transformer transformer = tFactory.newTransformer(); 167 168 DOMSource source = new DOMSource (document); 169 170 StreamResult result = new StreamResult (out); 171 transformer.transform(source, result); 172 173 if (debug) { 174 StreamResult dbgResult = new StreamResult (System.out); 175 transformer.transform(source, dbgResult); 176 System.out.println(""); 177 System.out.println("--- END DOGET ---"); 178 } 179 180 181 } catch (Exception ex) { 182 ex.printStackTrace(); 183 } 184 185 186 out.flush(); 187 out.close(); 188 } 189 190 191 200 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 201 202 if (debug) System.out.println("--- BEGIN DOPOST ---"); 203 Authorization authToken = SkinUtils.getUserAuthorization(request,response); 204 String userdir=request.getRemoteAddr(); 205 if( authToken != null ) { 206 userdir = Integer.toString(authToken.getUserID()); 207 } 208 String realBaseDir=getServletContext().getRealPath(baseDir+userdir); 209 File baseFile=new File(realBaseDir); 210 if(!baseFile.exists()){ 211 baseFile.mkdir(); 212 } 213 214 response.setContentType("text/html; charset=UTF-8"); 215 response.setHeader("Cache-Control","no-cache"); 216 PrintWriter out = response.getWriter(); 217 218 String commandStr=request.getParameter("Command"); 219 String typeStr=request.getParameter("Type"); 220 String currentFolderStr=request.getParameter("CurrentFolder"); 221 222 String currentPath=baseDir+userdir+"/"+typeStr+currentFolderStr; 223 String currentDirPath=getServletContext().getRealPath(currentPath); 224 225 if (debug) System.out.println(currentDirPath); 226 227 String retVal="0"; 228 String newName=""; 229 230 if(!commandStr.equals("FileUpload")) 231 retVal="203"; 232 else { 233 DiskFileUpload upload = new DiskFileUpload(); 234 try { 235 List items = upload.parseRequest(request); 236 237 Map fields=new HashMap(); 238 239 Iterator iter = items.iterator(); 240 while (iter.hasNext()) { 241 FileItem item = (FileItem) iter.next(); 242 if (item.isFormField()) 243 fields.put(item.getFieldName(),item.getString()); 244 else 245 fields.put(item.getFieldName(),item); 246 } 247 FileItem uplFile=(FileItem)fields.get("NewFile"); 248 String fileNameLong=uplFile.getName(); 249 fileNameLong=fileNameLong.replace('\\','/'); 250 String [] pathParts=fileNameLong.split("/"); 251 String fileName=pathParts[pathParts.length-1]; 252 253 String nameWithoutExt=getNameWithoutExtension(fileName); 254 String ext=getExtension(fileName); 255 File pathToSave=new File(currentDirPath,fileName); 256 int counter=1; 257 while(pathToSave.exists()){ 258 newName=nameWithoutExt+"("+counter+")"+"."+ext; 259 retVal="201"; 260 pathToSave=new File(currentDirPath,newName); 261 counter++; 262 } 263 uplFile.write(pathToSave); 264 }catch (Exception ex) { 265 retVal="203"; 266 } 267 268 } 269 270 out.println("<script type=\"text/javascript\">"); 271 out.println("window.parent.frames['frmUpload'].OnUploadCompleted("+retVal+",'"+newName+"');"); 272 out.println("</script>"); 273 out.flush(); 274 out.close(); 275 276 if (debug) System.out.println("--- END DOPOST ---"); 277 278 } 279 280 private void setCreateFolderResponse(String retValue,Node root,Document doc) { 281 Element myEl=doc.createElement("Error"); 282 myEl.setAttribute("number",retValue); 283 root.appendChild(myEl); 284 } 285 286 287 private void getFolders(File dir,Node root,Document doc) { 288 Element folders=doc.createElement("Folders"); 289 root.appendChild(folders); 290 File[] fileList=dir.listFiles(); 291 for(int i=0;i<fileList.length;++i) { 292 if(fileList[i].isDirectory()){ 293 Element myEl=doc.createElement("Folder"); 294 myEl.setAttribute("name",fileList[i].getName()); 295 folders.appendChild(myEl); 296 } 297 } 298 } 299 300 private void getFiles(File dir,Node root,Document doc) { 301 Element files=doc.createElement("Files"); 302 root.appendChild(files); 303 File[] fileList=dir.listFiles(); 304 for(int i=0;i<fileList.length;++i) { 305 if(fileList[i].isFile()){ 306 Element myEl=doc.createElement("File"); 307 myEl.setAttribute("name",fileList[i].getName()); 308 myEl.setAttribute("size",""+fileList[i].length()/1024); 309 files.appendChild(myEl); 310 } 311 } 312 } 313 314 private Node CreateCommonXml(Document doc,String commandStr, String typeStr, String currentPath, String currentUrl ) { 315 316 Element root=doc.createElement("Connector"); 317 doc.appendChild(root); 318 root.setAttribute("command",commandStr); 319 root.setAttribute("resourceType",typeStr); 320 321 Element myEl=doc.createElement("CurrentFolder"); 322 myEl.setAttribute("path",currentPath); 323 myEl.setAttribute("url",currentUrl); 324 root.appendChild(myEl); 325 326 return root; 327 328 } 329 330 333 private static String getNameWithoutExtension(String fileName) { 334 return fileName.substring(0, fileName.lastIndexOf(".")); 335 } 336 337 340 private String getExtension(String fileName) { 341 return fileName.substring(fileName.lastIndexOf(".")+1); 342 } 343 344 345 } 346 347 | Popular Tags |