View Javadoc
1   /**
2    * Copyright By Grandsoft Company Limited.  
3    * 2012-2-28 上午10:43:16
4    */
5   package gboat2.base.core.model;
6   
7   import gboat2.base.core.annotation.Operation;
8   
9   import java.lang.reflect.Method;
10  
11  import org.apache.commons.lang3.StringUtils;
12  
13  /**
14   * 
15   * 一个Opera对应一个Action中的一个方法。一个Action里有多个方法,因此会有多个Opera,
16   * 实例构造完成后,各字段应该是不可变的
17   * @author lysming
18   * @author tanxw
19   * @since jdk1.6
20   * @date 2012-2-28
21   *  
22   */
23  
24  public class Opera {
25  	
26  	/**
27  	 * 操作名称
28  	 */
29  	private String name;
30  	
31  	/**
32  	 * 操作编码
33  	 */
34  	private String code = "";
35  	
36  	/**
37  	 * 操作所在action名称
38  	 */
39  	private String action;
40  	
41  	/**
42  	 * 该操作所调用的action类
43  	 */
44  	private String invokeAction;
45  	
46  	/**
47  	 * 该操作所调用的方法名
48  	 */
49  	private String invokeMethod;
50  	
51  	/**
52  	 * 描述
53  	 */
54  	private String desc;
55  	
56  	/**
57  	 * 根据方法级别上的Operation注解构造Opera操作对象
58  	 * Opera
59  	 * @param operation
60  	 * @param method 注解所在的方法
61  	 * @param action
62  	 */
63  	public Opera(Operation operation, Method method, Class<?> action) {
64  		this.action = action.getName();
65  		this.name = operation.name();
66  		this.code = operation.code();
67  		this.desc = operation.desc();
68  		//只有注解上同时指定invokeAction,invokeMethod时,才重定向到别的action处。
69  		if (StringUtils.isNotEmpty(operation.invokeAction()) && StringUtils.isNotEmpty(operation.invokeMethod())) {
70  			invokeAction = operation.invokeAction();
71  			invokeMethod = operation.invokeMethod();
72  		} else {
73  			invokeAction = action.getName();
74  			invokeMethod = method.getName();
75  		}
76  	}
77  	
78  	/**
79  	 * 根据类级别上的Operation注解构造Opera操作对象
80  	 * Opera
81  	 * @param operation
82  	 * @param method 注解所在的方法
83  	 * @param action
84  	 */
85  	public Opera(Operation operation, Class<?> action) {
86  		this.name = operation.name();
87  		this.action = action.getName();
88  		this.code = operation.code();
89  		this.desc = operation.desc();
90  		//只有注解上同时指定invokeAction,invokeMethod时,才重定向到别的action处。
91  		if (StringUtils.isNotEmpty(operation.invokeAction()) && StringUtils.isNotEmpty(operation.invokeMethod())) {
92  			invokeAction = operation.invokeAction();
93  			invokeMethod = operation.invokeMethod();
94  		} else {
95  			invokeAction = action.getName();
96  			invokeMethod = StringUtils.isEmpty(operation.invokeMethod()) ? operation.code() : operation.invokeMethod();
97  		}
98  		
99  		//处理特殊情况
100 		if ("add".equals(operation.code())) {
101 			invokeMethod = "edit";
102 		}
103 	}
104 	
105 	/**
106 	 * 根据指定原始字段构造实例
107 	 * Opera
108 	 * @param name
109 	 * @param code
110 	 * @param action
111 	 * @param invokeAction
112 	 * @param invokeMethod
113 	 * @param desc
114 	 */
115 	public Opera(String name, String code, String action, String invokeAction, String invokeMethod, String desc) {
116 		this.name = name;
117 		this.code = code;
118 		this.action = action;
119 		this.invokeAction = invokeAction;
120 		this.invokeMethod = invokeMethod;
121 		this.desc = desc;
122 	}
123 	
124 	public String getName() {
125 		return name;
126 	}
127 	
128 	public String getAction() {
129 		return action;
130 	}
131 	
132 	public String getDesc() {
133 		return desc;
134 	}
135 	
136 	public String getCode() {
137 		return code;
138 	}
139 	
140 	public String getInvokeAction() {
141 		return invokeAction;
142 	}
143 	
144 	public String getInvokeMethod() {
145 		return invokeMethod;
146 	}
147 	
148 	public String toString() {
149 		StringBuilder _string = new StringBuilder();
150 		_string.append(super.toString());
151 		_string.append("{name : ");
152 		_string.append(name).append(",code : ").append(code).append("}");
153 		return _string.toString();
154 	}
155 	
156 	public boolean equals(Object target) {
157 		Opera o = (Opera) target;
158 		return o.getAction().equals(action) && o.getInvokeMethod().equals(invokeMethod);
159 	}
160 }