View Javadoc

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  				//throw new IOException("File does not exist");
42  				msstatus.addCode(MySpaceStatusCode.AGMSCE01047,MySpaceStatusCode.ERROR, MySpaceStatusCode.NOLOG, new MySpaceUtils().getComponentName());
43  				response = MMC.FAULT+MySpaceStatusCode.AGMSCE01047;
44  				return response;
45  			}
46  			//open file to read from
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  				//add number of characters read to the total read
57  				iTotalCharactersRead += iCharactersRead;
58  				
59  				//add the characters read to the buffer
60  				strbufFileContent.append(charFileText);
61  			}
62  			
63  			//size buffer to fit data
64  			strbufFileContent.setLength(iTotalCharactersRead);
65  			
66  			//return the data as a String
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  				//open file to write into
88  				printWriter = new PrintWriter(new FileOutputStream(file));    	       	    
89  				//write to file
90  				printWriter.println(theString);		    
91  				return true;				    
92  			}catch (Exception e) {
93  				return false;
94  			}finally{
95  				//close file
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) ;//this should get the xml template
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) ;//this should get the xml template
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) ;//this should get the xml template
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) ;//this should get the xml template
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 }