View Javadoc

1   package fr.in2p3.jsaga.impl.file.stream;
2   
3   import fr.in2p3.jsaga.impl.task.AbstractThreadedTask;
4   import org.ogf.saga.SagaObject;
5   import org.ogf.saga.error.*;
6   import org.ogf.saga.file.FileInputStream;
7   import org.ogf.saga.session.Session;
8   import org.ogf.saga.task.Task;
9   import org.ogf.saga.task.TaskMode;
10  
11  import java.io.IOException;
12  import java.util.UUID;
13  
14  /* ***************************************************
15  * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
16  * ***             http://cc.in2p3.fr/             ***
17  * ***************************************************
18  * File:   AbstractAsyncFileInputStreamImpl
19  * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
20  * Date:   19 mars 2008
21  * ***************************************************
22  * Description:                                      */
23  /**
24   *
25   */
26  public abstract class AbstractAsyncFileInputStreamImpl extends FileInputStream {
27      private Session m_session;
28      private UUID m_uuid;
29  
30      /** constructor */
31      public AbstractAsyncFileInputStreamImpl(Session session) {
32          m_session = session;
33          m_uuid = UUID.randomUUID();
34      }
35  
36      /** clone */
37      public SagaObject clone() throws CloneNotSupportedException {
38          AbstractAsyncFileInputStreamImpl clone = (AbstractAsyncFileInputStreamImpl) super.clone();
39          clone.m_session = m_session;
40          clone.m_uuid = UUID.randomUUID();
41          return clone;
42      }
43  
44      /////////////////////////////////// interface SagaObject ////////////////////////////////////
45  
46      public Session getSession() throws DoesNotExistException {
47          if (m_session != null) {
48              return m_session;
49          } else {
50              throw new DoesNotExistException("This object does not have a session attached", this);
51          }
52      }
53  
54      public String getId() {
55          return m_uuid.toString();
56      }
57  
58      ///////////////////////////////// interface FileInputStream /////////////////////////////////
59  
60      public Task<FileInputStream, Integer> read(TaskMode mode) throws NotImplementedException {
61          return new AbstractThreadedTask<FileInputStream,Integer>(mode) {
62              public Integer invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
63                  try {
64                      return AbstractAsyncFileInputStreamImpl.this.read();
65                  } catch (IOException e) {
66                      throw new NoSuccessException(e);
67                  }
68              }
69          };
70      }
71  
72      public Task<FileInputStream, Integer> read(TaskMode mode, final byte[] buf, final int off, final int len) throws NotImplementedException {
73          return new AbstractThreadedTask<FileInputStream,Integer>(mode) {
74              public Integer invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
75                  try {
76                      return AbstractAsyncFileInputStreamImpl.this.read(buf, off, len);
77                  } catch (IOException e) {
78                      throw new NoSuccessException(e);
79                  }
80              }
81          };
82      }
83  
84      public Task<FileInputStream, Long> skip(TaskMode mode, final long n) throws NotImplementedException {
85          return new AbstractThreadedTask<FileInputStream,Long>(mode) {
86              public Long invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
87                  try {
88                      return AbstractAsyncFileInputStreamImpl.this.skip(n);
89                  } catch (IOException e) {
90                      throw new NoSuccessException(e);
91                  }
92              }
93          };
94      }
95  
96      public Task<FileInputStream, Integer> available(TaskMode mode) throws NotImplementedException {
97          return new AbstractThreadedTask<FileInputStream,Integer>(mode) {
98              public Integer invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
99                  try {
100                     return AbstractAsyncFileInputStreamImpl.this.available();
101                 } catch (IOException e) {
102                     throw new NoSuccessException(e);
103                 }
104             }
105         };
106     }
107 
108     public Task<FileInputStream, Void> close(TaskMode mode) throws NotImplementedException {
109         return new AbstractThreadedTask<FileInputStream,Void>(mode) {
110             public Void invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
111                 try {
112                     AbstractAsyncFileInputStreamImpl.this.close();
113                     return null;
114                 } catch (IOException e) {
115                     throw new NoSuccessException(e);
116                 }
117             }
118         };
119     }
120 
121     public Task<FileInputStream, Void> mark(TaskMode mode, final int readlimit) throws NotImplementedException {
122         return new AbstractThreadedTask<FileInputStream,Void>(mode) {
123             public Void invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
124                 AbstractAsyncFileInputStreamImpl.this.mark(readlimit);
125                 return null;
126             }
127         };
128     }
129 
130     public Task<FileInputStream, Void> reset(TaskMode mode) throws NotImplementedException {
131         return new AbstractThreadedTask<FileInputStream,Void>(mode) {
132             public Void invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
133                 try {
134                     AbstractAsyncFileInputStreamImpl.this.reset();
135                     return null;
136                 } catch (IOException e) {
137                     throw new NoSuccessException(e);
138                 }
139             }
140         };
141     }
142 
143     public Task<FileInputStream, Boolean> markSupported(TaskMode mode) throws NotImplementedException {
144         return new AbstractThreadedTask<FileInputStream,Boolean>(mode) {
145             public Boolean invoke() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, IncorrectStateException, AlreadyExistsException, DoesNotExistException, TimeoutException, NoSuccessException {
146                 return AbstractAsyncFileInputStreamImpl.this.markSupported();
147             }
148         };
149     }
150 }