http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transform/SurrogateSwap.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transform/SurrogateSwap.html b/content/site/apidocs/src-html/org/apache/juneau/transform/SurrogateSwap.html index 61a2749..13a3aa0 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transform/SurrogateSwap.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transform/SurrogateSwap.html @@ -29,204 +29,95 @@ <span class="sourceLineNo">021</span>import org.apache.juneau.serializer.*;<a name="line.21"></a> <span class="sourceLineNo">022</span><a name="line.22"></a> <span class="sourceLineNo">023</span>/**<a name="line.23"></a> -<span class="sourceLineNo">024</span> * Specialized {@link PojoSwap} for surrogate classes.<a name="line.24"></a> +<span class="sourceLineNo">024</span> * Specialized {@link PojoSwap} for {@link Surrogate} classes.<a name="line.24"></a> <span class="sourceLineNo">025</span> *<a name="line.25"></a> -<span class="sourceLineNo">026</span> * <p><a name="line.26"></a> -<span class="sourceLineNo">027</span> * Surrogate classes are used in place of other classes during serialization.<a name="line.27"></a> -<span class="sourceLineNo">028</span> * For example, you may want to use a surrogate class to change the names or order of bean properties on a bean.<a name="line.28"></a> -<span class="sourceLineNo">029</span> *<a name="line.29"></a> -<span class="sourceLineNo">030</span> * <p><a name="line.30"></a> -<span class="sourceLineNo">031</span> * The following is an example of a surrogate class change changes a property name:<a name="line.31"></a> -<span class="sourceLineNo">032</span> * <p class='bcode'><a name="line.32"></a> -<span class="sourceLineNo">033</span> * <jk>public class</jk> SurrogateClass {<a name="line.33"></a> -<span class="sourceLineNo">034</span> * <jk>public</jk> String surrogateField; <jc>// New bean property</jc><a name="line.34"></a> -<span class="sourceLineNo">035</span> *<a name="line.35"></a> -<span class="sourceLineNo">036</span> * <jk>public</jk> SurrogateClass(NormalClass normalClass) {<a name="line.36"></a> -<span class="sourceLineNo">037</span> * <jk>this</jk>.surrogateField = normalClass.normalField;<a name="line.37"></a> -<span class="sourceLineNo">038</span> * }<a name="line.38"></a> -<span class="sourceLineNo">039</span> * }<a name="line.39"></a> -<span class="sourceLineNo">040</span> * </p><a name="line.40"></a> -<span class="sourceLineNo">041</span> *<a name="line.41"></a> -<span class="sourceLineNo">042</span> * <p><a name="line.42"></a> -<span class="sourceLineNo">043</span> * Optionally, a public static method can be used to un-transform a class during parsing:<a name="line.43"></a> -<span class="sourceLineNo">044</span> * <p class='bcode'><a name="line.44"></a> -<span class="sourceLineNo">045</span> * <jk>public class</jk> SurrogateClass {<a name="line.45"></a> -<span class="sourceLineNo">046</span> * ...<a name="line.46"></a> -<span class="sourceLineNo">047</span> * <jk>public static</jk> NormalClass <jsm>toNormalClass</jsm>(SurrogateClass surrogateClass) {<a name="line.47"></a> -<span class="sourceLineNo">048</span> * <jk>return new</jk> NormalClass(surrogateClass.transformedField);<a name="line.48"></a> -<span class="sourceLineNo">049</span> * }<a name="line.49"></a> -<span class="sourceLineNo">050</span> * }<a name="line.50"></a> -<span class="sourceLineNo">051</span> * </p><a name="line.51"></a> -<span class="sourceLineNo">052</span> *<a name="line.52"></a> -<span class="sourceLineNo">053</span> * <p><a name="line.53"></a> -<span class="sourceLineNo">054</span> * Surrogate classes must conform to the following:<a name="line.54"></a> -<span class="sourceLineNo">055</span> * <ul class='spaced-list'><a name="line.55"></a> -<span class="sourceLineNo">056</span> * <li><a name="line.56"></a> -<span class="sourceLineNo">057</span> * It must have a one or more public constructors that take in a single parameter whose type is the normal types.<a name="line.57"></a> -<span class="sourceLineNo">058</span> * (It is possible to define a class as a surrogate for multiple class types by using multiple constructors with<a name="line.58"></a> -<span class="sourceLineNo">059</span> * different parameter types).<a name="line.59"></a> -<span class="sourceLineNo">060</span> * <li><a name="line.60"></a> -<span class="sourceLineNo">061</span> * It optionally can have a public static method that takes in a single parameter whose type is the transformed<a name="line.61"></a> -<span class="sourceLineNo">062</span> * type and returns an instance of the normal type.<a name="line.62"></a> -<span class="sourceLineNo">063</span> * This is called the un-transform method.<a name="line.63"></a> -<span class="sourceLineNo">064</span> * The method can be called anything.<a name="line.64"></a> -<span class="sourceLineNo">065</span> * <li><a name="line.65"></a> -<span class="sourceLineNo">066</span> * If an un-transform method is present, the class must also contain a no-arg constructor (so that the<a name="line.66"></a> -<span class="sourceLineNo">067</span> * transformed class can be instantiated by the parser before being converted into the normal class by the<a name="line.67"></a> -<span class="sourceLineNo">068</span> * un-transform method).<a name="line.68"></a> -<span class="sourceLineNo">069</span> * </ul><a name="line.69"></a> -<span class="sourceLineNo">070</span> *<a name="line.70"></a> -<span class="sourceLineNo">071</span> * <p><a name="line.71"></a> -<span class="sourceLineNo">072</span> * Surrogate classes are associated with serializers and parsers using the {@link CoreObjectBuilder#pojoSwaps(Class...)}<a name="line.72"></a> -<span class="sourceLineNo">073</span> * method.<a name="line.73"></a> -<span class="sourceLineNo">074</span> * <p class='bcode'><a name="line.74"></a> -<span class="sourceLineNo">075</span> * <ja>@Test</ja><a name="line.75"></a> -<span class="sourceLineNo">076</span> * <jk>public void</jk> test() <jk>throws</jk> Exception {<a name="line.76"></a> -<span class="sourceLineNo">077</span> * JsonSerializer s = <jk>new</jk> JsonSerializerBuilder().simple().pojoSwaps(Surrogate.<jk>class</jk>).build();<a name="line.77"></a> -<span class="sourceLineNo">078</span> * JsonParser p = <jk>new</jk> JsonParserBuilder().pojoSwaps(Surrogate.<jk>class</jk>).build();<a name="line.78"></a> -<span class="sourceLineNo">079</span> * String r;<a name="line.79"></a> -<span class="sourceLineNo">080</span> * Normal n = Normal.<jsm>create</jsm>();<a name="line.80"></a> -<span class="sourceLineNo">081</span> *<a name="line.81"></a> -<span class="sourceLineNo">082</span> * r = s.serialize(n);<a name="line.82"></a> -<span class="sourceLineNo">083</span> * assertEquals(<js>"{f2:'f1'}"</js>, r);<a name="line.83"></a> -<span class="sourceLineNo">084</span> *<a name="line.84"></a> -<span class="sourceLineNo">085</span> * n = p.parse(r, Normal.<jk>class</jk>);<a name="line.85"></a> -<span class="sourceLineNo">086</span> * assertEquals(<js>"f1"</js>, n.f1);<a name="line.86"></a> -<span class="sourceLineNo">087</span> * }<a name="line.87"></a> -<span class="sourceLineNo">088</span> *<a name="line.88"></a> -<span class="sourceLineNo">089</span> * <jc>// The normal class</jc><a name="line.89"></a> -<span class="sourceLineNo">090</span> * <jk>public class</jk> Normal {<a name="line.90"></a> -<span class="sourceLineNo">091</span> * <jk>public</jk> String f1;<a name="line.91"></a> -<span class="sourceLineNo">092</span> *<a name="line.92"></a> -<span class="sourceLineNo">093</span> * <jk>public static</jk> Normal <jsm>create</jsm>() {<a name="line.93"></a> -<span class="sourceLineNo">094</span> * Normal n = <jk>new</jk> Normal();<a name="line.94"></a> -<span class="sourceLineNo">095</span> * n.f1 = <js>"f1"</js>;<a name="line.95"></a> -<span class="sourceLineNo">096</span> * <jk>return</jk> n;<a name="line.96"></a> -<span class="sourceLineNo">097</span> * }<a name="line.97"></a> -<span class="sourceLineNo">098</span> * }<a name="line.98"></a> -<span class="sourceLineNo">099</span> *<a name="line.99"></a> -<span class="sourceLineNo">100</span> * <jc>// The surrogate class</jc><a name="line.100"></a> -<span class="sourceLineNo">101</span> * <jk>public static class</jk> Surrogate {<a name="line.101"></a> -<span class="sourceLineNo">102</span> * <jk>public</jk> String f2;<a name="line.102"></a> -<span class="sourceLineNo">103</span> *<a name="line.103"></a> -<span class="sourceLineNo">104</span> * <jc>// Surrogate constructor</jc><a name="line.104"></a> -<span class="sourceLineNo">105</span> * <jk>public</jk> Surrogate(Normal n) {<a name="line.105"></a> -<span class="sourceLineNo">106</span> * f2 = n.f1;<a name="line.106"></a> -<span class="sourceLineNo">107</span> * }<a name="line.107"></a> -<span class="sourceLineNo">108</span> *<a name="line.108"></a> -<span class="sourceLineNo">109</span> * <jc>// Constructor used during parsing (only needed if un-transform method specified)</jc><a name="line.109"></a> -<span class="sourceLineNo">110</span> * <jk>public</jk> Surrogate() {}<a name="line.110"></a> -<span class="sourceLineNo">111</span> *<a name="line.111"></a> -<span class="sourceLineNo">112</span> * <jc>// Un-transform method (optional)</jc><a name="line.112"></a> -<span class="sourceLineNo">113</span> * <jk>public static</jk> Normal <jsm>toNormal</jsm>(Surrogate f) {<a name="line.113"></a> -<span class="sourceLineNo">114</span> * Normal n = <jk>new</jk> Normal();<a name="line.114"></a> -<span class="sourceLineNo">115</span> * n.f1 = f.f2;<a name="line.115"></a> -<span class="sourceLineNo">116</span> * <jk>return</jk> n;<a name="line.116"></a> -<span class="sourceLineNo">117</span> * }<a name="line.117"></a> -<span class="sourceLineNo">118</span> * }<a name="line.118"></a> -<span class="sourceLineNo">119</span> * </p><a name="line.119"></a> -<span class="sourceLineNo">120</span> *<a name="line.120"></a> -<span class="sourceLineNo">121</span> * <p><a name="line.121"></a> -<span class="sourceLineNo">122</span> * It should be noted that a surrogate class is functionally equivalent to the following {@link PojoSwap}<a name="line.122"></a> -<span class="sourceLineNo">123</span> * implementation:<a name="line.123"></a> -<span class="sourceLineNo">124</span> * <p class='bcode'><a name="line.124"></a> -<span class="sourceLineNo">125</span> * <jk>public static class</jk> SurrogateSwap <jk>extends</jk> PojoSwap&lt;Normal,Surrogate&gt; {<a name="line.125"></a> -<span class="sourceLineNo">126</span> * <jk>public</jk> Surrogate swap(Normal n) <jk>throws</jk> SerializeException {<a name="line.126"></a> -<span class="sourceLineNo">127</span> * <jk>return new</jk> Surrogate(n);<a name="line.127"></a> -<span class="sourceLineNo">128</span> * }<a name="line.128"></a> -<span class="sourceLineNo">129</span> * <jk>public</jk> Normal unswap(Surrogate s, ClassMeta&lt;?&gt; hint) <jk>throws</jk> ParseException {<a name="line.129"></a> -<span class="sourceLineNo">130</span> * <jk>return</jk> Surrogate.<jsm>toNormal</jsm>(s);<a name="line.130"></a> -<span class="sourceLineNo">131</span> * }<a name="line.131"></a> -<span class="sourceLineNo">132</span> * }<a name="line.132"></a> -<span class="sourceLineNo">133</span> * </p><a name="line.133"></a> -<span class="sourceLineNo">134</span> *<a name="line.134"></a> -<span class="sourceLineNo">135</span> * @param <T> The class type that this transform applies to.<a name="line.135"></a> -<span class="sourceLineNo">136</span> * @param <F> The transformed class type.<a name="line.136"></a> -<span class="sourceLineNo">137</span> */<a name="line.137"></a> -<span class="sourceLineNo">138</span>public class SurrogateSwap<T,F> extends PojoSwap<T,F> {<a name="line.138"></a> -<span class="sourceLineNo">139</span><a name="line.139"></a> -<span class="sourceLineNo">140</span> private Constructor<F> constructor; // public F(T t);<a name="line.140"></a> -<span class="sourceLineNo">141</span> private Method untransformMethod; // public static T valueOf(F f);<a name="line.141"></a> -<span class="sourceLineNo">142</span><a name="line.142"></a> -<span class="sourceLineNo">143</span> /**<a name="line.143"></a> -<span class="sourceLineNo">144</span> * Constructor.<a name="line.144"></a> -<span class="sourceLineNo">145</span> *<a name="line.145"></a> -<span class="sourceLineNo">146</span> * @param forClass The normal class.<a name="line.146"></a> -<span class="sourceLineNo">147</span> * @param constructor The constructor on the surrogate class that takes the normal class as a parameter.<a name="line.147"></a> -<span class="sourceLineNo">148</span> * @param untransformMethod The static method that converts surrogate objects into normal objects.<a name="line.148"></a> -<span class="sourceLineNo">149</span> */<a name="line.149"></a> -<span class="sourceLineNo">150</span> protected SurrogateSwap(Class<T> forClass, Constructor<F> constructor, Method untransformMethod) {<a name="line.150"></a> -<span class="sourceLineNo">151</span> super(forClass, constructor.getDeclaringClass());<a name="line.151"></a> -<span class="sourceLineNo">152</span> this.constructor = constructor;<a name="line.152"></a> -<span class="sourceLineNo">153</span> this.untransformMethod = untransformMethod;<a name="line.153"></a> -<span class="sourceLineNo">154</span> }<a name="line.154"></a> -<span class="sourceLineNo">155</span><a name="line.155"></a> -<span class="sourceLineNo">156</span> /**<a name="line.156"></a> -<span class="sourceLineNo">157</span> * Given the specified surrogate class, return the list of POJO swaps.<a name="line.157"></a> -<span class="sourceLineNo">158</span> *<a name="line.158"></a> -<span class="sourceLineNo">159</span> * <p><a name="line.159"></a> -<span class="sourceLineNo">160</span> * A transform is returned for each public 1-arg constructor found.<a name="line.160"></a> -<span class="sourceLineNo">161</span> * Returns an empty list if no public 1-arg constructors are found.<a name="line.161"></a> -<span class="sourceLineNo">162</span> *<a name="line.162"></a> -<span class="sourceLineNo">163</span> * @param c The surrogate class.<a name="line.163"></a> -<span class="sourceLineNo">164</span> * @return The list of POJO swaps that apply to this class.<a name="line.164"></a> -<span class="sourceLineNo">165</span> */<a name="line.165"></a> -<span class="sourceLineNo">166</span> @SuppressWarnings({"unchecked", "rawtypes"})<a name="line.166"></a> -<span class="sourceLineNo">167</span> public static List<SurrogateSwap<?,?>> findPojoSwaps(Class<?> c) {<a name="line.167"></a> -<span class="sourceLineNo">168</span> List<SurrogateSwap<?,?>> l = new LinkedList<SurrogateSwap<?,?>>();<a name="line.168"></a> -<span class="sourceLineNo">169</span> for (Constructor<?> cc : c.getConstructors()) {<a name="line.169"></a> -<span class="sourceLineNo">170</span> if (cc.getAnnotation(BeanIgnore.class) == null) {<a name="line.170"></a> -<span class="sourceLineNo">171</span> Class<?>[] pt = cc.getParameterTypes();<a name="line.171"></a> -<span class="sourceLineNo">172</span><a name="line.172"></a> -<span class="sourceLineNo">173</span> // Only constructors with one parameter.<a name="line.173"></a> -<span class="sourceLineNo">174</span> // Ignore instance class constructors.<a name="line.174"></a> -<span class="sourceLineNo">175</span> if (pt.length == 1 && pt[0] != c.getDeclaringClass()) {<a name="line.175"></a> -<span class="sourceLineNo">176</span> int mod = cc.getModifiers();<a name="line.176"></a> -<span class="sourceLineNo">177</span> if (Modifier.isPublic(mod)) { // Only public constructors.<a name="line.177"></a> -<span class="sourceLineNo">178</span><a name="line.178"></a> -<span class="sourceLineNo">179</span> // Find the unswap method if there is one.<a name="line.179"></a> -<span class="sourceLineNo">180</span> Method unswapMethod = null;<a name="line.180"></a> -<span class="sourceLineNo">181</span> for (Method m : c.getMethods()) {<a name="line.181"></a> -<span class="sourceLineNo">182</span> if (pt[0].equals(m.getReturnType())) {<a name="line.182"></a> -<span class="sourceLineNo">183</span> Class<?>[] mpt = m.getParameterTypes();<a name="line.183"></a> -<span class="sourceLineNo">184</span> if (mpt.length == 1 && mpt[0].equals(c)) { // Only methods with one parameter and where the return type matches this class.<a name="line.184"></a> -<span class="sourceLineNo">185</span> int mod2 = m.getModifiers();<a name="line.185"></a> -<span class="sourceLineNo">186</span> if (Modifier.isPublic(mod2) && Modifier.isStatic(mod2)) // Only public static methods.<a name="line.186"></a> -<span class="sourceLineNo">187</span> unswapMethod = m;<a name="line.187"></a> -<span class="sourceLineNo">188</span> }<a name="line.188"></a> -<span class="sourceLineNo">189</span> }<a name="line.189"></a> -<span class="sourceLineNo">190</span> }<a name="line.190"></a> -<span class="sourceLineNo">191</span><a name="line.191"></a> -<span class="sourceLineNo">192</span> l.add(new SurrogateSwap(pt[0], cc, unswapMethod));<a name="line.192"></a> -<span class="sourceLineNo">193</span> }<a name="line.193"></a> -<span class="sourceLineNo">194</span> }<a name="line.194"></a> -<span class="sourceLineNo">195</span> }<a name="line.195"></a> -<span class="sourceLineNo">196</span> }<a name="line.196"></a> -<span class="sourceLineNo">197</span> return l;<a name="line.197"></a> -<span class="sourceLineNo">198</span> }<a name="line.198"></a> -<span class="sourceLineNo">199</span><a name="line.199"></a> -<span class="sourceLineNo">200</span> @Override /* PojoSwap */<a name="line.200"></a> -<span class="sourceLineNo">201</span> public F swap(BeanSession session, T o) throws SerializeException {<a name="line.201"></a> -<span class="sourceLineNo">202</span> try {<a name="line.202"></a> -<span class="sourceLineNo">203</span> return constructor.newInstance(o);<a name="line.203"></a> -<span class="sourceLineNo">204</span> } catch (Exception e) {<a name="line.204"></a> -<span class="sourceLineNo">205</span> throw new SerializeException(e);<a name="line.205"></a> -<span class="sourceLineNo">206</span> }<a name="line.206"></a> -<span class="sourceLineNo">207</span> }<a name="line.207"></a> -<span class="sourceLineNo">208</span><a name="line.208"></a> -<span class="sourceLineNo">209</span> @Override /* PojoSwap */<a name="line.209"></a> -<span class="sourceLineNo">210</span> @SuppressWarnings("unchecked")<a name="line.210"></a> -<span class="sourceLineNo">211</span> public T unswap(BeanSession session, F f, ClassMeta<?> hint) throws ParseException {<a name="line.211"></a> -<span class="sourceLineNo">212</span> if (untransformMethod == null)<a name="line.212"></a> -<span class="sourceLineNo">213</span> throw new ParseException("static valueOf({0}) method not implement on surrogate class ''{1}''",<a name="line.213"></a> -<span class="sourceLineNo">214</span> f.getClass().getName(), getNormalClass().getName());<a name="line.214"></a> -<span class="sourceLineNo">215</span> try {<a name="line.215"></a> -<span class="sourceLineNo">216</span> return (T)untransformMethod.invoke(null, f);<a name="line.216"></a> -<span class="sourceLineNo">217</span> } catch (Exception e) {<a name="line.217"></a> -<span class="sourceLineNo">218</span> throw new ParseException(e);<a name="line.218"></a> -<span class="sourceLineNo">219</span> }<a name="line.219"></a> -<span class="sourceLineNo">220</span> }<a name="line.220"></a> -<span class="sourceLineNo">221</span>}<a name="line.221"></a> +<span class="sourceLineNo">026</span> * @param <T> The class type that this transform applies to.<a name="line.26"></a> +<span class="sourceLineNo">027</span> * @param <F> The transformed class type.<a name="line.27"></a> +<span class="sourceLineNo">028</span> */<a name="line.28"></a> +<span class="sourceLineNo">029</span>public class SurrogateSwap<T,F> extends PojoSwap<T,F> {<a name="line.29"></a> +<span class="sourceLineNo">030</span><a name="line.30"></a> +<span class="sourceLineNo">031</span> private Constructor<F> constructor; // public F(T t);<a name="line.31"></a> +<span class="sourceLineNo">032</span> private Method untransformMethod; // public static T valueOf(F f);<a name="line.32"></a> +<span class="sourceLineNo">033</span><a name="line.33"></a> +<span class="sourceLineNo">034</span> /**<a name="line.34"></a> +<span class="sourceLineNo">035</span> * Constructor.<a name="line.35"></a> +<span class="sourceLineNo">036</span> *<a name="line.36"></a> +<span class="sourceLineNo">037</span> * @param forClass The normal class.<a name="line.37"></a> +<span class="sourceLineNo">038</span> * @param constructor The constructor on the surrogate class that takes the normal class as a parameter.<a name="line.38"></a> +<span class="sourceLineNo">039</span> * @param untransformMethod The static method that converts surrogate objects into normal objects.<a name="line.39"></a> +<span class="sourceLineNo">040</span> */<a name="line.40"></a> +<span class="sourceLineNo">041</span> protected SurrogateSwap(Class<T> forClass, Constructor<F> constructor, Method untransformMethod) {<a name="line.41"></a> +<span class="sourceLineNo">042</span> super(forClass, constructor.getDeclaringClass());<a name="line.42"></a> +<span class="sourceLineNo">043</span> this.constructor = constructor;<a name="line.43"></a> +<span class="sourceLineNo">044</span> this.untransformMethod = untransformMethod;<a name="line.44"></a> +<span class="sourceLineNo">045</span> }<a name="line.45"></a> +<span class="sourceLineNo">046</span><a name="line.46"></a> +<span class="sourceLineNo">047</span> /**<a name="line.47"></a> +<span class="sourceLineNo">048</span> * Given the specified surrogate class, return the list of POJO swaps.<a name="line.48"></a> +<span class="sourceLineNo">049</span> *<a name="line.49"></a> +<span class="sourceLineNo">050</span> * <p><a name="line.50"></a> +<span class="sourceLineNo">051</span> * A transform is returned for each public 1-arg constructor found.<a name="line.51"></a> +<span class="sourceLineNo">052</span> * Returns an empty list if no public 1-arg constructors are found.<a name="line.52"></a> +<span class="sourceLineNo">053</span> *<a name="line.53"></a> +<span class="sourceLineNo">054</span> * @param c The surrogate class.<a name="line.54"></a> +<span class="sourceLineNo">055</span> * @return The list of POJO swaps that apply to this class.<a name="line.55"></a> +<span class="sourceLineNo">056</span> */<a name="line.56"></a> +<span class="sourceLineNo">057</span> @SuppressWarnings({"unchecked", "rawtypes"})<a name="line.57"></a> +<span class="sourceLineNo">058</span> public static List<SurrogateSwap<?,?>> findPojoSwaps(Class<?> c) {<a name="line.58"></a> +<span class="sourceLineNo">059</span> List<SurrogateSwap<?,?>> l = new LinkedList<SurrogateSwap<?,?>>();<a name="line.59"></a> +<span class="sourceLineNo">060</span> for (Constructor<?> cc : c.getConstructors()) {<a name="line.60"></a> +<span class="sourceLineNo">061</span> if (cc.getAnnotation(BeanIgnore.class) == null) {<a name="line.61"></a> +<span class="sourceLineNo">062</span> Class<?>[] pt = cc.getParameterTypes();<a name="line.62"></a> +<span class="sourceLineNo">063</span><a name="line.63"></a> +<span class="sourceLineNo">064</span> // Only constructors with one parameter.<a name="line.64"></a> +<span class="sourceLineNo">065</span> // Ignore instance class constructors.<a name="line.65"></a> +<span class="sourceLineNo">066</span> if (pt.length == 1 && pt[0] != c.getDeclaringClass()) {<a name="line.66"></a> +<span class="sourceLineNo">067</span> int mod = cc.getModifiers();<a name="line.67"></a> +<span class="sourceLineNo">068</span> if (Modifier.isPublic(mod)) { // Only public constructors.<a name="line.68"></a> +<span class="sourceLineNo">069</span><a name="line.69"></a> +<span class="sourceLineNo">070</span> // Find the unswap method if there is one.<a name="line.70"></a> +<span class="sourceLineNo">071</span> Method unswapMethod = null;<a name="line.71"></a> +<span class="sourceLineNo">072</span> for (Method m : c.getMethods()) {<a name="line.72"></a> +<span class="sourceLineNo">073</span> if (pt[0].equals(m.getReturnType())) {<a name="line.73"></a> +<span class="sourceLineNo">074</span> Class<?>[] mpt = m.getParameterTypes();<a name="line.74"></a> +<span class="sourceLineNo">075</span> if (mpt.length == 1 && mpt[0].equals(c)) { // Only methods with one parameter and where the return type matches this class.<a name="line.75"></a> +<span class="sourceLineNo">076</span> int mod2 = m.getModifiers();<a name="line.76"></a> +<span class="sourceLineNo">077</span> if (Modifier.isPublic(mod2) && Modifier.isStatic(mod2)) // Only public static methods.<a name="line.77"></a> +<span class="sourceLineNo">078</span> unswapMethod = m;<a name="line.78"></a> +<span class="sourceLineNo">079</span> }<a name="line.79"></a> +<span class="sourceLineNo">080</span> }<a name="line.80"></a> +<span class="sourceLineNo">081</span> }<a name="line.81"></a> +<span class="sourceLineNo">082</span><a name="line.82"></a> +<span class="sourceLineNo">083</span> l.add(new SurrogateSwap(pt[0], cc, unswapMethod));<a name="line.83"></a> +<span class="sourceLineNo">084</span> }<a name="line.84"></a> +<span class="sourceLineNo">085</span> }<a name="line.85"></a> +<span class="sourceLineNo">086</span> }<a name="line.86"></a> +<span class="sourceLineNo">087</span> }<a name="line.87"></a> +<span class="sourceLineNo">088</span> return l;<a name="line.88"></a> +<span class="sourceLineNo">089</span> }<a name="line.89"></a> +<span class="sourceLineNo">090</span><a name="line.90"></a> +<span class="sourceLineNo">091</span> @Override /* PojoSwap */<a name="line.91"></a> +<span class="sourceLineNo">092</span> public F swap(BeanSession session, T o) throws SerializeException {<a name="line.92"></a> +<span class="sourceLineNo">093</span> try {<a name="line.93"></a> +<span class="sourceLineNo">094</span> return constructor.newInstance(o);<a name="line.94"></a> +<span class="sourceLineNo">095</span> } catch (Exception e) {<a name="line.95"></a> +<span class="sourceLineNo">096</span> throw new SerializeException(e);<a name="line.96"></a> +<span class="sourceLineNo">097</span> }<a name="line.97"></a> +<span class="sourceLineNo">098</span> }<a name="line.98"></a> +<span class="sourceLineNo">099</span><a name="line.99"></a> +<span class="sourceLineNo">100</span> @Override /* PojoSwap */<a name="line.100"></a> +<span class="sourceLineNo">101</span> @SuppressWarnings("unchecked")<a name="line.101"></a> +<span class="sourceLineNo">102</span> public T unswap(BeanSession session, F f, ClassMeta<?> hint) throws ParseException {<a name="line.102"></a> +<span class="sourceLineNo">103</span> if (untransformMethod == null)<a name="line.103"></a> +<span class="sourceLineNo">104</span> throw new ParseException("static valueOf({0}) method not implement on surrogate class ''{1}''",<a name="line.104"></a> +<span class="sourceLineNo">105</span> f.getClass().getName(), getNormalClass().getName());<a name="line.105"></a> +<span class="sourceLineNo">106</span> try {<a name="line.106"></a> +<span class="sourceLineNo">107</span> return (T)untransformMethod.invoke(null, f);<a name="line.107"></a> +<span class="sourceLineNo">108</span> } catch (Exception e) {<a name="line.108"></a> +<span class="sourceLineNo">109</span> throw new ParseException(e);<a name="line.109"></a> +<span class="sourceLineNo">110</span> }<a name="line.110"></a> +<span class="sourceLineNo">111</span> }<a name="line.111"></a> +<span class="sourceLineNo">112</span>}<a name="line.112"></a>
http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transforms/ByteArrayBase64Swap.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transforms/ByteArrayBase64Swap.html b/content/site/apidocs/src-html/org/apache/juneau/transforms/ByteArrayBase64Swap.html index 7244245..53db4c3 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transforms/ByteArrayBase64Swap.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transforms/ByteArrayBase64Swap.html @@ -23,39 +23,29 @@ <span class="sourceLineNo">015</span>import static org.apache.juneau.internal.StringUtils.*;<a name="line.15"></a> <span class="sourceLineNo">016</span><a name="line.16"></a> <span class="sourceLineNo">017</span>import org.apache.juneau.*;<a name="line.17"></a> -<span class="sourceLineNo">018</span>import org.apache.juneau.parser.*;<a name="line.18"></a> -<span class="sourceLineNo">019</span>import org.apache.juneau.serializer.*;<a name="line.19"></a> -<span class="sourceLineNo">020</span>import org.apache.juneau.transform.*;<a name="line.20"></a> -<span class="sourceLineNo">021</span><a name="line.21"></a> -<span class="sourceLineNo">022</span>/**<a name="line.22"></a> -<span class="sourceLineNo">023</span> * Transforms <code><jk>byte</jk>[]</code> arrays to BASE-64 encoded {@link String Strings}.<a name="line.23"></a> -<span class="sourceLineNo">024</span> */<a name="line.24"></a> -<span class="sourceLineNo">025</span>public class ByteArrayBase64Swap extends StringSwap<byte[]> {<a name="line.25"></a> -<span class="sourceLineNo">026</span><a name="line.26"></a> -<span class="sourceLineNo">027</span> /**<a name="line.27"></a> -<span class="sourceLineNo">028</span> * Converts the specified <code><jk>byte</jk>[]</code> to a {@link String}.<a name="line.28"></a> -<span class="sourceLineNo">029</span> */<a name="line.29"></a> -<span class="sourceLineNo">030</span> @Override /* PojoSwap */<a name="line.30"></a> -<span class="sourceLineNo">031</span> public String swap(BeanSession session, byte[] b) throws SerializeException {<a name="line.31"></a> -<span class="sourceLineNo">032</span> try {<a name="line.32"></a> -<span class="sourceLineNo">033</span> return base64Encode(b);<a name="line.33"></a> -<span class="sourceLineNo">034</span> } catch (Exception e) {<a name="line.34"></a> -<span class="sourceLineNo">035</span> throw new SerializeException(e);<a name="line.35"></a> -<span class="sourceLineNo">036</span> }<a name="line.36"></a> -<span class="sourceLineNo">037</span> }<a name="line.37"></a> -<span class="sourceLineNo">038</span><a name="line.38"></a> -<span class="sourceLineNo">039</span> /**<a name="line.39"></a> -<span class="sourceLineNo">040</span> * Converts the specified {@link String} to a <code><jk>byte</jk>[]</code>.<a name="line.40"></a> -<span class="sourceLineNo">041</span> */<a name="line.41"></a> -<span class="sourceLineNo">042</span> @Override /* PojoSwap */<a name="line.42"></a> -<span class="sourceLineNo">043</span> public byte[] unswap(BeanSession session, String s, ClassMeta<?> hint) throws ParseException {<a name="line.43"></a> -<span class="sourceLineNo">044</span> try {<a name="line.44"></a> -<span class="sourceLineNo">045</span> return base64Decode(s);<a name="line.45"></a> -<span class="sourceLineNo">046</span> } catch (Exception e) {<a name="line.46"></a> -<span class="sourceLineNo">047</span> throw new ParseException(e);<a name="line.47"></a> -<span class="sourceLineNo">048</span> }<a name="line.48"></a> -<span class="sourceLineNo">049</span> }<a name="line.49"></a> -<span class="sourceLineNo">050</span>}<a name="line.50"></a> +<span class="sourceLineNo">018</span>import org.apache.juneau.transform.*;<a name="line.18"></a> +<span class="sourceLineNo">019</span><a name="line.19"></a> +<span class="sourceLineNo">020</span>/**<a name="line.20"></a> +<span class="sourceLineNo">021</span> * Transforms <code><jk>byte</jk>[]</code> arrays to BASE-64 encoded {@link String Strings}.<a name="line.21"></a> +<span class="sourceLineNo">022</span> */<a name="line.22"></a> +<span class="sourceLineNo">023</span>public class ByteArrayBase64Swap extends StringSwap<byte[]> {<a name="line.23"></a> +<span class="sourceLineNo">024</span><a name="line.24"></a> +<span class="sourceLineNo">025</span> /**<a name="line.25"></a> +<span class="sourceLineNo">026</span> * Converts the specified <code><jk>byte</jk>[]</code> to a {@link String}.<a name="line.26"></a> +<span class="sourceLineNo">027</span> */<a name="line.27"></a> +<span class="sourceLineNo">028</span> @Override /* PojoSwap */<a name="line.28"></a> +<span class="sourceLineNo">029</span> public String swap(BeanSession session, byte[] b) throws Exception {<a name="line.29"></a> +<span class="sourceLineNo">030</span> return base64Encode(b);<a name="line.30"></a> +<span class="sourceLineNo">031</span> }<a name="line.31"></a> +<span class="sourceLineNo">032</span><a name="line.32"></a> +<span class="sourceLineNo">033</span> /**<a name="line.33"></a> +<span class="sourceLineNo">034</span> * Converts the specified {@link String} to a <code><jk>byte</jk>[]</code>.<a name="line.34"></a> +<span class="sourceLineNo">035</span> */<a name="line.35"></a> +<span class="sourceLineNo">036</span> @Override /* PojoSwap */<a name="line.36"></a> +<span class="sourceLineNo">037</span> public byte[] unswap(BeanSession session, String s, ClassMeta<?> hint) throws Exception {<a name="line.37"></a> +<span class="sourceLineNo">038</span> return base64Decode(s);<a name="line.38"></a> +<span class="sourceLineNo">039</span> }<a name="line.39"></a> +<span class="sourceLineNo">040</span>}<a name="line.40"></a> http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarLongSwap.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarLongSwap.html b/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarLongSwap.html index 4ea6d99..ad2de9a 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarLongSwap.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarLongSwap.html @@ -23,41 +23,36 @@ <span class="sourceLineNo">015</span>import java.util.*;<a name="line.15"></a> <span class="sourceLineNo">016</span><a name="line.16"></a> <span class="sourceLineNo">017</span>import org.apache.juneau.*;<a name="line.17"></a> -<span class="sourceLineNo">018</span>import org.apache.juneau.parser.*;<a name="line.18"></a> -<span class="sourceLineNo">019</span>import org.apache.juneau.transform.*;<a name="line.19"></a> -<span class="sourceLineNo">020</span><a name="line.20"></a> -<span class="sourceLineNo">021</span>/**<a name="line.21"></a> -<span class="sourceLineNo">022</span> * Transforms {@link Calendar Calendars} to {@link Long Longs} using {@code Calender.getTime().getTime()}.<a name="line.22"></a> -<span class="sourceLineNo">023</span> */<a name="line.23"></a> -<span class="sourceLineNo">024</span>public class CalendarLongSwap extends PojoSwap<Calendar,Long> {<a name="line.24"></a> -<span class="sourceLineNo">025</span><a name="line.25"></a> -<span class="sourceLineNo">026</span> /**<a name="line.26"></a> -<span class="sourceLineNo">027</span> * Converts the specified {@link Calendar} to a {@link Long}.<a name="line.27"></a> -<span class="sourceLineNo">028</span> */<a name="line.28"></a> -<span class="sourceLineNo">029</span> @Override /* PojoSwap */<a name="line.29"></a> -<span class="sourceLineNo">030</span> public Long swap(BeanSession session, Calendar o) {<a name="line.30"></a> -<span class="sourceLineNo">031</span> return o.getTime().getTime();<a name="line.31"></a> -<span class="sourceLineNo">032</span> }<a name="line.32"></a> -<span class="sourceLineNo">033</span><a name="line.33"></a> -<span class="sourceLineNo">034</span> /**<a name="line.34"></a> -<span class="sourceLineNo">035</span> * Converts the specified {@link Long} to a {@link Calendar}.<a name="line.35"></a> -<span class="sourceLineNo">036</span> */<a name="line.36"></a> -<span class="sourceLineNo">037</span> @Override /* PojoSwap */<a name="line.37"></a> -<span class="sourceLineNo">038</span> @SuppressWarnings("unchecked")<a name="line.38"></a> -<span class="sourceLineNo">039</span> public Calendar unswap(BeanSession session, Long o, ClassMeta<?> hint) throws ParseException {<a name="line.39"></a> -<span class="sourceLineNo">040</span> ClassMeta<? extends Calendar> tt;<a name="line.40"></a> -<span class="sourceLineNo">041</span> try {<a name="line.41"></a> -<span class="sourceLineNo">042</span> if (hint == null || ! hint.canCreateNewInstance())<a name="line.42"></a> -<span class="sourceLineNo">043</span> hint = session.getClassMeta(GregorianCalendar.class);<a name="line.43"></a> -<span class="sourceLineNo">044</span> tt = (ClassMeta<? extends Calendar>)hint;<a name="line.44"></a> -<span class="sourceLineNo">045</span> Calendar c = tt.newInstance();<a name="line.45"></a> -<span class="sourceLineNo">046</span> c.setTimeInMillis(o);<a name="line.46"></a> -<span class="sourceLineNo">047</span> return c;<a name="line.47"></a> -<span class="sourceLineNo">048</span> } catch (Exception e) {<a name="line.48"></a> -<span class="sourceLineNo">049</span> throw new ParseException(e);<a name="line.49"></a> -<span class="sourceLineNo">050</span> }<a name="line.50"></a> -<span class="sourceLineNo">051</span> }<a name="line.51"></a> -<span class="sourceLineNo">052</span>}<a name="line.52"></a> +<span class="sourceLineNo">018</span>import org.apache.juneau.transform.*;<a name="line.18"></a> +<span class="sourceLineNo">019</span><a name="line.19"></a> +<span class="sourceLineNo">020</span>/**<a name="line.20"></a> +<span class="sourceLineNo">021</span> * Transforms {@link Calendar Calendars} to {@link Long Longs} using {@code Calender.getTime().getTime()}.<a name="line.21"></a> +<span class="sourceLineNo">022</span> */<a name="line.22"></a> +<span class="sourceLineNo">023</span>public class CalendarLongSwap extends PojoSwap<Calendar,Long> {<a name="line.23"></a> +<span class="sourceLineNo">024</span><a name="line.24"></a> +<span class="sourceLineNo">025</span> /**<a name="line.25"></a> +<span class="sourceLineNo">026</span> * Converts the specified {@link Calendar} to a {@link Long}.<a name="line.26"></a> +<span class="sourceLineNo">027</span> */<a name="line.27"></a> +<span class="sourceLineNo">028</span> @Override /* PojoSwap */<a name="line.28"></a> +<span class="sourceLineNo">029</span> public Long swap(BeanSession session, Calendar o) {<a name="line.29"></a> +<span class="sourceLineNo">030</span> return o.getTime().getTime();<a name="line.30"></a> +<span class="sourceLineNo">031</span> }<a name="line.31"></a> +<span class="sourceLineNo">032</span><a name="line.32"></a> +<span class="sourceLineNo">033</span> /**<a name="line.33"></a> +<span class="sourceLineNo">034</span> * Converts the specified {@link Long} to a {@link Calendar}.<a name="line.34"></a> +<span class="sourceLineNo">035</span> */<a name="line.35"></a> +<span class="sourceLineNo">036</span> @Override /* PojoSwap */<a name="line.36"></a> +<span class="sourceLineNo">037</span> @SuppressWarnings("unchecked")<a name="line.37"></a> +<span class="sourceLineNo">038</span> public Calendar unswap(BeanSession session, Long o, ClassMeta<?> hint) throws Exception {<a name="line.38"></a> +<span class="sourceLineNo">039</span> ClassMeta<? extends Calendar> tt;<a name="line.39"></a> +<span class="sourceLineNo">040</span> if (hint == null || ! hint.canCreateNewInstance())<a name="line.40"></a> +<span class="sourceLineNo">041</span> hint = session.getClassMeta(GregorianCalendar.class);<a name="line.41"></a> +<span class="sourceLineNo">042</span> tt = (ClassMeta<? extends Calendar>)hint;<a name="line.42"></a> +<span class="sourceLineNo">043</span> Calendar c = tt.newInstance();<a name="line.43"></a> +<span class="sourceLineNo">044</span> c.setTimeInMillis(o);<a name="line.44"></a> +<span class="sourceLineNo">045</span> return c;<a name="line.45"></a> +<span class="sourceLineNo">046</span> }<a name="line.46"></a> +<span class="sourceLineNo">047</span>}<a name="line.47"></a> http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarMapSwap.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarMapSwap.html b/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarMapSwap.html index c9c8ddb..3d90d80 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarMapSwap.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transforms/CalendarMapSwap.html @@ -23,49 +23,44 @@ <span class="sourceLineNo">015</span>import java.util.*;<a name="line.15"></a> <span class="sourceLineNo">016</span><a name="line.16"></a> <span class="sourceLineNo">017</span>import org.apache.juneau.*;<a name="line.17"></a> -<span class="sourceLineNo">018</span>import org.apache.juneau.parser.*;<a name="line.18"></a> -<span class="sourceLineNo">019</span>import org.apache.juneau.transform.*;<a name="line.19"></a> -<span class="sourceLineNo">020</span><a name="line.20"></a> -<span class="sourceLineNo">021</span>/**<a name="line.21"></a> -<span class="sourceLineNo">022</span> * Transforms {@link Calendar Calendars} to {@link Map Maps} of the format <code>{time:long,timeZone:string}</code>.<a name="line.22"></a> -<span class="sourceLineNo">023</span> */<a name="line.23"></a> -<span class="sourceLineNo">024</span>@SuppressWarnings("rawtypes")<a name="line.24"></a> -<span class="sourceLineNo">025</span>public class CalendarMapSwap extends PojoSwap<Calendar,Map> {<a name="line.25"></a> -<span class="sourceLineNo">026</span><a name="line.26"></a> -<span class="sourceLineNo">027</span> /**<a name="line.27"></a> -<span class="sourceLineNo">028</span> * Converts the specified {@link Calendar} to a {@link Map}.<a name="line.28"></a> -<span class="sourceLineNo">029</span> */<a name="line.29"></a> -<span class="sourceLineNo">030</span> @Override /* PojoSwap */<a name="line.30"></a> -<span class="sourceLineNo">031</span> public Map swap(BeanSession session, Calendar o) {<a name="line.31"></a> -<span class="sourceLineNo">032</span> ObjectMap m = new ObjectMap();<a name="line.32"></a> -<span class="sourceLineNo">033</span> m.put("time", o.getTime().getTime());<a name="line.33"></a> -<span class="sourceLineNo">034</span> m.put("timeZone", o.getTimeZone().getID());<a name="line.34"></a> -<span class="sourceLineNo">035</span> return m;<a name="line.35"></a> -<span class="sourceLineNo">036</span> }<a name="line.36"></a> -<span class="sourceLineNo">037</span><a name="line.37"></a> -<span class="sourceLineNo">038</span> /**<a name="line.38"></a> -<span class="sourceLineNo">039</span> * Converts the specified {@link Map} to a {@link Calendar}.<a name="line.39"></a> -<span class="sourceLineNo">040</span> */<a name="line.40"></a> -<span class="sourceLineNo">041</span> @Override /* PojoSwap */<a name="line.41"></a> -<span class="sourceLineNo">042</span> @SuppressWarnings("unchecked")<a name="line.42"></a> -<span class="sourceLineNo">043</span> public Calendar unswap(BeanSession session, Map o, ClassMeta<?> hint) throws ParseException {<a name="line.43"></a> -<span class="sourceLineNo">044</span> ClassMeta<? extends Calendar> tt;<a name="line.44"></a> -<span class="sourceLineNo">045</span> try {<a name="line.45"></a> -<span class="sourceLineNo">046</span> if (hint == null || ! hint.canCreateNewInstance())<a name="line.46"></a> -<span class="sourceLineNo">047</span> hint = session.getClassMeta(GregorianCalendar.class);<a name="line.47"></a> -<span class="sourceLineNo">048</span> tt = (ClassMeta<? extends Calendar>)hint;<a name="line.48"></a> -<span class="sourceLineNo">049</span> long time = Long.parseLong(o.get("time").toString());<a name="line.49"></a> -<span class="sourceLineNo">050</span> String timeZone = o.get("timeZone").toString();<a name="line.50"></a> -<span class="sourceLineNo">051</span> Date d = new Date(time);<a name="line.51"></a> -<span class="sourceLineNo">052</span> Calendar c = tt.newInstance();<a name="line.52"></a> -<span class="sourceLineNo">053</span> c.setTime(d);<a name="line.53"></a> -<span class="sourceLineNo">054</span> c.setTimeZone(TimeZone.getTimeZone(timeZone));<a name="line.54"></a> -<span class="sourceLineNo">055</span> return c;<a name="line.55"></a> -<span class="sourceLineNo">056</span> } catch (Exception e) {<a name="line.56"></a> -<span class="sourceLineNo">057</span> throw new ParseException(e);<a name="line.57"></a> -<span class="sourceLineNo">058</span> }<a name="line.58"></a> -<span class="sourceLineNo">059</span> }<a name="line.59"></a> -<span class="sourceLineNo">060</span>}<a name="line.60"></a> +<span class="sourceLineNo">018</span>import org.apache.juneau.transform.*;<a name="line.18"></a> +<span class="sourceLineNo">019</span><a name="line.19"></a> +<span class="sourceLineNo">020</span>/**<a name="line.20"></a> +<span class="sourceLineNo">021</span> * Transforms {@link Calendar Calendars} to {@link Map Maps} of the format <code>{time:long,timeZone:string}</code>.<a name="line.21"></a> +<span class="sourceLineNo">022</span> */<a name="line.22"></a> +<span class="sourceLineNo">023</span>@SuppressWarnings("rawtypes")<a name="line.23"></a> +<span class="sourceLineNo">024</span>public class CalendarMapSwap extends PojoSwap<Calendar,Map> {<a name="line.24"></a> +<span class="sourceLineNo">025</span><a name="line.25"></a> +<span class="sourceLineNo">026</span> /**<a name="line.26"></a> +<span class="sourceLineNo">027</span> * Converts the specified {@link Calendar} to a {@link Map}.<a name="line.27"></a> +<span class="sourceLineNo">028</span> */<a name="line.28"></a> +<span class="sourceLineNo">029</span> @Override /* PojoSwap */<a name="line.29"></a> +<span class="sourceLineNo">030</span> public Map swap(BeanSession session, Calendar o) {<a name="line.30"></a> +<span class="sourceLineNo">031</span> ObjectMap m = new ObjectMap();<a name="line.31"></a> +<span class="sourceLineNo">032</span> m.put("time", o.getTime().getTime());<a name="line.32"></a> +<span class="sourceLineNo">033</span> m.put("timeZone", o.getTimeZone().getID());<a name="line.33"></a> +<span class="sourceLineNo">034</span> return m;<a name="line.34"></a> +<span class="sourceLineNo">035</span> }<a name="line.35"></a> +<span class="sourceLineNo">036</span><a name="line.36"></a> +<span class="sourceLineNo">037</span> /**<a name="line.37"></a> +<span class="sourceLineNo">038</span> * Converts the specified {@link Map} to a {@link Calendar}.<a name="line.38"></a> +<span class="sourceLineNo">039</span> */<a name="line.39"></a> +<span class="sourceLineNo">040</span> @Override /* PojoSwap */<a name="line.40"></a> +<span class="sourceLineNo">041</span> @SuppressWarnings("unchecked")<a name="line.41"></a> +<span class="sourceLineNo">042</span> public Calendar unswap(BeanSession session, Map o, ClassMeta<?> hint) throws Exception {<a name="line.42"></a> +<span class="sourceLineNo">043</span> ClassMeta<? extends Calendar> tt;<a name="line.43"></a> +<span class="sourceLineNo">044</span> if (hint == null || ! hint.canCreateNewInstance())<a name="line.44"></a> +<span class="sourceLineNo">045</span> hint = session.getClassMeta(GregorianCalendar.class);<a name="line.45"></a> +<span class="sourceLineNo">046</span> tt = (ClassMeta<? extends Calendar>)hint;<a name="line.46"></a> +<span class="sourceLineNo">047</span> long time = Long.parseLong(o.get("time").toString());<a name="line.47"></a> +<span class="sourceLineNo">048</span> String timeZone = o.get("timeZone").toString();<a name="line.48"></a> +<span class="sourceLineNo">049</span> Date d = new Date(time);<a name="line.49"></a> +<span class="sourceLineNo">050</span> Calendar c = tt.newInstance();<a name="line.50"></a> +<span class="sourceLineNo">051</span> c.setTime(d);<a name="line.51"></a> +<span class="sourceLineNo">052</span> c.setTimeZone(TimeZone.getTimeZone(timeZone));<a name="line.52"></a> +<span class="sourceLineNo">053</span> return c;<a name="line.53"></a> +<span class="sourceLineNo">054</span> }<a name="line.54"></a> +<span class="sourceLineNo">055</span>}<a name="line.55"></a> http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transforms/DateLongSwap.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transforms/DateLongSwap.html b/content/site/apidocs/src-html/org/apache/juneau/transforms/DateLongSwap.html index daa5e1f..9bea08c 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transforms/DateLongSwap.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transforms/DateLongSwap.html @@ -45,7 +45,7 @@ <span class="sourceLineNo">037</span> * Converts the specified {@link Long} to a {@link Date}.<a name="line.37"></a> <span class="sourceLineNo">038</span> */<a name="line.38"></a> <span class="sourceLineNo">039</span> @Override /* PojoSwap */<a name="line.39"></a> -<span class="sourceLineNo">040</span> public Date unswap(BeanSession session, Long o, ClassMeta<?> hint) throws ParseException {<a name="line.40"></a> +<span class="sourceLineNo">040</span> public Date unswap(BeanSession session, Long o, ClassMeta<?> hint) throws Exception {<a name="line.40"></a> <span class="sourceLineNo">041</span> Class<?> c = (hint == null ? java.util.Date.class : hint.getInnerClass());<a name="line.41"></a> <span class="sourceLineNo">042</span> if (c == java.util.Date.class)<a name="line.42"></a> <span class="sourceLineNo">043</span> return new java.util.Date(o);<a name="line.43"></a> http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transforms/DateMapSwap.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transforms/DateMapSwap.html b/content/site/apidocs/src-html/org/apache/juneau/transforms/DateMapSwap.html index ddc5cef..47a6d01 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transforms/DateMapSwap.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transforms/DateMapSwap.html @@ -48,7 +48,7 @@ <span class="sourceLineNo">040</span> * Converts the specified {@link Map} to a {@link Date}.<a name="line.40"></a> <span class="sourceLineNo">041</span> */<a name="line.41"></a> <span class="sourceLineNo">042</span> @Override /* PojoSwap */<a name="line.42"></a> -<span class="sourceLineNo">043</span> public Date unswap(BeanSession session, Map o, ClassMeta<?> hint) throws ParseException {<a name="line.43"></a> +<span class="sourceLineNo">043</span> public Date unswap(BeanSession session, Map o, ClassMeta<?> hint) throws Exception {<a name="line.43"></a> <span class="sourceLineNo">044</span> Class<?> c = (hint == null ? java.util.Date.class : hint.getInnerClass());<a name="line.44"></a> <span class="sourceLineNo">045</span> long l = Long.parseLong(((Map<?,?>)o).get("time").toString());<a name="line.45"></a> <span class="sourceLineNo">046</span> if (c == java.util.Date.class)<a name="line.46"></a> http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Html.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Html.html b/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Html.html index b0ee597..a58cf63 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Html.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Html.html @@ -28,95 +28,87 @@ <span class="sourceLineNo">020</span>import org.apache.juneau.html.*;<a name="line.20"></a> <span class="sourceLineNo">021</span>import org.apache.juneau.json.*;<a name="line.21"></a> <span class="sourceLineNo">022</span>import org.apache.juneau.parser.*;<a name="line.22"></a> -<span class="sourceLineNo">023</span>import org.apache.juneau.serializer.*;<a name="line.23"></a> -<span class="sourceLineNo">024</span>import org.apache.juneau.transform.*;<a name="line.24"></a> -<span class="sourceLineNo">025</span>import org.apache.juneau.xml.*;<a name="line.25"></a> -<span class="sourceLineNo">026</span><a name="line.26"></a> -<span class="sourceLineNo">027</span>/**<a name="line.27"></a> -<span class="sourceLineNo">028</span> * Transforms the contents of a {@link Reader} into an {@code Object}.<a name="line.28"></a> -<span class="sourceLineNo">029</span> *<a name="line.29"></a> -<span class="sourceLineNo">030</span> * <h5 class='section'>Description:</h5><a name="line.30"></a> -<span class="sourceLineNo">031</span> *<a name="line.31"></a> -<span class="sourceLineNo">032</span> * The {@code Reader} must contain JSON, Juneau-generated XML (output from {@link XmlSerializer}), or Juneau-generated<a name="line.32"></a> -<span class="sourceLineNo">033</span> * HTML (output from {@link JsonSerializer}) in order to be parsed correctly.<a name="line.33"></a> -<span class="sourceLineNo">034</span> *<a name="line.34"></a> -<span class="sourceLineNo">035</span> * <p><a name="line.35"></a> -<span class="sourceLineNo">036</span> * Useful for serializing models that contain {@code Readers} created by {@code RestCall} instances.<a name="line.36"></a> -<span class="sourceLineNo">037</span> *<a name="line.37"></a> -<span class="sourceLineNo">038</span> * <p><a name="line.38"></a> -<span class="sourceLineNo">039</span> * This is a one-way transform, since {@code Readers} cannot be reconstituted.<a name="line.39"></a> -<span class="sourceLineNo">040</span> *<a name="line.40"></a> -<span class="sourceLineNo">041</span> * <h6 class='topic'>Behavior-specific subclasses</h6><a name="line.41"></a> -<span class="sourceLineNo">042</span> *<a name="line.42"></a> -<span class="sourceLineNo">043</span> * The following direct subclasses are provided for convenience:<a name="line.43"></a> -<span class="sourceLineNo">044</span> * <ul><a name="line.44"></a> -<span class="sourceLineNo">045</span> * <li>{@link Json} - Parses JSON text.<a name="line.45"></a> -<span class="sourceLineNo">046</span> * <li>{@link Xml} - Parses XML text.<a name="line.46"></a> -<span class="sourceLineNo">047</span> * <li>{@link Html} - Parses HTML text.<a name="line.47"></a> -<span class="sourceLineNo">048</span> * <li>{@link PlainText} - Parses plain text.<a name="line.48"></a> -<span class="sourceLineNo">049</span> * </ul><a name="line.49"></a> -<span class="sourceLineNo">050</span> */<a name="line.50"></a> -<span class="sourceLineNo">051</span>public class ReaderSwap extends PojoSwap<Reader,Object> {<a name="line.51"></a> -<span class="sourceLineNo">052</span><a name="line.52"></a> -<span class="sourceLineNo">053</span> /** Reader transform for reading JSON text. */<a name="line.53"></a> -<span class="sourceLineNo">054</span> public static class Json extends ReaderSwap {<a name="line.54"></a> -<span class="sourceLineNo">055</span> /** Constructor */<a name="line.55"></a> -<span class="sourceLineNo">056</span> public Json() {<a name="line.56"></a> -<span class="sourceLineNo">057</span> super(JsonParser.DEFAULT);<a name="line.57"></a> -<span class="sourceLineNo">058</span> }<a name="line.58"></a> -<span class="sourceLineNo">059</span> }<a name="line.59"></a> -<span class="sourceLineNo">060</span><a name="line.60"></a> -<span class="sourceLineNo">061</span> /** Reader transform for reading XML text. */<a name="line.61"></a> -<span class="sourceLineNo">062</span> public static class Xml extends ReaderSwap {<a name="line.62"></a> -<span class="sourceLineNo">063</span> /** Constructor */<a name="line.63"></a> -<span class="sourceLineNo">064</span> public Xml() {<a name="line.64"></a> -<span class="sourceLineNo">065</span> super(XmlParser.DEFAULT);<a name="line.65"></a> -<span class="sourceLineNo">066</span> }<a name="line.66"></a> -<span class="sourceLineNo">067</span> }<a name="line.67"></a> -<span class="sourceLineNo">068</span><a name="line.68"></a> -<span class="sourceLineNo">069</span> /** Reader transform for reading HTML text. */<a name="line.69"></a> -<span class="sourceLineNo">070</span> public static class Html extends ReaderSwap {<a name="line.70"></a> -<span class="sourceLineNo">071</span> /** Constructor */<a name="line.71"></a> -<span class="sourceLineNo">072</span> public Html() {<a name="line.72"></a> -<span class="sourceLineNo">073</span> super(HtmlParser.DEFAULT);<a name="line.73"></a> -<span class="sourceLineNo">074</span> }<a name="line.74"></a> -<span class="sourceLineNo">075</span> }<a name="line.75"></a> -<span class="sourceLineNo">076</span><a name="line.76"></a> -<span class="sourceLineNo">077</span> /** Reader transform for reading plain text. */<a name="line.77"></a> -<span class="sourceLineNo">078</span> public static class PlainText extends ReaderSwap {<a name="line.78"></a> -<span class="sourceLineNo">079</span> /** Constructor */<a name="line.79"></a> -<span class="sourceLineNo">080</span> public PlainText() {<a name="line.80"></a> -<span class="sourceLineNo">081</span> super(null);<a name="line.81"></a> -<span class="sourceLineNo">082</span> }<a name="line.82"></a> -<span class="sourceLineNo">083</span> }<a name="line.83"></a> -<span class="sourceLineNo">084</span><a name="line.84"></a> -<span class="sourceLineNo">085</span> /** The parser to use to parse the contents of the Reader. */<a name="line.85"></a> -<span class="sourceLineNo">086</span> private ReaderParser parser;<a name="line.86"></a> -<span class="sourceLineNo">087</span><a name="line.87"></a> -<span class="sourceLineNo">088</span> /**<a name="line.88"></a> -<span class="sourceLineNo">089</span> * @param parser The parser to use to convert the contents of the reader to Java objects.<a name="line.89"></a> -<span class="sourceLineNo">090</span> */<a name="line.90"></a> -<span class="sourceLineNo">091</span> public ReaderSwap(ReaderParser parser) {<a name="line.91"></a> -<span class="sourceLineNo">092</span> this.parser = parser;<a name="line.92"></a> -<span class="sourceLineNo">093</span> }<a name="line.93"></a> -<span class="sourceLineNo">094</span><a name="line.94"></a> -<span class="sourceLineNo">095</span> /**<a name="line.95"></a> -<span class="sourceLineNo">096</span> * Converts the specified {@link Reader} to an {@link Object} whose type is determined by the contents of the reader.<a name="line.96"></a> -<span class="sourceLineNo">097</span> */<a name="line.97"></a> -<span class="sourceLineNo">098</span> @Override /* PojoSwap */<a name="line.98"></a> -<span class="sourceLineNo">099</span> public Object swap(BeanSession session, Reader o) throws SerializeException {<a name="line.99"></a> -<span class="sourceLineNo">100</span> try {<a name="line.100"></a> -<span class="sourceLineNo">101</span> if (parser == null)<a name="line.101"></a> -<span class="sourceLineNo">102</span> return read(o);<a name="line.102"></a> -<span class="sourceLineNo">103</span> return parser.parse(o, Object.class);<a name="line.103"></a> -<span class="sourceLineNo">104</span> } catch (IOException e) {<a name="line.104"></a> -<span class="sourceLineNo">105</span> return e.getLocalizedMessage();<a name="line.105"></a> -<span class="sourceLineNo">106</span> } catch (Exception e) {<a name="line.106"></a> -<span class="sourceLineNo">107</span> throw new SerializeException("ReaderSwap could not transform object of type ''{0}''",<a name="line.107"></a> -<span class="sourceLineNo">108</span> o == null ? null : o.getClass().getName()).initCause(e);<a name="line.108"></a> -<span class="sourceLineNo">109</span> }<a name="line.109"></a> -<span class="sourceLineNo">110</span> }<a name="line.110"></a> -<span class="sourceLineNo">111</span>}<a name="line.111"></a> +<span class="sourceLineNo">023</span>import org.apache.juneau.transform.*;<a name="line.23"></a> +<span class="sourceLineNo">024</span>import org.apache.juneau.xml.*;<a name="line.24"></a> +<span class="sourceLineNo">025</span><a name="line.25"></a> +<span class="sourceLineNo">026</span>/**<a name="line.26"></a> +<span class="sourceLineNo">027</span> * Transforms the contents of a {@link Reader} into an {@code Object}.<a name="line.27"></a> +<span class="sourceLineNo">028</span> *<a name="line.28"></a> +<span class="sourceLineNo">029</span> * <h5 class='section'>Description:</h5><a name="line.29"></a> +<span class="sourceLineNo">030</span> *<a name="line.30"></a> +<span class="sourceLineNo">031</span> * The {@code Reader} must contain JSON, Juneau-generated XML (output from {@link XmlSerializer}), or Juneau-generated<a name="line.31"></a> +<span class="sourceLineNo">032</span> * HTML (output from {@link JsonSerializer}) in order to be parsed correctly.<a name="line.32"></a> +<span class="sourceLineNo">033</span> *<a name="line.33"></a> +<span class="sourceLineNo">034</span> * <p><a name="line.34"></a> +<span class="sourceLineNo">035</span> * Useful for serializing models that contain {@code Readers} created by {@code RestCall} instances.<a name="line.35"></a> +<span class="sourceLineNo">036</span> *<a name="line.36"></a> +<span class="sourceLineNo">037</span> * <p><a name="line.37"></a> +<span class="sourceLineNo">038</span> * This is a one-way transform, since {@code Readers} cannot be reconstituted.<a name="line.38"></a> +<span class="sourceLineNo">039</span> *<a name="line.39"></a> +<span class="sourceLineNo">040</span> * <h6 class='topic'>Behavior-specific subclasses</h6><a name="line.40"></a> +<span class="sourceLineNo">041</span> *<a name="line.41"></a> +<span class="sourceLineNo">042</span> * The following direct subclasses are provided for convenience:<a name="line.42"></a> +<span class="sourceLineNo">043</span> * <ul><a name="line.43"></a> +<span class="sourceLineNo">044</span> * <li>{@link Json} - Parses JSON text.<a name="line.44"></a> +<span class="sourceLineNo">045</span> * <li>{@link Xml} - Parses XML text.<a name="line.45"></a> +<span class="sourceLineNo">046</span> * <li>{@link Html} - Parses HTML text.<a name="line.46"></a> +<span class="sourceLineNo">047</span> * <li>{@link PlainText} - Parses plain text.<a name="line.47"></a> +<span class="sourceLineNo">048</span> * </ul><a name="line.48"></a> +<span class="sourceLineNo">049</span> */<a name="line.49"></a> +<span class="sourceLineNo">050</span>public class ReaderSwap extends PojoSwap<Reader,Object> {<a name="line.50"></a> +<span class="sourceLineNo">051</span><a name="line.51"></a> +<span class="sourceLineNo">052</span> /** Reader transform for reading JSON text. */<a name="line.52"></a> +<span class="sourceLineNo">053</span> public static class Json extends ReaderSwap {<a name="line.53"></a> +<span class="sourceLineNo">054</span> /** Constructor */<a name="line.54"></a> +<span class="sourceLineNo">055</span> public Json() {<a name="line.55"></a> +<span class="sourceLineNo">056</span> super(JsonParser.DEFAULT);<a name="line.56"></a> +<span class="sourceLineNo">057</span> }<a name="line.57"></a> +<span class="sourceLineNo">058</span> }<a name="line.58"></a> +<span class="sourceLineNo">059</span><a name="line.59"></a> +<span class="sourceLineNo">060</span> /** Reader transform for reading XML text. */<a name="line.60"></a> +<span class="sourceLineNo">061</span> public static class Xml extends ReaderSwap {<a name="line.61"></a> +<span class="sourceLineNo">062</span> /** Constructor */<a name="line.62"></a> +<span class="sourceLineNo">063</span> public Xml() {<a name="line.63"></a> +<span class="sourceLineNo">064</span> super(XmlParser.DEFAULT);<a name="line.64"></a> +<span class="sourceLineNo">065</span> }<a name="line.65"></a> +<span class="sourceLineNo">066</span> }<a name="line.66"></a> +<span class="sourceLineNo">067</span><a name="line.67"></a> +<span class="sourceLineNo">068</span> /** Reader transform for reading HTML text. */<a name="line.68"></a> +<span class="sourceLineNo">069</span> public static class Html extends ReaderSwap {<a name="line.69"></a> +<span class="sourceLineNo">070</span> /** Constructor */<a name="line.70"></a> +<span class="sourceLineNo">071</span> public Html() {<a name="line.71"></a> +<span class="sourceLineNo">072</span> super(HtmlParser.DEFAULT);<a name="line.72"></a> +<span class="sourceLineNo">073</span> }<a name="line.73"></a> +<span class="sourceLineNo">074</span> }<a name="line.74"></a> +<span class="sourceLineNo">075</span><a name="line.75"></a> +<span class="sourceLineNo">076</span> /** Reader transform for reading plain text. */<a name="line.76"></a> +<span class="sourceLineNo">077</span> public static class PlainText extends ReaderSwap {<a name="line.77"></a> +<span class="sourceLineNo">078</span> /** Constructor */<a name="line.78"></a> +<span class="sourceLineNo">079</span> public PlainText() {<a name="line.79"></a> +<span class="sourceLineNo">080</span> super(null);<a name="line.80"></a> +<span class="sourceLineNo">081</span> }<a name="line.81"></a> +<span class="sourceLineNo">082</span> }<a name="line.82"></a> +<span class="sourceLineNo">083</span><a name="line.83"></a> +<span class="sourceLineNo">084</span> /** The parser to use to parse the contents of the Reader. */<a name="line.84"></a> +<span class="sourceLineNo">085</span> private ReaderParser parser;<a name="line.85"></a> +<span class="sourceLineNo">086</span><a name="line.86"></a> +<span class="sourceLineNo">087</span> /**<a name="line.87"></a> +<span class="sourceLineNo">088</span> * @param parser The parser to use to convert the contents of the reader to Java objects.<a name="line.88"></a> +<span class="sourceLineNo">089</span> */<a name="line.89"></a> +<span class="sourceLineNo">090</span> public ReaderSwap(ReaderParser parser) {<a name="line.90"></a> +<span class="sourceLineNo">091</span> this.parser = parser;<a name="line.91"></a> +<span class="sourceLineNo">092</span> }<a name="line.92"></a> +<span class="sourceLineNo">093</span><a name="line.93"></a> +<span class="sourceLineNo">094</span> /**<a name="line.94"></a> +<span class="sourceLineNo">095</span> * Converts the specified {@link Reader} to an {@link Object} whose type is determined by the contents of the reader.<a name="line.95"></a> +<span class="sourceLineNo">096</span> */<a name="line.96"></a> +<span class="sourceLineNo">097</span> @Override /* PojoSwap */<a name="line.97"></a> +<span class="sourceLineNo">098</span> public Object swap(BeanSession session, Reader o) throws Exception {<a name="line.98"></a> +<span class="sourceLineNo">099</span> if (parser == null)<a name="line.99"></a> +<span class="sourceLineNo">100</span> return read(o);<a name="line.100"></a> +<span class="sourceLineNo">101</span> return parser.parse(o, Object.class);<a name="line.101"></a> +<span class="sourceLineNo">102</span> }<a name="line.102"></a> +<span class="sourceLineNo">103</span>}<a name="line.103"></a> http://git-wip-us.apache.org/repos/asf/incubator-juneau-website/blob/62afb533/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Json.html ---------------------------------------------------------------------- diff --git a/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Json.html b/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Json.html index b0ee597..a58cf63 100644 --- a/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Json.html +++ b/content/site/apidocs/src-html/org/apache/juneau/transforms/ReaderSwap.Json.html @@ -28,95 +28,87 @@ <span class="sourceLineNo">020</span>import org.apache.juneau.html.*;<a name="line.20"></a> <span class="sourceLineNo">021</span>import org.apache.juneau.json.*;<a name="line.21"></a> <span class="sourceLineNo">022</span>import org.apache.juneau.parser.*;<a name="line.22"></a> -<span class="sourceLineNo">023</span>import org.apache.juneau.serializer.*;<a name="line.23"></a> -<span class="sourceLineNo">024</span>import org.apache.juneau.transform.*;<a name="line.24"></a> -<span class="sourceLineNo">025</span>import org.apache.juneau.xml.*;<a name="line.25"></a> -<span class="sourceLineNo">026</span><a name="line.26"></a> -<span class="sourceLineNo">027</span>/**<a name="line.27"></a> -<span class="sourceLineNo">028</span> * Transforms the contents of a {@link Reader} into an {@code Object}.<a name="line.28"></a> -<span class="sourceLineNo">029</span> *<a name="line.29"></a> -<span class="sourceLineNo">030</span> * <h5 class='section'>Description:</h5><a name="line.30"></a> -<span class="sourceLineNo">031</span> *<a name="line.31"></a> -<span class="sourceLineNo">032</span> * The {@code Reader} must contain JSON, Juneau-generated XML (output from {@link XmlSerializer}), or Juneau-generated<a name="line.32"></a> -<span class="sourceLineNo">033</span> * HTML (output from {@link JsonSerializer}) in order to be parsed correctly.<a name="line.33"></a> -<span class="sourceLineNo">034</span> *<a name="line.34"></a> -<span class="sourceLineNo">035</span> * <p><a name="line.35"></a> -<span class="sourceLineNo">036</span> * Useful for serializing models that contain {@code Readers} created by {@code RestCall} instances.<a name="line.36"></a> -<span class="sourceLineNo">037</span> *<a name="line.37"></a> -<span class="sourceLineNo">038</span> * <p><a name="line.38"></a> -<span class="sourceLineNo">039</span> * This is a one-way transform, since {@code Readers} cannot be reconstituted.<a name="line.39"></a> -<span class="sourceLineNo">040</span> *<a name="line.40"></a> -<span class="sourceLineNo">041</span> * <h6 class='topic'>Behavior-specific subclasses</h6><a name="line.41"></a> -<span class="sourceLineNo">042</span> *<a name="line.42"></a> -<span class="sourceLineNo">043</span> * The following direct subclasses are provided for convenience:<a name="line.43"></a> -<span class="sourceLineNo">044</span> * <ul><a name="line.44"></a> -<span class="sourceLineNo">045</span> * <li>{@link Json} - Parses JSON text.<a name="line.45"></a> -<span class="sourceLineNo">046</span> * <li>{@link Xml} - Parses XML text.<a name="line.46"></a> -<span class="sourceLineNo">047</span> * <li>{@link Html} - Parses HTML text.<a name="line.47"></a> -<span class="sourceLineNo">048</span> * <li>{@link PlainText} - Parses plain text.<a name="line.48"></a> -<span class="sourceLineNo">049</span> * </ul><a name="line.49"></a> -<span class="sourceLineNo">050</span> */<a name="line.50"></a> -<span class="sourceLineNo">051</span>public class ReaderSwap extends PojoSwap<Reader,Object> {<a name="line.51"></a> -<span class="sourceLineNo">052</span><a name="line.52"></a> -<span class="sourceLineNo">053</span> /** Reader transform for reading JSON text. */<a name="line.53"></a> -<span class="sourceLineNo">054</span> public static class Json extends ReaderSwap {<a name="line.54"></a> -<span class="sourceLineNo">055</span> /** Constructor */<a name="line.55"></a> -<span class="sourceLineNo">056</span> public Json() {<a name="line.56"></a> -<span class="sourceLineNo">057</span> super(JsonParser.DEFAULT);<a name="line.57"></a> -<span class="sourceLineNo">058</span> }<a name="line.58"></a> -<span class="sourceLineNo">059</span> }<a name="line.59"></a> -<span class="sourceLineNo">060</span><a name="line.60"></a> -<span class="sourceLineNo">061</span> /** Reader transform for reading XML text. */<a name="line.61"></a> -<span class="sourceLineNo">062</span> public static class Xml extends ReaderSwap {<a name="line.62"></a> -<span class="sourceLineNo">063</span> /** Constructor */<a name="line.63"></a> -<span class="sourceLineNo">064</span> public Xml() {<a name="line.64"></a> -<span class="sourceLineNo">065</span> super(XmlParser.DEFAULT);<a name="line.65"></a> -<span class="sourceLineNo">066</span> }<a name="line.66"></a> -<span class="sourceLineNo">067</span> }<a name="line.67"></a> -<span class="sourceLineNo">068</span><a name="line.68"></a> -<span class="sourceLineNo">069</span> /** Reader transform for reading HTML text. */<a name="line.69"></a> -<span class="sourceLineNo">070</span> public static class Html extends ReaderSwap {<a name="line.70"></a> -<span class="sourceLineNo">071</span> /** Constructor */<a name="line.71"></a> -<span class="sourceLineNo">072</span> public Html() {<a name="line.72"></a> -<span class="sourceLineNo">073</span> super(HtmlParser.DEFAULT);<a name="line.73"></a> -<span class="sourceLineNo">074</span> }<a name="line.74"></a> -<span class="sourceLineNo">075</span> }<a name="line.75"></a> -<span class="sourceLineNo">076</span><a name="line.76"></a> -<span class="sourceLineNo">077</span> /** Reader transform for reading plain text. */<a name="line.77"></a> -<span class="sourceLineNo">078</span> public static class PlainText extends ReaderSwap {<a name="line.78"></a> -<span class="sourceLineNo">079</span> /** Constructor */<a name="line.79"></a> -<span class="sourceLineNo">080</span> public PlainText() {<a name="line.80"></a> -<span class="sourceLineNo">081</span> super(null);<a name="line.81"></a> -<span class="sourceLineNo">082</span> }<a name="line.82"></a> -<span class="sourceLineNo">083</span> }<a name="line.83"></a> -<span class="sourceLineNo">084</span><a name="line.84"></a> -<span class="sourceLineNo">085</span> /** The parser to use to parse the contents of the Reader. */<a name="line.85"></a> -<span class="sourceLineNo">086</span> private ReaderParser parser;<a name="line.86"></a> -<span class="sourceLineNo">087</span><a name="line.87"></a> -<span class="sourceLineNo">088</span> /**<a name="line.88"></a> -<span class="sourceLineNo">089</span> * @param parser The parser to use to convert the contents of the reader to Java objects.<a name="line.89"></a> -<span class="sourceLineNo">090</span> */<a name="line.90"></a> -<span class="sourceLineNo">091</span> public ReaderSwap(ReaderParser parser) {<a name="line.91"></a> -<span class="sourceLineNo">092</span> this.parser = parser;<a name="line.92"></a> -<span class="sourceLineNo">093</span> }<a name="line.93"></a> -<span class="sourceLineNo">094</span><a name="line.94"></a> -<span class="sourceLineNo">095</span> /**<a name="line.95"></a> -<span class="sourceLineNo">096</span> * Converts the specified {@link Reader} to an {@link Object} whose type is determined by the contents of the reader.<a name="line.96"></a> -<span class="sourceLineNo">097</span> */<a name="line.97"></a> -<span class="sourceLineNo">098</span> @Override /* PojoSwap */<a name="line.98"></a> -<span class="sourceLineNo">099</span> public Object swap(BeanSession session, Reader o) throws SerializeException {<a name="line.99"></a> -<span class="sourceLineNo">100</span> try {<a name="line.100"></a> -<span class="sourceLineNo">101</span> if (parser == null)<a name="line.101"></a> -<span class="sourceLineNo">102</span> return read(o);<a name="line.102"></a> -<span class="sourceLineNo">103</span> return parser.parse(o, Object.class);<a name="line.103"></a> -<span class="sourceLineNo">104</span> } catch (IOException e) {<a name="line.104"></a> -<span class="sourceLineNo">105</span> return e.getLocalizedMessage();<a name="line.105"></a> -<span class="sourceLineNo">106</span> } catch (Exception e) {<a name="line.106"></a> -<span class="sourceLineNo">107</span> throw new SerializeException("ReaderSwap could not transform object of type ''{0}''",<a name="line.107"></a> -<span class="sourceLineNo">108</span> o == null ? null : o.getClass().getName()).initCause(e);<a name="line.108"></a> -<span class="sourceLineNo">109</span> }<a name="line.109"></a> -<span class="sourceLineNo">110</span> }<a name="line.110"></a> -<span class="sourceLineNo">111</span>}<a name="line.111"></a> +<span class="sourceLineNo">023</span>import org.apache.juneau.transform.*;<a name="line.23"></a> +<span class="sourceLineNo">024</span>import org.apache.juneau.xml.*;<a name="line.24"></a> +<span class="sourceLineNo">025</span><a name="line.25"></a> +<span class="sourceLineNo">026</span>/**<a name="line.26"></a> +<span class="sourceLineNo">027</span> * Transforms the contents of a {@link Reader} into an {@code Object}.<a name="line.27"></a> +<span class="sourceLineNo">028</span> *<a name="line.28"></a> +<span class="sourceLineNo">029</span> * <h5 class='section'>Description:</h5><a name="line.29"></a> +<span class="sourceLineNo">030</span> *<a name="line.30"></a> +<span class="sourceLineNo">031</span> * The {@code Reader} must contain JSON, Juneau-generated XML (output from {@link XmlSerializer}), or Juneau-generated<a name="line.31"></a> +<span class="sourceLineNo">032</span> * HTML (output from {@link JsonSerializer}) in order to be parsed correctly.<a name="line.32"></a> +<span class="sourceLineNo">033</span> *<a name="line.33"></a> +<span class="sourceLineNo">034</span> * <p><a name="line.34"></a> +<span class="sourceLineNo">035</span> * Useful for serializing models that contain {@code Readers} created by {@code RestCall} instances.<a name="line.35"></a> +<span class="sourceLineNo">036</span> *<a name="line.36"></a> +<span class="sourceLineNo">037</span> * <p><a name="line.37"></a> +<span class="sourceLineNo">038</span> * This is a one-way transform, since {@code Readers} cannot be reconstituted.<a name="line.38"></a> +<span class="sourceLineNo">039</span> *<a name="line.39"></a> +<span class="sourceLineNo">040</span> * <h6 class='topic'>Behavior-specific subclasses</h6><a name="line.40"></a> +<span class="sourceLineNo">041</span> *<a name="line.41"></a> +<span class="sourceLineNo">042</span> * The following direct subclasses are provided for convenience:<a name="line.42"></a> +<span class="sourceLineNo">043</span> * <ul><a name="line.43"></a> +<span class="sourceLineNo">044</span> * <li>{@link Json} - Parses JSON text.<a name="line.44"></a> +<span class="sourceLineNo">045</span> * <li>{@link Xml} - Parses XML text.<a name="line.45"></a> +<span class="sourceLineNo">046</span> * <li>{@link Html} - Parses HTML text.<a name="line.46"></a> +<span class="sourceLineNo">047</span> * <li>{@link PlainText} - Parses plain text.<a name="line.47"></a> +<span class="sourceLineNo">048</span> * </ul><a name="line.48"></a> +<span class="sourceLineNo">049</span> */<a name="line.49"></a> +<span class="sourceLineNo">050</span>public class ReaderSwap extends PojoSwap<Reader,Object> {<a name="line.50"></a> +<span class="sourceLineNo">051</span><a name="line.51"></a> +<span class="sourceLineNo">052</span> /** Reader transform for reading JSON text. */<a name="line.52"></a> +<span class="sourceLineNo">053</span> public static class Json extends ReaderSwap {<a name="line.53"></a> +<span class="sourceLineNo">054</span> /** Constructor */<a name="line.54"></a> +<span class="sourceLineNo">055</span> public Json() {<a name="line.55"></a> +<span class="sourceLineNo">056</span> super(JsonParser.DEFAULT);<a name="line.56"></a> +<span class="sourceLineNo">057</span> }<a name="line.57"></a> +<span class="sourceLineNo">058</span> }<a name="line.58"></a> +<span class="sourceLineNo">059</span><a name="line.59"></a> +<span class="sourceLineNo">060</span> /** Reader transform for reading XML text. */<a name="line.60"></a> +<span class="sourceLineNo">061</span> public static class Xml extends ReaderSwap {<a name="line.61"></a> +<span class="sourceLineNo">062</span> /** Constructor */<a name="line.62"></a> +<span class="sourceLineNo">063</span> public Xml() {<a name="line.63"></a> +<span class="sourceLineNo">064</span> super(XmlParser.DEFAULT);<a name="line.64"></a> +<span class="sourceLineNo">065</span> }<a name="line.65"></a> +<span class="sourceLineNo">066</span> }<a name="line.66"></a> +<span class="sourceLineNo">067</span><a name="line.67"></a> +<span class="sourceLineNo">068</span> /** Reader transform for reading HTML text. */<a name="line.68"></a> +<span class="sourceLineNo">069</span> public static class Html extends ReaderSwap {<a name="line.69"></a> +<span class="sourceLineNo">070</span> /** Constructor */<a name="line.70"></a> +<span class="sourceLineNo">071</span> public Html() {<a name="line.71"></a> +<span class="sourceLineNo">072</span> super(HtmlParser.DEFAULT);<a name="line.72"></a> +<span class="sourceLineNo">073</span> }<a name="line.73"></a> +<span class="sourceLineNo">074</span> }<a name="line.74"></a> +<span class="sourceLineNo">075</span><a name="line.75"></a> +<span class="sourceLineNo">076</span> /** Reader transform for reading plain text. */<a name="line.76"></a> +<span class="sourceLineNo">077</span> public static class PlainText extends ReaderSwap {<a name="line.77"></a> +<span class="sourceLineNo">078</span> /** Constructor */<a name="line.78"></a> +<span class="sourceLineNo">079</span> public PlainText() {<a name="line.79"></a> +<span class="sourceLineNo">080</span> super(null);<a name="line.80"></a> +<span class="sourceLineNo">081</span> }<a name="line.81"></a> +<span class="sourceLineNo">082</span> }<a name="line.82"></a> +<span class="sourceLineNo">083</span><a name="line.83"></a> +<span class="sourceLineNo">084</span> /** The parser to use to parse the contents of the Reader. */<a name="line.84"></a> +<span class="sourceLineNo">085</span> private ReaderParser parser;<a name="line.85"></a> +<span class="sourceLineNo">086</span><a name="line.86"></a> +<span class="sourceLineNo">087</span> /**<a name="line.87"></a> +<span class="sourceLineNo">088</span> * @param parser The parser to use to convert the contents of the reader to Java objects.<a name="line.88"></a> +<span class="sourceLineNo">089</span> */<a name="line.89"></a> +<span class="sourceLineNo">090</span> public ReaderSwap(ReaderParser parser) {<a name="line.90"></a> +<span class="sourceLineNo">091</span> this.parser = parser;<a name="line.91"></a> +<span class="sourceLineNo">092</span> }<a name="line.92"></a> +<span class="sourceLineNo">093</span><a name="line.93"></a> +<span class="sourceLineNo">094</span> /**<a name="line.94"></a> +<span class="sourceLineNo">095</span> * Converts the specified {@link Reader} to an {@link Object} whose type is determined by the contents of the reader.<a name="line.95"></a> +<span class="sourceLineNo">096</span> */<a name="line.96"></a> +<span class="sourceLineNo">097</span> @Override /* PojoSwap */<a name="line.97"></a> +<span class="sourceLineNo">098</span> public Object swap(BeanSession session, Reader o) throws Exception {<a name="line.98"></a> +<span class="sourceLineNo">099</span> if (parser == null)<a name="line.99"></a> +<span class="sourceLineNo">100</span> return read(o);<a name="line.100"></a> +<span class="sourceLineNo">101</span> return parser.parse(o, Object.class);<a name="line.101"></a> +<span class="sourceLineNo">102</span> }<a name="line.102"></a> +<span class="sourceLineNo">103</span>}<a name="line.103"></a>