1
2
3
4
5
6
7
8
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
60 FileManagerClient client = factory.login();
61
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
104 FileManagerClient client = factory.login();
105 FileManagerNode target;
106 if (client.exists(locationToSaveTo) != null) {
107 target = client.node(locationToSaveTo);
108 } else {
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
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 {
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
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 {
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
180 }
181 }
182 }
183 return target ;
184 }
185 }
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205