1 package org.astrogrid.mySpace.mySpaceUtil;
2
3 import java.io.File;
4 import java.io.FileReader;
5 import java.util.Properties;
6 import java.text.MessageFormat;
7 import java.io.StringReader ;
8 import java.util.HashMap;
9 import java.util.Calendar;
10 import java.io.PrintWriter;
11 import java.io.FileOutputStream;
12
13 import javax.xml.parsers.*;
14 import org.w3c.dom.*;
15 import org.xml.sax.InputSource ;
16
17 import org.apache.log4j.Logger;
18
19 import org.astrogrid.mySpace.mySpaceStatus.MySpaceMessage;
20 import org.astrogrid.mySpace.mySpaceManager.DataItemRecord;
21 import org.astrogrid.mySpace.mySpaceStatus.*;
22 import org.astrogrid.mySpace.mySpaceManager.MMC;
23 import org.astrogrid.Configurator;
24 import org.astrogrid.i18n.*;
25
26 /***
27 * @author C L QIN
28 * @version Iteration 2.
29 */
30
31 public class MySpaceUtils {
32 private static Logger logger = Logger.getLogger(MySpaceUtils.class);
33 private static boolean DEBUG = true;
34 private static MySpaceStatus msstatus = new MySpaceStatus();
35 private static String response = " ";
36
37 public static String readFromFile( File file ) {
38 FileReader fileReader = null;
39 try{
40 if (file == null || !file.exists()) {
41
42 msstatus.addCode(MySpaceStatusCode.AGMSCE01047,MySpaceStatusCode.ERROR, MySpaceStatusCode.NOLOG, new MySpaceUtils().getComponentName());
43 response = MMC.FAULT+MySpaceStatusCode.AGMSCE01047;
44 return response;
45 }
46
47 fileReader = new FileReader(file);
48
49 StringBuffer strbufFileContent = new StringBuffer(8192);
50 char charFileText[] = new char[2048];
51
52 int iTotalCharactersRead = 0;
53 int iCharactersRead = 0;
54
55 while((iCharactersRead = fileReader.read(charFileText,0,2048)) != -1){
56
57 iTotalCharactersRead += iCharactersRead;
58
59
60 strbufFileContent.append(charFileText);
61 }
62
63
64 strbufFileContent.setLength(iTotalCharactersRead);
65
66
67 return strbufFileContent.toString();
68 }catch (Exception e) {
69 logger.error("Exception caught while reading from file MySpaceUtils.readFromFile: "+e.toString());
70 msstatus.addCode(MySpaceStatusCode.AGMMCE00103,MySpaceStatusCode.ERROR, MySpaceStatusCode.NOLOG, new MySpaceUtils().getComponentName());
71 response = MMC.FAULT+MySpaceStatusCode.AGMMCE00103;
72 return response;
73 }finally{
74 try{
75 if(fileReader != null){
76 fileReader.close();
77 }
78 }catch(Exception e){
79 return "";
80 }
81 }
82 }
83
84 public static boolean writeToFile( File file, String theString ){
85 PrintWriter printWriter = null;
86 try{
87
88 printWriter = new PrintWriter(new FileOutputStream(file));
89
90 printWriter.println(theString);
91 return true;
92 }catch (Exception e) {
93 return false;
94 }finally{
95
96 try{
97 if(printWriter != null) {
98 printWriter.close();
99 }
100 }catch(Exception e){
101 }
102 }
103 }
104
105 public String buildMySpaceManagerResponse(DataItemRecord record, String status, String details, String dataHolderURI){
106
107 String response = "";
108 try {
109 String requestTemplate = MMC.getProperty( MMC.RESPONSE, MMC.CATLOG) ;
110
111 if ( DEBUG ) logger.debug("testing using jConfig: "+requestTemplate);
112
113 if ( DEBUG ) logger.debug("buildMySpaceManagerResponse = "+requestTemplate);
114
115 Object [] inserts = new Object[12] ;
116 inserts[0] = status;
117 inserts[1] = details;
118 if(record != null){
119 inserts[2] = Calendar.getInstance().getTime();
120 inserts[3] = record.getDataItemName();
121 inserts[4] = new Integer(record.getDataItemID()).toString();
122 inserts[5] = record.getOwnerID();
123 inserts[6] = record.getCreationDate();
124 inserts[7] = record.getExpiryDate();
125 inserts[8] = new Integer(record.getSize()).toString();
126 inserts[9] = new Integer(record.getType()).toString();
127 inserts[10] = record.getPermissionsMask();
128 }
129 if (!dataHolderURI.equals(null)) inserts[11] = dataHolderURI;
130 if( DEBUG ) logger.debug("UTIL: DATAHOLDERURI ="+dataHolderURI);
131
132 response = MessageFormat.format( requestTemplate, inserts ) ;
133 return response;
134 }
135 catch ( Exception ex ) {
136 if (DEBUG) logger.error("MYSPACEUTILS ERROR_READING_FILE :" +ex.getMessage());
137 AstroGridMessage generalMessage = new AstroGridMessage( "AGMSCE00032", this.getComponentName()) ;
138 msstatus.addCode(MySpaceStatusCode.AGMMCE00103,MySpaceStatusCode.ERROR, MySpaceStatusCode.NOLOG, this.getComponentName());
139 response = MMC.FAULT+generalMessage.toString();
140 return response;
141 }
142
143 }
144
145 public String buildMySpaceManagerResponseFooter(){
146 String response = "";
147 try {
148 response = MMC.getProperty( MMC.D_RESPONSE_FOOT, MMC.CATLOG) ;
149
150 if ( DEBUG ) logger.debug("buildMySpaceManagerResponse_Footer = "+response);
151
152 return response;
153 }
154 catch ( Exception ex ) {
155 if (DEBUG) logger.error("MYSPACEUTILS ERROR_READING_FILE :" +ex.getMessage());
156 AstroGridMessage generalMessage = new AstroGridMessage( "AGMSCE00032", this.getComponentName()) ;
157 msstatus.addCode(MySpaceStatusCode.AGMMCE00103,MySpaceStatusCode.ERROR, MySpaceStatusCode.NOLOG, this.getComponentName());
158 response = MMC.FAULT+generalMessage.toString();
159 return response;
160 }
161
162 }
163
164 public String buildMySpaceManagerResponseHeader(String status, String details){
165 String response = "";
166 try {
167 String requestTemplate = MMC.getProperty( MMC.D_RESPONSE_HEAD, MMC.CATLOG) ;
168
169 if ( DEBUG ) logger.debug("buildMySpaceManagerResponse_Header = "+requestTemplate);
170
171 Object [] inserts = new Object[3] ;
172 inserts[0] = status;
173 inserts[1] = details;
174 inserts[2] = Calendar.getInstance().getTime();
175
176 response = MessageFormat.format( requestTemplate, inserts ) ;
177 return response;
178 }
179 catch ( Exception ex ) {
180 if (DEBUG) logger.error("MYSPACEUTILS ERROR_READING_FILE :" +ex.getMessage());
181 AstroGridMessage generalMessage = new AstroGridMessage( "AGMSCE00032", this.getComponentName()) ;
182 msstatus.addCode(MySpaceStatusCode.AGMMCE00103,MySpaceStatusCode.ERROR, MySpaceStatusCode.NOLOG, this.getComponentName());
183 response = MMC.FAULT+generalMessage.toString();
184 return response;
185 }
186
187 }
188
189 public String buildMySpaceManagerResponseElement(DataItemRecord record, String status, String details){
190
191 try {
192 String requestTemplate = MMC.getProperty( MMC.D_RESPONSE_ELEMENT, MMC.CATLOG) ;
193
194 if (DEBUG) logger.debug("buildMySpaceManagerResponse_Element = "+requestTemplate);
195
196 Object [] inserts = new Object[8] ;
197
198 if(record != null){
199 inserts[0] = record.getDataItemName();
200 inserts[1] = new Integer(record.getDataItemID()).toString();
201 inserts[2] = record.getOwnerID();
202 inserts[3] = record.getCreationDate();
203 inserts[4] = record.getExpiryDate();
204 inserts[5] = new Integer(record.getSize()).toString();
205 inserts[6] = new Integer(record.getType()).toString();
206 inserts[7] = record.getPermissionsMask();
207 }
208
209 response = MessageFormat.format( requestTemplate, inserts ) ;
210 return response;
211 }
212 catch ( Exception ex ) {
213 if (DEBUG) logger.error("MYSPACEUTILS ERROR_READING_FILE :" +ex.getMessage());
214 AstroGridMessage generalMessage = new AstroGridMessage( "AGMSCE00032", this.getComponentName()) ;
215 msstatus.addCode(MySpaceStatusCode.AGMMCE00103,MySpaceStatusCode.ERROR, MySpaceStatusCode.NOLOG, this.getComponentName());
216 response = MMC.FAULT+generalMessage.toString();
217 return response;
218 }
219
220 }
221
222 /***
223 * Returns a <code>HashMap</code> with key/value filled in regarding
224 * to the request template.
225 * <p>
226 * @param xmlRequest: Xml Request template with filled parameters.
227 */
228
229 public HashMap getRequestAttributes( String xmlRequest ){
230 HashMap request = new HashMap();
231 try{
232 Document doc = parseRequest( xmlRequest );
233 Node checker;
234 checker = doc.getDocumentElement();
235 boolean ascending = false;
236 int level = 1;
237 while (true) {
238 if( DEBUG ) logger.debug("Now trying to walk the dom tree..");
239
240 if (checker!=null && (checker.hasChildNodes()) && (!ascending)) {
241 checker = checker.getFirstChild();
242 if( DEBUG ) logger.debug("GOING DOWN"+checker.getNodeName() +"NODETYPE="+checker.getNodeType());
243 if(checker.getNodeType()==1){
244 String text = "";
245 if(checker.getFirstChild()!=null){
246 if(checker.getFirstChild().getNodeType()==Node.TEXT_NODE) {
247 text = checker.getFirstChild().getNodeValue();
248 if( DEBUG ) logger.debug("BEFORE.PUT.DOWN" +checker.getNodeName()+" TEXT " +text);
249
250 request.put(checker.getNodeName(), text);
251
252 if( DEBUG ) logger.debug("NODENAME: "+checker.getNodeName() +", TEXTVALUE: "+text);
253 }
254 }
255 }
256 ascending = false;
257 level++;
258 }
259 else if (checker!=null && checker.getNextSibling() != null) {
260 checker= checker.getNextSibling();
261 String text = "";
262 if( DEBUG ) logger.debug( "SIBBLING...");
263 if(checker.getFirstChild()!=null){
264 if(checker.getFirstChild().getNodeType()==Node.TEXT_NODE) {
265 text = checker.getFirstChild().getNodeValue();
266 if(DEBUG) logger.debug("BEFORE.PUT.SIBLING");
267
268 request.put(checker.getNodeName(), text);
269
270 if(DEBUG) logger.debug("NODENAME: "+checker.getNodeName() +", TEXTVALUE: "+text);
271 }
272 }
273 ascending = false;
274 if( DEBUG ) logger.debug("GOING RIGHT");
275 }
276 else if (checker !=null && checker.getParentNode() != null) {
277 checker= checker.getParentNode();
278 String text = "";
279 if(checker.getFirstChild()!=null){
280 if(checker.getFirstChild().getNodeType()==Node.TEXT_NODE) {
281 text = checker.getFirstChild().getNodeValue();
282 if( DEBUG ) logger.debug("BEFORE.PUT.UP");
283
284 request.put(checker.getNodeName(), text);
285
286 if( DEBUG ) logger.debug("NODENAME: "+checker.getNodeName() +", TEXTVALUE: "+text);
287 }
288 }
289 ascending = true;
290 level--;
291 if( DEBUG ) logger.debug("GOING UP");
292 }
293 else {
294 if( DEBUG ) logger.debug("BREAK!");
295 break;
296 }
297 }
298 }catch(Exception e){
299 AstroGridMessage generalMessage = new AstroGridMessage( "AGMSCE00046", this.getComponentName()) ;
300 logger.error("ERROR Walking DOM TREE: "+generalMessage.toString()+e.toString());
301 }
302 return request;
303 }
304
305
306
307 private Document parseRequest ( String xmlRequest){
308 if( DEBUG ) logger.debug( "Tring to parse MySpace xmlRequest.." +xmlRequest) ;
309
310 Document doc = null;
311 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
312 DocumentBuilder builder = null;
313
314 try {
315 builder = factory.newDocumentBuilder();
316 InputSource requestSource = new InputSource( new StringReader( xmlRequest ) );
317 doc = builder.parse( requestSource );
318 }
319 catch ( Exception ex ) {
320 AstroGridMessage generalMessage = new AstroGridMessage( "AGMSCE00046", this.getComponentName()) ;
321 logger.error( generalMessage.toString(), ex ) ;
322 }
323 return doc ;
324 }
325 protected String getComponentName() { return Configurator.getClassName( MySpaceUtils.class) ; }
326 }