View Javadoc

1   /*$Id: VoSpaceClientWorkflowStore.java,v 1.3 2005/04/26 15:28:46 clq2 Exp $
2    * Created on 14-Apr-2004
3    *
4    * Copyright (C) AstroGrid. All rights reserved.
5    *
6    * This software is published under the terms of the AstroGrid 
7    * Software License version 1.2, a copy of which has been included 
8    * with this distribution in the LICENSE.txt file.  
9    *
10  **/
11  package org.astrogrid.portal.workflow.impl;
12  
13  import org.astrogrid.community.User;
14  import org.astrogrid.community.common.exception.CommunityException;
15  import org.astrogrid.filemanager.client.FileManagerClient;
16  import org.astrogrid.filemanager.client.FileManagerClientFactory;
17  import org.astrogrid.filemanager.client.FileManagerNode;
18  import org.astrogrid.filemanager.common.BundlePreferences;
19  import org.astrogrid.portal.workflow.intf.WorkflowInterfaceException;
20  import org.astrogrid.portal.workflow.intf.WorkflowStore;
21  import org.astrogrid.registry.RegistryException;
22  import org.astrogrid.store.Ivorn;
23  import org.astrogrid.workflow.beans.v1.Workflow;
24  
25  import org.exolab.castor.xml.CastorException;
26  
27  import java.io.IOException;
28  import java.io.InputStream;
29  import java.io.InputStreamReader;
30  import java.io.OutputStream;
31  import java.io.OutputStreamWriter;
32  import java.net.URISyntaxException;
33  
34  /*** Implementation of a workflow store
35   * @author Noel Winstanley nw@jb.man.ac.uk 14-Apr-2004
36   *
37   */
38  public class VoSpaceClientWorkflowStore implements WorkflowStore {
39      /*** Construct a new VoSpaceClientWorkflowStore
40       * 
41       */
42      public VoSpaceClientWorkflowStore() {
43          super();
44          this.factory = new FileManagerClientFactory(NO_PREFETCH_POLICY);        
45      }
46      protected final FileManagerClientFactory factory;
47      /*** there's no point prefetching stuff - as we're just going to be reading / writing to a single ivorn location */
48      private static final BundlePreferences NO_PREFETCH_POLICY = new BundlePreferences();
49      static {
50          NO_PREFETCH_POLICY.setFetchParents(false);
51          NO_PREFETCH_POLICY.setMaxExtraNodes(new Integer(0));
52          NO_PREFETCH_POLICY.setPrefetchDepth(new Integer(0));
53      }
54      /***
55       * @see org.astrogrid.portal.workflow.intf.WorkflowStore#readWorkflow(org.astrogrid.community.User, org.astrogrid.store.Ivorn)
56       */
57      public Workflow readWorkflow(User user, Ivorn locationToReadFrom) throws WorkflowInterfaceException {
58          try {
59              // @todo can't work out how to convert from User to ivorn - so will login anonymously for now, and hope this suffices. 
60              FileManagerClient client = factory.login();
61              //client.
62             FileManagerNode target = client.node(locationToReadFrom);
63             InputStream is= target.readContent();
64              return Workflow.unmarshalWorkflow(new InputStreamReader(is));
65           } catch (Exception e) {
66               throw new WorkflowInterfaceException("ReadWorkflow",e);
67          } 
68          
69      }
70      /***
71       * @see org.astrogrid.portal.workflow.intf.WorkflowStore#readWorkflow(org.astrogrid.store.Ivorn, java.lang.String, org.astrogrid.store.Ivorn)
72       */
73      public Workflow readWorkflow(Ivorn userId, String password, Ivorn locationToReadFrom) throws WorkflowInterfaceException {
74          try {
75              FileManagerClient client = factory.login(userId,password);
76              FileManagerNode target = client.node(locationToReadFrom);
77              InputStream is= target.readContent();
78              return Workflow.unmarshalWorkflow(new InputStreamReader(is));
79           } catch (Exception e) {
80               throw new WorkflowInterfaceException("ReadWorkflow",e);
81          }             
82      }  
83      
84      /***
85       * @see org.astrogrid.portal.workflow.intf.WorkflowStore#readWorkflow(org.astrogrid.filemanager.client.FileManagerClient, org.astrogrid.store.Ivorn)
86       */
87      public Workflow readWorkflow( FileManagerClient fmc, Ivorn locationToReadFrom) throws WorkflowInterfaceException {
88          try {
89              FileManagerNode target = fmc.node(locationToReadFrom);
90              InputStream is= target.readContent();
91              return Workflow.unmarshalWorkflow(new InputStreamReader(is));
92           } catch (Exception e) {
93               throw new WorkflowInterfaceException("ReadWorkflow",e);
94          }             
95      }    
96      
97      /***
98       * @see org.astrogrid.portal.workflow.intf.WorkflowStore#saveWorkflow(org.astrogrid.community.User, org.astrogrid.store.Ivorn, org.astrogrid.workflow.beans.v1.Workflow)
99       */
100     public void saveWorkflow(User user, Ivorn locationToSaveTo, Workflow workflow) throws WorkflowInterfaceException {
101         OutputStream os = null;
102         try {
103             // @todo can't work out how to convert from User to ivorn - so will login anonymously for now, and hope this suffices. 
104              FileManagerClient client = factory.login();
105              FileManagerNode target;             
106              if (client.exists(locationToSaveTo) != null) {
107                  target = client.node(locationToSaveTo);
108              } else { // create it
109                  target = client.createFile(locationToSaveTo);
110              }             
111             os = target.writeContent();
112             workflow.marshal(new OutputStreamWriter(os));
113         } catch (Exception e) {
114             throw new WorkflowInterfaceException("SaveWorkflow",e);
115         } finally {
116             if (os != null) {
117                 try {
118                     os.close();
119                 } catch (IOException e) {
120                     // ignored
121                 }
122             }
123         }
124         
125     }
126 
127     /***
128      * @see org.astrogrid.portal.workflow.intf.WorkflowStore#saveWorkflow(org.astrogrid.store.Ivorn, java.lang.String, org.astrogrid.store.Ivorn, org.astrogrid.workflow.beans.v1.Workflow)
129      */
130     public void saveWorkflow(Ivorn userId, String password, Ivorn locationToSaveTo, Workflow workflow) throws WorkflowInterfaceException {
131         OutputStream os = null;
132         try {
133              FileManagerClient client = factory.login(userId,password);
134              FileManagerNode target;             
135              if (client.exists(locationToSaveTo) != null) {
136                  target = client.node(locationToSaveTo);
137              } else { // create it
138                  target = client.createFile(locationToSaveTo);
139              }             
140             os = target.writeContent();
141             workflow.marshal(new OutputStreamWriter(os));
142         } catch (Exception e) {
143             throw new WorkflowInterfaceException("SaveWorkflow",e);
144         } finally {
145             if (os != null) {
146                 try {
147                     os.close();
148                 } catch (IOException e) {
149                     // ignored
150                 }
151             }
152         }
153         
154     }
155     
156     
157     /***
158      * @see org.astrogrid.portal.workflow.intf.WorkflowStore#saveWorkflow(org.astrogrid.store.Ivorn, java.lang.String, org.astrogrid.store.Ivorn, org.astrogrid.workflow.beans.v1.Workflow)
159      */
160     public FileManagerNode saveWorkflow(FileManagerClient fmc, Ivorn locationToSaveTo, Workflow workflow) throws WorkflowInterfaceException {
161         OutputStream os = null;
162         FileManagerNode target = null ; 
163         try {
164             
165              if (fmc.exists(locationToSaveTo) != null) {
166                  target = fmc.node(locationToSaveTo);
167              } else { // create it
168                  target = fmc.createFile(locationToSaveTo);
169              }             
170             os = target.writeContent();
171             workflow.marshal(new OutputStreamWriter(os));
172         } catch (Exception e) {
173             throw new WorkflowInterfaceException("SaveWorkflow",e);
174         } finally {
175             if (os != null) {
176                 try {
177                     os.close();
178                 } catch (IOException e) {
179                     // ignored
180                 }
181             }
182         }
183         return target ;
184     }
185 }
186 
187 
188 /* 
189 $Log: VoSpaceClientWorkflowStore.java,v $
190 Revision 1.3  2005/04/26 15:28:46  clq2
191 jl_wor_1085
192 
193 Revision 1.2.20.1  2005/04/14 10:04:17  jl99
194 Read and write of workflows can now be passed an authenticated FileManagerClient.
195 
196 Revision 1.2  2005/03/13 07:13:39  clq2
197 merging jes-nww-686 common-nww-686 workflow-nww-996 scripting-nww-995 cea-nww-994
198 
199 Revision 1.1.142.1  2005/03/11 12:39:30  nw
200 replaced vospaceClient with FileManagerClient
201 
202 Revision 1.1  2004/04/14 13:45:48  nw
203 implemented cut down workflow store interface over Ivo Delegate
204  
205 */