1+ /*Copyright ©2016 TommyLemon(https://github.com/TommyLemon/APIJSON)
2+
3+ Licensed under the Apache License, Version 2.0 (the "License");
4+ you may not use this file except in compliance with the License.
5+ You may obtain a copy of the License at
6+
7+ http://www.apache.org/licenses/LICENSE-2.0
8+
9+ Unless required by applicable law or agreed to in writing, software
10+ distributed under the License is distributed on an "AS IS" BASIS,
11+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+ See the License for the specific language governing permissions and
13+ limitations under the License.*/
14+
15+ package apijson .demo ;
16+
17+ import java .util .ArrayList ;
18+ import java .util .Arrays ;
19+ import java .util .Collection ;
20+
21+ import javax .servlet .http .HttpSession ;
22+
23+ import com .alibaba .fastjson .JSONArray ;
24+ import com .alibaba .fastjson .JSONObject ;
25+
26+ import apijson .JSONResponse ;
27+ import apijson .NotNull ;
28+ import apijson .RequestMethod ;
29+ import apijson .RequestRole ;
30+ import apijson .StringUtil ;
31+ import apijson .framework .APIJSONFunctionParser ;
32+ import apijson .orm .JSONRequest ;
33+
34+
35+ /**可远程调用的函数类
36+ * @author Lemon
37+ */
38+ public class DemoFunctionParser extends APIJSONFunctionParser {
39+ public static final String TAG = "DemoFunctionParser" ;
40+
41+ public DemoFunctionParser () {
42+ this (null , null , 0 , null , null );
43+ }
44+ public DemoFunctionParser (RequestMethod method , String tag , int version , JSONObject request , HttpSession session ) {
45+ super (method , tag , version , request , session );
46+ }
47+
48+ /**
49+ * @param current
50+ * @return
51+ * @throws Exception
52+ */
53+ public Object verifyIdList (@ NotNull JSONObject current , @ NotNull String idList ) throws Exception {
54+ Object obj = current .get (idList );
55+ if (obj instanceof Collection == false ) {
56+ throw new IllegalArgumentException (idList + " 不符合 Array 类型! 结构必须是 [] !" );
57+ }
58+ JSONArray array = (JSONArray ) obj ;
59+ if (array != null ) {
60+ for (int i = 0 ; i < array .size (); i ++) {
61+ if (array .get (i ) instanceof Long == false && array .get (i ) instanceof Integer == false ) {
62+ throw new IllegalArgumentException (idList + " 内字符 " + array .getString (i ) + " 不符合 Long 类型!" );
63+ }
64+ }
65+ }
66+ return null ;
67+ }
68+
69+
70+ /**
71+ * @param request
72+ * @return
73+ * @throws Exception
74+ */
75+ public Object verifyURLList (@ NotNull JSONObject current , @ NotNull String urlList ) throws Exception {
76+ Object obj = current .get (urlList );
77+ if (obj instanceof Collection == false ) {
78+ throw new IllegalArgumentException (urlList + " 不符合 Array 类型! 结构必须是 [] !" );
79+ }
80+ JSONArray array = (JSONArray ) obj ;
81+ if (array != null ) {
82+ for (int i = 0 ; i < array .size (); i ++) {
83+ if (StringUtil .isUrl (array .getString (i )) == false ) {
84+ throw new IllegalArgumentException (urlList + " 内字符 " + array .getString (i ) + " 不符合 URL 格式!" );
85+ }
86+ }
87+ }
88+ return null ;
89+ }
90+
91+
92+ /**
93+ * @param rq
94+ * @param momentId
95+ * @return
96+ * @throws Exception
97+ */
98+ public int deleteCommentOfMoment (@ NotNull JSONObject current , @ NotNull String momentId ) throws Exception {
99+ long mid = current .getLongValue (momentId );
100+ if (mid <= 0 || current .getIntValue (JSONResponse .KEY_COUNT ) <= 0 ) {
101+ return 0 ;
102+ }
103+
104+ JSONRequest request = new JSONRequest ();
105+
106+ //Comment<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
107+ JSONRequest comment = new JSONRequest ();
108+ comment .put ("momentId" , mid );
109+
110+ request .put ("Comment" , comment );
111+ //Comment>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
112+
113+ JSONObject rp = new DemoParser (RequestMethod .DELETE ).setNeedVerify (false ).parseResponse (request );
114+
115+ JSONObject c = rp .getJSONObject ("Comment" );
116+ return c == null ? 0 : c .getIntValue (JSONResponse .KEY_COUNT );
117+ }
118+
119+
120+ /**删除评论的子评论
121+ * @param rq
122+ * @param toId
123+ * @return
124+ */
125+ public int deleteChildComment (@ NotNull JSONObject current , @ NotNull String toId ) throws Exception {
126+ long tid = current .getLongValue (toId );
127+ if (tid <= 0 || current .getIntValue (JSONResponse .KEY_COUNT ) <= 0 ) {
128+ return 0 ;
129+ }
130+
131+ //递归获取到全部子评论id
132+
133+ JSONRequest request = new JSONRequest ();
134+
135+ //Comment<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
136+ JSONRequest comment = new JSONRequest ();
137+ comment .put ("id{}" , getChildCommentIdList (tid ));
138+
139+ request .put ("Comment" , comment );
140+ //Comment>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
141+
142+ JSONObject rp = new DemoParser (RequestMethod .DELETE ).setNeedVerify (false ).parseResponse (request );
143+
144+ JSONObject c = rp .getJSONObject ("Comment" );
145+ return c == null ? 0 : c .getIntValue (JSONResponse .KEY_COUNT );
146+ }
147+
148+
149+ private JSONArray getChildCommentIdList (long tid ) {
150+
151+ JSONArray arr = new JSONArray ();
152+
153+ JSONRequest request = new JSONRequest ();
154+
155+ //Comment-id[]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
156+ JSONRequest idItem = new JSONRequest ();
157+
158+ //Comment<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
159+ JSONRequest comment = new JSONRequest ();
160+ comment .put ("toId" , tid );
161+ comment .setColumn ("id" );
162+ idItem .put ("Comment" , comment );
163+ //Comment>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
164+
165+ request .putAll (idItem .toArray (0 , 0 , "Comment-id" ));
166+ //Comment-id[]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
167+
168+ JSONObject rp = new DemoParser ().setNeedVerify (false ).parseResponse (request );
169+
170+ JSONArray a = rp .getJSONArray ("Comment-id[]" );
171+ if (a != null ) {
172+ arr .addAll (a );
173+
174+ JSONArray a2 ;
175+ for (int i = 0 ; i < a .size (); i ++) {
176+
177+ a2 = getChildCommentIdList (a .getLongValue (i ));
178+ if (a2 != null ) {
179+ arr .addAll (a2 );
180+ }
181+ }
182+ }
183+
184+ return arr ;
185+ }
186+
187+
188+ /**TODO 仅用来测试 "key-()":"getIdList()" 和 "key()":"getIdList()"
189+ * @param request
190+ * @return JSONArray 只能用JSONArray,用long[]会在SQLConfig解析崩溃
191+ * @throws Exception
192+ */
193+ public JSONArray getIdList (@ NotNull JSONObject current ) {
194+ return new JSONArray (new ArrayList <Object >(Arrays .asList (12 , 15 , 301 , 82001 , 82002 , 38710 )));
195+ }
196+
197+
198+ /**TODO 仅用来测试 "key-()":"verifyAccess()"
199+ * @param request
200+ * @return
201+ * @throws Exception
202+ */
203+ public Object verifyAccess (@ NotNull JSONObject current ) throws Exception {
204+ long userId = current .getLongValue (JSONRequest .KEY_USER_ID );
205+ RequestRole role = RequestRole .get (current .getString (JSONRequest .KEY_ROLE ));
206+ if (role == RequestRole .OWNER && userId != DemoVerifier .getVisitorId (getSession ())) {
207+ throw new IllegalAccessException ("登录用户与角色OWNER不匹配!" );
208+ }
209+ return null ;
210+ }
211+
212+
213+
214+
215+ }
0 commit comments