001    /*
002     * This file is part of the Echo Point Project.  This project is a
003     * collection of Components that have extended the Echo Web Application
004     * Framework Version 3.
005     *
006     * Version: MPL 1.1
007     *
008     * The contents of this file are subject to the Mozilla Public License Version
009     * 1.1 (the "License"); you may not use this file except in compliance with
010     * the License. You may obtain a copy of the License at
011     * http://www.mozilla.org/MPL/
012     *
013     * Software distributed under the License is distributed on an "AS IS" basis,
014     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
015     * for the specific language governing rights and limitations under the
016     * License.
017     */
018    package echopoint.tucana.event;
019    
020    import echopoint.tucana.FileUploadSelector;
021    
022    import java.util.logging.Level;
023    import java.util.logging.Logger;
024    
025    /**
026     * An adapter class for the {@link UploadCallback} interface.
027     *
028     * <p><b>Note:</b> Development of this component was sponsored by <a
029     * href='http://tcnbroadcasting.com/index.jsp' target='_top'>TCN
030     * Broadcasting</a>.  We are grateful for their support and sponsorship.</p>
031     *
032     * @author Rakesh Vidyadharan 2008-11-4
033     * @version $Id: UploadCallbackAdapter.java 106 2009-02-03 16:00:33Z sptrakesh $
034     */
035    public class UploadCallbackAdapter implements UploadCallback
036    {
037      private static final long serialVersionUID = 1l;
038    
039      /** The logger used to log events. */
040      protected static final Logger logger = Logger.getAnonymousLogger();
041    
042      /** The logging level to use. */
043      protected Level level;
044    
045      /** The last upload event that was received. */
046      protected UploadEvent event;
047    
048      /** The current upload index being processed. */
049      protected String uploadIndex = "";
050    
051      /**
052       * Default constructor. Sets logging level to {@link
053       * java.util.logging.Level#FINE}.
054       */
055      public UploadCallbackAdapter()
056      {
057        this.level = Level.FINE;
058      }
059    
060      /**
061       * Create a new instance with the specified logging level.
062       *
063       * @param level The logging level to set.
064       */
065      public UploadCallbackAdapter( final Level level )
066      {
067        this.level = level;
068      }
069    
070      /**
071       * Indicates a file upload has been started.
072       *
073       * @param event the event
074       */
075      public void uploadStarted( final UploadStartEvent event )
076      {
077        this.uploadIndex = event.getIndex();
078        this.event = event;
079        logger.log( level, "Upload started for event: " + event.getIndex() +
080            " fileName: " + event.getFileName() +
081            " contentType: " + event.getContentType() );
082      }
083    
084      /**
085       * Indicates a file upload has been canceled.
086       *
087       * @param event the event
088       */
089      public void uploadCancelled( final UploadCancelEvent event )
090      {
091        this.event = event;
092        logger.log( level, "Upload cancelled for event: " + event.getIndex() +
093            " fileName: " + event.getFileName() +
094            " contentType: " + event.getContentType(), event.getException() );
095        ( (FileUploadSelector) event.getSource() ).removeTaskQueue();
096      }
097    
098      /**
099       * Indicates that a file upload was rejected by the server since the client
100       * attempted to send restricted content.
101       *
102       * @param event The event that was generated.
103       */
104      public void uploadDisallowed( final InvalidContentTypeEvent event )
105      {
106        this.event = event;
107        logger.log( level, "Upload disallowed for event: " + event.getIndex() +
108            " fileName: " + event.getFileName() +
109            "with contentType: " + event.getContentType() +
110            " is not of allowed type." );
111        ( (FileUploadSelector) event.getSource() ).removeTaskQueue();
112      }
113    
114      /**
115       * Indicates a file upload has progressed.
116       *
117       * @param event the event
118       */
119      public void uploadProgressed( final UploadProgressEvent event )
120      {
121        if ( ( uploadIndex.equals( event.getIndex() ) ) &&
122          ( this.event instanceof UploadFinishEvent ) )
123        {
124          return;
125        }
126    
127        this.event = event;
128        logger.log( level, "Upload progress read bytes : "
129            + event.getProgress().getBytesRead() );
130      }
131    
132      /**
133       * Call back method invoked once an upload event completes.
134       *
135       * @param event The event that has completed.
136       */
137      public void uploadSucceeded( final UploadFinishEvent event )
138      {
139        this.event = event;
140        logger.log( level, "Upload completed for event: " + event.getIndex() +
141            " fileName: " + event.getFileName() + " size: " + event.getFileSize() +
142            " contentType: " + event.getContentType() );
143        ( (FileUploadSelector) event.getSource() ).removeTaskQueue();
144      }
145    
146      /**
147       * Call back method when an upload event fails.
148       *
149       * @param event The event that has failed.
150       */
151      public void uploadFailed( final UploadFailEvent event )
152      {
153        if ( ( uploadIndex.equals( event.getIndex() ) ) &&
154            ( this.event instanceof InvalidContentTypeEvent ) )
155        {
156          return;
157        }
158    
159        this.event = event;
160        logger.log( level, "Upload failed for event: " + event.getIndex(),
161            event.getException() );
162        ( (FileUploadSelector) event.getSource() ).removeTaskQueue();
163      }
164    
165      /**
166       * A convenience method to return the last event received by the callback
167       * handler.  Can be used to gain access to the input stream (provided it has
168       * not been closed).
169       *
170       * @return The upload event that was last processed by the handler.
171       */
172      public UploadEvent getEvent()
173      {
174        return this.event;
175      }
176    
177      /**
178       * Accessor for property 'level'.
179       *
180       * @return Value for property 'level'.
181       */
182      public Level getLevel()
183      {
184        return level;
185      }
186    
187      /**
188       * Mutator for property 'level'.
189       *
190       * @param level Value to set for property 'level'.
191       */
192      public void setLevel( final Level level )
193      {
194        this.level = level;
195      }
196    }