View Javadoc

1   package org.dbe.studio.tools.sdlCompiler2Java;
2   
3   import java.io.*;
4   
5   import javax.xml.transform.*;
6   import javax.xml.transform.stream.*;
7   
8   import org.eclipse.core.runtime.Platform;
9   import org.eclipse.core.runtime.preferences.IPreferencesService;
10  
11  
12  
13  public class Sdl2Java 
14  {
15  	private String sdl2wsdlTransform;
16  	private String wsdl2mjavaTransform;
17  	private String mjava2javaTransform;
18  	private String wsdl2sdlTransform;
19  		
20  	/***
21  	 * 
22  	 * @param sdl 
23  	 * @return wsdl
24  	 * @throws Sdl2JavaException
25  	 * 
26  	 * this method take as parameter a SDL file as String and return a WSDL file as String
27  	 */
28  	public String sdl2wsdl(String sdl)
29  	throws Sdl2JavaException
30  	{
31  		if ( sdl2wsdlTransform == null ) throw new Sdl2JavaException(Sdl2JavaMessages.ERR_MSG_SDL_Null);
32  		String wsdl;
33  		try {
34  			wsdl = transformer(sdl, sdl2wsdlTransform);
35  		} catch (Exception e) {
36  			throw new Sdl2JavaException(e);
37  		}
38  		return wsdl;
39  	}
40  	
41  	/***
42  	 * 
43  	 * @param wsdl
44  	 * @return mJava
45  	 * @throws Sdl2JavaException
46  	 * 
47  	 * this method take as parameter a WSDL file as String and return a mJava file as String
48  	 */
49  	public String wsdl2mjava(String wsdl)
50  	throws Sdl2JavaException
51  	{
52  		if ( wsdl2mjavaTransform == null ) throw new Sdl2JavaException(Sdl2JavaMessages.ERR_MSG_WSDL_Null);
53  		String mjava;
54  		try {
55  			mjava = transformer(wsdl, wsdl2mjavaTransform);
56  		} catch (Exception e) {
57  			throw new Sdl2JavaException(e);
58  		}
59  		return mjava;
60  	}
61  	
62  	/***
63  	 * 
64  	 * @param wsdl
65  	 * @return mJava
66  	 * @throws Sdl2JavaException
67  	 * 
68  	 * this method take as parameter a WSDL file as String and return a mJava file as String
69  	 */
70  	public String wsdl2sdl(String wsdl)
71  	throws Sdl2JavaException
72  	{
73  		if ( wsdl2sdlTransform == null ) throw new Sdl2JavaException(Sdl2JavaMessages.ERR_MSG_WSDL_Null);
74  		String sdl;
75  		try {
76  			sdl = transformer(wsdl, wsdl2sdlTransform);
77  		} catch (Exception e) {
78  			throw new Sdl2JavaException(e);
79  		}
80  		return sdl;
81  	}
82  	
83  	/***
84  	 * 
85  	 * @param mjava
86  	 * @return java
87  	 * @throws Sdl2JavaException
88  	 * 
89  	 * this method take as parameter a mJava file as String and return a Java file as String
90  	 */
91  	public String mjava2java(String mjava)
92  	throws Sdl2JavaException
93  	{
94  		if ( mjava2javaTransform == null ) throw new Sdl2JavaException(Sdl2JavaMessages.ERR_MSG_MJAVA_Null);
95  		String java;
96  		try {
97  			java = transformer(mjava, mjava2javaTransform);
98  		} catch (Exception e) {
99  			throw new Sdl2JavaException(e);
100 		}
101 		return java;
102 	}
103 	
104 	/***
105 	 * 
106 	 * @param sdl
107 	 * @return java
108 	 * @throws Sdl2JavaException
109 	 * 
110 	 */
111 	public String sdl2java(String sdl)
112 	throws Sdl2JavaException
113 	{
114 		String wsdl = sdl2wsdl(sdl);
115 		String mjava = wsdl2mjava(wsdl);
116 		String java = mjava2java(mjava);
117 		
118 		return java;		
119 	}
120 	
121 	
122 	/***
123 	 * 
124 	 * @param input
125 	 * @param transformation
126 	 * @return output
127 	 * @throws Exception
128 	 * 
129 	 */
130 	private String transformer(String input, String transformation)
131     throws Exception
132     {
133 		//take the package name from preferences page
134 		Pack p = new Pack();
135         IPreferencesService service = Platform.getPreferencesService();
136 		try {
137 			p.setPack(service.getString("org.dbe.studio.tools.sdl2java", Sdl2JavaMessages.PREF_DEFAULT_NAMESPACE_KEY, Sdl2JavaMessages.PREF_DEFAULT_NAMESPACE_VALUE, null));
138 		}
139 		catch ( Exception ignored ) {
140 		}
141 		
142 		//check the valability of the namespace from preferences page
143 		String packName = validateNamespace(p);
144 		
145 		//reverse namespace for WSDL
146 		String nameSpace = getNameSpace(packName);
147 		
148 	    TransformerFactory tFactory = TransformerFactory.newInstance();
149 	    Transformer transformer = tFactory.newTransformer(new StreamSource(new StringReader(transformation)));
150 	    StringWriter output = new StringWriter();
151 	    transformer.setParameter("nameSpacePack",nameSpace);
152 	    transformer.setParameter("package",packName);
153     	transformer.transform(new StreamSource(new StringReader(input)),new StreamResult(output));
154     	
155     	return output.toString();  	
156     }
157 	
158 
159 	/***
160 	 * @param args
161 	 * 
162 	 * ONLY for test purposes
163 	 */
164 	/*public static void main(String[] args) throws Exception
165 	{
166 		 //a Sdl2java instance
167 		 Sdl2Java transformation = new Sdl2Java();
168 		 
169 		 //set test data
170 	     transformation.setSdl2wsdlTransform(loadFile(new File ("xslt/sdl2wsdl.xsl")));
171 	     transformation.setWsdl2mjavaTransform(loadFile(new File ("xslt/wsdl2mJava.xsl")));
172 	     transformation.setMjava2javaTransform(loadFile(new File ("xslt/mJava2Java.xsl")));
173 	     
174 	     //the main transformation of a .sdl file
175 	     transformation.sdl2java(loadFile(new File("xslt/HotelReservation.sdl")));	     
176 
177 	}*/
178 	
179 	/***
180 	 * 
181 	 * @param file
182 	 * @return
183 	 * @throws Exception
184 	 * 
185 	 */
186 	public static String loadFile(File file) throws Exception
187 	{
188 		FileInputStream fis = new FileInputStream(file);
189 		ByteArrayOutputStream baos = new ByteArrayOutputStream((int)file.length());
190 		
191 		byte[] b = new byte[4096];
192 		int nb;
193 		while ( (nb = fis.read(b)) != -1 ) {
194 			baos.write(b, 0, nb);
195 		}
196 		return baos.toString();
197 	}	
198 
199 	/***
200 	 * 
201 	 * @param mjava2javaTransform
202 	 * 
203 	 */
204 	public void setMjava2javaTransform(String mjava2javaTransform) {
205 		this.mjava2javaTransform = mjava2javaTransform;
206 	}
207 
208 	/***
209 	 * 
210 	 * @param sdl2wsdlTransform
211 	 * 
212 	 */
213 	public void setSdl2wsdlTransform(String sdl2wsdlTransform) {
214 		this.sdl2wsdlTransform = sdl2wsdlTransform;
215 	}
216 
217 	/***
218 	 * 
219 	 * @param wsdl2mjavaTransform
220 	 * 
221 	 */
222 	public void setWsdl2mjavaTransform(String wsdl2mjavaTransform) {
223 		this.wsdl2mjavaTransform = wsdl2mjavaTransform;
224 	}
225 	
226 	/***
227 	 * 
228 	 * @param wsdl2sdlTransform
229 	 */
230 	public void setWsdl2SdlTransform(String wsdl2sdlTransform) {
231 		this.wsdl2sdlTransform = wsdl2sdlTransform;
232 	}
233 	
234 	/***
235 	 * 
236 	 * @param file
237 	 * @param strContent
238 	 * @throws Exception
239 	 */
240 	public static void saveFile(File file, String strContent) throws Exception
241 	{
242 		FileWriter fw = new FileWriter(file);
243 		fw.write(strContent);
244 		fw.close();
245 	}
246 	
247 	/***
248 	 * 
249 	 * @param p Pack
250 	 * @return pp String
251 	 */
252 	public static String validateNamespace(Pack p){
253 		String pp = null;
254 
255 		//if the namespace ends with '.' remove it
256 		if(p.getPack().toString().endsWith(".")){
257 			pp = p.getPack().toString();
258 			pp = pp.substring(0,pp.lastIndexOf(".")).trim();
259 		}
260 		else pp = p.getPack().toString();
261 		return pp;
262 	}
263 	
264 	/***
265 	 * 
266 	 * @param pack String
267 	 * @return revPack String
268 	 */
269 	public static String getNameSpace(String pack){
270 		String revPack = null;
271 
272 		int i = pack.indexOf(".");
273 		if(i == -1)
274 			revPack = pack;		
275 		if(i > -1){
276 			String revPack0 = pack.substring(0,pack.indexOf(".")+1);
277 			String revPack1 = pack.substring(pack.lastIndexOf("."));
278 			if(revPack1 != revPack0)
279 				revPack = pack.replaceAll(revPack0,"")+".".concat(revPack0.replace('.',' ').trim());
280 		}
281 
282 		return revPack;
283 	}
284 }