diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index bb0048d..4116b4b 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -22,7 +22,7 @@
-
+
diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
new file mode 100644
index 0000000..0e66824
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_11_0_2.xml b/.idea/libraries/Maven__com_google_guava_guava_11_0_2.xml
new file mode 100644
index 0000000..01a573a
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_guava_guava_11_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml
new file mode 100644
index 0000000..14681ee
--- /dev/null
+++ b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javassist_javassist_3_12_1_GA.xml b/.idea/libraries/Maven__javassist_javassist_3_12_1_GA.xml
new file mode 100644
index 0000000..e5be13e
--- /dev/null
+++ b/.idea/libraries/Maven__javassist_javassist_3_12_1_GA.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_activation_activation_1_1_1.xml b/.idea/libraries/Maven__javax_activation_activation_1_1_1.xml
new file mode 100644
index 0000000..bde4d35
--- /dev/null
+++ b/.idea/libraries/Maven__javax_activation_activation_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_ejb_ejb_api_3_0.xml b/.idea/libraries/Maven__javax_ejb_ejb_api_3_0.xml
new file mode 100644
index 0000000..c882e37
--- /dev/null
+++ b/.idea/libraries/Maven__javax_ejb_ejb_api_3_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_enterprise_cdi_api_1_0_SP4.xml b/.idea/libraries/Maven__javax_enterprise_cdi_api_1_0_SP4.xml
new file mode 100644
index 0000000..93017de
--- /dev/null
+++ b/.idea/libraries/Maven__javax_enterprise_cdi_api_1_0_SP4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_inject_javax_inject_1.xml b/.idea/libraries/Maven__javax_inject_javax_inject_1.xml
new file mode 100644
index 0000000..93cf65a
--- /dev/null
+++ b/.idea/libraries/Maven__javax_inject_javax_inject_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_interceptor_javax_interceptor_api_1_2.xml b/.idea/libraries/Maven__javax_interceptor_javax_interceptor_api_1_2.xml
new file mode 100644
index 0000000..6458069
--- /dev/null
+++ b/.idea/libraries/Maven__javax_interceptor_javax_interceptor_api_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_javaee_api_6_0.xml b/.idea/libraries/Maven__javax_javaee_api_6_0.xml
new file mode 100644
index 0000000..1aad900
--- /dev/null
+++ b/.idea/libraries/Maven__javax_javaee_api_6_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_jws_jsr181_api_1_0_MR1.xml b/.idea/libraries/Maven__javax_jws_jsr181_api_1_0_MR1.xml
new file mode 100644
index 0000000..26ba706
--- /dev/null
+++ b/.idea/libraries/Maven__javax_jws_jsr181_api_1_0_MR1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_mail_mail_1_4_4.xml b/.idea/libraries/Maven__javax_mail_mail_1_4_4.xml
new file mode 100644
index 0000000..733c711
--- /dev/null
+++ b/.idea/libraries/Maven__javax_mail_mail_1_4_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml b/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml
new file mode 100644
index 0000000..4b644e9
--- /dev/null
+++ b/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_1_Final.xml b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_1_Final.xml
new file mode 100644
index 0000000..352de38
--- /dev/null
+++ b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_0_api_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_16_1_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_16_1_GA.xml
new file mode 100644
index 0000000..7b4e548
--- /dev/null
+++ b/.idea/libraries/Maven__org_javassist_javassist_3_16_1_GA.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_annotation_jboss_annotations_api_1_1_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_annotation_jboss_annotations_api_1_1_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..26e0a51
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_annotation_jboss_annotations_api_1_1_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_ejb_jboss_ejb_api_3_1_spec_1_0_2_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_ejb_jboss_ejb_api_3_1_spec_1_0_2_Final.xml
new file mode 100644
index 0000000..703b15b
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_ejb_jboss_ejb_api_3_1_spec_1_0_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_el_jboss_el_api_2_2_spec_1_0_2_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_el_jboss_el_api_2_2_spec_1_0_2_Final.xml
new file mode 100644
index 0000000..448d90c
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_el_jboss_el_api_2_2_spec_1_0_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_enterprise_deploy_jboss_jad_api_1_2_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_enterprise_deploy_jboss_jad_api_1_2_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..f1884ed
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_enterprise_deploy_jboss_jad_api_1_2_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_faces_jboss_jsf_api_2_1_spec_2_0_9_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_faces_jboss_jsf_api_2_1_spec_2_0_9_Final.xml
new file mode 100644
index 0000000..fd07cf4
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_faces_jboss_jsf_api_2_1_spec_2_0_9_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_interceptor_jboss_interceptors_api_1_1_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_interceptor_jboss_interceptors_api_1_1_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..ffccbe4
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_interceptor_jboss_interceptors_api_1_1_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_jms_jboss_jms_api_1_1_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_jms_jboss_jms_api_1_1_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..1e5542a
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_jms_jboss_jms_api_1_1_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_management_j2ee_jboss_j2eemgmt_api_1_1_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_management_j2ee_jboss_j2eemgmt_api_1_1_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..7284b62
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_management_j2ee_jboss_j2eemgmt_api_1_1_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_resource_jboss_connector_api_1_6_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_resource_jboss_connector_api_1_6_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..4d4395b
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_resource_jboss_connector_api_1_6_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_rmi_jboss_rmi_api_1_0_spec_1_0_4_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_rmi_jboss_rmi_api_1_0_spec_1_0_4_Final.xml
new file mode 100644
index 0000000..96bd376
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_rmi_jboss_rmi_api_1_0_spec_1_0_4_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_security_auth_message_jboss_jaspi_api_1_0_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_security_auth_message_jboss_jaspi_api_1_0_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..131fa0b
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_security_auth_message_jboss_jaspi_api_1_0_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_security_jacc_jboss_jacc_api_1_4_spec_1_0_2_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_security_jacc_jboss_jacc_api_1_4_spec_1_0_2_Final.xml
new file mode 100644
index 0000000..be85f48
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_security_jacc_jboss_jacc_api_1_4_spec_1_0_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jboss_servlet_api_3_0_spec_1_0_2_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jboss_servlet_api_3_0_spec_1_0_2_Final.xml
new file mode 100644
index 0000000..38997b3
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jboss_servlet_api_3_0_spec_1_0_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jsp_jboss_jsp_api_2_2_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jsp_jboss_jsp_api_2_2_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..38a9ce5
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jsp_jboss_jsp_api_2_2_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jstl_jboss_jstl_api_1_2_spec_1_0_3_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jstl_jboss_jstl_api_1_2_spec_1_0_3_Final.xml
new file mode 100644
index 0000000..025ad9b
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_servlet_jstl_jboss_jstl_api_1_2_spec_1_0_3_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_1_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_1_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..ed44624
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_1_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_ws_rs_jboss_jaxrs_api_1_1_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_ws_rs_jboss_jaxrs_api_1_1_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..0f43b5f
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_ws_rs_jboss_jaxrs_api_1_1_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_xml_bind_jboss_jaxb_api_2_2_spec_1_0_4_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_xml_bind_jboss_jaxb_api_2_2_spec_1_0_4_Final.xml
new file mode 100644
index 0000000..2fc5a02
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_xml_bind_jboss_jaxb_api_2_2_spec_1_0_4_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_xml_registry_jboss_jaxr_api_1_0_spec_1_0_2_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_xml_registry_jboss_jaxr_api_1_0_spec_1_0_2_Final.xml
new file mode 100644
index 0000000..86c1115
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_xml_registry_jboss_jaxr_api_1_0_spec_1_0_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_xml_rpc_jboss_jaxrpc_api_1_1_spec_1_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_xml_rpc_jboss_jaxrpc_api_1_1_spec_1_0_1_Final.xml
new file mode 100644
index 0000000..339886a
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_xml_rpc_jboss_jaxrpc_api_1_1_spec_1_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_xml_soap_jboss_saaj_api_1_3_spec_1_0_2_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_xml_soap_jboss_saaj_api_1_3_spec_1_0_2_Final.xml
new file mode 100644
index 0000000..5a20bf4
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_xml_soap_jboss_saaj_api_1_3_spec_1_0_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_xml_ws_jboss_jaxws_api_2_2_spec_2_0_1_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_xml_ws_jboss_jaxws_api_2_2_spec_2_0_1_Final.xml
new file mode 100644
index 0000000..c4e2298
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_javax_xml_ws_jboss_jaxws_api_2_2_spec_2_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_spec_jboss_javaee_all_6_0_3_0_2_Final.xml b/.idea/libraries/Maven__org_jboss_spec_jboss_javaee_all_6_0_3_0_2_Final.xml
new file mode 100644
index 0000000..8399a0b
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_spec_jboss_javaee_all_6_0_3_0_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_reflections_reflections_0_9_9_RC1.xml b/.idea/libraries/Maven__org_reflections_reflections_0_9_9_RC1.xml
new file mode 100644
index 0000000..95dd64a
--- /dev/null
+++ b/.idea/libraries/Maven__org_reflections_reflections_0_9_9_RC1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__xalan_xalan_2_7_1_jbossorg_2.xml b/.idea/libraries/Maven__xalan_xalan_2_7_1_jbossorg_2.xml
new file mode 100644
index 0000000..e7b507f
--- /dev/null
+++ b/.idea/libraries/Maven__xalan_xalan_2_7_1_jbossorg_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml b/.idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml
new file mode 100644
index 0000000..c36e717
--- /dev/null
+++ b/.idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index d51f9ff..a302ac7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,8 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -207,6 +210,10 @@
+
+
+
+
@@ -219,10 +226,6 @@
-
-
-
-
@@ -301,11 +304,6 @@
-
-
-
-
-
@@ -318,6 +316,11 @@
+
+
+
+
+
@@ -341,6 +344,11 @@
+
+
+
+
+
@@ -357,11 +365,6 @@
-
-
-
-
-
@@ -403,11 +406,6 @@
-
-
-
-
-
@@ -420,6 +418,11 @@
+
+
+
+
+
@@ -470,32 +473,32 @@
-
-
-
-
-
-
+
-
+
+
-
+
-
-
+
+
+
+
+
+
@@ -581,11 +584,10 @@
-
+
-
-
+
@@ -595,10 +597,11 @@
-
+
-
+
+
@@ -609,24 +612,8 @@
-
+
-
-
-
-
- 1.7
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.idea/modules.xml b/.idea/modules.xml
index fb010c5..3029bff 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,6 +2,7 @@
+
diff --git a/pom.xml b/pom.xml
index 4ec29c3..81fdf5b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,31 @@
user-group-privileges-ejb3-util
user-group-privileges-ejb3-util
+ pom
0.0.1-Pre-alpha
-
+
+
+ org.reflections
+ reflections
+ 0.9.9-RC1
+
+
+ javassist
+ javassist
+ 3.12.1.GA
+
+
+ javax.interceptor
+ javax.interceptor-api
+ 1.2
+ provided
+
+
+ javax.ejb
+ ejb-api
+ 3.0
+ provided
+
+
\ No newline at end of file
diff --git a/src/main/java/com/thenaglecode/annotations/UserHasPrivilege.java b/src/main/java/com/thenaglecode/annotations/UserHasPrivilege.java
new file mode 100644
index 0000000..f7fee00
--- /dev/null
+++ b/src/main/java/com/thenaglecode/annotations/UserHasPrivilege.java
@@ -0,0 +1,19 @@
+package com.thenaglecode.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.*;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: jxnagl
+ * Date: 6/09/13
+ * Time: 4:02 PM
+ * //todo implement
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({METHOD, TYPE})
+public @interface UserHasPrivilege {
+ String privilege();
+}
diff --git a/src/main/java/com/thenaglecode/annotations/UserHasPrivileges.java b/src/main/java/com/thenaglecode/annotations/UserHasPrivileges.java
new file mode 100644
index 0000000..8932907
--- /dev/null
+++ b/src/main/java/com/thenaglecode/annotations/UserHasPrivileges.java
@@ -0,0 +1,21 @@
+package com.thenaglecode.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: jxnagl
+ * Date: 6/09/13
+ * Time: 4:03 PM
+ * //todo implement
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({METHOD, TYPE})
+public @interface UserHasPrivileges {
+ String[] privileges();
+}
diff --git a/src/main/java/com/thenaglecode/interceptor/PrivilegeInterceptor.java b/src/main/java/com/thenaglecode/interceptor/PrivilegeInterceptor.java
new file mode 100644
index 0000000..0cfd732
--- /dev/null
+++ b/src/main/java/com/thenaglecode/interceptor/PrivilegeInterceptor.java
@@ -0,0 +1,28 @@
+package com.thenaglecode.interceptor;
+
+import com.thenaglecode.services.UserHasPrivilegeService;
+
+import javax.annotation.Resource;
+import javax.ejb.SessionContext;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.InvocationContext;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: jxnagl
+ * Date: 6/09/13
+ * Time: 5:40 PM
+ * //todo implement
+ */
+public class PrivilegeInterceptor {
+
+ @Resource
+ SessionContext context;
+
+ private static final UserHasPrivilegeService service = UserHasPrivilegeService.getUserHasPrivilegeService();
+
+ @AroundInvoke
+ public Object securityCheck(InvocationContext ctx) throws Exception {
+
+ }
+}
diff --git a/src/main/java/com/thenaglecode/serviceProviders/UserHasPrivilegeServiceProvider.java b/src/main/java/com/thenaglecode/serviceProviders/UserHasPrivilegeServiceProvider.java
new file mode 100644
index 0000000..c6535a7
--- /dev/null
+++ b/src/main/java/com/thenaglecode/serviceProviders/UserHasPrivilegeServiceProvider.java
@@ -0,0 +1,66 @@
+package com.thenaglecode.serviceProviders;
+
+import com.thenaglecode.services.UserGroupPrivilegeMappingService;
+import com.thenaglecode.services.UserHasPrivilegeService;
+
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.security.DenyAll;
+import javax.lang.model.element.TypeElement;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: jxnagl
+ * Date: 6/09/13
+ * Time: 1:47 PM
+ * //todo implement
+ */
+@SupportedAnnotationTypes(value = {
+ UserHasPrivilegeServiceProvider.USER_HAS_PRIVILEGE_ANNOTATION,
+ UserHasPrivilegeServiceProvider.USER_HAS_PRIVILEGE_ANNOTATION_PLURAL})
+public class UserHasPrivilegeServiceProvider extends UserHasPrivilegeService {
+
+ public static final String USER_HAS_PRIVILEGE_ANNOTATION = "com.thenaglecode.annotations.UserHasPrivilege";
+ public static final String USER_HAS_PRIVILEGE_ANNOTATION_PLURAL = "com.thenaglecode.annotations.UserHasPrivileges";
+
+ UserGroupPrivilegeMappingService userGroupPrivilegeMappingService;
+
+ public void setUserGroupPrivilegeMappingService(UserGroupPrivilegeMappingService userGroupPrivilegeMappingService) {
+ this.userGroupPrivilegeMappingService = userGroupPrivilegeMappingService;
+ }
+
+ public void refreshPrivilegeGroupMap() throws NullPointerException {
+ if (userGroupPrivilegeMappingService == null) {
+ throw new NullPointerException(
+ "userGroupPrivilegeMappingService was null, did you forget to call " +
+ "setUserGroupPrivilegeMappingService(UserGroupPrivilegeMappingService)?");
+ }
+ userGroupPrivilegeMappingService.refresh();
+ }
+
+ public boolean GroupsHavePrivilege(String privilege, List groups) {
+ for (String group : groups) {
+ if (userGroupPrivilegeMappingService.groupHasPrivilege(group, privilege))
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean process(Set extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ for(TypeElement annotation : annotations){
+ if(annotation.getQualifiedName())
+ }
+ }
+
+ @Override
+ public synchronized void init(ProcessingEnvironment processingEnv) {
+ super.init(processingEnv);
+ UserGroupPrivilegeMappingService service = UserGroupPrivilegeMappingService.getUserGroupPrivilegeMappingService();
+ service.refresh();
+ setUserGroupPrivilegeMappingService(service);
+ }
+}
diff --git a/src/main/java/com/thenaglecode/services/UserGroupPrivilegeMappingService.java b/src/main/java/com/thenaglecode/services/UserGroupPrivilegeMappingService.java
new file mode 100644
index 0000000..1ccdec5
--- /dev/null
+++ b/src/main/java/com/thenaglecode/services/UserGroupPrivilegeMappingService.java
@@ -0,0 +1,59 @@
+package com.thenaglecode.services;
+
+import com.sun.istack.internal.NotNull;
+
+import java.util.List;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: jxnagl
+ * Date: 6/09/13
+ * Time: 3:34 PM
+ */
+public abstract class UserGroupPrivilegeMappingService {
+
+ private static ServiceLoader groupPrivilegeMappingServiceLoader
+ = ServiceLoader.load(UserGroupPrivilegeMappingService.class);
+
+ public static UserGroupPrivilegeMappingService getUserGroupPrivilegeMappingService() throws ServiceConfigurationError {
+ for (UserGroupPrivilegeMappingService service : groupPrivilegeMappingServiceLoader) {
+ if (service != null) {
+ return service;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * this method will return whether or not the specified group contains the specified privilege. implementations
+ * of this will generally use a cached map to determine this that can be refreshed via the {@link #refresh()}
+ * function.
+ *
+ * @param group the group to search for
+ * @param privilege the privilege that needs checking
+ * @return whether or not the group has the privilege specified.
+ */
+ public abstract boolean groupHasPrivilege(@NotNull String group, @NotNull String privilege);
+
+ /**
+ * This is used to determine what groups a user belongs to, as it is unwise to cache this sort of information
+ * considering that an application's user base may be large,
+ * it is advised that implementations of this method perform a call to their underlying datastore (e.g. a direct
+ * call to the database) to determine this information.
+ *
+ *
+ * @param principal the unique identifier for the Principal user to search against.
+ * @return a list of groups that this user belongs to.
+ */
+ public abstract List groupsOfUser(@NotNull String principal);
+
+ /**
+ * For those that wish to cache their groupPrivilege mapping information, they can override this method for
+ * the ability to refresh information.
+ */
+ public void refresh(){
+ //do nothing
+ }
+}
diff --git a/src/main/java/com/thenaglecode/services/UserHasPrivilegeService.java b/src/main/java/com/thenaglecode/services/UserHasPrivilegeService.java
new file mode 100644
index 0000000..cd5d444
--- /dev/null
+++ b/src/main/java/com/thenaglecode/services/UserHasPrivilegeService.java
@@ -0,0 +1,29 @@
+package com.thenaglecode.services;
+
+import javax.annotation.processing.AbstractProcessor;
+import java.util.List;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: jxnagl
+ * Date: 6/09/13
+ * Time: 1:46 PM
+ */
+public abstract class UserHasPrivilegeService extends AbstractProcessor {
+
+ private static ServiceLoader userHasPrivilegeServiceLoader
+ = ServiceLoader.load(UserHasPrivilegeService.class);
+
+ public static UserHasPrivilegeService getUserHasPrivilegeService() throws ServiceConfigurationError {
+ for(UserHasPrivilegeService service : userHasPrivilegeServiceLoader){
+ if(service != null) return service;
+ }
+ return null;
+ }
+
+ public abstract void setUserGroupPrivilegeMappingService(UserGroupPrivilegeMappingService userGroupPrivilegeMappingService);
+ public abstract void refreshPrivilegeGroupMap() throws NullPointerException;
+ public abstract boolean GroupsHavePrivilege(String privilege, List groups);
+}
diff --git a/src/main/resources/META-INF/services/com.thenaglecode.services.UserHasPrivilegeService b/src/main/resources/META-INF/services/com.thenaglecode.services.UserHasPrivilegeService
new file mode 100644
index 0000000..31fde27
--- /dev/null
+++ b/src/main/resources/META-INF/services/com.thenaglecode.services.UserHasPrivilegeService
@@ -0,0 +1 @@
+com.thenaglecode.serviceProviders.UserHasPrivilegeServiceProvider # the default provider
\ No newline at end of file
diff --git a/testEJBProject/pom.xml b/testEJBProject/pom.xml
new file mode 100644
index 0000000..a76a576
--- /dev/null
+++ b/testEJBProject/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ 4.0.0
+
+ com.example
+ testEJBProject
+
+
+
+ org.jboss.spec
+ jboss-javaee-all-6.0
+ 3.0.2.Final
+ provided
+
+
+ com.thenaglecode
+ user-group-privilege-ejb3-util
+ 0.0.1-Pre-alpha
+
+
+
+
+
+
+ org.jboss.as.plugins
+ jboss-as-maven-plugin
+ 7.4.Final
+
+
+
+
\ No newline at end of file
diff --git a/testEJBProject/src/main/java/com/thenaglecode/serviceProviders/UserGroupPrivilegeMappingServiceProvider.java b/testEJBProject/src/main/java/com/thenaglecode/serviceProviders/UserGroupPrivilegeMappingServiceProvider.java
new file mode 100644
index 0000000..4f38d1f
--- /dev/null
+++ b/testEJBProject/src/main/java/com/thenaglecode/serviceProviders/UserGroupPrivilegeMappingServiceProvider.java
@@ -0,0 +1,39 @@
+package com.thenaglecode.serviceProviders;
+
+import com.thenaglecode.services.UserGroupPrivilegeMappingService;
+
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: jxnagl
+ * Date: 6/09/13
+ * Time: 5:33 PM
+ * //todo implement
+ */
+public class UserGroupPrivilegeMappingServiceProvider extends UserGroupPrivilegeMappingService {
+
+ private static List TEST_GROUP_LIST = new ArrayList<>();
+
+ static {
+ TEST_GROUP_LIST.add("silly");
+ }
+
+ @Override
+ public boolean groupHasPrivilege(String group, String privilege) {
+ return "silly".equals(group) && "anything".equals(privilege);
+ }
+
+ @Override
+ public List groupsOfUser(@NotNull String principal) {
+ if("someone".equals(principal)) return TEST_GROUP_LIST;
+ else return new ArrayList();
+ }
+
+ @Override
+ public void refresh() {
+ //do nothing
+ }
+}
diff --git a/testEJBProject/src/main/resources/META-INF/services/com.thenaglecode.services.GroupPrivilegeMappingService b/testEJBProject/src/main/resources/META-INF/services/com.thenaglecode.services.GroupPrivilegeMappingService
new file mode 100644
index 0000000..013b923
--- /dev/null
+++ b/testEJBProject/src/main/resources/META-INF/services/com.thenaglecode.services.GroupPrivilegeMappingService
@@ -0,0 +1 @@
+com.thenaglecode.serviceProviders.GroupPrivilegeMappingService # the mapping service required by the @UserHasPrivilege annotation
\ No newline at end of file