View Javadoc
1   package org.apache.maven.archetype.proxy;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  import java.io.FileInputStream;
24  import java.io.FileNotFoundException;
25  import java.io.FileWriter;
26  import java.io.IOException;
27  import java.io.InputStream;
28  import java.io.PrintWriter;
29  import java.io.StringWriter;
30  import javax.servlet.ServletConfig;
31  import javax.servlet.ServletContext;
32  import javax.servlet.ServletException;
33  import javax.servlet.ServletRequest;
34  import javax.servlet.ServletResponse;
35  import javax.servlet.http.HttpServlet;
36  import javax.servlet.http.HttpServletRequest;
37  import javax.servlet.http.HttpServletResponse;
38  import org.mortbay.util.IO;
39  import org.mortbay.util.StringUtil;
40  
41  /**
42   *
43   * @author rafale
44   */
45  public class RepositoryServlet
46      extends HttpServlet
47  {
48      private ServletConfig config;
49  
50      private ServletContext context;
51  
52      /*
53       * (non-Javadoc)
54       * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
55       */
56      public void init( ServletConfig config )
57          throws ServletException
58      {
59          this.config = config;
60          this.context = config.getServletContext();
61      }
62  
63      /*
64       * (non-Javadoc)
65       * @see javax.servlet.Servlet#getServletConfig()
66       */
67      public ServletConfig getServletConfig()
68      {
69          return config;
70      }
71  
72      /*
73       * (non-Javadoc)
74       * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
75       */
76      public void service( ServletRequest req, ServletResponse res )
77          throws ServletException
78      {
79          HttpServletRequest request = (HttpServletRequest) req;
80          HttpServletResponse response = (HttpServletResponse) res;
81  
82          // log( "A = " + request.getAuthType() );
83          // log( "A = " + request.getCharacterEncoding() );
84          // log( "A = " + request.getContentType() );
85          // log( "B = " + request.getContextPath() );
86          // log( "B = " + request.getLocalAddr() );
87          // log( "B = " + request.getLocalName() );
88          // log( "C = " + request.getMethod() );
89          // log( "C = " + request.getPathInfo() );
90          // log( "C = " + request.getPathTranslated() );
91          // log( "D = " + request.getProtocol() );
92          // log( "D = " + request.getQueryString() );
93          // log( "D = " + request.getRemoteAddr() );
94          // log( "E = " + request.getRemoteHost() );
95          // log( "E = " + request.getRemoteUser() );
96          // log( "E = " + request.getRequestURI() );
97          // log( "F = " + request.getRequestedSessionId() );
98          // log( "F = " + request.getScheme() );
99          // log( "F = " + request.getServerName() );
100         // log( "G = " + request.getServletPath() );
101         // log( "G = " + request.getAttributeNames() );
102         // log( "G = " + request.getCookies() );
103         // log( "H = " + request.getHeaderNames() );
104 
105         // log( "H = " + request.get );
106         // log( "H = " + request.get );
107         // log( "I = " + request.get );
108         // log( "I = " + request.get );
109         // log( "I = " + request.get );
110         // log( "J = " + request.get );
111         // log( "J = " + request.get );
112         // log( "J = " + request.get );
113         // log( "K = " + request.get );
114         // log( "K = " + request.get );
115         // log( "K = " + request.get );
116 
117         response.setHeader( "Date", null );
118         response.setHeader( "Server", null );
119 
120         log( "Proxy Requested file = " + request.getRequestURI() );
121         String filePath =
122             System.getProperty( "org.apache.maven.archetype.repository.directory" ).trim() + "/"
123                 + request.getRequestURI();
124         filePath = StringUtil.replace( filePath, "\\", "/" );
125         filePath = StringUtil.replace( filePath, "/", File.separator );
126         log( "Complete file path = " + filePath );
127 
128         String method = request.getMethod();
129 
130         if ( "GET".equalsIgnoreCase( method ) )
131         {
132             log( "Getting file" );
133             try
134             {
135                 File requestedFile = new File( filePath );
136 
137                 InputStream is = new FileInputStream( requestedFile );
138 
139                 if ( is != null )
140                 {
141                     IO.copy( is, response.getOutputStream() );
142                     response.setStatus( HttpServletResponse.SC_OK );
143                     log( "File sent" );
144                 }
145                 else
146                 {
147                     log( "Can not send file no content" );
148                 }
149             }
150             catch ( FileNotFoundException fileNotFoundException )
151             {
152                 response.setStatus( HttpServletResponse.SC_NOT_FOUND );
153                 log( "Requested file not found ", fileNotFoundException );
154             }
155             catch ( IOException iOException )
156             {
157                 response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
158                 log( "Can not send file", iOException );
159             }
160         }
161         else if ( "PUT".equalsIgnoreCase( method ) )
162         {
163             log( "Putting file" );
164             File uploadedFile = new File( filePath );
165             if ( uploadedFile.exists() )
166             {
167                 uploadedFile.delete();
168                 log( "Removed old file" );
169             }
170             else if ( !uploadedFile.getParentFile().exists() )
171             {
172                 uploadedFile.getParentFile().mkdirs();
173                 log( "Created directory " + uploadedFile.getParent() );
174             }
175 
176             try
177             {
178                 FileWriter fw = new FileWriter( uploadedFile );
179                 IO.copy( request.getReader(), fw );
180                 response.setStatus( HttpServletResponse.SC_OK );
181                 log( "File copied" );
182             }
183             catch ( IOException iOException )
184             {
185 
186                 response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
187                 log( "Can not send file", iOException );
188             }
189         }
190         else
191         {
192 
193             response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
194             try
195             {
196                 log( "Method " + request.getMethod() );
197                 log( "ContextPath " + request.getContextPath() );
198                 log( "QueryString" + request.getQueryString() );
199                 log( "PathInfo " + request.getPathInfo() );
200                 log( "ServletPath " + request.getServletPath() );
201                 log( "AttributeNames " + request.getAttributeNames().toString() );
202                 log( "HeaderNames " + request.getHeaderNames().toString() );
203                 log( "RequestURL " + request.getRequestURL().toString() );
204                 log( "ParameterNames " + request.getParameterNames().toString() );
205                 StringWriter w = new StringWriter();
206                 IO.copy( request.getReader(), w );
207                 log( "Content " + w.toString() );
208             }
209             catch ( IOException iOException )
210             {
211                 log( "Error in unnknown method", iOException );
212             }
213         }
214     }
215 
216     /*
217      * (non-Javadoc)
218      * @see javax.servlet.Servlet#getServletInfo()
219      */
220     public String getServletInfo()
221     {
222         return "Repository Servlet";
223     }
224 
225     /*
226      * (non-Javadoc)
227      * @see javax.servlet.Servlet#destroy()
228      */
229     public void destroy()
230     {
231     }
232 
233     /**
234      * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
235      * 
236      * @param request servlet request
237      * @param response servlet response
238      */
239     protected void processRequest( HttpServletRequest request, HttpServletResponse response )
240         throws ServletException, IOException
241     {
242         response.setContentType( "text/html;charset=UTF-8" );
243         PrintWriter out = response.getWriter();
244         try
245         {
246             /*
247              * TODO output your page here out.println("<html>"); out.println("<head>");
248              * out.println("<title>Servlet RepositoryServlet</title>"); out.println("</head>"); out.println("<body>");
249              * out.println("<h1>Servlet RepositoryServlet at " + request.getContextPath () + "</h1>");
250              * out.println("</body>"); out.println("</html>");
251              */
252         }
253         finally
254         {
255             out.close();
256         }
257     }
258 
259     public String getServletName()
260     {
261         return "Repository Servlet";
262     }
263 
264 }