Commit 1ae394f104a1255ce9de8e9f3d6f7e935c54a232

Authored by eudes.andrade
2 parents 7be6e849 385f3b58
Exists in master

Merge branch '2.3' of https://github.com/demoiselle/framework into 2.3

Showing 77 changed files with 5138 additions and 3276 deletions   Show diff stats
archetype/jsf-jpa/src/main/resources/archetype-resources/src/test/resources/META-INF/persistence.xml
... ... @@ -13,7 +13,7 @@
13 13 <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
14 14 <property name="javax.persistence.jdbc.user" value="sa" />
15 15 <property name="javax.persistence.jdbc.password" value="" />
16   - <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:hsql:." />
  16 + <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:." />
17 17  
18 18 <property name="hibernate.show_sql" value="true" />
19 19 <property name="hibernate.format_sql" value="false" />
... ...
documentation/reference/pt-BR/authorgroup.xml
... ... @@ -34,4 +34,12 @@
34 34 <firstname>Wilson</firstname>
35 35 <surname>Guimarães</surname>
36 36 </author>
  37 + <author>
  38 + <firstname>Emerson</firstname>
  39 + <surname>Oliveira</surname>
  40 + </author>
  41 + <author>
  42 + <firstname>Luciano</firstname>
  43 + <surname>Borges</surname>
  44 + </author>
37 45 </authorgroup>
... ...
documentation/reference/pt-BR/configuracao.xml
... ... @@ -47,6 +47,25 @@
47 47 </section>
48 48  
49 49 <section>
  50 + <title>Configurando</title>
  51 + <para>
  52 + Para um correto funcionamento do Demoiselle é necessário inserir o interceptador de configuração no arquivo <filename>src/main/WEB-INF/beans.xml</filename>.
  53 + </para>
  54 + <programlisting role="XML">
  55 + <![CDATA[
  56 + <beans xmlns="http://java.sun.com/xml/ns/javaee"
  57 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  58 + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  59 + http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
  60 + <interceptors>
  61 + <class>br.gov.frameworkdemoiselle.internal.interceptor.ConfigurationInterceptor</class>
  62 + </interceptors>
  63 + </beans>
  64 + ]]>
  65 + </programlisting>
  66 + </section>
  67 +
  68 + <section>
50 69 <title>As classes de configuração</title>
51 70 <para>
52 71 A primeira etapa para a utilização do mecanismo de configuração em uma aplicação consiste em criar uma classe específica
... ...
documentation/reference/pt-BR/excecao.xml
... ... @@ -11,6 +11,25 @@
11 11 Oferecemos à você uma alternativa para resolver estes problemas, mas você estará livre para usá-la: isoladamente,
12 12 misturando com a forma verbosa ou até mesmo não usá-la.
13 13 </para>
  14 +
  15 + <section>
  16 + <title>Configurando</title>
  17 + <para>
  18 + Para um correto funcionamento do Demoiselle é necessário inserir o interceptador de exceção no arquivo <filename>src/main/WEB-INF/beans.xml</filename>.
  19 + </para>
  20 + <programlisting role="XML">
  21 + <![CDATA[
  22 + <beans xmlns="http://java.sun.com/xml/ns/javaee"
  23 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  24 + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  25 + http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
  26 + <interceptors>
  27 + <class>br.gov.frameworkdemoiselle.internal.interceptor.ExceptionHandlerInterceptor</class>
  28 + </interceptors>
  29 + </beans>
  30 + ]]>
  31 + </programlisting>
  32 + </section>
14 33  
15 34 <section>
16 35 <title>Tratadores de exceção</title>
... ...
documentation/reference/pt-BR/master.xml
... ... @@ -41,7 +41,8 @@
41 41 <xi:include href="logger.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
42 42 <xi:include href="templates.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
43 43 <xi:include href="security.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
44   - <!-- <xi:include href="paginacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> -->
  44 + <xi:include href="paginacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
  45 + <xi:include href="properties.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
45 46 </part>
46 47 <!-- parte 2 -->
47 48 <!-- <part id="2">-->
... ... @@ -52,4 +53,4 @@
52 53 <!-- apêndices -->
53 54 <xi:include href="instalacao.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
54 55  
55   -</book>
56 56 \ No newline at end of file
  57 +</book>
... ...
documentation/reference/pt-BR/paginacao.xml
... ... @@ -3,202 +3,289 @@
3 3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" []>
4 4 <chapter id="paginacao">
5 5  
6   - <title>Paginação</title>
  6 + <title>Paginação</title>
7 7  
8   - <para>
9   - Neste capítulo serão considerados os seguintes assuntos:
10   - <itemizedlist>
11   - <listitem>motivação para o uso de um mecanismo padronizado para <emphasis>paginação</emphasis>;</listitem>
12   - <listitem>funcionamento e uso da estrutura <literal>Pagination</literal> e do contexto de paginação (<literal>PaginationContext</literal>).</listitem>
13   - </itemizedlist>
14   - </para>
15   -
16   - <section>
17   - <title>Introdução ao mecanismo</title>
18   - <para>
19   - A apresentação de conjuntos de registros de médio a grande porte em formato de tabelas em aplicações Web geralmente requer um
20   - <emphasis>mecanismo de paginação</emphasis>, o qual permite ao cliente ver apenas um pedaço do resultado final, podendo este
21   - navegar para frente e para trás através dos registros. A menos que o conjunto de registros seja garantidamente pequeno, qualquer
22   - aplicação do tipo Web com funcionalidades de busca precisa ser dotada de paginação.
23   - </para>
24   - <para>
25   - O mecanismo de paginação para as aplicações fornecido pelo <emphasis>Demoiselle Framework</emphasis> consiste em um algoritmo de
26   - direcionado ao banco de dados (i.e., Database-Driven Pagination). Essa abordagem, apesar de requerer instruções SQL específicas
27   - para obter porções determinadas de registros, é a mais utilizada por ser mais eficiente e produzir menos redundância dos dados.
28   - </para>
29   - <para>
30   - É fornecido em tempo de execução um <emphasis>contexto de paginação</emphasis>, o qual tem escopo de sessão e armazena a informação
31   - de paginação de cada entidade (i.e., bean) que necessite de tal mecanismo. Esse contexto é compartilhado entre as diversas camadas
32   - da aplicação, especificamente entre as camadas de visão e persistência. Dessa maneira, a paginação dos dados é transparente para a
33   - camada intermediária (i.e., negócio) e não interfere na modelagem das classes de um projeto.
34   - </para>
35   - </section>
36   -
37   - <section>
38   - <title>Códigos de suporte</title>
39   - <para>
40   - // TODO: explicar Pagination e PaginationContext
41   - </para>
42   - <para>
43   - Veremos na seção seguinte como implementar a paginação em uma aplicação Java.
44   -
45   - - Farão parte do código de suporte para paginação:
46   - * a classe Pagination: usada para manipular a paginação dos dados resultantes, contendo os campos currentPage (página atual, selecionada na camada de visão), pageSize (tamanho da página, a quantidade de registros que ela comportará) e totalResults (a quantidade de resultados existentes na base de dados);
47   - * a classe PaginationContext: contexto usado para armazenar e fornecer estruturas do tipo Pagination;
48   - * a classe PaginationConfig: armazenador de configurações referentes à paginação.
49   -
50   -- Códigos internos de suporte no Core:
51   -
52   - <programlisting role="JAVA"><![CDATA[
53   -
54   -public class Pagination {
55   -
56   - private int currentPage;
57   - private int pageSize;
58   -
59   - private Long totalResults;
60   - private Integer totalPages;
61   -
62   - // ...
63   -}
64   -
65   -@SessionScoped
66   -public class PaginationContext {
67   -
68   - private final Map<Class<?>, Pagination> map;
69   -
70   - public Pagination getPagination(Class<?> clazz) { ... }
71   -
72   - public Pagination getPagination(Class<?> clazz, boolean create) { ... }
73   -
74   -}
75   -
76   -@Configuration
77   -public class PaginationConfig {
78   -
79   - @Key("default_page_size")
80   - private int defaultPageSize = 10;
81   -
82   - @Key("max_page_links")
83   - private int maxPageLinks = 5;
84   -
85   -}
86   -
87   - - Códigos internos de suporte em JPA:
88   -
89   -public class JPACrud<T, I> implements Crud<T, I> {
90   -
91   - @Inject
92   - private PaginationContext paginationContext;
93   -
94   - // ...
95   -
96   - public List<T> findAll() {
97   -
98   - final String jpql = "select this from " + getBeanClass().getSimpleName() + " this";
99   - final Query query = getEntityManager().createQuery(jpql);
100   -
101   - final Pagination pagination = paginationContext.getPagination(getBeanClass());
102   - if (pagination != null) {
103   - if (pagination.getTotalPages() == null) {
104   - pagination.setTotalResults(this.countAll());
105   - }
106   - query.setFirstResult(pagination.getFirstResult());
107   - query.setMaxResults(pagination.getPageSize());
108   - }
109   -
110   - // ...
111   - }
112   -
113   -}
114   -
115   - - Códigos internos de suporte em JSF:
116   -
117   -public abstract class AbstractListPageBean<T, I> extends AbstractPage implements ListPageBean<T, I> {
118   -
119   - @Inject
120   - private PaginationContext paginationContext;
121   -
122   - @Inject
123   - private PaginationConfig paginationConfig;
124   -
125   - // ...
126   -
127   - public Pagination getPagination() {
128   - return paginationContext.getPagination(getBeanClass(), true);
129   - }
130   -
131   - public int getPageSize() {
132   - return paginationConfig.getDefaultPageSize();
133   - }
134   -
135   - public int getMaxPageLinks() {
136   - return paginationConfig.getMaxPageLinks();
137   - }
138   -
139   -}
140   -
141   -frameworkdemoiselle.pagination.default_page_size=50
142   -frameworkdemoiselle.pagination.max_page_links=10
143   -
144   -]]></programlisting>
145   - </para>
146   - </section>
  8 + <para>
  9 + Neste capítulo serão considerados os seguintes assuntos:
  10 + <itemizedlist>
  11 + <listitem><para>Motivação para o uso de um mecanismo padronizado para <emphasis>paginação</emphasis>;</para></listitem>
  12 + <listitem><para>Funcionamento e uso da estrutura <literal>Pagination</literal> e do contexto de paginação
  13 + (<literal>PaginationContext</literal>).</para></listitem>
  14 + </itemizedlist>
  15 + </para>
  16 +
  17 + <section>
  18 + <title>Introdução ao mecanismo</title>
  19 + <para>
  20 + A apresentação de conjuntos de registros de médio a grande porte em formato de tabelas em aplicações Web geralmente requer um
  21 + <emphasis>mecanismo de paginação</emphasis>, o qual permite ao cliente ver apenas um pedaço do resultado final, podendo este
  22 + navegar para frente e para trás através dos registros. A menos que o conjunto de registros seja garantidamente pequeno, qualquer
  23 + aplicação do tipo Web com funcionalidades de busca precisa ser dotada de paginação.
  24 + </para>
  25 + <para>
  26 + O mecanismo de paginação para as aplicações fornecido pelo <emphasis>Demoiselle Framework</emphasis> consiste em um algoritmo
  27 + direcionado ao banco de dados (i.e., Database-Driven Pagination). Essa abordagem, apesar de requerer instruções SQL específicas
  28 + para obter porções determinadas de registros, é a mais utilizada por ser mais eficiente e produzir menos redundância de dados,
  29 + diminuindo assim tráfego de rede, consumo de memória e reduzindo o tempo de resposta.
  30 + </para>
  31 + <para>
  32 + É fornecido em tempo de execução um <emphasis>contexto de paginação</emphasis>, o qual tem escopo de sessão e armazena a informação
  33 + de paginação de cada entidade (i.e., bean) que necessite de tal mecanismo. Esse contexto é compartilhado entre as diversas camadas
  34 + da aplicação, especificamente entre as camadas de visão e persistência. Dessa maneira, a paginação dos dados é transparente para a
  35 + camada intermediária (i.e., negócio) e não interfere na modelagem das classes de um projeto.
  36 + </para>
  37 + </section>
  38 +
  39 + <section>
  40 + <title>Códigos de suporte</title>
  41 + <!--
  42 + <para>
  43 + // TODO: explicar Pagination e PaginationContext
  44 + </para>
  45 + -->
  46 + <para>
  47 + O <emphasis>mecanismo de paginação</emphasis> do <emphasis>Demoiselle Framework</emphasis> permite que os parâmetros para a consulta
  48 + no banco sejam configurados de forma bastante prática. Por outro lado, a consulta paginada ao banco já é feita pela extensão
  49 + <literal>demoiselle-jpa</literal>. Dessa forma, basta ajustar os parametros da paginação, e pedir as consultas normalmente.
  50 + O resultado da consulta é então passado para algum componente de iteração de dados com suporte ao mecanismo conhecido como <emphasis>Lazy
  51 + Load</emphasis> (ou <emphasis>Lazy Loading</emphasis>).
  52 + </para>
  53 + <para>
  54 + Farão parte do código de suporte para paginação:
  55 + <itemizedlist>
  56 + <listitem>
  57 + <para>
  58 + A classe <literal>Pagination</literal>: usada para manipular a paginação dos dados resultantes, contendo os campos <literal>currentPage</literal>
  59 + (página atual, selecionada na camada de visão), <literal>pageSize</literal> (tamanho da página, a quantidade de registros que ela comportará)
  60 + e <literal>totalResults</literal> (a quantidade de resultados existentes na base de dados);
  61 + </para>
  62 + </listitem>
  63 + <listitem>
  64 + <para>
  65 + A classe <literal>PaginationContext</literal>: contexto usado para armazenar e fornecer estruturas do tipo <literal>Pagination</literal>;
  66 + </para>
  67 + </listitem>
  68 + <listitem>
  69 + <para>
  70 + A classe <literal>PaginationConfig</literal>: armazenador de configurações referentes à paginação.
  71 + </para>
  72 + </listitem>
  73 + </itemizedlist>
  74 + </para>
  75 +
  76 + <para>Códigos internos de suporte no Core:</para>
  77 +
  78 + <programlisting role="JAVA"><![CDATA[
  79 + public class Pagination {
  80 +
  81 + private int currentPage;
  82 + private int pageSize;
  83 +
  84 + private Long totalResults;
  85 + private Integer totalPages;
  86 +
  87 + // ...
  88 + }
  89 +
  90 + @SessionScoped
  91 + public class PaginationContext {
  92 +
  93 + private final Map<Class<?>, Pagination> map;
  94 +
  95 + public Pagination getPagination(Class<?> clazz) { ... }
  96 +
  97 + public Pagination get -->Pagination(Class<?> clazz, boolean create) { ... }
  98 +
  99 + }
  100 +
  101 + @Configuration
  102 + public class PaginationConfig {
  103 +
  104 + @Key("default_page_size")
  105 + private int defaultPageSize = 10;
  106 +
  107 + @Key("max_page_links")
  108 + private int maxPageLinks = 5;
  109 +
  110 + }
  111 + ]]></programlisting>
  112 +
  113 + <para>Códigos internos de suporte em JPA:</para>
  114 +
  115 + <programlisting role="JAVA"><![CDATA[
  116 + public class JPACrud<T, I> implements Crud<T, I> {
  117 +
  118 + @Inject
  119 + private PaginationContext paginationContext;
  120 +
  121 + // ...
  122 +
  123 + public List<T> findAll() {
  124 +
  125 + final String jpql = "select this from " + getBeanClass().getSimpleName() + " this";
  126 + final Query query = getEntityManager().createQuery(jpql);
  127 +
  128 + final Pagination pagination = paginationContext.getPagination(getBeanClass());
  129 + if (pagination != null) {
  130 + if (pagination.getTotalPages() == null) {
  131 + pagination.setTotalResults(this.countAll());
  132 + }
  133 + query.setFirstResult(pagination.getFirstResult());
  134 + query.setMaxResults(pagination.getPageSize());
  135 + }
  136 +
  137 + // ...
  138 + }
  139 +
  140 + }
  141 + ]]></programlisting>
  142 +
  143 + <para>Códigos internos de suporte em JSF:</para>
  144 +
  145 + <programlisting role="JAVA"><![CDATA[
  146 + public abstract class AbstractListPageBean<T, I> extends AbstractPage
  147 + implements ListPageBean<T, I> {
  148 +
  149 + @Inject
  150 + private PaginationContext paginationContext;
  151 +
  152 + @Inject
  153 + private PaginationConfig paginationConfig;
  154 +
  155 + // ...
  156 +
  157 + public Pagination getPagination() {
  158 + return paginationContext.getPagination(getBeanClass(), true);
  159 + }
  160 +
  161 + public int getPageSize() {
  162 + return paginationConfig.getDefaultPageSize();
  163 + }
  164 +
  165 + public int getMaxPageLinks() {
  166 + return paginationConfig.getMaxPageLinks();
  167 + }
  168 +
  169 + }
  170 + ]]></programlisting>
  171 + </section>
147 172  
148   - <section>
149   - <title>Implementação na aplicação</title>
150   - <!--
151   - <para>
152   - A fim de utilizar o mecanismo inerente do <emphasis>Demoiselle Framework</emphasis>, é preciso simplesmente anotar os métodos
153   - contendo as instruções desejadas com <literal>@Startup</literal>, para a <emphasis>inicialização</emphasis>, ou
154   - <literal>@Shutdown</literal>, para a <emphasis>finalização</emphasis>.
155   - </para>
156   - <tip>
157   - <para>
158   - O mecanismo de inicialização do <emphasis>Demoiselle Framework</emphasis> é independente da natureza da aplicação Java, isto é,
159   - visa tanto aplicações do tipo Web quanto do tipo desktop (ex: Swing).
160   - </para>
161   - </tip>
162   - <para>
163   - As instruções contidas em um método anotado com <literal>@Startup</literal> serão executadas automaticamente quando a aplicação
164   - Java for inicializada, seja ela hospedada em um contêiner Web ou executada através de um método <literal>main()</literal>.
165   - Nenhum outro arquivo ou classe precisa ser definido. A anotação <literal>@Startup</literal> permite a indicação do argumento
166   - <literal>priority</literal>, um número inteiro que serve para definir a prioridade de execução do respectivo método na existência
167   - de mais de um inicializador para a aplicação.
168   - </para>
169   - <para>
170   - De maneira análoga, um método anotado com <literal>@Shutdown</literal> será executado no momento de finalização de uma aplicação,
171   - obedecendo também à ordem de prioridade definida com o argumento <literal>priority</literal>.
172   - </para>
173   - -->
174   - <para>
175   - Eis um exemplo de implementação de paginação em uma aplicação:
176   - </para>
177   - <programlisting role="JAVA"><![CDATA[
178   - @Inject
179   - private PaginationContext paginationContext;
180   -]]></programlisting>
181   - <programlisting role="JAVA"><![CDATA[
182   - Pagination pagination = paginationContext.getPagination(Audit.class);
183   -]]></programlisting>
184   - <tip>
185   - <para>
186   - O método <literal>getPagination()</literal> do contexto <literal>PaginationContext</literal> é sobrecarregado, podendo aceitar
187   - os seguintes argumentos: <literal>Class</literal> ou <literal>Class</literal> e <literal>boolean</literal>.
188   - </para>
189   - </tip>
190   - <note>
191   - <para>
192   - A JPA 2.0, através da Query API, suporta controle de paginação independente de fornecedor de banco de dados.
193   - Para controlar a paginação, a interface <literal>Query</literal> define os métodos <literal>setFirstResult()</literal> e
194   - <literal>setMaxResults()</literal> para especificar o primeiro resultado a ser recebido e o número máximo de resultados a
195   - serem retornados em relação àquele ponto. Internamente, são usadas instruções específicas do SGBD (ex: LIMIT e OFFSET no
196   - PostgreSQL).
197   - </para>
198   - </note>
  173 + <section>
  174 + <title>Implementação na aplicação</title>
  175 + <para>
  176 + Veremos nessa seção como implementar a paginação em uma aplicação Java. Para esse exmplo tomamos como base a aplicação de Bookmarks
  177 + fornecida pelo arquétipo <emphasis>JSF com JPA</emphasis> do <emphasis>Demoiselle Framework</emphasis> (para maiores detalhes
  178 + ver <link linkend="estrutura">Arquétipos</link>). Iremos utilizar o componente <literal>DataTable</literal> do <emphasis>PrimeFaces</emphasis>,
  179 + que oferece o mecanismo de <emphasis>Lazy Loading</emphasis> conhecido como <literal>LazyDataModel</literal>, muito útil para paginação
  180 + e classificação de dados.
  181 + </para>
  182 + <para>
  183 + Primeiro é preciso configurar um objeto <literal>LazyDataModel</literal> no construtor do <emphasis>Managed Bean</emphasis>
  184 + (<emphasis>BookmarkList</emphasis> nesse exemplo): instancia-lo e sobrescrever o método abstrado <literal>load</literal>, que recebe
  185 + vários argumentos. Esses argumentos são recuperados na página <literal>jsf</literal> que carrega a instância do objeto <literal>LazyDataModel</literal>.
  186 + </para>
  187 + <para>
  188 + Dentro do método <literal>load</literal> iremos pegar do contexto de paginação uma instância da implementação da interface <literal>Pagination</literal>
  189 + e ajustar alguns dos seus parâmetros para: indicar a partir de qual item a paginação deve iniciar, e o tamanho (quantidade de itens) de cada página.
  190 + Esses dados são usados no método <literal>findAll()</literal>, da classe <literal>JPACrud</literal> (extensão JPA), que utiliza o contexto de
  191 + paginação para pegar os parametros e fazer a consulta no banco buscando apenas os itens que estão dentro da pagina que o parametro
  192 + <literal>first</literal> indicar. O resultado é passado para a instancia do <literal>LazyDataModel</literal>, que é responsável por exibir
  193 + os dados de forma apropriada.
  194 + </para>
  195 + <para>
  196 + À classe <emphasis>BookmarkList</emphasis> devem ser adicionados os seguintes trechos de código:
  197 + </para>
  198 +
  199 + <programlisting role="JAVA"><![CDATA[
  200 + // ...
  201 + import java.util.Map;
  202 + import br.gov.frameworkdemoiselle.pagination.Pagination;
  203 +
  204 + // ...
  205 + private LazyDataModel<Bookmark> lazyModel;
  206 +
  207 + public BookmarkListMB() {
  208 + lazyModel = new LazyDataModel<Bookmark>() {
  209 +
  210 + @Override
  211 + public List<Bookmark> load (int first, int pageSize, String sortField,
  212 + SortOrder sortOrder, Map<String, String> filters){
  213 +
  214 + Pagination pagination = getPagination();
  215 + pagination.setPageSize(pageSize);
  216 + pagination.setFirstResult(first);
  217 +
  218 + List<Bookmark> itemsList = bc.findAll();
  219 +
  220 + lazyModel.setRowCount(pagination.getTotalResults());
  221 +
  222 + return itemsList;
  223 + }
  224 + };
  225 + }
  226 +
  227 + // ...
  228 +
  229 + public LazyDataModel<Bookmark> getLazyModel() {
  230 + return lazyModel;
  231 + }
  232 +
  233 + // ...
  234 + ]]></programlisting>
  235 +
  236 + <para>
  237 + No arquivo <literal>messages.properties</literal> adicione as linhas:
  238 + </para>
  239 +
  240 + <programlisting role="JAVA"><![CDATA[
  241 + page.first=0
  242 + page.rows=4
  243 + page.max.links=3
  244 + ]]></programlisting>
  245 +
  246 + <para>
  247 + Na página JSF <literal>bookmark_list.xhtml</literal>, substitua a linha:
  248 + </para>
  249 +
  250 + <programlisting role="JAVA"><![CDATA[
  251 + <p:dataTable id="list" var="bean" value="#{bookmarkListMB.resultList}">
  252 + ]]></programlisting>
  253 +
  254 + <para>
  255 + por:
  256 + </para>
  257 +
  258 + <programlisting role="JAVA"><![CDATA[
  259 + <p:dataTable id="list" var="bean"
  260 + value="#{bookmarkListMB.lazyModel}" lazy="true" paginator="true"
  261 + first="#{messages['page.first']}" rows="#{messages['page.rows']}"
  262 + pageLinks="#{messages['page.max.links']}">
  263 + ]]></programlisting>
  264 +
  265 + <para>
  266 + Com essas alterações simples, a aplicação Bookmarks passa a utilizar o mecanismo de paginação oferecido pelo <emphasis>Demoiselle Framework</emphasis>.
  267 + </para>
  268 +
  269 + <tip>
  270 + <para>
  271 + O método <literal>getPagination()</literal> do contexto <literal>PaginationContext</literal> é sobrecarregado, podendo aceitar
  272 + os seguintes argumentos: <literal>Class</literal> ou <literal>Class</literal> e <literal>boolean</literal>.
  273 + </para>
  274 + </tip>
  275 + <note>
  276 + <para>
  277 + A JPA 2.0, através da Query API, suporta controle de paginação independente de fornecedor de banco de dados.
  278 + Para controlar a paginação, a interface <literal>Query</literal> define os métodos <literal>setFirstResult()</literal> e
  279 + <literal>setMaxResults()</literal> para especificar o primeiro resultado a ser recebido e o número máximo de resultados a
  280 + serem retornados em relação àquele ponto. Internamente, são usadas instruções específicas do SGBD (ex: LIMIT e OFFSET no
  281 + PostgreSQL).
  282 + </para>
  283 + </note>
199 284 </section>
200 285  
201   - <section>
  286 +</chapter>
  287 +
  288 +<!--<section>
202 289 <title>Um exemplo usando PrimeFaces</title>
203 290 <para>
204 291 Eis um interessante caso de uso de paginação: ????.
... ... @@ -259,7 +346,8 @@ public class AuditMB extends AbstractListPageBean&lt;Audit, Long&gt; {
259 346 value="#{auditMB.lazyModel}" lazy="true" paginator="true"
260 347 rows="#{auditMB.pageSize}" pageLinks="#{auditMB.maxPageLinks}">]]></programlisting>
261 348 </section>
262   -
  349 + -->
  350 +<!--
263 351 <section>
264 352 <title>Referências</title>
265 353 <itemizedlist>
... ... @@ -267,8 +355,8 @@ public class AuditMB extends AbstractListPageBean&lt;Audit, Long&gt; {
267 355 <listitem>Implementing Search Result Pagination in a Web Application (http://www.developer.com/java/other/article.php/3696226/)</listitem>
268 356 <listitem>A Pagination Technique Using Spring (http://www.developer.com/java/web/article.php/10935_3830886_1/)</listitem>
269 357 <listitem>Spring JDBC Pagination Tutorial (http://www.codefutures.com/tutorials/spring-pagination/)</listitem>
270   - <listitem>PrimeFaces DataTable - Lazy Loading (http://www.primefaces.org/showcase/ui/datatableLazy.jsf)</listitem>
  358 + <listitem>PrimeFaces DataTable - Lazy Loading (http://www.primefaces.org/showcase/ui/datatableLazy.jsf)</listitem>
271 359 </itemizedlist>
272 360 </section>
273   -
274   -</chapter>
  361 + -->
  362 +
... ...
documentation/reference/pt-BR/properties.xml 0 → 100644
... ... @@ -0,0 +1,188 @@
  1 +<?xml version='1.0' encoding="utf-8"?>
  2 +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  3 + "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]>
  4 +<chapter id="properties">
  5 +
  6 + <title>Demoiselle Properties</title>
  7 +
  8 + <para>
  9 + Em um projeto com o <emphasis>Demoiselle Framework</emphasis>, algumas propriedades e configurações
  10 + do <emphasis>Framework</emphasis> podem ser ajustadas no arquivo <literal>demoiselle.properties</literal>.
  11 + Além disso, a partir da versão 2.3.0 também é nesse arquivo que devem ser definidas as estratégias de
  12 + <emphasis>Transação</emphasis>, <emphasis>Autorização</emphasis> e <emphasis>Autenticação</emphasis>.
  13 + </para>
  14 + <para>
  15 + A seguir listamos as propriedades e configurações do <emphasis>Demoiselle Framework</emphasis> que o usuário pode modificar,
  16 + acompanhados de alguns exemplos ilustrativos. Também mostraremos como escolher as estratégias para
  17 + <emphasis>Transação</emphasis>, <emphasis>Autorização</emphasis> e <emphasis>Autenticação</emphasis>, oferecidas pelo
  18 + <emphasis>Demoiselle</emphasis>.
  19 + </para>
  20 +
  21 + <section>
  22 + <title>Configurações do Core</title>
  23 + <para>
  24 + <itemizedlist>
  25 + <listitem>
  26 + <para>
  27 + <literal>frameworkdemoiselle.pagination.page.size</literal> - Configura o número de linhas que será
  28 + exibido na grade de uma página. Por padrão, esse número é 10.
  29 + </para>
  30 + <para>
  31 + Exemplo de configuração: <literal>frameworkdemoiselle.pagination.page.size = 15</literal>, ajusta em 15
  32 + a quantidade de linhas em uma grade
  33 + </para>
  34 + </listitem>
  35 + <listitem>
  36 + <para>
  37 + <literal>frameworkdemoiselle.pagination.max.page.links</literal> - Configura a quantidade de links que
  38 + será exibido em uma página. Por padrão, esse valor é 5.
  39 + </para>
  40 + <para>
  41 + Exemplo de configuração: <literal>frameworkdemoiselle.pagination.max.page.links = 20</literal>, configura em 20
  42 + o número de links que podem ser exibidos em uma página.
  43 + </para>
  44 + </listitem>
  45 + <listitem>
  46 + <para>
  47 + <literal>frameworkdemoiselle.security.enabled</literal> - Configura a habilitação das funcionalidades do
  48 + <emphasis>Demoiselle</emphasis> relacionadas a segurança (como autenticação de usuário e verificação de
  49 + permissão de acesso à recursos). Por padrão, essas funcionalidades ficam habilitadas.
  50 + </para>
  51 + <para>
  52 + Exemplo de configuração: <literal>frameworkdemoiselle.security.enabled = false</literal>, desabilita as
  53 + funcionalidades de segurança do <emphasis>Demoiselle</emphasis>.
  54 + </para>
  55 + </listitem>
  56 + </itemizedlist>
  57 + </para>
  58 + </section>
  59 +
  60 + <section>
  61 + <title>Configurações da extensão JSF</title>
  62 + <para>
  63 + <itemizedlist>
  64 + <listitem>
  65 + <para>
  66 + <literal>frameworkdemoiselle.security.login.page</literal> - Configura a página de login. Por padrão, a página
  67 + configurada é <emphasis>“/login”</emphasis>.
  68 + </para>
  69 + <para>
  70 + Exemplo de configuração: <literal>frameworkdemoiselle.security.login.page = “/inicial”</literal>, configura a
  71 + página <emphasis>“/inicial”</emphasis> como a página de login.
  72 + </para>
  73 + </listitem>
  74 +
  75 + <listitem>
  76 + <para>
  77 + <literal>frameworkdemoiselle.security.redirect.after.login</literal> - Configura a página que será acessada após
  78 + o login. Por padrão, a página configurada é <emphasis>“/index”</emphasis>.
  79 + </para>
  80 + <para>
  81 + Exemplo de configuração: <literal>frameworkdemoiselle.security.redirect.after.login = "/menu"</literal>, configura
  82 + a página <emphasis>“/menu”</emphasis> para ser acessada no redirecionamento após o login do usuário.
  83 + </para>
  84 + </listitem>
  85 +
  86 + <listitem>
  87 + <para>
  88 + <literal>frameworkdemoiselle.security.redirect.after.logout</literal> - Configura a página para a qual a aplicação
  89 + será direcionada após o logout do usuário. Por padrão, a página configurada é <emphasis>“/login”</emphasis>.
  90 + </para>
  91 + <para>
  92 + Exemplo de configuração: <literal>frameworkdemoiselle.security.redirect.after.logout = "/index"</literal>, configura
  93 + a página "/index" para ser acessada no redirecionamento após o logout do usuário.
  94 + </para>
  95 + </listitem>
  96 +
  97 + <listitem>
  98 + <para>
  99 + <literal>frameworkdemoiselle.security.redirect.enebled</literal> - Configura a habilitação do redirecionamento da página
  100 + após <emphasis>login</emphasis> e <emphasis>logout</emphasis>. Por padrão, o valor dessa propriedade é <emphasis>true</emphasis>.
  101 + </para>
  102 + <para>
  103 + Exemplo de configuração: <literal>frameworkdemoiselle.security.redirect.enebled = false</literal>, desabilita os
  104 + redirecionamentos de páginas após <emphasis>login</emphasis> e <emphasis>logout</emphasis>.
  105 + </para>
  106 + </listitem>
  107 +
  108 + <listitem>
  109 + <para>
  110 + <literal>frameworkdemoiselle.handle.application.exception</literal> - Define se a extensão vai capturar ou não alguma exceção
  111 + lançada pela aplicação. Por padrão, essa configuração vem marcada como “true”, que diz para a extensão capturar a exceção.
  112 + </para>
  113 + <para>
  114 + Exemplo de configuração: <emphasis>frameworkdemoiselle.handle.application.exception = false</emphasis>, desabilita a captura
  115 + de exceções lançadas pela aplicação.
  116 + </para>
  117 + </listitem>
  118 +
  119 + <listitem>
  120 + <para>
  121 + <literal>frameworkdemoiselle.handle.aplication.exception.page</literal> - Configura a página para a qual a aplicação será
  122 + direcionada em caso de exceção. Por padrão, a página configurada é <emphasis>“/application_error”</emphasis>.
  123 + </para>
  124 + <para>
  125 + Exemplo de configuração: <emphasis>framework.handle.aplication.exception.page = “/exception_x_page”</emphasis>, redireciona a
  126 + aplicação para a página <emphasis>/exception_x_page</emphasis> caso ocorra alguma exceção.
  127 + </para>
  128 + </listitem>
  129 + </itemizedlist>
  130 + </para>
  131 + </section>
  132 +
  133 + <section>
  134 + <title>Configurações da Extensão JPA</title>
  135 + <para>
  136 + <itemizedlist>
  137 + <listitem>
  138 + <para>
  139 + <literal>frameworkdemoiselle.persistence.unit.name</literal> - Quando é definida mais de uma unidade de persitencia
  140 + no arquivo <literal>persistence.xml</literal>, muitas vezes é conveniente escolher uma unidade padrão, ao invés de
  141 + definir as unidades individualmente em cada <emphasis>Entity Manager</emphasis>. Esse parametro é utilizado para
  142 + indicar qual é a unidade de persistência que deve ser utilizada quando no <emphasis>Entity Manager</emphasis> não
  143 + houver essa definição.
  144 + </para>
  145 + <para>
  146 + Exemplo de configuração: <literal>frameworkdemoiselle.persistence.unit.name = database1-ds</literal>, configura a
  147 + unidade de persistencia <literal>database1-ds</literal> como padrão da aplicação.
  148 + </para>
  149 + </listitem>
  150 + </itemizedlist>
  151 + </para>
  152 + </section>
  153 +
  154 + <section>
  155 + <title>Escolhendo Estratégias</title>
  156 + <para>
  157 + Para escolher as estratégias de <emphasis>Transação</emphasis>, <emphasis>Autorização</emphasis> e <emphasis>Autenticação</emphasis>
  158 + devem ser configuradas as propriedades: <literal>frameworkdemoiselle.transaction.class</literal>,
  159 + <literal>frameworkdemoiselle.security.authorizer.class</literal> e <literal>frameworkdemoiselle.security.authenticator.class</literal>
  160 + , respectivamente.
  161 + </para>
  162 + <para>
  163 + Para utilizar as estratégias fornecidas pelo próprio <emphasis>Framework Demoiselle</emphasis>, você deve configurar essas
  164 + propriedades da seguinte forma:
  165 + <itemizedlist>
  166 + <listitem>
  167 + <para>
  168 + <literal>frameworkdemoiselle.transaction.class = br.gov.frameworkdemoiselle.transaction.JPATransaction</literal>,
  169 + para transações <emphasis>JPA</emphasis>, e <literal>frameworkdemoiselle.transaction.class =
  170 + br.gov.frameworkdemoiselle.transaction.JTATransaction</literal>, para transações <emphasis>JTA</emphasis>;
  171 + </para>
  172 + </listitem>
  173 + <listitem>
  174 + <para>
  175 + <literal>frameworkdemoiselle.security.authorizer.class = br.gov.serpro.inscricao.security.Autorizador</literal>;
  176 + </para>
  177 + </listitem>
  178 + <listitem>
  179 + <para>
  180 + <literal>frameworkdemoiselle.security.authenticator.class = br.gov.serpro.inscricao.security.Autenticador</literal>.
  181 + </para>
  182 + </listitem>
  183 + </itemizedlist>
  184 + As instruções para você construir e utilizar sua própria estratégia estãodescritas nos capítulos <link linkend="transacao">Transação</link>
  185 + e <link linkend="security">Segurança</link>.
  186 + </para>
  187 + </section>
  188 +</chapter>
... ...
documentation/reference/pt-BR/security.xml
... ... @@ -18,6 +18,26 @@
18 18 </para>
19 19  
20 20 <section>
  21 + <title>Configurando</title>
  22 + <para>
  23 + Para um correto funcionamento do Demoiselle é necessário inserir od interceptadores de segurança no arquivo <filename>src/main/WEB-INF/beans.xml</filename>.
  24 + </para>
  25 + <programlisting role="XML">
  26 + <![CDATA[
  27 + <beans xmlns="http://java.sun.com/xml/ns/javaee"
  28 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  29 + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  30 + http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
  31 + <interceptors>
  32 + <class>br.gov.frameworkdemoiselle.internal.interceptor.RequiredPermissionInterceptor</class>
  33 + <class>br.gov.frameworkdemoiselle.internal.interceptor.RequiredRoleInterceptor</class>
  34 + </interceptors>
  35 + </beans>
  36 + ]]>
  37 + </programlisting>
  38 + </section>
  39 +
  40 + <section>
21 41 <title>Autenticação</title>
22 42 <para>
23 43 O mecanismo de autenticação busca verificar a identidade do usuário de um sistema. A forma mais conhecida, e comum,
... ... @@ -201,20 +221,12 @@ public class MeuAuthorizer implements Authorizer {
201 221  
202 222 }]]></programlisting>
203 223 <para>
204   - Feito isso deve-se definir no arquivo META-INF/beans.xml, as classes criadas:
  224 + Feito isso deve-se definir no arquivo <filename>demoiselle.properties</filename>, as classes criadas:
205 225 </para>
206   - <programlisting role="XML"><![CDATA[<?xml version="1.0"?>
207   -<beans xmlns="http://java.sun.com/xml/ns/javaee"
208   - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
209   - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
210   - http://java.sun.com/xml/ns/javaee/beans_1_1.xsd">
211   -
212   - <alternatives>
213   - <class>projeto.MeuAuthenticator</class>
214   - <class>projeto.MeuAuthorizer</class>
215   - </alternatives>
216   -
217   -</beans>]]></programlisting>
  226 + <programlisting>
  227 + frameworkdemoiselle.security.authenticator.class=projeto.MeuAuthenticator
  228 + frameworkdemoiselle.security.authorizer.class=projeto.MeuAuthorizer
  229 + </programlisting>
218 230 <para>
219 231 À partir desse momento, a aplicação já possui uma implementação de segurança definida.
220 232 </para>
... ...
documentation/reference/pt-BR/transacao.xml
... ... @@ -22,6 +22,25 @@
22 22 Neste capítulo apresentaremos para você como usar a nossa solução de controle de transação, as estratégias
23 23 prontas que oferecemos e a criação de sua própria estratégia.
24 24 </para>
  25 +
  26 + <section>
  27 + <title>Configurando</title>
  28 + <para>
  29 + Para um correto funcionamento do Demoiselle é necessário inserir o interceptador de transação no arquivo <filename>src/main/WEB-INF/beans.xml</filename>.
  30 + </para>
  31 + <programlisting role="XML">
  32 + <![CDATA[
  33 + <beans xmlns="http://java.sun.com/xml/ns/javaee"
  34 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  35 + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  36 + http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
  37 + <interceptors>
  38 + <class>br.gov.frameworkdemoiselle.internal.interceptor.TransactionalInterceptor</class>
  39 + </interceptors>
  40 + </beans>
  41 + ]]>
  42 + </programlisting>
  43 + </section>
25 44  
26 45 <section>
27 46 <title>Métodos transacionais</title>
... ... @@ -99,19 +118,11 @@ public class AbacaxiException {
99 118 </para>
100 119 <para>
101 120 A transação JPA é simples de configurar e não exige nenhum recurso externo à sua aplicação.
102   - Basta definir no arquivo <filename>META-INF/beans.xml</filename> a seguinte configuração:
  121 + Basta definir no arquivo <filename>demoiselle.properties</filename> a seguinte configuração:
103 122 </para>
104   - <programlisting role="XML"><![CDATA[<?xml version="1.0"?>
105   -<beans xmlns="http://java.sun.com/xml/ns/javaee"
106   - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
107   - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
108   - http://java.sun.com/xml/ns/javaee/beans_1_1.xsd">
109   -
110   - <alternatives>
111   - <class>br.gov.frameworkdemoiselle.transaction.JPATransaction</class>
112   - </alternatives>
113   -
114   -</beans>]]></programlisting>
  123 + <programlisting>
  124 + frameworkdemoiselle.transaction.class=br.gov.frameworkdemoiselle.transaction.JPATransaction
  125 + </programlisting>
115 126 <tip><para> Caso não esteja utilizando o arquétipo JSF-JPA fornecidos pelo Demoiselle, confira se a dependência para a
116 127 extensão está indicada corretamente no arquivo POM.XML.</para>
117 128 <programlisting role="XML"><![CDATA[<dependency>
... ... @@ -132,23 +143,13 @@ public class AbacaxiException {
132 143 <para>
133 144 A estratégia JTA não serve apenas para persistência em banco de dados, serve também para integrar com
134 145 tecnologias que façam acesso ao contexto JTA, como é o caso do EJB. Para ativar esta estratégia defina no
135   - arquivo <filename>META-INF/beans.xml</filename> a seguinte configuração:
  146 + arquivo <filename>demoiselle.properties</filename> a seguinte configuração:
136 147 </para>
137   - <programlisting role="XML"><![CDATA[<?xml version="1.0"?>
138   -<beans xmlns="http://java.sun.com/xml/ns/javaee"
139   - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
140   - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
141   - http://java.sun.com/xml/ns/javaee/beans_1_1.xsd">
142   -
143   - <alternatives>
144   - <class>br.gov.frameworkdemoiselle.transaction.JTATransaction</class>
145   - </alternatives>
146   -
147   -</beans>]]></programlisting>
  148 + <programlisting>frameworkdemoiselle.transaction.class=br.gov.frameworkdemoiselle.transaction.JTATransaction</programlisting>
148 149 <para>
149 150 Feito isto, o controle transacional será delegado para a transação acessível via JNDI com o nome
150 151 <literal>UserTransaction</literal>. A estratégia acessa o objeto da seguinte maneira:
151   - <literal>context.lookup("UserTransaction")</literal>. Portanto, para você utilizar esta estratégia,
  152 + <literal>Beans.getReference(UserTransaction.class)</literal>. Portanto, para você utilizar esta estratégia,
152 153 você precisa de um container JEE ou de um servidor JTA qualquer.
153 154 </para>
154 155 <para>
... ... @@ -156,18 +157,20 @@ public class AbacaxiException {
156 157 JTA gerenciada. Veja um exemplo utilizando o servidor de aplicações JBoss-AS6 e com o provider Hibernate (embutido no JBoss-AS) como implementação JPA:
157 158 </para>
158 159 <programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
159   -<persistence version="2.0"
160   - xmlns="http://java.sun.com/xml/ns/persistence"
  160 +<persistence version="2.0"
  161 + xmlns="http://java.sun.com/xml/ns/persistence"
161 162 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
162   - xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
163   - http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  163 + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
  164 + http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
164 165  
165   - <persistence-unit name="contactlist-ds">
166   - <jta-data-source>java:/DefaultDS</jta-data-source>
  166 + <persistence-unit name="bookmark-ds" transaction-type="JTA">
  167 + <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
167 168 <properties>
168   - <property name="hibernate.transaction.factory_class"
169   - value="org.hibernate.transaction.JTATransactionFactory" />
170   - <property name="jta.UserTransaction" value="UserTransaction" />
  169 + <property name="hibernate.show_sql" value="true" />
  170 + <property name="hibernate.format_sql" value="false" />
  171 + <property name="hibernate.hbm2ddl.auto" value="update" />
  172 + <property name="hibernate.transaction.jta.platform"
  173 + value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
171 174 </properties>
172 175 </persistence-unit>
173 176 </persistence>]]></programlisting>
... ... @@ -221,19 +224,11 @@ public class MegaTransaction implements Transaction {
221 224 }
222 225 ]]></programlisting>
223 226 <para>
224   - Basta agora definir no arquivo <filename>META-INF/beans.xml</filename> a sua estratégia:
  227 + Basta agora definir no arquivo <filename>demoiselle.properties</filename> a sua estratégia:
225 228 </para>
226   - <programlisting role="XML"><![CDATA[<?xml version="1.0"?>
227   -<beans xmlns="http://java.sun.com/xml/ns/javaee"
228   - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
229   - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
230   - http://java.sun.com/xml/ns/javaee/beans_1_1.xsd">
231   -
232   - <alternatives>
233   - <class>projeto.MegaTransaction</class>
234   - </alternatives>
235   -
236   -</beans>]]></programlisting>
  229 + <programlisting>
  230 + frameworkdemoiselle.transaction.class=projeto.MegaTransaction
  231 + </programlisting>
237 232 </section>
238 233  
239 234 </chapter>
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/annotation/Priority.java 0 → 100644
... ... @@ -0,0 +1,66 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package br.gov.frameworkdemoiselle.annotation;
  38 +
  39 +import static java.lang.annotation.ElementType.METHOD;
  40 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  41 +
  42 +import java.lang.annotation.Retention;
  43 +import java.lang.annotation.Target;
  44 +
  45 +/**
  46 + * @author SERPRO
  47 + */
  48 +@Target(METHOD)
  49 +@Retention(RUNTIME)
  50 +public @interface Priority {
  51 +
  52 + /**
  53 + * Most important priority value.
  54 + */
  55 + public static int MAX_PRIORITY = Integer.MIN_VALUE;
  56 +
  57 + /**
  58 + * Less important priority value.
  59 + */
  60 + public static int MIN_PRIORITY = Integer.MAX_VALUE;
  61 +
  62 + /**
  63 + * An integer value defines the priority order.
  64 + */
  65 + int value();
  66 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/annotation/Shutdown.java
... ... @@ -52,7 +52,8 @@ import java.lang.annotation.Target;
52 52 * <pre>
53 53 * public class Finalizer {
54 54 *
55   - * &#064;Shutdown(priority = 5)
  55 + * &#064;Shutdown
  56 + * &#064;Priority(5)
56 57 * public void finalize() {
57 58 * ...
58 59 * }
... ... @@ -60,6 +61,7 @@ import java.lang.annotation.Target;
60 61 *
61 62 *
62 63 *
  64 + *
63 65 * </pre>
64 66 *
65 67 * </blockquote>
... ... @@ -75,17 +77,29 @@ public @interface Shutdown {
75 77  
76 78 /**
77 79 * Most important priority value.
  80 + *
  81 + * @deprecated
  82 + * @see Priority
78 83 */
  84 + @Deprecated
79 85 public static int MAX_PRIORITY = Integer.MIN_VALUE;
80 86  
81 87 /**
82 88 * Less important priority value.
  89 + *
  90 + * @deprecated
  91 + * @see Priority
83 92 */
  93 + @Deprecated
84 94 public static int MIN_PRIORITY = Integer.MAX_VALUE;
85 95  
86 96 /**
87 97 * An integer value defines method execution order (i.e., priority).
  98 + *
  99 + * @deprecated
  100 + * @see Priority
88 101 */
  102 + @Deprecated
89 103 int priority() default MIN_PRIORITY;
90 104  
91 105 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/annotation/Startup.java
... ... @@ -52,13 +52,16 @@ import java.lang.annotation.Target;
52 52 * <pre>
53 53 * public class Initializer {
54 54 *
55   - * &#064;Startup(priority = 1)
  55 + * &#064;Startup
  56 + * &#064;Priority(1)
56 57 * public void initialize() {
57 58 * ...
58 59 * }
59 60 * }
60 61 *
61 62 *
  63 + *
  64 + *
62 65 * </pre>
63 66 *
64 67 * </blockquote>
... ... @@ -74,17 +77,29 @@ public @interface Startup {
74 77  
75 78 /**
76 79 * Most important priority value.
  80 + *
  81 + * @deprecated
  82 + * @see Priority
77 83 */
  84 + @Deprecated
78 85 public static int MAX_PRIORITY = Integer.MIN_VALUE;
79 86  
80 87 /**
81 88 * Less important priority value.
  89 + *
  90 + * @deprecated
  91 + * @see Priority
82 92 */
  93 + @Deprecated
83 94 public static int MIN_PRIORITY = Integer.MAX_VALUE;
84 95  
85 96 /**
86 97 * An integer value defines method execution order (i.e., priority).
  98 + *
  99 + * @deprecated
  100 + * @see Priority
87 101 */
  102 + @Deprecated
88 103 int priority() default MIN_PRIORITY;
89 104  
90 105 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java
... ... @@ -1,134 +0,0 @@
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.bootstrap;
38   -
39   -import java.io.FileNotFoundException;
40   -import java.net.URL;
41   -
42   -import javax.enterprise.event.Observes;
43   -import javax.enterprise.inject.spi.BeforeBeanDiscovery;
44   -import javax.enterprise.inject.spi.ProcessAnnotatedType;
45   -
46   -import org.apache.commons.configuration.Configuration;
47   -import org.apache.commons.configuration.PropertiesConfiguration;
48   -
49   -import br.gov.frameworkdemoiselle.configuration.ConfigurationException;
50   -import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader;
51   -import br.gov.frameworkdemoiselle.util.Reflections;
52   -import br.gov.frameworkdemoiselle.util.Strings;
53   -
54   -public abstract class AbstractStrategyBootstrap<T, D extends T> extends AbstractBootstrap {
55   -
56   - private Class<T> type;
57   -
58   - private Class<D> defaultClass;
59   -
60   - private Class<? extends T> selected;
61   -
62   - private Class<T> getType() {
63   - if (this.type == null) {
64   - this.type = Reflections.getGenericTypeArgument(this.getClass(), 0);
65   - }
66   -
67   - return this.type;
68   - }
69   -
70   - private Class<D> getDefaultClass() {
71   - if (this.defaultClass == null) {
72   - this.defaultClass = Reflections.getGenericTypeArgument(this.getClass(), 1);
73   - }
74   -
75   - return this.defaultClass;
76   - }
77   -
78   - public void beforeBeanDiscovery(@Observes final BeforeBeanDiscovery event) {
79   - selected = loadSelected();
80   - }
81   -
82   - public <A> void processAnnotatedType(@Observes final ProcessAnnotatedType<A> event) {
83   - Class<A> annotated = event.getAnnotatedType().getJavaClass();
84   -
85   - if (Reflections.isOfType(annotated, getType()) && annotated != selected) {
86   - event.veto();
87   - }
88   - }
89   -
90   - @SuppressWarnings("unchecked")
91   - private Class<T> loadSelected() {
92   - Class<T> result = null;
93   - String canonicalName = null;
94   - String typeName = getType().getSimpleName().toLowerCase();
95   - String key = null;
96   -
97   - try {
98   - URL url = ConfigurationLoader.getResourceAsURL("demoiselle.properties");
99   - Configuration config = new PropertiesConfiguration(url);
100   - canonicalName = config.getString(getConfigKey(), getDefaultClass().getCanonicalName());
101   -
102   - ClassLoader classLoader;
103   -
104   - try {
105   - classLoader = ConfigurationLoader.getClassLoaderForResource(canonicalName.replaceAll("\\.",
106   - "/") + ".class");
107   - } catch (FileNotFoundException e) {
108   - classLoader = Thread.currentThread().getContextClassLoader();
109   - }
110   -
111   - result = (Class<T>) Class.forName(canonicalName, false, classLoader);
112   - result.asSubclass(getType());
113   -
114   - } catch (org.apache.commons.configuration.ConfigurationException cause) {
115   - throw new ConfigurationException(getBundle().getString("file-not-found", "demoiselle.properties"));
116   -
117   - } catch (ClassNotFoundException cause) {
118   - key = Strings.getString("{0}-class-not-found", typeName);
119   - throw new ConfigurationException(getBundle().getString(key, canonicalName));
120   -
121   - } catch (ClassCastException cause) {
122   - key = Strings.getString("{0}-class-must-be-of-type", typeName);
123   - throw new ConfigurationException(getBundle().getString(key, canonicalName, getType()));
124   -
125   - } catch (FileNotFoundException e) {
126   - throw new ConfigurationException(getBundle().getString("file-not-found", "demoiselle.properties"));
127   - }
128   -
129   - return result;
130   - }
131   -
132   - public abstract String getConfigKey();
133   -
134   -}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ApplicationLifecycleEvent.java 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +package br.gov.frameworkdemoiselle.internal.bootstrap;
  2 +
  3 +public interface ApplicationLifecycleEvent {
  4 +
  5 + boolean removeProcessors();
  6 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AsbratctLifecycleBootstrap.java 0 → 100644
... ... @@ -0,0 +1,160 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package br.gov.frameworkdemoiselle.internal.bootstrap;
  38 +
  39 +import java.lang.annotation.Annotation;
  40 +import java.util.ArrayList;
  41 +import java.util.Collections;
  42 +import java.util.Iterator;
  43 +import java.util.List;
  44 +
  45 +import javax.enterprise.context.ConversationScoped;
  46 +import javax.enterprise.context.RequestScoped;
  47 +import javax.enterprise.context.SessionScoped;
  48 +import javax.enterprise.event.Observes;
  49 +import javax.enterprise.inject.spi.AfterBeanDiscovery;
  50 +import javax.enterprise.inject.spi.AnnotatedMethod;
  51 +import javax.enterprise.inject.spi.AnnotatedType;
  52 +import javax.enterprise.inject.spi.BeanManager;
  53 +import javax.enterprise.inject.spi.ProcessAnnotatedType;
  54 +
  55 +import br.gov.frameworkdemoiselle.DemoiselleException;
  56 +import br.gov.frameworkdemoiselle.annotation.ViewScoped;
  57 +import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader;
  58 +import br.gov.frameworkdemoiselle.internal.context.CustomContext;
  59 +import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
  60 +import br.gov.frameworkdemoiselle.internal.processor.AnnotatedMethodProcessor;
  61 +import br.gov.frameworkdemoiselle.util.Reflections;
  62 +
  63 +public abstract class AsbratctLifecycleBootstrap<A extends Annotation> extends AbstractBootstrap {
  64 +
  65 + private Class<A> annotationClass;
  66 +
  67 + @SuppressWarnings("rawtypes")
  68 + private final List<AnnotatedMethodProcessor> processors = Collections
  69 + .synchronizedList(new ArrayList<AnnotatedMethodProcessor>());
  70 +
  71 + private final List<CustomContext> tempContexts = new ArrayList<CustomContext>();
  72 +
  73 + private AfterBeanDiscovery afterBeanDiscoveryEvent;
  74 +
  75 + protected abstract <T> AnnotatedMethodProcessor<T> newProcessorInstance(AnnotatedMethod<T> annotatedMethod,
  76 + BeanManager beanManager);
  77 +
  78 + protected Class<A> getAnnotationClass() {
  79 + if (this.annotationClass == null) {
  80 + this.annotationClass = Reflections.getGenericTypeArgument(this.getClass(), 0);
  81 + }
  82 +
  83 + return this.annotationClass;
  84 + }
  85 +
  86 + public <T> void processAnnotatedType(@Observes final ProcessAnnotatedType<T> event, final BeanManager beanManager) {
  87 + final AnnotatedType<T> annotatedType = event.getAnnotatedType();
  88 +
  89 + for (AnnotatedMethod<?> am : annotatedType.getMethods()) {
  90 + if (am.isAnnotationPresent(getAnnotationClass())) {
  91 + @SuppressWarnings("unchecked")
  92 + AnnotatedMethod<T> annotatedMethod = (AnnotatedMethod<T>) am;
  93 + processors.add(newProcessorInstance(annotatedMethod, beanManager));
  94 + }
  95 + }
  96 + }
  97 +
  98 + public void loadTempContexts(@Observes final AfterBeanDiscovery event) {
  99 + // Não registrar o contexto de aplicação pq ele já é registrado pela implementação do CDI
  100 + tempContexts.add(new ThreadLocalContext(ViewScoped.class));
  101 + tempContexts.add(new ThreadLocalContext(SessionScoped.class));
  102 + tempContexts.add(new ThreadLocalContext(ConversationScoped.class));
  103 + tempContexts.add(new ThreadLocalContext(RequestScoped.class));
  104 +
  105 + afterBeanDiscoveryEvent = event;
  106 + }
  107 +
  108 + private boolean x = true;
  109 +
  110 + @SuppressWarnings({ "unchecked", "rawtypes" })
  111 + protected synchronized void proccessEvent(final ApplicationLifecycleEvent event) {
  112 + getLogger().debug(
  113 + getBundle("demoiselle-core-bundle").getString("executing-all", annotationClass.getSimpleName()));
  114 +
  115 + Collections.sort(processors);
  116 + Throwable failure = null;
  117 +
  118 + if (x) {
  119 + for (CustomContext tempContext : tempContexts) {
  120 + addContext(tempContext, afterBeanDiscoveryEvent);
  121 + }
  122 +
  123 + x = false;
  124 + }
  125 +
  126 + for (Iterator<AnnotatedMethodProcessor> iter = processors.iterator(); iter.hasNext();) {
  127 + AnnotatedMethodProcessor<?> processor = iter.next();
  128 +
  129 + try {
  130 + ClassLoader classLoader = ConfigurationLoader.getClassLoaderForClass(processor.getAnnotatedMethod()
  131 + .getDeclaringType().getJavaClass().getCanonicalName());
  132 +
  133 + if (Thread.currentThread().getContextClassLoader().equals(classLoader)) {
  134 + processor.process();
  135 +
  136 + if (event.removeProcessors()) {
  137 + iter.remove();
  138 + }
  139 + }
  140 +
  141 + } catch (Throwable cause) {
  142 + failure = cause;
  143 + }
  144 + }
  145 +
  146 + if (processors.isEmpty()) {
  147 + unloadTempContexts();
  148 + }
  149 +
  150 + if (failure != null) {
  151 + throw new DemoiselleException(failure);
  152 + }
  153 + }
  154 +
  155 + private void unloadTempContexts() {
  156 + for (CustomContext tempContext : tempContexts) {
  157 + disableContext(tempContext);
  158 + }
  159 + }
  160 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthenticatorBootstrap.java
... ... @@ -1,48 +0,0 @@
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.bootstrap;
38   -
39   -import br.gov.frameworkdemoiselle.internal.implementation.DefaultAuthenticator;
40   -import br.gov.frameworkdemoiselle.security.Authenticator;
41   -
42   -public class AuthenticatorBootstrap extends AbstractStrategyBootstrap<Authenticator, DefaultAuthenticator> {
43   -
44   - public String getConfigKey() {
45   - return "frameworkdemoiselle.security.authenticator.class";
46   - }
47   -
48   -}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthorizerBootstrap.java
... ... @@ -1,48 +0,0 @@
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.bootstrap;
38   -
39   -import br.gov.frameworkdemoiselle.internal.implementation.DefaultAuthorizer;
40   -import br.gov.frameworkdemoiselle.security.Authorizer;
41   -
42   -public class AuthorizerBootstrap extends AbstractStrategyBootstrap<Authorizer, DefaultAuthorizer> {
43   -
44   - public String getConfigKey() {
45   - return "frameworkdemoiselle.security.authorizer.class";
46   - }
47   -
48   -}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/BeforeApplicationFinalization.java 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +package br.gov.frameworkdemoiselle.internal.bootstrap;
  2 +
  3 +public interface BeforeApplicationFinalization extends ApplicationLifecycleEvent {
  4 +
  5 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/BeforeApplicationInitialization.java 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +package br.gov.frameworkdemoiselle.internal.bootstrap;
  2 +
  3 +public interface BeforeApplicationInitialization extends ApplicationLifecycleEvent {
  4 +
  5 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ShutdownBootstrap.java
... ... @@ -36,119 +36,26 @@
36 36 */
37 37 package br.gov.frameworkdemoiselle.internal.bootstrap;
38 38  
39   -import java.lang.annotation.Annotation;
40   -import java.util.ArrayList;
41   -import java.util.Collections;
42   -import java.util.Iterator;
43   -import java.util.List;
44   -
45   -import javax.enterprise.context.ConversationScoped;
46   -import javax.enterprise.context.RequestScoped;
47   -import javax.enterprise.context.SessionScoped;
48 39 import javax.enterprise.event.Observes;
49   -import javax.enterprise.inject.spi.AfterBeanDiscovery;
50 40 import javax.enterprise.inject.spi.AnnotatedMethod;
51   -import javax.enterprise.inject.spi.AnnotatedType;
52 41 import javax.enterprise.inject.spi.BeanManager;
53   -import javax.enterprise.inject.spi.ProcessAnnotatedType;
54 42  
55   -import br.gov.frameworkdemoiselle.DemoiselleException;
56 43 import br.gov.frameworkdemoiselle.annotation.Shutdown;
57   -import br.gov.frameworkdemoiselle.annotation.ViewScoped;
58   -import br.gov.frameworkdemoiselle.internal.context.CustomContext;
59   -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
  44 +import br.gov.frameworkdemoiselle.internal.processor.AnnotatedMethodProcessor;
60 45 import br.gov.frameworkdemoiselle.internal.processor.ShutdownProcessor;
61 46  
62 47 /**
63 48 * This class run at application shutdown
64 49 */
65   -public class ShutdownBootstrap extends AbstractBootstrap {
66   -
67   - private static final Class<? extends Annotation> annotationClass = Shutdown.class;
68   -
69   - private static final List<CustomContext> tempContexts = new ArrayList<CustomContext>();
70   -
71   - private static AfterBeanDiscovery abdEvent;
72   -
73   - @SuppressWarnings("rawtypes")
74   - private static final List<ShutdownProcessor> processors = Collections
75   - .synchronizedList(new ArrayList<ShutdownProcessor>());
76   -
77   - /**
78   - * Observes all methods annotated with @Shutdown and create an instance of ShutdownProcessor for them
79   - *
80   - * @param <T>
81   - * @param event
82   - * @param beanManager
83   - */
84   - public <T> void processAnnotatedType(@Observes final ProcessAnnotatedType<T> event, final BeanManager beanManager) {
85   - final AnnotatedType<T> annotatedType = event.getAnnotatedType();
86   - for (AnnotatedMethod<?> am : annotatedType.getMethods()) {
87   - if (am.isAnnotationPresent(annotationClass)) {
88   - @SuppressWarnings("unchecked")
89   - AnnotatedMethod<T> annotatedMethod = (AnnotatedMethod<T>) am;
90   - processors.add(new ShutdownProcessor<T>(annotatedMethod, beanManager));
91   - }
92   - }
93   - }
94   -
95   - public static void loadTempContexts(@Observes final AfterBeanDiscovery event) {
96   - // Não registrar o contexto de aplicação pq ele já é registrado pela
97   - // implementação do CDI
98   - tempContexts.add(new ThreadLocalContext(ViewScoped.class));
99   - tempContexts.add(new ThreadLocalContext(SessionScoped.class, false));
100   - tempContexts.add(new ThreadLocalContext(ConversationScoped.class));
101   - tempContexts.add(new ThreadLocalContext(RequestScoped.class));
102   - abdEvent = event;
103   - }
104   -
105   - /**
106   - * Before Shutdown it execute the methods annotateds with @Shutdown considering the priority order;
107   - */
108   - public synchronized static void shutdown() {
109   - shutdown(true);
110   - }
111   -
112   - /**
113   - * Before Shutdown it execute the methods annotateds with @Shutdown considering the priority order;
114   - */
115   - @SuppressWarnings({ "unchecked", "rawtypes" })
116   - public synchronized static void shutdown(boolean remove) {
117   - getLogger().debug(
118   - getBundle("demoiselle-core-bundle").getString("executing-all", annotationClass.getSimpleName()));
119   -
120   - Collections.sort(processors);
121   - Throwable failure = null;
122   -
123   - for (CustomContext tempContext : tempContexts) {
124   - addContext(tempContext, abdEvent);
125   - }
126   -
127   - for (Iterator<ShutdownProcessor> iter = processors.iterator(); iter.hasNext();) {
128   - ShutdownProcessor processor = iter.next();
129   -
130   - try {
131   - processor.process();
132   -
133   - if (remove) {
134   - iter.remove();
135   - }
136   -
137   - } catch (Throwable cause) {
138   - failure = cause;
139   - }
140   - }
141   -
142   - unloadTempContexts();
  50 +public class ShutdownBootstrap extends AsbratctLifecycleBootstrap<Shutdown> {
143 51  
144   - if (failure != null) {
145   - throw new DemoiselleException(failure);
146   - }
  52 + @Override
  53 + protected <T> AnnotatedMethodProcessor<T> newProcessorInstance(AnnotatedMethod<T> annotatedMethod,
  54 + BeanManager beanManager) {
  55 + return new ShutdownProcessor<T>(annotatedMethod, beanManager);
147 56 }
148 57  
149   - private static void unloadTempContexts() {
150   - for (CustomContext tempContext : tempContexts) {
151   - disableContext(tempContext);
152   - }
  58 + public void shutdown(@Observes BeforeApplicationFinalization event) {
  59 + proccessEvent(event);
153 60 }
154 61 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/StartupBootstrap.java
... ... @@ -36,114 +36,26 @@
36 36 */
37 37 package br.gov.frameworkdemoiselle.internal.bootstrap;
38 38  
39   -import java.lang.annotation.Annotation;
40   -import java.util.ArrayList;
41   -import java.util.Collections;
42   -import java.util.Iterator;
43   -import java.util.List;
44   -
45   -import javax.enterprise.context.ConversationScoped;
46   -import javax.enterprise.context.RequestScoped;
47   -import javax.enterprise.context.SessionScoped;
48 39 import javax.enterprise.event.Observes;
49   -import javax.enterprise.inject.spi.AfterBeanDiscovery;
50 40 import javax.enterprise.inject.spi.AnnotatedMethod;
51   -import javax.enterprise.inject.spi.AnnotatedType;
52 41 import javax.enterprise.inject.spi.BeanManager;
53   -import javax.enterprise.inject.spi.ProcessAnnotatedType;
54 42  
55   -import br.gov.frameworkdemoiselle.DemoiselleException;
56 43 import br.gov.frameworkdemoiselle.annotation.Startup;
57   -import br.gov.frameworkdemoiselle.annotation.ViewScoped;
58   -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
  44 +import br.gov.frameworkdemoiselle.internal.processor.AnnotatedMethodProcessor;
59 45 import br.gov.frameworkdemoiselle.internal.processor.StartupProcessor;
60 46  
61 47 /**
62 48 * This class is the bootstrap to execute the processes at load time.
63 49 */
64   -public class StartupBootstrap extends AbstractBootstrap {
65   -
66   - private static final Class<? extends Annotation> annotationClass = Startup.class;
67   -
68   - private static final List<ThreadLocalContext> tempContexts = new ArrayList<ThreadLocalContext>();
69   -
70   - @SuppressWarnings("rawtypes")
71   - private static final List<StartupProcessor> processors = Collections
72   - .synchronizedList(new ArrayList<StartupProcessor>());
73   -
74   - /**
75   - * Observes all methods annotated with @Startup and create an instance of StartupAction for them
76   - *
77   - * @param <T>
78   - * @param event
79   - * @param beanManager
80   - */
81   - public <T> void processAnnotatedType(@Observes final ProcessAnnotatedType<T> event, final BeanManager beanManager) {
82   - final AnnotatedType<T> annotatedType = event.getAnnotatedType();
83   - for (AnnotatedMethod<?> am : annotatedType.getMethods()) {
84   - if (am.isAnnotationPresent(annotationClass)) {
85   - @SuppressWarnings("unchecked")
86   - AnnotatedMethod<T> annotatedMethod = (AnnotatedMethod<T>) am;
87   - processors.add(new StartupProcessor<T>(annotatedMethod, beanManager));
88   - }
89   - }
90   - }
91   -
92   - public void loadTempContexts(@Observes final AfterBeanDiscovery event) {
93   - // Não registrar o contexto de aplicação pq ele já é registrado pela implementação do CDI
94   - tempContexts.add(new ThreadLocalContext(ViewScoped.class));
95   - tempContexts.add(new ThreadLocalContext(SessionScoped.class));
96   - tempContexts.add(new ThreadLocalContext(ConversationScoped.class));
97   - tempContexts.add(new ThreadLocalContext(RequestScoped.class));
98   -
99   - for (ThreadLocalContext tempContext : tempContexts) {
100   - addContext(tempContext, event);
101   - }
102   - }
103   -
104   - /**
105   - * After the deployment validation it execute the methods annotateds with @Startup considering the priority order;
106   - */
107   - public synchronized static void startup() {
108   - startup(true);
109   - }
110   -
111   - /**
112   - * After the deployment validation it execute the methods annotateds with @Startup considering the priority order;
113   - */
114   - @SuppressWarnings({ "unchecked", "rawtypes" })
115   - public synchronized static void startup(boolean remove) {
116   - getLogger().debug(
117   - getBundle("demoiselle-core-bundle").getString("executing-all", annotationClass.getSimpleName()));
118   -
119   - Collections.sort(processors);
120   - Throwable failure = null;
121   -
122   - for (Iterator<StartupProcessor> iter = processors.iterator(); iter.hasNext();) {
123   - StartupProcessor processor = iter.next();
124   -
125   - try {
126   - processor.process();
127   -
128   - if (remove) {
129   - iter.remove();
130   - }
131   -
132   - } catch (Throwable cause) {
133   - failure = cause;
134   - }
135   - }
136   -
137   - unloadTempContexts();
  50 +public class StartupBootstrap extends AsbratctLifecycleBootstrap<Startup> {
138 51  
139   - if (failure != null) {
140   - throw new DemoiselleException(failure);
141   - }
  52 + @Override
  53 + protected <T> AnnotatedMethodProcessor<T> newProcessorInstance(AnnotatedMethod<T> annotatedMethod,
  54 + BeanManager beanManager) {
  55 + return new StartupProcessor<T>(annotatedMethod, beanManager);
142 56 }
143 57  
144   - private static void unloadTempContexts() {
145   - for (ThreadLocalContext tempContext : tempContexts) {
146   - disableContext(tempContext);
147   - }
  58 + public void startup(@Observes BeforeApplicationInitialization event) {
  59 + proccessEvent(event);
148 60 }
149 61 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/TransactionBootstrap.java
... ... @@ -1,55 +0,0 @@
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.bootstrap;
38   -
39   -import javax.enterprise.event.Observes;
40   -import javax.enterprise.inject.spi.Extension;
41   -import javax.enterprise.inject.spi.ProcessAnnotatedType;
42   -
43   -import br.gov.frameworkdemoiselle.transaction.Transaction;
44   -import br.gov.frameworkdemoiselle.util.Reflections;
45   -
46   -public class TransactionBootstrap implements Extension {
47   -
48   - public <A> void processAnnotatedType(@Observes final ProcessAnnotatedType<A> event) {
49   - Class<A> annotated = event.getAnnotatedType().getJavaClass();
50   -
51   - if (Reflections.isOfType(annotated, Transaction.class)) {
52   - event.veto();
53   - }
54   - }
55   -}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java
... ... @@ -40,6 +40,8 @@ import java.io.FileNotFoundException;
40 40 import java.io.Serializable;
41 41 import java.lang.reflect.Field;
42 42 import java.lang.reflect.Method;
  43 +import java.lang.reflect.ParameterizedType;
  44 +import java.lang.reflect.Type;
43 45 import java.net.URL;
44 46 import java.util.HashSet;
45 47 import java.util.Iterator;
... ... @@ -49,8 +51,10 @@ import java.util.Set;
49 51 import javax.inject.Inject;
50 52 import javax.validation.constraints.NotNull;
51 53  
  54 +import org.apache.commons.configuration.DataConfiguration;
52 55 import org.apache.commons.configuration.PropertiesConfiguration;
53 56 import org.apache.commons.configuration.SystemConfiguration;
  57 +import org.apache.commons.configuration.XMLConfiguration;
54 58 import org.slf4j.Logger;
55 59  
56 60 import br.gov.frameworkdemoiselle.annotation.Ignore;
... ... @@ -109,7 +113,7 @@ public class ConfigurationLoader implements Serializable {
109 113 org.apache.commons.configuration.Configuration config = getConfiguration(resource, type);
110 114  
111 115 String key = getKey(field, clazz, config);
112   - Object value = getValue(key, field.getType(), config);
  116 + Object value = getValue(key, field, config);
113 117  
114 118 validate(field, key, value, resource);
115 119 setValue(field, key, object, value);
... ... @@ -218,12 +222,12 @@ public class ConfigurationLoader implements Serializable {
218 222  
219 223 case PROPERTIES:
220 224 url = getResourceAsURL(resource + ".properties");
221   - config = new PropertiesConfiguration(url);
  225 + config = new DataConfiguration(new PropertiesConfiguration(url));
222 226 break;
223 227  
224 228 case XML:
225 229 url = getResourceAsURL(resource + ".xml");
226   - config = new PropertiesConfiguration(url);
  230 + config = new DataConfiguration(new XMLConfiguration(url));
227 231 break;
228 232  
229 233 default:
... ... @@ -239,41 +243,67 @@ public class ConfigurationLoader implements Serializable {
239 243 return config;
240 244 }
241 245  
242   - /**
243   - * Returns the value associated with the given configuration class and field type.
244   - *
245   - * @param name
246   - * @param config
247   - * @param fieldClass
248   - * @return the value
249   - */
250 246 @SuppressWarnings("unchecked")
251   - private <T> T getValue(String key, Class<T> fieldClass, org.apache.commons.configuration.Configuration config) {
  247 + private <T> T getValue(String key, Field field, org.apache.commons.configuration.Configuration config) {
252 248 Object value;
253 249  
254   - if (fieldClass.isArray() && fieldClass.getComponentType().equals(String.class)) {
255   - value = config.getStringArray(key);
256   -
  250 + Class<?> fieldClass = (Class<?>) field.getType();
  251 +
  252 + if (fieldClass.isArray()) {
  253 + value = getArray(key, field, config);
257 254 } else if (fieldClass.equals(Properties.class)) {
258 255 value = getProperty(key, config);
259 256  
260 257 } else {
261   - value = getBasic(key, fieldClass, config);
  258 + value = getBasic(key, field, config);
262 259 }
263 260  
264 261 return (T) value;
265 262 }
  263 +
  264 + private <T> Object getArray(String key, Field field, org.apache.commons.configuration.Configuration config) {
  265 + Object value = null;
  266 +
  267 + Class<?> fieldClass = (Class<?>) field.getType();
  268 +
  269 + try {
  270 + Method method;
  271 +
  272 + String methodName = "get";
  273 +
  274 + methodName += Strings.firstToUpper(fieldClass.getSimpleName());
  275 + methodName = Strings.removeChars(methodName, '[', ']');
  276 +
  277 + methodName += "Array";
  278 +
  279 + method = config.getClass().getMethod(methodName, String.class);
  280 + value = method.invoke(config, key);
  281 +
  282 + } catch (Throwable cause) {
  283 + throw new ConfigurationException(bundle.getString("error-converting-to-type", fieldClass.getName()), cause);
  284 + }
  285 +
  286 + return value;
  287 + }
266 288  
267   - private <T> Object getBasic(String key, Class<T> fieldClass, org.apache.commons.configuration.Configuration config) {
  289 + private <T> Object getBasic(String key, Field field, org.apache.commons.configuration.Configuration config) {
268 290 Object value = null;
269 291  
  292 + Class<?> fieldClass = (Class<?>) field.getType();
  293 +
270 294 try {
271 295 Method method;
272   - String methodName = "get" + Strings.firstToUpper(fieldClass.getSimpleName());
  296 +
  297 + String methodName = "get";
  298 +
  299 + methodName += discoveryGenericType(field);
  300 +
  301 + methodName += Strings.firstToUpper(fieldClass.getSimpleName());
273 302  
274 303 if (!fieldClass.isPrimitive()) {
275 304 method = config.getClass().getMethod(methodName, String.class, fieldClass);
276 305 value = method.invoke(config, key, null);
  306 +
277 307 } else if (config.containsKey(key)) {
278 308 method = config.getClass().getMethod(methodName, String.class);
279 309 value = method.invoke(config, key);
... ... @@ -286,6 +316,36 @@ public class ConfigurationLoader implements Serializable {
286 316 return value;
287 317 }
288 318  
  319 + /**
  320 + * Discovery the Generic's type.
  321 + *
  322 + * for example: the generic's type of List<Integer> list is an Integer type
  323 + *
  324 + * @param field
  325 + * @return
  326 + */
  327 + private String discoveryGenericType(Field field) {
  328 +
  329 + Type genericFieldType = field.getGenericType();
  330 +
  331 + if(genericFieldType instanceof ParameterizedType){
  332 + ParameterizedType type = (ParameterizedType) genericFieldType;
  333 + Type[] fieldArgumentTypes = type.getActualTypeArguments();
  334 + for(Type fieldArgumentType : fieldArgumentTypes){
  335 + @SuppressWarnings("rawtypes")
  336 + Class fieldArgumentClass = (Class) fieldArgumentType;
  337 +
  338 + if("String".equals(fieldArgumentClass.getSimpleName())) {
  339 + return "";
  340 + }
  341 +
  342 + return fieldArgumentClass.getSimpleName();
  343 + }
  344 + }
  345 +
  346 + return "";
  347 + }
  348 +
289 349 private Object getProperty(String key, org.apache.commons.configuration.Configuration config) {
290 350 Object value = null;
291 351  
... ... @@ -307,6 +367,10 @@ public class ConfigurationLoader implements Serializable {
307 367 return value;
308 368 }
309 369  
  370 + public static ClassLoader getClassLoaderForClass(final String canonicalName) throws FileNotFoundException {
  371 + return getClassLoaderForResource(canonicalName.replaceAll("\\.", "/") + ".class");
  372 + }
  373 +
310 374 public static ClassLoader getClassLoaderForResource(final String resource) throws FileNotFoundException {
311 375 final String stripped = resource.startsWith("/") ? resource.substring(1) : resource;
312 376  
... ... @@ -323,7 +387,7 @@ public class ConfigurationLoader implements Serializable {
323 387 }
324 388  
325 389 if (url == null) {
326   - throw new FileNotFoundException(resource + " not found.");
  390 + result = null;
327 391 }
328 392  
329 393 return result;
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/CoreBundle.java
... ... @@ -1,28 +0,0 @@
1   -package br.gov.frameworkdemoiselle.internal.implementation;
2   -
3   -import javax.inject.Inject;
4   -
5   -import br.gov.frameworkdemoiselle.annotation.Name;
6   -import br.gov.frameworkdemoiselle.util.Beans;
7   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
8   -
9   -public class CoreBundle {
10   -
11   - @Inject
12   - @Name("demoiselle-core-bundle")
13   - private ResourceBundle bundle;
14   -
15   - private static CoreBundle instance;
16   -
17   - private static synchronized CoreBundle getInstance() {
18   - if (instance == null) {
19   - instance = Beans.getReference(CoreBundle.class);
20   - }
21   -
22   - return instance;
23   - }
24   -
25   - public static ResourceBundle get() {
26   - return getInstance().bundle;
27   - }
28   -}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultAuthenticator.java
... ... @@ -37,9 +37,11 @@
37 37 package br.gov.frameworkdemoiselle.internal.implementation;
38 38  
39 39 import br.gov.frameworkdemoiselle.DemoiselleException;
  40 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
40 41 import br.gov.frameworkdemoiselle.security.Authenticator;
41 42 import br.gov.frameworkdemoiselle.security.SecurityContext;
42 43 import br.gov.frameworkdemoiselle.security.User;
  44 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
43 45  
44 46 /**
45 47 * Authenticator that actually does nothing but raise exceptions.
... ... @@ -51,6 +53,8 @@ public class DefaultAuthenticator implements Authenticator {
51 53  
52 54 private static final long serialVersionUID = 1L;
53 55  
  56 + private static ResourceBundle bundle;
  57 +
54 58 /**
55 59 * @see br.gov.frameworkdemoiselle.security.Authenticator#authenticate()
56 60 */
... ... @@ -76,8 +80,15 @@ public class DefaultAuthenticator implements Authenticator {
76 80 }
77 81  
78 82 private DemoiselleException getException() {
79   - return new DemoiselleException(CoreBundle.get().getString("authenticator-not-defined",
  83 + return new DemoiselleException(getBundle().getString("authenticator-not-defined",
80 84 SecurityContext.class.getSimpleName()));
81 85 }
82 86  
  87 + private static ResourceBundle getBundle() {
  88 + if (bundle == null) {
  89 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  90 + }
  91 +
  92 + return bundle;
  93 + }
83 94 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultAuthorizer.java
... ... @@ -37,9 +37,11 @@
37 37 package br.gov.frameworkdemoiselle.internal.implementation;
38 38  
39 39 import br.gov.frameworkdemoiselle.DemoiselleException;
  40 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
40 41 import br.gov.frameworkdemoiselle.security.Authorizer;
41 42 import br.gov.frameworkdemoiselle.security.RequiredPermission;
42 43 import br.gov.frameworkdemoiselle.security.RequiredRole;
  44 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
43 45  
44 46 /**
45 47 * Authorizator that actually does nothing but raise exceptions.
... ... @@ -51,16 +53,25 @@ public class DefaultAuthorizer implements Authorizer {
51 53  
52 54 private static final long serialVersionUID = 1L;
53 55  
  56 + private static ResourceBundle bundle;
  57 +
54 58 @Override
55 59 public boolean hasRole(String role) {
56   - throw new DemoiselleException(CoreBundle.get().getString("authorizer-not-defined",
  60 + throw new DemoiselleException(getBundle().getString("authorizer-not-defined",
57 61 RequiredRole.class.getSimpleName()));
58 62 }
59 63  
60 64 @Override
61 65 public boolean hasPermission(String resource, String operation) {
62   - throw new DemoiselleException(CoreBundle.get().getString("authorizer-not-defined",
  66 + throw new DemoiselleException(getBundle().getString("authorizer-not-defined",
63 67 RequiredPermission.class.getSimpleName()));
64 68 }
65 69  
  70 + private static ResourceBundle getBundle() {
  71 + if (bundle == null) {
  72 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  73 + }
  74 +
  75 + return bundle;
  76 + }
66 77 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultTransaction.java
... ... @@ -37,8 +37,10 @@
37 37 package br.gov.frameworkdemoiselle.internal.implementation;
38 38  
39 39 import br.gov.frameworkdemoiselle.DemoiselleException;
  40 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
40 41 import br.gov.frameworkdemoiselle.transaction.Transaction;
41 42 import br.gov.frameworkdemoiselle.transaction.Transactional;
  43 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
42 44  
43 45 /**
44 46 * Transaction strategy that actually does nothing but raise exceptions.
... ... @@ -50,6 +52,8 @@ public class DefaultTransaction implements Transaction {
50 52  
51 53 private static final long serialVersionUID = 1L;
52 54  
  55 + private static ResourceBundle bundle;
  56 +
53 57 @Override
54 58 public void begin() {
55 59 throw getException();
... ... @@ -81,7 +85,15 @@ public class DefaultTransaction implements Transaction {
81 85 }
82 86  
83 87 private DemoiselleException getException() {
84   - return new DemoiselleException(CoreBundle.get().getString("transaction-not-defined",
  88 + return new DemoiselleException(getBundle().getString("transaction-not-defined",
85 89 Transactional.class.getSimpleName()));
86 90 }
  91 +
  92 + private static ResourceBundle getBundle() {
  93 + if (bundle == null) {
  94 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  95 + }
  96 +
  97 + return bundle;
  98 + }
87 99 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/MessageContextImpl.java
... ... @@ -45,10 +45,12 @@ import javax.inject.Inject;
45 45  
46 46 import org.slf4j.Logger;
47 47  
  48 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
48 49 import br.gov.frameworkdemoiselle.message.DefaultMessage;
49 50 import br.gov.frameworkdemoiselle.message.Message;
50 51 import br.gov.frameworkdemoiselle.message.MessageContext;
51 52 import br.gov.frameworkdemoiselle.message.SeverityType;
  53 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
52 54  
53 55 /**
54 56 * The message store is designed to provide access to messages. It is shared by every application layer.
... ... @@ -65,6 +67,8 @@ public class MessageContextImpl implements Serializable, MessageContext {
65 67  
66 68 private final List<Message> messages = new ArrayList<Message>();
67 69  
  70 + private static ResourceBundle bundle;
  71 +
68 72 @Override
69 73 public void add(final Message message, Object... params) {
70 74 Message aux;
... ... @@ -75,7 +79,7 @@ public class MessageContextImpl implements Serializable, MessageContext {
75 79 aux = message;
76 80 }
77 81  
78   - logger.debug(CoreBundle.get().getString("adding-message-to-context", message.toString()));
  82 + logger.debug(getBundle().getString("adding-message-to-context", message.toString()));
79 83 messages.add(aux);
80 84 }
81 85  
... ... @@ -96,7 +100,15 @@ public class MessageContextImpl implements Serializable, MessageContext {
96 100  
97 101 @Override
98 102 public void clear() {
99   - logger.debug(CoreBundle.get().getString("cleaning-message-context"));
  103 + logger.debug(getBundle().getString("cleaning-message-context"));
100 104 messages.clear();
101 105 }
  106 +
  107 + private static ResourceBundle getBundle() {
  108 + if (bundle == null) {
  109 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  110 + }
  111 +
  112 + return bundle;
  113 + }
102 114 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/SecurityContextImpl.java
... ... @@ -36,12 +36,12 @@
36 36 */
37 37 package br.gov.frameworkdemoiselle.internal.implementation;
38 38  
39   -import javax.enterprise.context.SessionScoped;
40   -import javax.inject.Inject;
  39 +import java.util.Locale;
  40 +
41 41 import javax.inject.Named;
42 42  
43   -import br.gov.frameworkdemoiselle.annotation.Name;
44 43 import br.gov.frameworkdemoiselle.internal.configuration.SecurityConfig;
  44 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
45 45 import br.gov.frameworkdemoiselle.security.AfterLoginSuccessful;
46 46 import br.gov.frameworkdemoiselle.security.AfterLogoutSuccessful;
47 47 import br.gov.frameworkdemoiselle.security.Authenticator;
... ... @@ -57,33 +57,29 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle;
57 57 *
58 58 * @author SERPRO
59 59 */
60   -@SessionScoped
61 60 @Named("securityContext")
62 61 public class SecurityContextImpl implements SecurityContext {
63 62  
64 63 private static final long serialVersionUID = 1L;
65 64  
66   - @Inject
67   - @Name("demoiselle-core-bundle")
68   - private ResourceBundle bundle;
69   -
70   - @Inject
71   - private Authenticator authenticator;
72   -
73   - @Inject
74   - private Authorizer authorizer;
  65 + private Authenticator getAuthenticator() {
  66 + return StrategySelector.getReference("frameworkdemoiselle.security.authenticator.class", Authenticator.class,
  67 + DefaultAuthenticator.class);
  68 + }
75 69  
76   - @Inject
77   - private SecurityConfig config;
  70 + private Authorizer getAuthorizer() {
  71 + return StrategySelector.getReference("frameworkdemoiselle.security.authorizer.class", Authorizer.class,
  72 + DefaultAuthorizer.class);
  73 + }
78 74  
79 75 /**
80 76 * @see br.gov.frameworkdemoiselle.security.SecurityContext#hasPermission(java.lang.String, java.lang.String)
81 77 */
82 78 @Override
83 79 public boolean hasPermission(String resource, String operation) throws NotLoggedInException {
84   - if (config.isEnabled()) {
  80 + if (getConfig().isEnabled()) {
85 81 checkLoggedIn();
86   - return authorizer.hasPermission(resource, operation);
  82 + return getAuthorizer().hasPermission(resource, operation);
87 83  
88 84 } else {
89 85 return true;
... ... @@ -95,9 +91,9 @@ public class SecurityContextImpl implements SecurityContext {
95 91 */
96 92 @Override
97 93 public boolean hasRole(String role) throws NotLoggedInException {
98   - if (config.isEnabled()) {
  94 + if (getConfig().isEnabled()) {
99 95 checkLoggedIn();
100   - return authorizer.hasRole(role);
  96 + return getAuthorizer().hasRole(role);
101 97  
102 98 } else {
103 99 return true;
... ... @@ -109,7 +105,7 @@ public class SecurityContextImpl implements SecurityContext {
109 105 */
110 106 @Override
111 107 public boolean isLoggedIn() {
112   - if (config.isEnabled()) {
  108 + if (getConfig().isEnabled()) {
113 109 return getUser() != null;
114 110 } else {
115 111 return true;
... ... @@ -121,7 +117,7 @@ public class SecurityContextImpl implements SecurityContext {
121 117 */
122 118 @Override
123 119 public void login() {
124   - if (config.isEnabled() && authenticator.authenticate()) {
  120 + if (getConfig().isEnabled() && getAuthenticator().authenticate()) {
125 121 Beans.getBeanManager().fireEvent(new AfterLoginSuccessful() {
126 122  
127 123 private static final long serialVersionUID = 1L;
... ... @@ -135,9 +131,9 @@ public class SecurityContextImpl implements SecurityContext {
135 131 */
136 132 @Override
137 133 public void logout() throws NotLoggedInException {
138   - if (config.isEnabled()) {
  134 + if (getConfig().isEnabled()) {
139 135 checkLoggedIn();
140   - authenticator.unAuthenticate();
  136 + getAuthenticator().unAuthenticate();
141 137  
142 138 Beans.getBeanManager().fireEvent(new AfterLogoutSuccessful() {
143 139  
... ... @@ -151,9 +147,9 @@ public class SecurityContextImpl implements SecurityContext {
151 147 */
152 148 @Override
153 149 public User getUser() {
154   - User user = authenticator.getUser();
  150 + User user = getAuthenticator().getUser();
155 151  
156   - if (!config.isEnabled() && user == null) {
  152 + if (!getConfig().isEnabled() && user == null) {
157 153 user = new User() {
158 154  
159 155 private static final long serialVersionUID = 1L;
... ... @@ -177,8 +173,15 @@ public class SecurityContextImpl implements SecurityContext {
177 173 return user;
178 174 }
179 175  
  176 + private SecurityConfig getConfig() {
  177 + return Beans.getReference(SecurityConfig.class);
  178 + }
  179 +
180 180 private void checkLoggedIn() throws NotLoggedInException {
181 181 if (!isLoggedIn()) {
  182 + Locale locale = Beans.getReference(Locale.class);
  183 + ResourceBundle bundle = ResourceBundleProducer.create("demoiselle-core-bundle", locale);
  184 +
182 185 throw new NotLoggedInException(bundle.getString("user-not-authenticated"));
183 186 }
184 187 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/StrategySelector.java 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +package br.gov.frameworkdemoiselle.internal.implementation;
  2 +
  3 +import java.io.FileNotFoundException;
  4 +import java.net.URL;
  5 +import java.util.Locale;
  6 +
  7 +import org.apache.commons.configuration.Configuration;
  8 +import org.apache.commons.configuration.PropertiesConfiguration;
  9 +
  10 +import br.gov.frameworkdemoiselle.configuration.ConfigurationException;
  11 +import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader;
  12 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
  13 +import br.gov.frameworkdemoiselle.util.Beans;
  14 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
  15 +import br.gov.frameworkdemoiselle.util.Strings;
  16 +
  17 +public class StrategySelector {
  18 +
  19 + public static <T> T getReference(String configKey, Class<T> type, Class<? extends T> defaultType) {
  20 + Class<T> selectedType = loadSelected(configKey, type, defaultType);
  21 + return Beans.getReference(selectedType);
  22 + }
  23 +
  24 + @SuppressWarnings("unchecked")
  25 + private static <T> Class<T> loadSelected(String configKey, Class<T> type, Class<? extends T> defaultType) {
  26 + ResourceBundle bundle = ResourceBundleProducer.create("demoiselle-core-bundle",
  27 + Beans.getReference(Locale.class));
  28 +
  29 + Class<T> result = null;
  30 + String canonicalName = null;
  31 + String typeName = type.getSimpleName().toLowerCase();
  32 + String key = null;
  33 +
  34 + try {
  35 + URL url = ConfigurationLoader.getResourceAsURL("demoiselle.properties");
  36 + Configuration config = new PropertiesConfiguration(url);
  37 + canonicalName = config.getString(configKey, defaultType.getCanonicalName());
  38 +
  39 + ClassLoader classLoader = ConfigurationLoader.getClassLoaderForClass(canonicalName);
  40 + if (classLoader == null) {
  41 + classLoader = Thread.currentThread().getContextClassLoader();
  42 + }
  43 +
  44 + result = (Class<T>) Class.forName(canonicalName, false, classLoader);
  45 + result.asSubclass(type);
  46 +
  47 + } catch (org.apache.commons.configuration.ConfigurationException cause) {
  48 + throw new ConfigurationException(bundle.getString("file-not-found", "demoiselle.properties"));
  49 +
  50 + } catch (ClassNotFoundException cause) {
  51 + key = Strings.getString("{0}-class-not-found", typeName);
  52 + throw new ConfigurationException(bundle.getString(key, canonicalName));
  53 +
  54 + } catch (FileNotFoundException e) {
  55 + throw new ConfigurationException(bundle.getString("file-not-found", "demoiselle.properties"));
  56 +
  57 + } catch (ClassCastException cause) {
  58 + key = Strings.getString("{0}-class-must-be-of-type", typeName);
  59 + throw new ConfigurationException(bundle.getString(key, canonicalName, type));
  60 + }
  61 +
  62 + return result;
  63 + }
  64 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/TrancationContextImpl.java 0 → 100644
... ... @@ -0,0 +1,23 @@
  1 +package br.gov.frameworkdemoiselle.internal.implementation;
  2 +
  3 +import javax.inject.Named;
  4 +
  5 +import br.gov.frameworkdemoiselle.transaction.Transaction;
  6 +import br.gov.frameworkdemoiselle.transaction.TransactionContext;
  7 +
  8 +/**
  9 + * This is the default implementation of {@link TransactionContext} interface.
  10 + *
  11 + * @author SERPRO
  12 + */
  13 +@Named("transactionContext")
  14 +public class TrancationContextImpl implements TransactionContext {
  15 +
  16 + private static final long serialVersionUID = 1L;
  17 +
  18 + @Override
  19 + public Transaction currentTransaction() {
  20 + return StrategySelector.getReference("frameworkdemoiselle.transaction.class", Transaction.class, DefaultTransaction.class);
  21 + }
  22 +
  23 +}
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ConfigurationInterceptor.java
... ... @@ -50,7 +50,6 @@ import br.gov.frameworkdemoiselle.util.Beans;
50 50  
51 51 @Interceptor
52 52 @Configuration
53   -@SuppressWarnings("cdi-scope")
54 53 public class ConfigurationInterceptor implements Serializable {
55 54  
56 55 private static final long serialVersionUID = 1L;
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/TransactionalInterceptor.java
... ... @@ -50,6 +50,7 @@ import br.gov.frameworkdemoiselle.annotation.Name;
50 50 import br.gov.frameworkdemoiselle.exception.ApplicationException;
51 51 import br.gov.frameworkdemoiselle.internal.implementation.TransactionInfo;
52 52 import br.gov.frameworkdemoiselle.transaction.Transaction;
  53 +import br.gov.frameworkdemoiselle.transaction.TransactionContext;
53 54 import br.gov.frameworkdemoiselle.transaction.Transactional;
54 55 import br.gov.frameworkdemoiselle.util.ResourceBundle;
55 56  
... ... @@ -59,19 +60,19 @@ public class TransactionalInterceptor implements Serializable {
59 60  
60 61 private static final long serialVersionUID = 1L;
61 62  
62   - private final Instance<Transaction> transaction;
  63 + private final Instance<TransactionContext> context;
63 64  
64 65 private final Logger logger;
65 66  
66 67 private final ResourceBundle bundle;
67 68  
68   - private final Instance<TransactionInfo> transactionInfo;
  69 + private final Instance<TransactionInfo> info;
69 70  
70 71 @Inject
71   - public TransactionalInterceptor(Instance<Transaction> transaction, Instance<TransactionInfo> transactionInfo,
  72 + public TransactionalInterceptor(Instance<TransactionContext> context, Instance<TransactionInfo> info,
72 73 Logger logger, @Name("demoiselle-core-bundle") ResourceBundle bundle) {
73   - this.transaction = transaction;
74   - this.transactionInfo = transactionInfo;
  74 + this.context = context;
  75 + this.info = info;
75 76 this.logger = logger;
76 77 this.bundle = bundle;
77 78  
... ... @@ -84,7 +85,7 @@ public class TransactionalInterceptor implements Serializable {
84 85 Object result = null;
85 86 try {
86 87 this.logger.debug(bundle.getString("transactional-execution", ic.getMethod().toGenericString()));
87   - transactionInfo.get().incrementCounter();
  88 + info.get().incrementCounter();
88 89  
89 90 result = ic.proceed();
90 91  
... ... @@ -93,7 +94,7 @@ public class TransactionalInterceptor implements Serializable {
93 94 throw cause;
94 95  
95 96 } finally {
96   - transactionInfo.get().decrementCounter();
  97 + info.get().decrementCounter();
97 98 complete(ic);
98 99 }
99 100  
... ... @@ -101,8 +102,8 @@ public class TransactionalInterceptor implements Serializable {
101 102 }
102 103  
103 104 private void initiate(final InvocationContext ic) {
104   - Transaction tx = this.transaction.get();
105   - TransactionInfo ctx = this.transactionInfo.get();
  105 + Transaction tx = this.context.get().currentTransaction();
  106 + TransactionInfo ctx = this.info.get();
106 107  
107 108 if (!tx.isActive()) {
108 109 tx.begin();
... ... @@ -112,7 +113,7 @@ public class TransactionalInterceptor implements Serializable {
112 113 }
113 114  
114 115 private void handleException(final Exception cause) {
115   - Transaction tx = this.transaction.get();
  116 + Transaction tx = this.context.get().currentTransaction();
116 117  
117 118 if (!tx.isMarkedRollback()) {
118 119 boolean rollback = false;
... ... @@ -130,8 +131,8 @@ public class TransactionalInterceptor implements Serializable {
130 131 }
131 132  
132 133 private void complete(final InvocationContext ic) {
133   - Transaction tx = this.transaction.get();
134   - TransactionInfo ctx = this.transactionInfo.get();
  134 + Transaction tx = this.context.get().currentTransaction();
  135 + TransactionInfo ctx = this.info.get();
135 136  
136 137 if (ctx.getCounter() == 0 && tx.isActive()) {
137 138  
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/processor/AbstractProcessor.java
... ... @@ -51,16 +51,14 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle;
51 51 /**
52 52 * It abstract the integration between Processor and the context;
53 53 *
54   - * @param <DC>
  54 + * @param <T>
55 55 * the declaring class
56 56 */
57   -public abstract class AbstractProcessor<DC> implements Processor {
  57 +public abstract class AbstractProcessor<T> implements Processor {
58 58  
59 59 private BeanManager beanManager;
60 60  
61   - private AnnotatedCallable<DC> annotatedCallable;
62   -
63   - private ResourceBundleProducer bundleFactory = new ResourceBundleProducer();
  61 + private AnnotatedCallable<T> annotatedCallable;
64 62  
65 63 private ResourceBundle bundle;
66 64  
... ... @@ -70,12 +68,12 @@ public abstract class AbstractProcessor&lt;DC&gt; implements Processor {
70 68 this.beanManager = beanManager;
71 69 }
72 70  
73   - public AbstractProcessor(final AnnotatedCallable<DC> annotatedCallable, final BeanManager beanManager) {
  71 + public AbstractProcessor(final AnnotatedCallable<T> annotatedCallable, final BeanManager beanManager) {
74 72 this.annotatedCallable = annotatedCallable;
75 73 this.beanManager = beanManager;
76 74 }
77 75  
78   - protected AnnotatedCallable<DC> getAnnotatedCallable() {
  76 + protected AnnotatedCallable<T> getAnnotatedCallable() {
79 77 return this.annotatedCallable;
80 78 }
81 79  
... ... @@ -92,15 +90,15 @@ public abstract class AbstractProcessor&lt;DC&gt; implements Processor {
92 90 * @return
93 91 */
94 92 @SuppressWarnings("unchecked")
95   - protected DC getReferencedBean() {
96   - Class<DC> classType = (Class<DC>) getAnnotatedCallable().getJavaMember().getDeclaringClass();
  93 + protected T getReferencedBean() {
  94 + Class<T> classType = (Class<T>) getAnnotatedCallable().getJavaMember().getDeclaringClass();
97 95 return getReferencedBean(classType);
98 96 }
99 97  
100 98 @SuppressWarnings("unchecked")
101   - protected DC getReferencedBean(final Class<DC> type) {
102   - Bean<DC> bean = (Bean<DC>) beanManager.getBeans(type).iterator().next();
103   - return (DC) beanManager.getReference(bean, type, beanManager.createCreationalContext(bean));
  99 + protected T getReferencedBean(final Class<T> type) {
  100 + Bean<T> bean = (Bean<T>) beanManager.getBeans(type).iterator().next();
  101 + return (T) beanManager.getReference(bean, type, beanManager.createCreationalContext(bean));
104 102 }
105 103  
106 104 protected ResourceBundle getBundle() {
... ... @@ -109,7 +107,7 @@ public abstract class AbstractProcessor&lt;DC&gt; implements Processor {
109 107  
110 108 protected ResourceBundle getBundle(String baseName) {
111 109 if (bundle == null) {
112   - bundle = bundleFactory.create(baseName, Locale.getDefault());
  110 + bundle = ResourceBundleProducer.create(baseName, Locale.getDefault());
113 111 }
114 112  
115 113 return bundle;
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/processor/AnnotatedMethodProcessor.java
... ... @@ -41,23 +41,43 @@ import java.lang.reflect.InvocationTargetException;
41 41 import javax.enterprise.inject.spi.AnnotatedMethod;
42 42 import javax.enterprise.inject.spi.BeanManager;
43 43  
  44 +import br.gov.frameworkdemoiselle.annotation.Priority;
44 45 import br.gov.frameworkdemoiselle.exception.ApplicationException;
45 46 import br.gov.frameworkdemoiselle.message.SeverityType;
46 47  
47 48 /**
48 49 * Represents an annotated method to be processed;
49 50 *
50   - * @param <DC>
  51 + * @param <T>
51 52 * declaring class owner of the method
52 53 */
53   -public class AnnotatedMethodProcessor<DC> extends AbstractProcessor<DC> {
  54 +public abstract class AnnotatedMethodProcessor<T> extends AbstractProcessor<T> implements
  55 + Comparable<AnnotatedMethodProcessor<T>> {
54 56  
55   - public AnnotatedMethodProcessor(final AnnotatedMethod<DC> annotatedMethod, final BeanManager beanManager) {
  57 + public AnnotatedMethodProcessor(final AnnotatedMethod<T> annotatedMethod, final BeanManager beanManager) {
56 58 super(annotatedMethod, beanManager);
57 59 }
58 60  
59   - protected AnnotatedMethod<DC> getAnnotatedMethod() {
60   - return (AnnotatedMethod<DC>) getAnnotatedCallable();
  61 + public AnnotatedMethod<T> getAnnotatedMethod() {
  62 + return (AnnotatedMethod<T>) getAnnotatedCallable();
  63 + }
  64 +
  65 + protected Integer getPriority(AnnotatedMethod<T> annotatedMethod) {
  66 + Integer priority = Priority.MIN_PRIORITY;
  67 +
  68 + Priority annotation = annotatedMethod.getAnnotation(Priority.class);
  69 + if (annotation != null) {
  70 + priority = annotation.value();
  71 + }
  72 +
  73 + return priority;
  74 + }
  75 +
  76 + public int compareTo(final AnnotatedMethodProcessor<T> other) {
  77 + Integer orderThis = getPriority(getAnnotatedMethod());
  78 + Integer orderOther = getPriority(other.getAnnotatedMethod());
  79 +
  80 + return orderThis.compareTo(orderOther);
61 81 }
62 82  
63 83 public boolean process(Object... args) throws Throwable {
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/processor/ShutdownProcessor.java
... ... @@ -39,25 +39,29 @@ package br.gov.frameworkdemoiselle.internal.processor;
39 39 import javax.enterprise.inject.spi.AnnotatedMethod;
40 40 import javax.enterprise.inject.spi.BeanManager;
41 41  
  42 +import br.gov.frameworkdemoiselle.annotation.Priority;
42 43 import br.gov.frameworkdemoiselle.annotation.Shutdown;
43 44  
44   -public class ShutdownProcessor<T> extends AnnotatedMethodProcessor<T> implements Comparable<ShutdownProcessor<T>> {
  45 +/**
  46 + * Processor for a {@code Shutdown} annotated method, making it comparable.
  47 + *
  48 + * @param <T>
  49 + */
  50 +public class ShutdownProcessor<T> extends AnnotatedMethodProcessor<T> {
45 51  
46 52 public ShutdownProcessor(AnnotatedMethod<T> annotatedMethod, BeanManager beanManager) {
47 53 super(annotatedMethod, beanManager);
48 54 }
49 55  
50   - @Override
51   - public int compareTo(final ShutdownProcessor<T> other) {
52   - int result = 0;
53   - Shutdown annotationThis = getAnnotatedMethod().getAnnotation(Shutdown.class);
54   - Shutdown annotationOther = other.getAnnotatedMethod().getAnnotation(Shutdown.class);
55   - if (annotationThis != null && annotationThis != null) {
56   - Integer orderThis = annotationThis.priority();
57   - Integer orderOther = annotationOther.priority();
58   - result = orderThis.compareTo(orderOther);
  56 + @SuppressWarnings("deprecation")
  57 + protected Integer getPriority(AnnotatedMethod<T> annotatedMethod) {
  58 + Integer priority = super.getPriority(annotatedMethod);
  59 +
  60 + if (!annotatedMethod.isAnnotationPresent(Priority.class)) {
  61 + Shutdown annotation = annotatedMethod.getAnnotation(Shutdown.class);
  62 + priority = annotation.priority();
59 63 }
60   - return result;
61   - }
62 64  
  65 + return priority;
  66 + }
63 67 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/processor/StartupProcessor.java
... ... @@ -39,30 +39,29 @@ package br.gov.frameworkdemoiselle.internal.processor;
39 39 import javax.enterprise.inject.spi.AnnotatedMethod;
40 40 import javax.enterprise.inject.spi.BeanManager;
41 41  
  42 +import br.gov.frameworkdemoiselle.annotation.Priority;
42 43 import br.gov.frameworkdemoiselle.annotation.Startup;
43 44  
44 45 /**
45 46 * Processor for a {@code @Startup} annotated method, making it comparable.
46   - *
  47 + *
47 48 * @param <T>
48 49 */
49   -public class StartupProcessor<T> extends AnnotatedMethodProcessor<T> implements Comparable<StartupProcessor<T>> {
  50 +public class StartupProcessor<T> extends AnnotatedMethodProcessor<T> {
50 51  
51 52 public StartupProcessor(final AnnotatedMethod<T> annotatedMethod, final BeanManager beanManager) {
52 53 super(annotatedMethod, beanManager);
53 54 }
54 55  
55   - @Override
56   - public int compareTo(final StartupProcessor<T> other) {
57   - int result = 0;
58   - Startup annotationThis = getAnnotatedMethod().getAnnotation(Startup.class);
59   - Startup annotationOther = other.getAnnotatedMethod().getAnnotation(Startup.class);
60   - if (annotationThis != null && annotationOther != null) {
61   - Integer orderThis = annotationThis.priority();
62   - Integer orderOther = annotationOther.priority();
63   - result = orderThis.compareTo(orderOther);
  56 + @SuppressWarnings("deprecation")
  57 + protected Integer getPriority(AnnotatedMethod<T> annotatedMethod) {
  58 + Integer priority = super.getPriority(annotatedMethod);
  59 +
  60 + if (!annotatedMethod.isAnnotationPresent(Priority.class)) {
  61 + Startup annotation = annotatedMethod.getAnnotation(Startup.class);
  62 + priority = annotation.priority();
64 63 }
65   - return result;
66   - }
67 64  
  65 + return priority;
  66 + }
68 67 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/AbstractStrategyProducer.java
... ... @@ -40,6 +40,10 @@ import java.io.FileNotFoundException;
40 40 import java.io.Serializable;
41 41 import java.net.URL;
42 42  
  43 +import javax.enterprise.context.spi.CreationalContext;
  44 +import javax.enterprise.inject.spi.AnnotatedType;
  45 +import javax.enterprise.inject.spi.BeanManager;
  46 +import javax.enterprise.inject.spi.InjectionTarget;
43 47 import javax.inject.Inject;
44 48  
45 49 import org.apache.commons.configuration.Configuration;
... ... @@ -48,6 +52,7 @@ import org.apache.commons.configuration.PropertiesConfiguration;
48 52 import br.gov.frameworkdemoiselle.annotation.Name;
49 53 import br.gov.frameworkdemoiselle.configuration.ConfigurationException;
50 54 import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader;
  55 +import br.gov.frameworkdemoiselle.util.Beans;
51 56 import br.gov.frameworkdemoiselle.util.Reflections;
52 57 import br.gov.frameworkdemoiselle.util.ResourceBundle;
53 58 import br.gov.frameworkdemoiselle.util.Strings;
... ... @@ -66,6 +71,21 @@ public abstract class AbstractStrategyProducer&lt;T, D extends T&gt; implements Serial
66 71 @Name("demoiselle-core-bundle")
67 72 private ResourceBundle bundle;
68 73  
  74 + @SuppressWarnings("unchecked")
  75 + public T create() {
  76 + BeanManager beanManager = Beans.getBeanManager();
  77 +
  78 + AnnotatedType<T> type = ((AnnotatedType<T>) beanManager.createAnnotatedType(getSelected()));
  79 + InjectionTarget<T> it = beanManager.createInjectionTarget(type);
  80 + CreationalContext<T> ctx = beanManager.createCreationalContext(null);
  81 +
  82 + T instance = it.produce(ctx);
  83 + it.inject(instance, ctx);
  84 + it.postConstruct(instance);
  85 +
  86 + return instance;
  87 + }
  88 +
69 89 protected Class<? extends T> getSelected() {
70 90 if (selected == null) {
71 91 selected = loadSelected();
... ... @@ -88,26 +108,7 @@ public abstract class AbstractStrategyProducer&lt;T, D extends T&gt; implements Serial
88 108 }
89 109  
90 110 return this.defaultClass;
91   - }// public <A> void processAnnotatedType(@Observes final ProcessAnnotatedType<A> event) {
92   - // Class<A> annotated = event.getAnnotatedType().getJavaClass();
93   -
94   - //
95   - // if (Reflections.isOfType(annotated, getType()) && annotated != selected) {
96   - // event.veto();
97   - // }
98   - // }
99   -
100   - // public void beforeBeanDiscovery(@Observes final BeforeBeanDiscovery event) {
101   - // selected = loadSelected();
102   - // }
103   -
104   - // public <A> void processAnnotatedType(@Observes final ProcessAnnotatedType<A> event) {
105   - // Class<A> annotated = event.getAnnotatedType().getJavaClass();
106   - //
107   - // if (Reflections.isOfType(annotated, getType()) && annotated != selected) {
108   - // event.veto();
109   - // }
110   - // }
  111 + }
111 112  
112 113 @SuppressWarnings("unchecked")
113 114 private Class<T> loadSelected() {
... ... @@ -121,12 +122,8 @@ public abstract class AbstractStrategyProducer&lt;T, D extends T&gt; implements Serial
121 122 Configuration config = new PropertiesConfiguration(url);
122 123 canonicalName = config.getString(getConfigKey(), getDefaultClass().getCanonicalName());
123 124  
124   - ClassLoader classLoader;
125   -
126   - try {
127   - classLoader = ConfigurationLoader.getClassLoaderForResource(canonicalName.replaceAll("\\.", "/")
128   - + ".class");
129   - } catch (FileNotFoundException e) {
  125 + ClassLoader classLoader = ConfigurationLoader.getClassLoaderForClass(canonicalName);
  126 + if (classLoader == null) {
130 127 classLoader = Thread.currentThread().getContextClassLoader();
131 128 }
132 129  
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ResourceBundleProducer.java
... ... @@ -46,6 +46,7 @@ import javax.enterprise.inject.spi.InjectionPoint;
46 46  
47 47 import br.gov.frameworkdemoiselle.DemoiselleException;
48 48 import br.gov.frameworkdemoiselle.annotation.Name;
  49 +import br.gov.frameworkdemoiselle.util.Beans;
49 50 import br.gov.frameworkdemoiselle.util.ResourceBundle;
50 51  
51 52 /**
... ... @@ -63,6 +64,16 @@ public class ResourceBundleProducer implements Serializable {
63 64 * @param String
64 65 * baseName
65 66 */
  67 + public static ResourceBundle create(String baseName) {
  68 + return create(baseName, Beans.getReference(Locale.class));
  69 + }
  70 +
  71 + /**
  72 + * This method should be used by classes that can not inject ResourceBundle, to create the ResourceBundle.
  73 + *
  74 + * @param String
  75 + * baseName
  76 + */
66 77 public static ResourceBundle create(String baseName, Locale locale) {
67 78 ResourceBundle bundle = null;
68 79  
... ... @@ -82,7 +93,7 @@ public class ResourceBundleProducer implements Serializable {
82 93 */
83 94 @Produces
84 95 @Default
85   - public ResourceBundle create(InjectionPoint ip, Locale locale) {
  96 + public ResourceBundle create(InjectionPoint ip) {
86 97 String baseName;
87 98  
88 99 if (ip != null && ip.getAnnotated().isAnnotationPresent(Name.class)) {
... ... @@ -91,6 +102,6 @@ public class ResourceBundleProducer implements Serializable {
91 102 baseName = "messages";
92 103 }
93 104  
94   - return create(baseName, locale);
  105 + return create(baseName, Beans.getReference(Locale.class));
95 106 }
96 107 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/TransactionProducer.java
... ... @@ -1,71 +0,0 @@
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -/*
38   - * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the
39   - * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE
40   - * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is
41   - * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part
42   - * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the
43   - * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework
44   - * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
45   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You
46   - * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see
47   - * <http://www.gnu.org/licenses/>.
48   - */
49   -package br.gov.frameworkdemoiselle.internal.producer;
50   -
51   -import javax.enterprise.inject.Default;
52   -import javax.enterprise.inject.Produces;
53   -
54   -import br.gov.frameworkdemoiselle.internal.implementation.DefaultTransaction;
55   -import br.gov.frameworkdemoiselle.transaction.Transaction;
56   -
57   -public class TransactionProducer extends AbstractStrategyProducer<Transaction, DefaultTransaction> {
58   -
59   - private static final long serialVersionUID = 1L;
60   -
61   - @Default
62   - @Produces
63   - public Transaction create() throws InstantiationException, IllegalAccessException {
64   - return getSelected().newInstance();
65   - }
66   -
67   - @Override
68   - public String getConfigKey() {
69   - return "frameworkdemoiselle.transaction.class";
70   - }
71   -}
impl/core/src/main/java/br/gov/frameworkdemoiselle/security/AuthorizationException.java
... ... @@ -36,7 +36,8 @@
36 36 */
37 37 package br.gov.frameworkdemoiselle.security;
38 38  
39   -import br.gov.frameworkdemoiselle.internal.implementation.CoreBundle;
  39 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
  40 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
40 41  
41 42 /**
42 43 * Thrown when trying to access some resource and/or execute an operation without the proper authorization.
... ... @@ -47,6 +48,8 @@ public class AuthorizationException extends SecurityException {
47 48  
48 49 private static final long serialVersionUID = 1L;
49 50  
  51 + private static ResourceBundle bundle;
  52 +
50 53 /**
51 54 * Constructor with message.
52 55 *
... ... @@ -58,8 +61,14 @@ public class AuthorizationException extends SecurityException {
58 61 }
59 62  
60 63 public AuthorizationException(String resource, String operation) {
61   - // TODO: remove the CoreBundle call
62   - super(CoreBundle.get().getString("access-denied-ui", resource, operation));
  64 + super(getBundle().getString("access-denied-ui", resource, operation));
63 65 }
64 66  
  67 + private static ResourceBundle getBundle() {
  68 + if (bundle == null) {
  69 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  70 + }
  71 +
  72 + return bundle;
  73 + }
65 74 }
... ...
impl/core/src/main/java/br/gov/frameworkdemoiselle/transaction/TransactionContext.java 0 → 100644
... ... @@ -0,0 +1,49 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package br.gov.frameworkdemoiselle.transaction;
  38 +
  39 +import java.io.Serializable;
  40 +
  41 +/**
  42 + * Structure used to handle trancationa mechanisms.
  43 + *
  44 + * @author SERPRO
  45 + */
  46 +public interface TransactionContext extends Serializable {
  47 +
  48 + Transaction currentTransaction();
  49 +}
... ...
impl/core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
1 1 br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap
2   -br.gov.frameworkdemoiselle.internal.bootstrap.TransactionBootstrap
3   -#br.gov.frameworkdemoiselle.internal.bootstrap.AuthenticatorBootstrap
4   -#br.gov.frameworkdemoiselle.internal.bootstrap.AuthorizerBootstrap
5 2 br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap
6 3 br.gov.frameworkdemoiselle.internal.bootstrap.ShutdownBootstrap
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrapTest.java
... ... @@ -68,7 +68,7 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle;
68 68 public class AbstractBootstrapTest {
69 69  
70 70 @Test
71   - @SuppressWarnings("unchecked")
  71 + @SuppressWarnings({ "unchecked", "static-access" })
72 72 public void testAddContext() {
73 73 mockStatic(LoggerProducer.class);
74 74 mockStatic(Contexts.class);
... ... @@ -97,7 +97,7 @@ public class AbstractBootstrapTest {
97 97 }
98 98  
99 99 @Test
100   - @SuppressWarnings("unchecked")
  100 + @SuppressWarnings({ "unchecked", "static-access" })
101 101 public void testDisableContext() {
102 102 mockStatic(LoggerProducer.class);
103 103 mockStatic(Contexts.class);
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/ShutdownBootstrapTest.java
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.bootstrap;
38   -
39   -import static org.easymock.EasyMock.expect;
40   -import static org.easymock.EasyMock.replay;
41   -import static org.easymock.EasyMock.verify;
42   -import static org.junit.Assert.assertFalse;
43   -import static org.junit.Assert.assertNotNull;
44   -import static org.junit.Assert.assertTrue;
45   -
46   -import java.lang.reflect.Field;
47   -import java.util.ArrayList;
48   -import java.util.HashSet;
49   -import java.util.List;
50   -import java.util.Locale;
51   -import java.util.Set;
52   -
53   -import javax.enterprise.inject.spi.AfterBeanDiscovery;
54   -import javax.enterprise.inject.spi.AnnotatedMethod;
55   -import javax.enterprise.inject.spi.AnnotatedType;
56   -import javax.enterprise.inject.spi.BeanManager;
57   -import javax.enterprise.inject.spi.ProcessAnnotatedType;
58   -
59   -import org.easymock.EasyMock;
60   -import org.junit.Before;
61   -import org.junit.Ignore;
62   -import org.junit.Test;
63   -import org.junit.runner.RunWith;
64   -import org.powermock.api.easymock.PowerMock;
65   -import org.powermock.core.classloader.annotations.PrepareForTest;
66   -import org.powermock.modules.junit4.PowerMockRunner;
67   -import org.powermock.reflect.Whitebox;
68   -import org.slf4j.Logger;
69   -
70   -import br.gov.frameworkdemoiselle.annotation.Shutdown;
71   -import br.gov.frameworkdemoiselle.internal.context.Contexts;
72   -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
73   -import br.gov.frameworkdemoiselle.internal.processor.ShutdownProcessor;
74   -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
75   -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
76   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
77   -
78   -@Ignore
79   -@RunWith(PowerMockRunner.class)
80   -@PrepareForTest({ Contexts.class, LoggerProducer.class, ResourceBundle.class, ResourceBundleProducer.class })
81   -@SuppressWarnings("rawtypes")
82   -public class ShutdownBootstrapTest {
83   -
84   - private ProcessAnnotatedType event;
85   -
86   - private BeanManager beanManager;
87   -
88   - private AnnotatedType annotatedType;
89   -
90   - @Before
91   - public void before() {
92   - event = EasyMock.createMock(ProcessAnnotatedType.class);
93   - annotatedType = EasyMock.createMock(AnnotatedType.class);
94   - beanManager = null;
95   - }
96   -
97   - @SuppressWarnings("unchecked")
98   - private List<ShutdownProcessor> getProcessors(ShutdownBootstrap bootstrap) throws IllegalArgumentException,
99   - IllegalAccessException {
100   - Set<Field> fields = Whitebox.getAllStaticFields(ShutdownBootstrap.class);
101   - List<ShutdownProcessor> list = new ArrayList<ShutdownProcessor>();
102   - for (Field field : fields) {
103   - if (field.getName().equals("processors")) {
104   - list = (List<ShutdownProcessor>) field.get(bootstrap);
105   - }
106   - }
107   - return list;
108   - }
109   -
110   - @SuppressWarnings({ "unchecked" })
111   - @Test
112   - public void processAnnotatedType() throws IllegalArgumentException, IllegalAccessException {
113   - ShutdownBootstrap bootstrap = new ShutdownBootstrap();
114   - List<ShutdownProcessor> list = getProcessors(bootstrap);
115   -
116   - assertTrue(list.isEmpty());
117   -
118   - AnnotatedMethod am1 = PowerMock.createMock(AnnotatedMethod.class);
119   - AnnotatedMethod am2 = PowerMock.createMock(AnnotatedMethod.class);
120   - AnnotatedMethod am3 = PowerMock.createMock(AnnotatedMethod.class);
121   -
122   - Set<AnnotatedMethod> set = new HashSet<AnnotatedMethod>();
123   - set.add(am1);
124   - set.add(am2);
125   - set.add(am3);
126   -
127   - expect(am1.isAnnotationPresent(Shutdown.class)).andReturn(true);
128   - expect(am2.isAnnotationPresent(Shutdown.class)).andReturn(true);
129   - expect(am3.isAnnotationPresent(Shutdown.class)).andReturn(false);
130   - expect(event.getAnnotatedType()).andReturn(annotatedType);
131   - expect(annotatedType.getMethods()).andReturn(set);
132   -
133   - replay(event, annotatedType, am1, am2, am3);
134   - bootstrap.processAnnotatedType(event, beanManager);
135   - verify(event, annotatedType);
136   -
137   - list = getProcessors(bootstrap);
138   - assertNotNull(list);
139   - assertFalse(list.isEmpty());
140   - assertTrue(list.size() == 2);
141   - }
142   -
143   - @SuppressWarnings({ "unchecked" })
144   - @Test
145   - public void testShuttingDown() throws Throwable {
146   - ShutdownBootstrap bootstrap = new ShutdownBootstrap();
147   -
148   - PowerMock.mockStatic(Contexts.class);
149   - PowerMock.mockStatic(LoggerProducer.class);
150   -
151   - Logger logger = PowerMock.createMock(Logger.class);
152   - ResourceBundleProducer bundleFactory = PowerMock.createMock(ResourceBundleProducer.class);
153   - ResourceBundle bundle = PowerMock.createMock(ResourceBundle.class);
154   -
155   - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes();
156   - expect(bundleFactory.create(EasyMock.anyObject(String.class), EasyMock.anyObject(Locale.class))).andReturn(
157   - bundle).anyTimes();
158   - expect(bundle.getString(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))).andReturn("")
159   - .anyTimes();
160   -
161   - logger.debug(EasyMock.anyObject(String.class));
162   - logger.trace(EasyMock.anyObject(String.class));
163   - EasyMock.expectLastCall().anyTimes();
164   -
165   - Whitebox.setInternalState(AbstractBootstrap.class, ResourceBundleProducer.class, bundleFactory);
166   -
167   - List<ShutdownProcessor> list = getProcessors(bootstrap);
168   - list.clear();
169   -
170   - MyShuttingDownProcessor<?> processor = PowerMock.createMock(MyShuttingDownProcessor.class);
171   - list.add(processor);
172   - expect(processor.process()).andReturn(true).times(1);
173   -
174   - Contexts.add(EasyMock.anyObject(ThreadLocalContext.class), EasyMock.anyObject(AfterBeanDiscovery.class));
175   - EasyMock.expectLastCall().anyTimes();
176   -
177   - Contexts.remove(EasyMock.anyObject(ThreadLocalContext.class));
178   - EasyMock.expectLastCall().anyTimes();
179   -
180   - PowerMock.replayAll();
181   - ShutdownBootstrap.shutdown();
182   -
183   - assertTrue(list.isEmpty());
184   - PowerMock.verifyAll();
185   - }
186   -}
187   -
188   -@SuppressWarnings("rawtypes")
189   -class MyShuttingDownProcessor<T> extends ShutdownProcessor<T> {
190   -
191   - @SuppressWarnings("unchecked")
192   - public MyShuttingDownProcessor(AnnotatedMethod annotatedMethod, BeanManager beanManager) {
193   - super(annotatedMethod, beanManager);
194   - }
195   -
196   - @Override
197   - public int compareTo(final ShutdownProcessor<T> other) {
198   - return 1;
199   - }
200   -}
  1 +///*
  2 +// * Demoiselle Framework
  3 +// * Copyright (C) 2010 SERPRO
  4 +// * ----------------------------------------------------------------------------
  5 +// * This file is part of Demoiselle Framework.
  6 +// *
  7 +// * Demoiselle Framework is free software; you can redistribute it and/or
  8 +// * modify it under the terms of the GNU Lesser General Public License version 3
  9 +// * as published by the Free Software Foundation.
  10 +// *
  11 +// * This program is distributed in the hope that it will be useful,
  12 +// * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 +// * GNU General Public License for more details.
  15 +// *
  16 +// * You should have received a copy of the GNU Lesser General Public License version 3
  17 +// * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 +// * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 +// * Fifth Floor, Boston, MA 02110-1301, USA.
  20 +// * ----------------------------------------------------------------------------
  21 +// * Este arquivo é parte do Framework Demoiselle.
  22 +// *
  23 +// * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 +// * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 +// * do Software Livre (FSF).
  26 +// *
  27 +// * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 +// * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 +// * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 +// * para maiores detalhes.
  31 +// *
  32 +// * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 +// * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 +// * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 +// */
  37 +//package br.gov.frameworkdemoiselle.internal.bootstrap;
  38 +//
  39 +//import static org.easymock.EasyMock.expect;
  40 +//import static org.easymock.EasyMock.replay;
  41 +//import static org.easymock.EasyMock.verify;
  42 +//import static org.junit.Assert.assertFalse;
  43 +//import static org.junit.Assert.assertNotNull;
  44 +//import static org.junit.Assert.assertTrue;
  45 +//
  46 +//import java.lang.reflect.Field;
  47 +//import java.util.ArrayList;
  48 +//import java.util.HashSet;
  49 +//import java.util.List;
  50 +//import java.util.Locale;
  51 +//import java.util.Set;
  52 +//
  53 +//import javax.enterprise.inject.spi.AfterBeanDiscovery;
  54 +//import javax.enterprise.inject.spi.AnnotatedMethod;
  55 +//import javax.enterprise.inject.spi.AnnotatedType;
  56 +//import javax.enterprise.inject.spi.BeanManager;
  57 +//import javax.enterprise.inject.spi.ProcessAnnotatedType;
  58 +//
  59 +//import org.easymock.EasyMock;
  60 +//import org.junit.Before;
  61 +//import org.junit.Ignore;
  62 +//import org.junit.Test;
  63 +//import org.junit.runner.RunWith;
  64 +//import org.powermock.api.easymock.PowerMock;
  65 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  66 +//import org.powermock.modules.junit4.PowerMockRunner;
  67 +//import org.powermock.reflect.Whitebox;
  68 +//import org.slf4j.Logger;
  69 +//
  70 +//import br.gov.frameworkdemoiselle.annotation.Shutdown;
  71 +//import br.gov.frameworkdemoiselle.internal.context.Contexts;
  72 +//import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
  73 +//import br.gov.frameworkdemoiselle.internal.processor.ShutdownProcessor;
  74 +//import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  75 +//import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
  76 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  77 +//
  78 +//@Ignore
  79 +//@RunWith(PowerMockRunner.class)
  80 +//@PrepareForTest({ Contexts.class, LoggerProducer.class, ResourceBundle.class, ResourceBundleProducer.class })
  81 +//@SuppressWarnings("rawtypes")
  82 +//public class ShutdownBootstrapTest {
  83 +//
  84 +// private ProcessAnnotatedType event;
  85 +//
  86 +// private BeanManager beanManager;
  87 +//
  88 +// private AnnotatedType annotatedType;
  89 +//
  90 +// @Before
  91 +// public void before() {
  92 +// event = EasyMock.createMock(ProcessAnnotatedType.class);
  93 +// annotatedType = EasyMock.createMock(AnnotatedType.class);
  94 +// beanManager = null;
  95 +// }
  96 +//
  97 +// @SuppressWarnings("unchecked")
  98 +// private List<ShutdownProcessor> getProcessors(ShutdownBootstrap bootstrap) throws IllegalArgumentException,
  99 +// IllegalAccessException {
  100 +// Set<Field> fields = Whitebox.getAllStaticFields(ShutdownBootstrap.class);
  101 +// List<ShutdownProcessor> list = new ArrayList<ShutdownProcessor>();
  102 +// for (Field field : fields) {
  103 +// if (field.getName().equals("processors")) {
  104 +// list = (List<ShutdownProcessor>) field.get(bootstrap);
  105 +// }
  106 +// }
  107 +// return list;
  108 +// }
  109 +//
  110 +// @SuppressWarnings({ "unchecked" })
  111 +// @Test
  112 +// public void processAnnotatedType() throws IllegalArgumentException, IllegalAccessException {
  113 +// ShutdownBootstrap bootstrap = new ShutdownBootstrap();
  114 +// List<ShutdownProcessor> list = getProcessors(bootstrap);
  115 +//
  116 +// assertTrue(list.isEmpty());
  117 +//
  118 +// AnnotatedMethod am1 = PowerMock.createMock(AnnotatedMethod.class);
  119 +// AnnotatedMethod am2 = PowerMock.createMock(AnnotatedMethod.class);
  120 +// AnnotatedMethod am3 = PowerMock.createMock(AnnotatedMethod.class);
  121 +//
  122 +// Set<AnnotatedMethod> set = new HashSet<AnnotatedMethod>();
  123 +// set.add(am1);
  124 +// set.add(am2);
  125 +// set.add(am3);
  126 +//
  127 +// expect(am1.isAnnotationPresent(Shutdown.class)).andReturn(true);
  128 +// expect(am2.isAnnotationPresent(Shutdown.class)).andReturn(true);
  129 +// expect(am3.isAnnotationPresent(Shutdown.class)).andReturn(false);
  130 +// expect(event.getAnnotatedType()).andReturn(annotatedType);
  131 +// expect(annotatedType.getMethods()).andReturn(set);
  132 +//
  133 +// replay(event, annotatedType, am1, am2, am3);
  134 +// bootstrap.processAnnotatedType(event, beanManager);
  135 +// verify(event, annotatedType);
  136 +//
  137 +// list = getProcessors(bootstrap);
  138 +// assertNotNull(list);
  139 +// assertFalse(list.isEmpty());
  140 +// assertTrue(list.size() == 2);
  141 +// }
  142 +//
  143 +// @SuppressWarnings({ "unchecked", "static-access" })
  144 +// @Test
  145 +// public void testShuttingDown() throws Throwable {
  146 +// ShutdownBootstrap bootstrap = new ShutdownBootstrap();
  147 +//
  148 +// PowerMock.mockStatic(Contexts.class);
  149 +// PowerMock.mockStatic(LoggerProducer.class);
  150 +//
  151 +// Logger logger = PowerMock.createMock(Logger.class);
  152 +// ResourceBundleProducer bundleFactory = PowerMock.createMock(ResourceBundleProducer.class);
  153 +// ResourceBundle bundle = PowerMock.createMock(ResourceBundle.class);
  154 +//
  155 +// expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes();
  156 +// expect(bundleFactory.create(EasyMock.anyObject(String.class), EasyMock.anyObject(Locale.class))).andReturn(
  157 +// bundle).anyTimes();
  158 +// expect(bundle.getString(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))).andReturn("")
  159 +// .anyTimes();
  160 +//
  161 +// logger.debug(EasyMock.anyObject(String.class));
  162 +// logger.trace(EasyMock.anyObject(String.class));
  163 +// EasyMock.expectLastCall().anyTimes();
  164 +//
  165 +// Whitebox.setInternalState(AbstractBootstrap.class, ResourceBundleProducer.class, bundleFactory);
  166 +//
  167 +// List<ShutdownProcessor> list = getProcessors(bootstrap);
  168 +// list.clear();
  169 +//
  170 +// MyShuttingDownProcessor<?> processor = PowerMock.createMock(MyShuttingDownProcessor.class);
  171 +// list.add(processor);
  172 +// expect(processor.process()).andReturn(true).times(1);
  173 +//
  174 +// Contexts.add(EasyMock.anyObject(ThreadLocalContext.class), EasyMock.anyObject(AfterBeanDiscovery.class));
  175 +// EasyMock.expectLastCall().anyTimes();
  176 +//
  177 +// Contexts.remove(EasyMock.anyObject(ThreadLocalContext.class));
  178 +// EasyMock.expectLastCall().anyTimes();
  179 +//
  180 +// PowerMock.replayAll();
  181 +// ShutdownBootstrap.shutdown();
  182 +//
  183 +// assertTrue(list.isEmpty());
  184 +// PowerMock.verifyAll();
  185 +// }
  186 +//}
  187 +//
  188 +//@SuppressWarnings("rawtypes")
  189 +//class MyShuttingDownProcessor<T> extends ShutdownProcessor<T> {
  190 +//
  191 +// @SuppressWarnings("unchecked")
  192 +// public MyShuttingDownProcessor(AnnotatedMethod annotatedMethod, BeanManager beanManager) {
  193 +// super(annotatedMethod, beanManager);
  194 +// }
  195 +//
  196 +// @Override
  197 +// public int compareTo(final ShutdownProcessor<T> other) {
  198 +// return 1;
  199 +// }
  200 +//}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/StartupBootstrapTest.java
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.bootstrap;
38   -
39   -import static junit.framework.Assert.assertEquals;
40   -import static org.easymock.EasyMock.expect;
41   -import static org.easymock.EasyMock.replay;
42   -import static org.easymock.EasyMock.verify;
43   -import static org.junit.Assert.assertFalse;
44   -import static org.junit.Assert.assertNotNull;
45   -import static org.junit.Assert.assertTrue;
46   -import static org.junit.Assert.fail;
47   -
48   -import java.lang.reflect.Field;
49   -import java.util.HashSet;
50   -import java.util.List;
51   -import java.util.Locale;
52   -import java.util.Set;
53   -
54   -import javax.enterprise.context.ConversationScoped;
55   -import javax.enterprise.context.RequestScoped;
56   -import javax.enterprise.context.SessionScoped;
57   -import javax.enterprise.inject.spi.AfterBeanDiscovery;
58   -import javax.enterprise.inject.spi.AnnotatedMethod;
59   -import javax.enterprise.inject.spi.AnnotatedType;
60   -import javax.enterprise.inject.spi.BeanManager;
61   -import javax.enterprise.inject.spi.ProcessAnnotatedType;
62   -
63   -import junit.framework.Assert;
64   -
65   -import org.easymock.EasyMock;
66   -import org.junit.Before;
67   -import org.junit.Ignore;
68   -import org.junit.Test;
69   -import org.junit.runner.RunWith;
70   -import org.powermock.api.easymock.PowerMock;
71   -import org.powermock.core.classloader.annotations.PrepareForTest;
72   -import org.powermock.modules.junit4.PowerMockRunner;
73   -import org.powermock.reflect.Whitebox;
74   -import org.slf4j.Logger;
75   -
76   -import br.gov.frameworkdemoiselle.annotation.Startup;
77   -import br.gov.frameworkdemoiselle.annotation.ViewScoped;
78   -import br.gov.frameworkdemoiselle.internal.context.Contexts;
79   -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
80   -import br.gov.frameworkdemoiselle.internal.processor.StartupProcessor;
81   -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
82   -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
83   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
84   -
85   -@Ignore
86   -@RunWith(PowerMockRunner.class)
87   -@PrepareForTest({ Contexts.class, LoggerProducer.class, ResourceBundle.class, ResourceBundleProducer.class })
88   -@SuppressWarnings({ "rawtypes", "unchecked" })
89   -public class StartupBootstrapTest {
90   -
91   - private ProcessAnnotatedType event;
92   -
93   - private BeanManager beanManager;
94   -
95   - private AnnotatedType annotatedType;
96   -
97   - @Before
98   - public void before() {
99   - event = EasyMock.createMock(ProcessAnnotatedType.class);
100   - annotatedType = EasyMock.createMock(AnnotatedType.class);
101   - beanManager = null;
102   - }
103   -
104   - private List<StartupProcessor> getActions(StartupBootstrap bootstrap) throws IllegalArgumentException,
105   - IllegalAccessException {
106   - Set<Field> fields = Whitebox.getAllStaticFields(StartupBootstrap.class);
107   - List<StartupProcessor> list = null;
108   - for (Field field : fields) {
109   - if (field.getName().equals("processors")) {
110   - list = (List<StartupProcessor>) field.get(bootstrap);
111   - }
112   - }
113   - return list;
114   - }
115   -
116   - @Test
117   - public void processAnnotatedType() throws IllegalArgumentException, IllegalAccessException {
118   - StartupBootstrap bootstrap = new StartupBootstrap();
119   - List<StartupProcessor> list = getActions(bootstrap);
120   -
121   - assertNotNull(list);
122   - assertTrue(list.isEmpty());
123   -
124   - AnnotatedMethod am1 = PowerMock.createMock(AnnotatedMethod.class);
125   - AnnotatedMethod am2 = PowerMock.createMock(AnnotatedMethod.class);
126   - AnnotatedMethod am3 = PowerMock.createMock(AnnotatedMethod.class);
127   -
128   - Set<AnnotatedMethod> set = new HashSet<AnnotatedMethod>();
129   - set.add(am1);
130   - set.add(am2);
131   - set.add(am3);
132   -
133   - expect(am1.isAnnotationPresent(Startup.class)).andReturn(true);
134   - expect(am2.isAnnotationPresent(Startup.class)).andReturn(true);
135   - expect(am3.isAnnotationPresent(Startup.class)).andReturn(false);
136   - expect(event.getAnnotatedType()).andReturn(annotatedType);
137   - expect(annotatedType.getMethods()).andReturn(set);
138   -
139   - replay(event, annotatedType, am1, am2, am3);
140   - bootstrap.processAnnotatedType(event, beanManager);
141   - verify(event, annotatedType);
142   -
143   - list = getActions(bootstrap);
144   - assertNotNull(list);
145   - assertFalse(list.isEmpty());
146   - assertTrue(list.size() == 2);
147   - }
148   -
149   - @Test
150   - public void testLoadTempContexts() {
151   - StartupBootstrap bootstrap = new StartupBootstrap();
152   -
153   - Logger logger = PowerMock.createMock(Logger.class);
154   - ResourceBundleProducer bundleFactory = PowerMock.createMock(ResourceBundleProducer.class);
155   - ResourceBundle bundle = PowerMock.createMock(ResourceBundle.class);
156   -
157   - PowerMock.mockStatic(Contexts.class);
158   - PowerMock.mockStatic(LoggerProducer.class);
159   -
160   - List<ThreadLocalContext> tempContexts = Whitebox.getInternalState(bootstrap, "tempContexts");
161   -
162   - assertNotNull(tempContexts);
163   - assertTrue(tempContexts.isEmpty());
164   -
165   - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes();
166   - expect(bundleFactory.create(EasyMock.anyObject(String.class), EasyMock.anyObject(Locale.class))).andReturn(
167   - bundle).anyTimes();
168   - expect(bundle.getString(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))).andReturn("")
169   - .anyTimes();
170   -
171   - logger.trace(EasyMock.anyObject(String.class));
172   - EasyMock.expectLastCall().anyTimes();
173   -
174   - Contexts.add(EasyMock.anyObject(ThreadLocalContext.class), EasyMock.anyObject(AfterBeanDiscovery.class));
175   - EasyMock.expectLastCall().anyTimes();
176   -
177   - Whitebox.setInternalState(AbstractBootstrap.class, ResourceBundleProducer.class, bundleFactory);
178   -
179   - PowerMock.replayAll();
180   - bootstrap.loadTempContexts(null);
181   - PowerMock.verifyAll();
182   -
183   - assertNotNull(tempContexts);
184   - assertEquals(4, tempContexts.size());
185   -
186   - for (ThreadLocalContext tlc : tempContexts) {
187   - if (!tlc.getScope().equals(SessionScoped.class) && !tlc.getScope().equals(ConversationScoped.class)
188   - && !tlc.getScope().equals(RequestScoped.class) && !tlc.getScope().equals(ViewScoped.class)) {
189   - fail();
190   - }
191   - }
192   - }
193   -
194   - @Test
195   - public void testStartup() throws Throwable {
196   - StartupBootstrap bootstrap = new StartupBootstrap();
197   -
198   - PowerMock.mockStatic(Contexts.class);
199   - PowerMock.mockStatic(LoggerProducer.class);
200   -
201   - Logger logger = PowerMock.createMock(Logger.class);
202   - ResourceBundleProducer bundleFactory = PowerMock.createMock(ResourceBundleProducer.class);
203   - ResourceBundle bundle = PowerMock.createMock(ResourceBundle.class);
204   -
205   - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes();
206   - expect(bundleFactory.create(EasyMock.anyObject(String.class), EasyMock.anyObject(Locale.class))).andReturn(
207   - bundle).anyTimes();
208   - expect(bundle.getString(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))).andReturn("")
209   - .anyTimes();
210   -
211   - logger.debug(EasyMock.anyObject(String.class));
212   - EasyMock.expectLastCall().anyTimes();
213   -
214   - Whitebox.setInternalState(AbstractBootstrap.class, ResourceBundleProducer.class, bundleFactory);
215   -
216   - List<StartupProcessor> list = getActions(bootstrap);
217   - list.clear();
218   -
219   - MyProcessor<?> processor = PowerMock.createMock(MyProcessor.class);
220   - list.add(processor);
221   - expect(processor.process()).andReturn(true).times(1);
222   -
223   - PowerMock.replayAll();
224   - bootstrap.startup();
225   -
226   - assertTrue(list.isEmpty());
227   - PowerMock.verifyAll();
228   - }
229   -
230   - @Test
231   - public void testLoadTempContextsAndStartup() {
232   -
233   - StartupBootstrap bootstrap = new StartupBootstrap();
234   -
235   - bootstrap.loadTempContexts(null);
236   - Assert.assertFalse(Contexts.getActiveContexts().isEmpty());
237   -
238   - try {
239   - bootstrap.startup();
240   - Assert.assertTrue(Contexts.getActiveContexts().isEmpty());
241   - } catch (Throwable e) {
242   - fail();
243   - }
244   - }
245   -}
246   -
247   -@SuppressWarnings("rawtypes")
248   -class MyProcessor<T> extends StartupProcessor<T> {
249   -
250   - @SuppressWarnings("unchecked")
251   - public MyProcessor(AnnotatedMethod annotatedMethod, BeanManager beanManager) {
252   - super(annotatedMethod, beanManager);
253   - }
254   -
255   - @Override
256   - public int compareTo(final StartupProcessor<T> other) {
257   - return 1;
258   - }
259   -}
  1 +///*
  2 +// * Demoiselle Framework
  3 +// * Copyright (C) 2010 SERPRO
  4 +// * ----------------------------------------------------------------------------
  5 +// * This file is part of Demoiselle Framework.
  6 +// *
  7 +// * Demoiselle Framework is free software; you can redistribute it and/or
  8 +// * modify it under the terms of the GNU Lesser General Public License version 3
  9 +// * as published by the Free Software Foundation.
  10 +// *
  11 +// * This program is distributed in the hope that it will be useful,
  12 +// * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 +// * GNU General Public License for more details.
  15 +// *
  16 +// * You should have received a copy of the GNU Lesser General Public License version 3
  17 +// * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 +// * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 +// * Fifth Floor, Boston, MA 02110-1301, USA.
  20 +// * ----------------------------------------------------------------------------
  21 +// * Este arquivo é parte do Framework Demoiselle.
  22 +// *
  23 +// * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 +// * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 +// * do Software Livre (FSF).
  26 +// *
  27 +// * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 +// * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 +// * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 +// * para maiores detalhes.
  31 +// *
  32 +// * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 +// * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 +// * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 +// */
  37 +//package br.gov.frameworkdemoiselle.internal.bootstrap;
  38 +//
  39 +//import static junit.framework.Assert.assertEquals;
  40 +//import static org.easymock.EasyMock.expect;
  41 +//import static org.easymock.EasyMock.replay;
  42 +//import static org.easymock.EasyMock.verify;
  43 +//import static org.junit.Assert.assertFalse;
  44 +//import static org.junit.Assert.assertNotNull;
  45 +//import static org.junit.Assert.assertTrue;
  46 +//import static org.junit.Assert.fail;
  47 +//
  48 +//import java.lang.reflect.Field;
  49 +//import java.util.HashSet;
  50 +//import java.util.List;
  51 +//import java.util.Locale;
  52 +//import java.util.Set;
  53 +//
  54 +//import javax.enterprise.context.ConversationScoped;
  55 +//import javax.enterprise.context.RequestScoped;
  56 +//import javax.enterprise.context.SessionScoped;
  57 +//import javax.enterprise.inject.spi.AfterBeanDiscovery;
  58 +//import javax.enterprise.inject.spi.AnnotatedMethod;
  59 +//import javax.enterprise.inject.spi.AnnotatedType;
  60 +//import javax.enterprise.inject.spi.BeanManager;
  61 +//import javax.enterprise.inject.spi.ProcessAnnotatedType;
  62 +//
  63 +//import junit.framework.Assert;
  64 +//
  65 +//import org.easymock.EasyMock;
  66 +//import org.junit.Before;
  67 +//import org.junit.Ignore;
  68 +//import org.junit.Test;
  69 +//import org.junit.runner.RunWith;
  70 +//import org.powermock.api.easymock.PowerMock;
  71 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  72 +//import org.powermock.modules.junit4.PowerMockRunner;
  73 +//import org.powermock.reflect.Whitebox;
  74 +//import org.slf4j.Logger;
  75 +//
  76 +//import br.gov.frameworkdemoiselle.annotation.Startup;
  77 +//import br.gov.frameworkdemoiselle.annotation.ViewScoped;
  78 +//import br.gov.frameworkdemoiselle.internal.context.Contexts;
  79 +//import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;
  80 +//import br.gov.frameworkdemoiselle.internal.processor.StartupProcessor;
  81 +//import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  82 +//import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
  83 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  84 +//
  85 +//@Ignore
  86 +//@RunWith(PowerMockRunner.class)
  87 +//@PrepareForTest({ Contexts.class, LoggerProducer.class, ResourceBundle.class, ResourceBundleProducer.class })
  88 +//@SuppressWarnings({ "rawtypes", "unchecked" })
  89 +//public class StartupBootstrapTest {
  90 +//
  91 +// private ProcessAnnotatedType event;
  92 +//
  93 +// private BeanManager beanManager;
  94 +//
  95 +// private AnnotatedType annotatedType;
  96 +//
  97 +// @Before
  98 +// public void before() {
  99 +// event = EasyMock.createMock(ProcessAnnotatedType.class);
  100 +// annotatedType = EasyMock.createMock(AnnotatedType.class);
  101 +// beanManager = null;
  102 +// }
  103 +//
  104 +// private List<StartupProcessor> getActions(StartupBootstrap bootstrap) throws IllegalArgumentException,
  105 +// IllegalAccessException {
  106 +// Set<Field> fields = Whitebox.getAllStaticFields(StartupBootstrap.class);
  107 +// List<StartupProcessor> list = null;
  108 +// for (Field field : fields) {
  109 +// if (field.getName().equals("processors")) {
  110 +// list = (List<StartupProcessor>) field.get(bootstrap);
  111 +// }
  112 +// }
  113 +// return list;
  114 +// }
  115 +//
  116 +// @Test
  117 +// public void processAnnotatedType() throws IllegalArgumentException, IllegalAccessException {
  118 +// StartupBootstrap bootstrap = new StartupBootstrap();
  119 +// List<StartupProcessor> list = getActions(bootstrap);
  120 +//
  121 +// assertNotNull(list);
  122 +// assertTrue(list.isEmpty());
  123 +//
  124 +// AnnotatedMethod am1 = PowerMock.createMock(AnnotatedMethod.class);
  125 +// AnnotatedMethod am2 = PowerMock.createMock(AnnotatedMethod.class);
  126 +// AnnotatedMethod am3 = PowerMock.createMock(AnnotatedMethod.class);
  127 +//
  128 +// Set<AnnotatedMethod> set = new HashSet<AnnotatedMethod>();
  129 +// set.add(am1);
  130 +// set.add(am2);
  131 +// set.add(am3);
  132 +//
  133 +// expect(am1.isAnnotationPresent(Startup.class)).andReturn(true);
  134 +// expect(am2.isAnnotationPresent(Startup.class)).andReturn(true);
  135 +// expect(am3.isAnnotationPresent(Startup.class)).andReturn(false);
  136 +// expect(event.getAnnotatedType()).andReturn(annotatedType);
  137 +// expect(annotatedType.getMethods()).andReturn(set);
  138 +//
  139 +// replay(event, annotatedType, am1, am2, am3);
  140 +// bootstrap.processAnnotatedType(event, beanManager);
  141 +// verify(event, annotatedType);
  142 +//
  143 +// list = getActions(bootstrap);
  144 +// assertNotNull(list);
  145 +// assertFalse(list.isEmpty());
  146 +// assertTrue(list.size() == 2);
  147 +// }
  148 +//
  149 +// @SuppressWarnings("static-access")
  150 +// @Test
  151 +// public void testLoadTempContexts() {
  152 +// StartupBootstrap bootstrap = new StartupBootstrap();
  153 +//
  154 +// Logger logger = PowerMock.createMock(Logger.class);
  155 +// ResourceBundleProducer bundleFactory = PowerMock.createMock(ResourceBundleProducer.class);
  156 +// ResourceBundle bundle = PowerMock.createMock(ResourceBundle.class);
  157 +//
  158 +// PowerMock.mockStatic(Contexts.class);
  159 +// PowerMock.mockStatic(LoggerProducer.class);
  160 +//
  161 +// List<ThreadLocalContext> tempContexts = Whitebox.getInternalState(bootstrap, "tempContexts");
  162 +//
  163 +// assertNotNull(tempContexts);
  164 +// assertTrue(tempContexts.isEmpty());
  165 +//
  166 +// expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes();
  167 +// expect(bundleFactory.create(EasyMock.anyObject(String.class), EasyMock.anyObject(Locale.class))).andReturn(
  168 +// bundle).anyTimes();
  169 +// expect(bundle.getString(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))).andReturn("")
  170 +// .anyTimes();
  171 +//
  172 +// logger.trace(EasyMock.anyObject(String.class));
  173 +// EasyMock.expectLastCall().anyTimes();
  174 +//
  175 +// Contexts.add(EasyMock.anyObject(ThreadLocalContext.class), EasyMock.anyObject(AfterBeanDiscovery.class));
  176 +// EasyMock.expectLastCall().anyTimes();
  177 +//
  178 +// Whitebox.setInternalState(AbstractBootstrap.class, ResourceBundleProducer.class, bundleFactory);
  179 +//
  180 +// PowerMock.replayAll();
  181 +// bootstrap.loadTempContexts(null);
  182 +// PowerMock.verifyAll();
  183 +//
  184 +// assertNotNull(tempContexts);
  185 +// assertEquals(4, tempContexts.size());
  186 +//
  187 +// for (ThreadLocalContext tlc : tempContexts) {
  188 +// if (!tlc.getScope().equals(SessionScoped.class) && !tlc.getScope().equals(ConversationScoped.class)
  189 +// && !tlc.getScope().equals(RequestScoped.class) && !tlc.getScope().equals(ViewScoped.class)) {
  190 +// fail();
  191 +// }
  192 +// }
  193 +// }
  194 +//
  195 +// @SuppressWarnings("static-access")
  196 +// @Test
  197 +// public void testStartup() throws Throwable {
  198 +// StartupBootstrap bootstrap = new StartupBootstrap();
  199 +//
  200 +// PowerMock.mockStatic(Contexts.class);
  201 +// PowerMock.mockStatic(LoggerProducer.class);
  202 +//
  203 +// Logger logger = PowerMock.createMock(Logger.class);
  204 +// ResourceBundleProducer bundleFactory = PowerMock.createMock(ResourceBundleProducer.class);
  205 +// ResourceBundle bundle = PowerMock.createMock(ResourceBundle.class);
  206 +//
  207 +// expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes();
  208 +// expect(bundleFactory.create(EasyMock.anyObject(String.class), EasyMock.anyObject(Locale.class))).andReturn(
  209 +// bundle).anyTimes();
  210 +// expect(bundle.getString(EasyMock.anyObject(String.class), EasyMock.anyObject(String.class))).andReturn("")
  211 +// .anyTimes();
  212 +//
  213 +// logger.debug(EasyMock.anyObject(String.class));
  214 +// EasyMock.expectLastCall().anyTimes();
  215 +//
  216 +// Whitebox.setInternalState(AbstractBootstrap.class, ResourceBundleProducer.class, bundleFactory);
  217 +//
  218 +// List<StartupProcessor> list = getActions(bootstrap);
  219 +// list.clear();
  220 +//
  221 +// MyProcessor<?> processor = PowerMock.createMock(MyProcessor.class);
  222 +// list.add(processor);
  223 +// expect(processor.process()).andReturn(true).times(1);
  224 +//
  225 +// PowerMock.replayAll();
  226 +// bootstrap.startup();
  227 +//
  228 +// assertTrue(list.isEmpty());
  229 +// PowerMock.verifyAll();
  230 +// }
  231 +//
  232 +// @SuppressWarnings("static-access")
  233 +// @Test
  234 +// public void testLoadTempContextsAndStartup() {
  235 +//
  236 +// StartupBootstrap bootstrap = new StartupBootstrap();
  237 +//
  238 +// bootstrap.loadTempContexts(null);
  239 +// Assert.assertFalse(Contexts.getActiveContexts().isEmpty());
  240 +//
  241 +// try {
  242 +// bootstrap.startup();
  243 +// Assert.assertTrue(Contexts.getActiveContexts().isEmpty());
  244 +// } catch (Throwable e) {
  245 +// fail();
  246 +// }
  247 +// }
  248 +//}
  249 +//
  250 +//@SuppressWarnings("rawtypes")
  251 +//class MyProcessor<T> extends StartupProcessor<T> {
  252 +//
  253 +// @SuppressWarnings("unchecked")
  254 +// public MyProcessor(AnnotatedMethod annotatedMethod, BeanManager beanManager) {
  255 +// super(annotatedMethod, beanManager);
  256 +// }
  257 +//
  258 +// @Override
  259 +// public int compareTo(final StartupProcessor<T> other) {
  260 +// return 1;
  261 +// }
  262 +// }
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoaderTest.java
... ... @@ -638,4 +638,4 @@
638 638 // assertEquals("All LowerCase", config.conventionAllLowerCase);
639 639 // }
640 640 //
641 641 -//}
  642 +//}
642 643 \ No newline at end of file
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoaderWithArrayTest.java 0 → 100644
... ... @@ -0,0 +1,520 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package br.gov.frameworkdemoiselle.internal.configuration;
  38 +
  39 +import static org.easymock.EasyMock.expect;
  40 +import static org.junit.Assert.assertEquals;
  41 +import static org.powermock.api.easymock.PowerMock.mockStatic;
  42 +
  43 +import java.awt.Color;
  44 +import java.math.BigDecimal;
  45 +import java.math.BigInteger;
  46 +import java.net.URL;
  47 +import java.util.Calendar;
  48 +import java.util.Date;
  49 +import java.util.GregorianCalendar;
  50 +import java.util.Locale;
  51 +
  52 +import org.junit.After;
  53 +import org.junit.Before;
  54 +import org.junit.Test;
  55 +import org.junit.runner.RunWith;
  56 +import org.powermock.api.easymock.PowerMock;
  57 +import org.powermock.core.classloader.annotations.PrepareForTest;
  58 +import org.powermock.modules.junit4.PowerMockRunner;
  59 +import org.powermock.reflect.Whitebox;
  60 +import org.slf4j.Logger;
  61 +
  62 +import br.gov.frameworkdemoiselle.configuration.ConfigType;
  63 +import br.gov.frameworkdemoiselle.configuration.Configuration;
  64 +import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap;
  65 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
  66 +
  67 +@RunWith(PowerMockRunner.class)
  68 +@PrepareForTest(CoreBootstrap.class)
  69 +public class ConfigurationLoaderWithArrayTest {
  70 +
  71 + private ConfigurationLoader configurationLoader;
  72 +
  73 + @Configuration(type = ConfigType.PROPERTIES , resource = "configuration-with-array")
  74 + public class ConfigurationPropertiesWithArray {
  75 +
  76 + /*
  77 + * All methods supported by org.apache.commons.configuration.DataConfiguration class for array
  78 + */
  79 +
  80 + protected BigDecimal[] bigDecimalArray;
  81 + protected BigInteger[] bigIntegerArray;
  82 + protected boolean[] booleanArray;
  83 + protected byte[] byteArray;
  84 + protected Calendar[] calendarArray;
  85 + protected Color[] colorArray;
  86 + protected Date[] dateArray;
  87 + protected double[] doubleArray;
  88 + protected float[] floatArray;
  89 + protected int[] integerArray;
  90 + protected Locale[] localeArray;
  91 + protected long[] longArray;
  92 + protected short[] shortArray;
  93 + protected URL[] urlArray;
  94 + protected String[] stringArray;
  95 +
  96 + }
  97 +
  98 + @Configuration(type = ConfigType.XML, resource = "configuration-with-array")
  99 + public class ConfigurationXMLWithArray {
  100 +
  101 + /*
  102 + * All methods supported by org.apache.commons.configuration.DataConfiguration class for array
  103 + */
  104 +
  105 + protected BigDecimal[] bigDecimalArray;
  106 + protected BigInteger[] bigIntegerArray;
  107 + protected boolean[] booleanArray;
  108 + protected byte[] byteArray;
  109 + protected Calendar[] calendarArray;
  110 + protected Color[] colorArray;
  111 + protected Date[] dateArray;
  112 + protected double[] doubleArray;
  113 + protected float[] floatArray;
  114 + protected int[] integerArray;
  115 + protected Locale[] localeArray;
  116 + protected long[] longArray;
  117 + protected short[] shortArray;
  118 + protected URL[] urlArray;
  119 + protected String[] stringArray;
  120 +
  121 + }
  122 +
  123 +
  124 + @Before
  125 + public void setUp() throws Exception {
  126 + Logger logger;
  127 + ResourceBundle bundle;
  128 + logger = PowerMock.createMock(Logger.class);
  129 + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  130 + configurationLoader = new ConfigurationLoader();
  131 + Whitebox.setInternalState(this.configurationLoader, "bundle", bundle);
  132 + Whitebox.setInternalState(this.configurationLoader, "logger", logger);
  133 + }
  134 +
  135 + @After
  136 + public void tearDown() throws Exception {
  137 + }
  138 +
  139 + @Test
  140 + public void testConfigurationPropertiesWithIntegerArray() {
  141 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  142 +
  143 + Integer integerValue = config.integerArray[0];
  144 +
  145 + assertEquals(Integer.class, integerValue.getClass());
  146 + assertEquals(Integer.MAX_VALUE, integerValue.intValue());
  147 + assertEquals(4, config.integerArray.length);
  148 + }
  149 +
  150 +
  151 + @Test
  152 + public void testConfigurationPropertiesWithShortArray() {
  153 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  154 +
  155 + Short shortValue = config.shortArray[0];
  156 +
  157 + assertEquals(Short.class, shortValue.getClass());
  158 + assertEquals(Short.MAX_VALUE, shortValue.shortValue());
  159 + assertEquals(4, config.shortArray.length);
  160 + }
  161 +
  162 + @Test
  163 + public void testConfigurationPropertiesWithByteArray() {
  164 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  165 +
  166 + Byte byteValue = config.byteArray[0];
  167 +
  168 + assertEquals(Byte.class, byteValue.getClass());
  169 + assertEquals(Byte.MAX_VALUE, byteValue.byteValue());
  170 + assertEquals(8, config.byteArray.length);
  171 + }
  172 +
  173 + @Test
  174 + public void testConfigurationPropertiesWithBooleanArray() {
  175 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  176 +
  177 + Boolean booleanValue = config.booleanArray[0];
  178 +
  179 + assertEquals(Boolean.class, booleanValue.getClass());
  180 + assertEquals(2, config.booleanArray.length);
  181 + }
  182 +
  183 + @Test
  184 + public void testConfigurationPropertiesWithLongArray() {
  185 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  186 +
  187 + Long longValue = config.longArray[0];
  188 +
  189 + assertEquals(Long.class, longValue.getClass());
  190 + assertEquals(Long.MAX_VALUE, longValue.longValue());
  191 + assertEquals(5, config.longArray.length);
  192 + }
  193 +
  194 + @Test
  195 + public void testConfigurationPropertiesWithFloatArray() {
  196 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  197 +
  198 + Float floatValue = config.floatArray[0];
  199 +
  200 + assertEquals(Float.class, floatValue.getClass());
  201 + assertEquals(Float.MAX_VALUE, floatValue.floatValue(), 1);
  202 + assertEquals(5, config.floatArray.length);
  203 + }
  204 +
  205 + @Test
  206 + public void testConfigurationPropertiesWithDoubleArray() {
  207 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  208 +
  209 + Double doubleValue = config.doubleArray[0];
  210 +
  211 + assertEquals(Double.class, doubleValue.getClass());
  212 + assertEquals(Double.MAX_VALUE, doubleValue.doubleValue(), 1);
  213 + assertEquals(3, config.doubleArray.length);
  214 + }
  215 +
  216 + @Test
  217 + public void testConfigurationPropertiesWithBigDecimalArray() {
  218 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  219 +
  220 + BigDecimal bigDecimalValue = config.bigDecimalArray[0];
  221 +
  222 + assertEquals(BigDecimal.class, bigDecimalValue.getClass());
  223 + assertEquals(3, config.bigDecimalArray.length);
  224 + }
  225 +
  226 + @Test
  227 + public void testConfigurationPropertiesWithBigIntegerArray() {
  228 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  229 +
  230 + BigInteger bigIntegerValue = config.bigIntegerArray[0];
  231 +
  232 + assertEquals(BigInteger.class, bigIntegerValue.getClass());
  233 + assertEquals(3, config.bigIntegerArray.length);
  234 + }
  235 +
  236 + @Test
  237 + public void testConfigurationPropertiesWithCalendarArray() {
  238 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  239 +
  240 + Calendar calendarValue = config.calendarArray[0];
  241 +
  242 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.JUNE, 14, 10, 10);
  243 +
  244 + assertEquals(Calendar.class, calendarValue.getClass().getSuperclass());
  245 + assertEquals(calendar.getTimeInMillis(), calendarValue.getTimeInMillis());
  246 + assertEquals(3, config.calendarArray.length);
  247 + }
  248 +
  249 + @Test
  250 + public void testConfigurationPropertiesWithDateArray() {
  251 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  252 +
  253 + Date dateValue = config.dateArray[0];
  254 +
  255 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.AUGUST, 14, 18, 10, 50);
  256 +
  257 + Date date = new Date(calendar.getTimeInMillis());
  258 +
  259 + assertEquals(Date.class, dateValue.getClass());
  260 + assertEquals(date.getTime(), dateValue.getTime());
  261 + assertEquals(3, config.dateArray.length);
  262 + }
  263 +
  264 + @Test
  265 + public void testConfigurationPropertiesWithColorArray() {
  266 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  267 +
  268 + Color colorValue = config.colorArray[0];
  269 +
  270 + assertEquals(Color.class, colorValue.getClass());
  271 + assertEquals(Color.gray, colorValue);
  272 + assertEquals(3, config.colorArray.length);
  273 + }
  274 +
  275 + @Test
  276 + public void testConfigurationPropertiesWithLocaleArray() {
  277 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  278 +
  279 + Locale localeValue = config.localeArray[0];
  280 + Locale localeValue2 = config.localeArray[1];
  281 +
  282 + assertEquals(Locale.class, localeValue.getClass());
  283 + assertEquals(Locale.ENGLISH, localeValue);
  284 + assertEquals("BR", localeValue2.getCountry());
  285 + assertEquals(3, config.localeArray.length);
  286 + }
  287 +
  288 + @Test
  289 + public void testConfigurationPropertiesWithURLArray() {
  290 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  291 +
  292 + URL urlValue = config.urlArray[0];
  293 +
  294 + URL otherURL = null;
  295 +
  296 + try {
  297 + otherURL = new URL("http://www.test.com");
  298 + }
  299 + catch(Exception e) {
  300 +
  301 + }
  302 +
  303 + assertEquals(URL.class, urlValue.getClass());
  304 + assertEquals(otherURL, urlValue);
  305 + assertEquals(3, config.urlArray.length);
  306 + }
  307 +
  308 + @Test
  309 + public void testConfigurationPropertiesWithStringArray() {
  310 + ConfigurationPropertiesWithArray config = prepareConfigurationPropertiesWithArray();
  311 +
  312 + String stringValue = config.stringArray[0];
  313 +
  314 + assertEquals(String.class, stringValue.getClass());
  315 + assertEquals("Test", stringValue);
  316 + assertEquals(3, config.stringArray.length);
  317 + }
  318 +
  319 + private ConfigurationPropertiesWithArray prepareConfigurationPropertiesWithArray() {
  320 + ConfigurationPropertiesWithArray config = new ConfigurationPropertiesWithArray();
  321 +
  322 + mockStatic(CoreBootstrap.class);
  323 + expect(CoreBootstrap.isAnnotatedType(config.getClass())).andReturn(true);
  324 + PowerMock.replay(CoreBootstrap.class);
  325 +
  326 + configurationLoader.load(config);
  327 + return config;
  328 + }
  329 +
  330 + @Test
  331 + public void testConfigurationXMLWithIntegerArray() {
  332 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  333 +
  334 + Integer integerValue = config.integerArray[0];
  335 +
  336 + assertEquals(Integer.class, integerValue.getClass());
  337 + assertEquals(Integer.MAX_VALUE, integerValue.intValue());
  338 + assertEquals(4, config.integerArray.length);
  339 + }
  340 +
  341 +
  342 + @Test
  343 + public void testConfigurationXMLWithShortArray() {
  344 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  345 +
  346 + Short shortValue = config.shortArray[0];
  347 +
  348 + assertEquals(Short.class, shortValue.getClass());
  349 + assertEquals(Short.MAX_VALUE, shortValue.shortValue());
  350 + assertEquals(4, config.shortArray.length);
  351 + }
  352 +
  353 + @Test
  354 + public void testConfigurationXMLWithByteArray() {
  355 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  356 +
  357 + Byte byteValue = config.byteArray[0];
  358 +
  359 + assertEquals(Byte.class, byteValue.getClass());
  360 + assertEquals(Byte.MAX_VALUE, byteValue.byteValue());
  361 + assertEquals(8, config.byteArray.length);
  362 + }
  363 +
  364 + @Test
  365 + public void testConfigurationXMLWithBooleanArray() {
  366 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  367 +
  368 + Boolean booleanValue = config.booleanArray[0];
  369 +
  370 + assertEquals(Boolean.class, booleanValue.getClass());
  371 + assertEquals(2, config.booleanArray.length);
  372 + }
  373 +
  374 + @Test
  375 + public void testConfigurationXMLWithLongArray() {
  376 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  377 +
  378 + Long longValue = config.longArray[0];
  379 +
  380 + assertEquals(Long.class, longValue.getClass());
  381 + assertEquals(Long.MAX_VALUE, longValue.longValue());
  382 + assertEquals(5, config.longArray.length);
  383 + }
  384 +
  385 + @Test
  386 + public void testConfigurationXMLWithFloatArray() {
  387 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  388 +
  389 + Float floatValue = config.floatArray[0];
  390 +
  391 + assertEquals(Float.class, floatValue.getClass());
  392 + assertEquals(Float.MAX_VALUE, floatValue.floatValue(), 1);
  393 + assertEquals(5, config.floatArray.length);
  394 + }
  395 +
  396 + @Test
  397 + public void testConfigurationXMLWithDoubleArray() {
  398 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  399 +
  400 + Double doubleValue = config.doubleArray[0];
  401 +
  402 + assertEquals(Double.class, doubleValue.getClass());
  403 + assertEquals(Double.MAX_VALUE, doubleValue.doubleValue(), 1);
  404 + assertEquals(3, config.doubleArray.length);
  405 + }
  406 +
  407 + @Test
  408 + public void testConfigurationXMLWithBigDecimalArray() {
  409 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  410 +
  411 + BigDecimal bigDecimalValue = config.bigDecimalArray[0];
  412 +
  413 + assertEquals(BigDecimal.class, bigDecimalValue.getClass());
  414 + assertEquals(3, config.bigDecimalArray.length);
  415 + }
  416 +
  417 + @Test
  418 + public void testConfigurationXMLWithBigIntegerArray() {
  419 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  420 +
  421 + BigInteger bigIntegerValue = config.bigIntegerArray[0];
  422 +
  423 + assertEquals(BigInteger.class, bigIntegerValue.getClass());
  424 + assertEquals(3, config.bigIntegerArray.length);
  425 + }
  426 +
  427 + @Test
  428 + public void testConfigurationXMLWithCalendarArray() {
  429 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  430 +
  431 + Calendar calendarValue = config.calendarArray[0];
  432 +
  433 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.JUNE, 14, 10, 10);
  434 +
  435 + assertEquals(Calendar.class, calendarValue.getClass().getSuperclass());
  436 + assertEquals(calendar.getTimeInMillis(), calendarValue.getTimeInMillis());
  437 + assertEquals(3, config.calendarArray.length);
  438 + }
  439 +
  440 + @Test
  441 + public void testConfigurationXMLWithDateArray() {
  442 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  443 +
  444 + Date dateValue = config.dateArray[0];
  445 +
  446 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.AUGUST, 14, 18, 10, 50);
  447 +
  448 + Date date = new Date(calendar.getTimeInMillis());
  449 +
  450 + assertEquals(Date.class, dateValue.getClass());
  451 + assertEquals(date.getTime(), dateValue.getTime());
  452 + assertEquals(3, config.dateArray.length);
  453 + }
  454 +
  455 + @Test
  456 + public void testConfigurationXMLWithColorArray() {
  457 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  458 +
  459 + Color colorValue = config.colorArray[0];
  460 +
  461 + assertEquals(Color.class, colorValue.getClass());
  462 + assertEquals(Color.gray, colorValue);
  463 + assertEquals(3, config.colorArray.length);
  464 + }
  465 +
  466 + @Test
  467 + public void testConfigurationXMLWithLocaleArray() {
  468 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  469 +
  470 + Locale localeValue = config.localeArray[0];
  471 + Locale localeValue2 = config.localeArray[1];
  472 +
  473 + assertEquals(Locale.class, localeValue.getClass());
  474 + assertEquals(Locale.ENGLISH, localeValue);
  475 + assertEquals("BR", localeValue2.getCountry());
  476 + assertEquals(3, config.localeArray.length);
  477 + }
  478 +
  479 + @Test
  480 + public void testConfigurationXMLWithURLArray() {
  481 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  482 +
  483 + URL urlValue = config.urlArray[0];
  484 +
  485 + URL otherURL = null;
  486 +
  487 + try {
  488 + otherURL = new URL("http://www.test.com");
  489 + }
  490 + catch(Exception e) {
  491 +
  492 + }
  493 +
  494 + assertEquals(URL.class, urlValue.getClass());
  495 + assertEquals(otherURL, urlValue);
  496 + assertEquals(3, config.urlArray.length);
  497 + }
  498 +
  499 + @Test
  500 + public void testConfigurationXMLWithStringArray() {
  501 + ConfigurationXMLWithArray config = prepareConfigurationXMLWithArray();
  502 +
  503 + String stringValue = config.stringArray[0];
  504 +
  505 + assertEquals(String.class, stringValue.getClass());
  506 + assertEquals("Test", stringValue);
  507 + assertEquals(3, config.stringArray.length);
  508 + }
  509 +
  510 + private ConfigurationXMLWithArray prepareConfigurationXMLWithArray() {
  511 + ConfigurationXMLWithArray config = new ConfigurationXMLWithArray();
  512 +
  513 + mockStatic(CoreBootstrap.class);
  514 + expect(CoreBootstrap.isAnnotatedType(config.getClass())).andReturn(true);
  515 + PowerMock.replay(CoreBootstrap.class);
  516 +
  517 + configurationLoader.load(config);
  518 + return config;
  519 + }
  520 +}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoaderWithListTest.java 0 → 100644
... ... @@ -0,0 +1,542 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package br.gov.frameworkdemoiselle.internal.configuration;
  38 +
  39 +import static org.easymock.EasyMock.expect;
  40 +import static org.junit.Assert.assertEquals;
  41 +import static org.powermock.api.easymock.PowerMock.mockStatic;
  42 +
  43 +import java.awt.Color;
  44 +import java.math.BigDecimal;
  45 +import java.math.BigInteger;
  46 +import java.net.URL;
  47 +import java.util.Calendar;
  48 +import java.util.Date;
  49 +import java.util.GregorianCalendar;
  50 +import java.util.List;
  51 +import java.util.Locale;
  52 +
  53 +import org.junit.After;
  54 +import org.junit.Before;
  55 +import org.junit.Test;
  56 +import org.junit.runner.RunWith;
  57 +import org.powermock.api.easymock.PowerMock;
  58 +import org.powermock.core.classloader.annotations.PrepareForTest;
  59 +import org.powermock.modules.junit4.PowerMockRunner;
  60 +import org.powermock.reflect.Whitebox;
  61 +import org.slf4j.Logger;
  62 +
  63 +import br.gov.frameworkdemoiselle.configuration.ConfigType;
  64 +import br.gov.frameworkdemoiselle.configuration.Configuration;
  65 +import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap;
  66 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
  67 +
  68 +@RunWith(PowerMockRunner.class)
  69 +@PrepareForTest(CoreBootstrap.class)
  70 +public class ConfigurationLoaderWithListTest {
  71 +
  72 + private ConfigurationLoader configurationLoader;
  73 +
  74 + @Configuration(type = ConfigType.PROPERTIES, resource = "configuration-with-list")
  75 + public class ConfigurationPropertiesWithList {
  76 +
  77 + /*
  78 + * All methods supported by org.apache.commons.configuration.DataConfiguration class for List type
  79 + */
  80 +
  81 + protected List<BigDecimal> bigDecimalList;
  82 +
  83 + protected List<BigInteger> bigIntegerList;
  84 +
  85 + protected List<Boolean> booleanList;
  86 +
  87 + protected List<Byte> byteList;
  88 +
  89 + protected List<Calendar> calendarList;
  90 +
  91 + protected List<Color> colorList;
  92 +
  93 + protected List<Date> dateList;
  94 +
  95 + protected List<Double> doubleList;
  96 +
  97 + protected List<Float> floatList;
  98 +
  99 + protected List<Integer> integerList;
  100 +
  101 + protected List<Locale> localeList;
  102 +
  103 + protected List<Long> longList;
  104 +
  105 + protected List<Short> shortList;
  106 +
  107 + protected List<URL> urlList;
  108 +
  109 + protected List<String> stringList;
  110 + }
  111 +
  112 + @Configuration(type = ConfigType.XML, resource = "configuration-with-list")
  113 + public class ConfigurationXMLWithList {
  114 +
  115 + /*
  116 + * All methods supported by org.apache.commons.configuration.DataConfiguration class for List type
  117 + */
  118 +
  119 + protected List<BigDecimal> bigDecimalList;
  120 +
  121 + protected List<BigInteger> bigIntegerList;
  122 +
  123 + protected List<Boolean> booleanList;
  124 +
  125 + protected List<Byte> byteList;
  126 +
  127 + protected List<Calendar> calendarList;
  128 +
  129 + protected List<Color> colorList;
  130 +
  131 + protected List<Date> dateList;
  132 +
  133 + protected List<Double> doubleList;
  134 +
  135 + protected List<Float> floatList;
  136 +
  137 + protected List<Integer> integerList;
  138 +
  139 + protected List<Locale> localeList;
  140 +
  141 + protected List<Long> longList;
  142 +
  143 + protected List<Short> shortList;
  144 +
  145 + protected List<URL> urlList;
  146 +
  147 + protected List<String> stringList;
  148 + }
  149 +
  150 + @Before
  151 + public void setUp() throws Exception {
  152 + Logger logger;
  153 + ResourceBundle bundle;
  154 + logger = PowerMock.createMock(Logger.class);
  155 + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  156 + configurationLoader = new ConfigurationLoader();
  157 + Whitebox.setInternalState(this.configurationLoader, "bundle", bundle);
  158 + Whitebox.setInternalState(this.configurationLoader, "logger", logger);
  159 + }
  160 +
  161 + @After
  162 + public void tearDown() throws Exception {
  163 + }
  164 +
  165 + @Test
  166 + public void testConfigurationPropertiesWithIntegerList() {
  167 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  168 +
  169 + Integer integerValue = config.integerList.get(0);
  170 +
  171 + assertEquals(Integer.class, integerValue.getClass());
  172 + assertEquals(Integer.MAX_VALUE, integerValue.intValue());
  173 + assertEquals(4, config.integerList.size());
  174 + }
  175 +
  176 + @Test
  177 + public void testConfigurationPropertiesWithShortList() {
  178 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  179 +
  180 + Short shortValue = config.shortList.get(0);
  181 +
  182 + assertEquals(Short.class, shortValue.getClass());
  183 + assertEquals(Short.MAX_VALUE, shortValue.shortValue());
  184 + assertEquals(4, config.shortList.size());
  185 + }
  186 +
  187 + @Test
  188 + public void testConfigurationPropertiesWithByteList() {
  189 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  190 +
  191 + Byte byteValue = config.byteList.get(0);
  192 +
  193 + assertEquals(Byte.class, byteValue.getClass());
  194 + assertEquals(Byte.MAX_VALUE, byteValue.byteValue());
  195 + assertEquals(8, config.byteList.size());
  196 + }
  197 +
  198 + @Test
  199 + public void testConfigurationPropertiesWithBooleanList() {
  200 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  201 +
  202 + Boolean booleanValue = config.booleanList.get(0);
  203 +
  204 + assertEquals(Boolean.class, booleanValue.getClass());
  205 + assertEquals(2, config.booleanList.size());
  206 + }
  207 +
  208 + @Test
  209 + public void testConfigurationPropertiesWithLongList() {
  210 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  211 +
  212 + Long longValue = config.longList.get(0);
  213 +
  214 + assertEquals(Long.class, longValue.getClass());
  215 + assertEquals(Long.MAX_VALUE, longValue.longValue());
  216 + assertEquals(5, config.longList.size());
  217 + }
  218 +
  219 + @Test
  220 + public void testConfigurationPropertiesWithFloatList() {
  221 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  222 +
  223 + Float floatValue = config.floatList.get(0);
  224 +
  225 + assertEquals(Float.class, floatValue.getClass());
  226 + assertEquals(Float.MAX_VALUE, floatValue.floatValue(), 1);
  227 + assertEquals(5, config.floatList.size());
  228 + }
  229 +
  230 + @Test
  231 + public void testConfigurationPropertiesWithDoubleList() {
  232 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  233 +
  234 + Double doubleValue = config.doubleList.get(0);
  235 +
  236 + assertEquals(Double.class, doubleValue.getClass());
  237 + assertEquals(Double.MAX_VALUE, doubleValue.doubleValue(), 1);
  238 + assertEquals(3, config.doubleList.size());
  239 + }
  240 +
  241 + @Test
  242 + public void testConfigurationPropertiesWithBigDecimalList() {
  243 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  244 +
  245 + BigDecimal bigDecimalValue = config.bigDecimalList.get(0);
  246 +
  247 + assertEquals(BigDecimal.class, bigDecimalValue.getClass());
  248 + assertEquals(3, config.bigDecimalList.size());
  249 + }
  250 +
  251 + @Test
  252 + public void testConfigurationPropertiesWithBigIntegerList() {
  253 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  254 +
  255 + BigInteger bigIntegerValue = config.bigIntegerList.get(0);
  256 +
  257 + assertEquals(BigInteger.class, bigIntegerValue.getClass());
  258 + assertEquals(3, config.bigIntegerList.size());
  259 + }
  260 +
  261 + @Test
  262 + public void testConfigurationPropertiesWithCalendarList() {
  263 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  264 +
  265 + Calendar calendarValue = config.calendarList.get(0);
  266 +
  267 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.JUNE, 14, 10, 10);
  268 +
  269 + assertEquals(Calendar.class, calendarValue.getClass().getSuperclass());
  270 + assertEquals(calendar.getTimeInMillis(), calendarValue.getTimeInMillis());
  271 + assertEquals(3, config.calendarList.size());
  272 + }
  273 +
  274 + @Test
  275 + public void testConfigurationPropertiesWithDateList() {
  276 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  277 +
  278 + Date dateValue = config.dateList.get(0);
  279 +
  280 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.AUGUST, 14, 18, 10, 50);
  281 +
  282 + Date date = new Date(calendar.getTimeInMillis());
  283 +
  284 + assertEquals(Date.class, dateValue.getClass());
  285 + assertEquals(date.getTime(), dateValue.getTime());
  286 + assertEquals(3, config.dateList.size());
  287 + }
  288 +
  289 + @Test
  290 + public void testConfigurationPropertiesWithColorList() {
  291 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  292 +
  293 + Color colorValue = config.colorList.get(0);
  294 +
  295 + assertEquals(Color.class, colorValue.getClass());
  296 + assertEquals(Color.gray, colorValue);
  297 + assertEquals(3, config.colorList.size());
  298 + }
  299 +
  300 + @Test
  301 + public void testConfigurationPropertiesWithLocaleList() {
  302 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  303 +
  304 + Locale localeValue = config.localeList.get(0);
  305 + Locale localeValue2 = config.localeList.get(1);
  306 +
  307 + assertEquals(Locale.class, localeValue.getClass());
  308 + assertEquals(Locale.ENGLISH, localeValue);
  309 + assertEquals("BR", localeValue2.getCountry());
  310 + assertEquals(3, config.localeList.size());
  311 + }
  312 +
  313 + @Test
  314 + public void testConfigurationPropertiesWithURLList() {
  315 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  316 +
  317 + URL urlValue = config.urlList.get(0);
  318 +
  319 + URL otherURL = null;
  320 +
  321 + try {
  322 + otherURL = new URL("http://www.test.com");
  323 + } catch (Exception e) {
  324 +
  325 + }
  326 +
  327 + assertEquals(URL.class, urlValue.getClass());
  328 + assertEquals(otherURL, urlValue);
  329 + assertEquals(3, config.urlList.size());
  330 + }
  331 +
  332 + @Test
  333 + public void testConfigurationPropertiesWithStringList() {
  334 + ConfigurationPropertiesWithList config = prepareConfigurationPropertiesWithList();
  335 +
  336 + String stringValue = config.stringList.get(0);
  337 +
  338 + assertEquals(String.class, stringValue.getClass());
  339 + assertEquals("Test", stringValue);
  340 + assertEquals(3, config.stringList.size());
  341 + }
  342 +
  343 + private ConfigurationPropertiesWithList prepareConfigurationPropertiesWithList() {
  344 + ConfigurationPropertiesWithList config = new ConfigurationPropertiesWithList();
  345 +
  346 + mockStatic(CoreBootstrap.class);
  347 + expect(CoreBootstrap.isAnnotatedType(config.getClass())).andReturn(true);
  348 + PowerMock.replay(CoreBootstrap.class);
  349 +
  350 + configurationLoader.load(config);
  351 + return config;
  352 + }
  353 +
  354 + @Test
  355 + public void testConfigurationXMLWithIntegerList() {
  356 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  357 +
  358 + Integer integerValue = config.integerList.get(0);
  359 +
  360 + assertEquals(Integer.class, integerValue.getClass());
  361 + assertEquals(Integer.MAX_VALUE, integerValue.intValue());
  362 + assertEquals(4, config.integerList.size());
  363 + }
  364 +
  365 + @Test
  366 + public void testConfigurationXMLWithShortList() {
  367 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  368 +
  369 + Short shortValue = config.shortList.get(0);
  370 +
  371 + assertEquals(Short.class, shortValue.getClass());
  372 + assertEquals(Short.MAX_VALUE, shortValue.shortValue());
  373 + assertEquals(4, config.shortList.size());
  374 + }
  375 +
  376 + @Test
  377 + public void testConfigurationXMLWithByteList() {
  378 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  379 +
  380 + Byte byteValue = config.byteList.get(0);
  381 +
  382 + assertEquals(Byte.class, byteValue.getClass());
  383 + assertEquals(Byte.MAX_VALUE, byteValue.byteValue());
  384 + assertEquals(8, config.byteList.size());
  385 + }
  386 +
  387 + @Test
  388 + public void testConfigurationXMLWithBooleanList() {
  389 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  390 +
  391 + Boolean booleanValue = config.booleanList.get(0);
  392 +
  393 + assertEquals(Boolean.class, booleanValue.getClass());
  394 + assertEquals(2, config.booleanList.size());
  395 + }
  396 +
  397 + @Test
  398 + public void testConfigurationXMLWithLongList() {
  399 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  400 +
  401 + Long longValue = config.longList.get(0);
  402 +
  403 + assertEquals(Long.class, longValue.getClass());
  404 + assertEquals(Long.MAX_VALUE, longValue.longValue());
  405 + assertEquals(5, config.longList.size());
  406 + }
  407 +
  408 + @Test
  409 + public void testConfigurationXMLWithFloatList() {
  410 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  411 +
  412 + Float floatValue = config.floatList.get(0);
  413 +
  414 + assertEquals(Float.class, floatValue.getClass());
  415 + assertEquals(Float.MAX_VALUE, floatValue.floatValue(), 1);
  416 + assertEquals(5, config.floatList.size());
  417 + }
  418 +
  419 + @Test
  420 + public void testConfigurationXMLWithDoubleList() {
  421 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  422 +
  423 + Double doubleValue = config.doubleList.get(0);
  424 +
  425 + assertEquals(Double.class, doubleValue.getClass());
  426 + assertEquals(Double.MAX_VALUE, doubleValue.doubleValue(), 1);
  427 + assertEquals(3, config.doubleList.size());
  428 + }
  429 +
  430 + @Test
  431 + public void testConfigurationXMLWithBigDecimalList() {
  432 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  433 +
  434 + BigDecimal bigDecimalValue = config.bigDecimalList.get(0);
  435 +
  436 + assertEquals(BigDecimal.class, bigDecimalValue.getClass());
  437 + assertEquals(3, config.bigDecimalList.size());
  438 + }
  439 +
  440 + @Test
  441 + public void testConfigurationXMLWithBigIntegerList() {
  442 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  443 +
  444 + BigInteger bigIntegerValue = config.bigIntegerList.get(0);
  445 +
  446 + assertEquals(BigInteger.class, bigIntegerValue.getClass());
  447 + assertEquals(3, config.bigIntegerList.size());
  448 + }
  449 +
  450 + @Test
  451 + public void testConfigurationXMLWithCalendarList() {
  452 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  453 +
  454 + Calendar calendarValue = config.calendarList.get(0);
  455 +
  456 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.JUNE, 14, 10, 10);
  457 +
  458 + assertEquals(Calendar.class, calendarValue.getClass().getSuperclass());
  459 + assertEquals(calendar.getTimeInMillis(), calendarValue.getTimeInMillis());
  460 + assertEquals(3, config.calendarList.size());
  461 + }
  462 +
  463 + @Test
  464 + public void testConfigurationXMLWithDateList() {
  465 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  466 +
  467 + Date dateValue = config.dateList.get(0);
  468 +
  469 + GregorianCalendar calendar = new GregorianCalendar(2012, Calendar.AUGUST, 14, 18, 10, 50);
  470 +
  471 + Date date = new Date(calendar.getTimeInMillis());
  472 +
  473 + assertEquals(Date.class, dateValue.getClass());
  474 + assertEquals(date.getTime(), dateValue.getTime());
  475 + assertEquals(3, config.dateList.size());
  476 + }
  477 +
  478 + @Test
  479 + public void testConfigurationXMLWithColorList() {
  480 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  481 +
  482 + Color colorValue = config.colorList.get(0);
  483 +
  484 + assertEquals(Color.class, colorValue.getClass());
  485 + assertEquals(Color.gray, colorValue);
  486 + assertEquals(3, config.colorList.size());
  487 + }
  488 +
  489 + @Test
  490 + public void testConfigurationXMLWithLocaleList() {
  491 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  492 +
  493 + Locale localeValue = config.localeList.get(0);
  494 + Locale localeValue2 = config.localeList.get(1);
  495 +
  496 + assertEquals(Locale.class, localeValue.getClass());
  497 + assertEquals(Locale.ENGLISH, localeValue);
  498 + assertEquals("BR", localeValue2.getCountry());
  499 + assertEquals(3, config.localeList.size());
  500 + }
  501 +
  502 + @Test
  503 + public void testConfigurationXMLWithURLList() {
  504 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  505 +
  506 + URL urlValue = config.urlList.get(0);
  507 +
  508 + URL otherURL = null;
  509 +
  510 + try {
  511 + otherURL = new URL("http://www.test.com");
  512 + } catch (Exception e) {
  513 +
  514 + }
  515 +
  516 + assertEquals(URL.class, urlValue.getClass());
  517 + assertEquals(otherURL, urlValue);
  518 + assertEquals(3, config.urlList.size());
  519 + }
  520 +
  521 + @Test
  522 + public void testConfigurationXMLWithStringList() {
  523 + ConfigurationXMLWithList config = prepareConfigurationXMLWithList();
  524 +
  525 + String stringValue = config.stringList.get(0);
  526 +
  527 + assertEquals(String.class, stringValue.getClass());
  528 + assertEquals("Test", stringValue);
  529 + assertEquals(3, config.stringList.size());
  530 + }
  531 +
  532 + private ConfigurationXMLWithList prepareConfigurationXMLWithList() {
  533 + ConfigurationXMLWithList config = new ConfigurationXMLWithList();
  534 +
  535 + mockStatic(CoreBootstrap.class);
  536 + expect(CoreBootstrap.isAnnotatedType(config.getClass())).andReturn(true);
  537 + PowerMock.replay(CoreBootstrap.class);
  538 +
  539 + configurationLoader.load(config);
  540 + return config;
  541 + }
  542 +}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultAuthenticatorTest.java
1   -package br.gov.frameworkdemoiselle.internal.implementation;
2   -
3   -import static org.easymock.EasyMock.expect;
4   -import static org.junit.Assert.assertTrue;
5   -import static org.powermock.api.easymock.PowerMock.mockStatic;
6   -import static org.powermock.api.easymock.PowerMock.replay;
7   -
8   -import java.util.Locale;
9   -
10   -import org.junit.After;
11   -import org.junit.Before;
12   -import org.junit.Test;
13   -import org.junit.runner.RunWith;
14   -import org.powermock.core.classloader.annotations.PrepareForTest;
15   -import org.powermock.modules.junit4.PowerMockRunner;
16   -
17   -import br.gov.frameworkdemoiselle.DemoiselleException;
18   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
19   -
20   -/**
21   - * @author SERPRO
22   - * @see DefaultAuthenticator
23   - */
24   -@RunWith(PowerMockRunner.class)
25   -@PrepareForTest(CoreBundle.class)
26   -public class DefaultAuthenticatorTest {
27   -
28   - private DefaultAuthenticator authenticator;
29   -
30   - @Before
31   - public void setUp() throws Exception {
32   - authenticator = new DefaultAuthenticator();
33   -
34   - mockStatic(CoreBundle.class);
35   -
36   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
37   - expect(CoreBundle.get()).andReturn(bundle);
38   -
39   - replay(CoreBundle.class);
40   - }
41   -
42   - @After
43   - public void tearDown() {
44   - authenticator = null;
45   - }
46   -
47   - @Test
48   - public void testAuthenticate() {
49   - try {
50   - authenticator.authenticate();
51   - } catch (Exception e) {
52   - assertTrue(e instanceof DemoiselleException);
53   - }
54   - }
55   -
56   - @Test
57   - public void testUnAuthenticate() {
58   - try {
59   - authenticator.unAuthenticate();
60   - } catch (Exception e) {
61   - assertTrue(e instanceof DemoiselleException);
62   - }
63   - }
64   -
65   - @Test
66   - public void testGetUser() {
67   - try {
68   - authenticator.getUser();
69   - } catch (Exception e) {
70   - assertTrue(e instanceof DemoiselleException);
71   - }
72   - }
73   -
74   -}
  1 +//package br.gov.frameworkdemoiselle.internal.implementation;
  2 +//
  3 +//import static org.easymock.EasyMock.expect;
  4 +//import static org.junit.Assert.assertTrue;
  5 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  6 +//import static org.powermock.api.easymock.PowerMock.replay;
  7 +//
  8 +//import java.util.Locale;
  9 +//
  10 +//import org.junit.After;
  11 +//import org.junit.Before;
  12 +//import org.junit.Test;
  13 +//import org.junit.runner.RunWith;
  14 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  15 +//import org.powermock.modules.junit4.PowerMockRunner;
  16 +//
  17 +//import br.gov.frameworkdemoiselle.DemoiselleException;
  18 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  19 +//
  20 +///**
  21 +// * @author SERPRO
  22 +// * @see DefaultAuthenticator
  23 +// */
  24 +//@RunWith(PowerMockRunner.class)
  25 +//@PrepareForTest(CoreBundle.class)
  26 +//public class DefaultAuthenticatorTest {
  27 +//
  28 +// private DefaultAuthenticator authenticator;
  29 +//
  30 +// @Before
  31 +// public void setUp() throws Exception {
  32 +// authenticator = new DefaultAuthenticator();
  33 +//
  34 +// mockStatic(CoreBundle.class);
  35 +//
  36 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  37 +// expect(CoreBundle.get()).andReturn(bundle);
  38 +//
  39 +// replay(CoreBundle.class);
  40 +// }
  41 +//
  42 +// @After
  43 +// public void tearDown() {
  44 +// authenticator = null;
  45 +// }
  46 +//
  47 +// @Test
  48 +// public void testAuthenticate() {
  49 +// try {
  50 +// authenticator.authenticate();
  51 +// } catch (Exception e) {
  52 +// assertTrue(e instanceof DemoiselleException);
  53 +// }
  54 +// }
  55 +//
  56 +// @Test
  57 +// public void testUnAuthenticate() {
  58 +// try {
  59 +// authenticator.unAuthenticate();
  60 +// } catch (Exception e) {
  61 +// assertTrue(e instanceof DemoiselleException);
  62 +// }
  63 +// }
  64 +//
  65 +// @Test
  66 +// public void testGetUser() {
  67 +// try {
  68 +// authenticator.getUser();
  69 +// } catch (Exception e) {
  70 +// assertTrue(e instanceof DemoiselleException);
  71 +// }
  72 +// }
  73 +//
  74 +//}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultAuthorizerTest.java
1   -package br.gov.frameworkdemoiselle.internal.implementation;
2   -
3   -import static org.easymock.EasyMock.expect;
4   -import static org.junit.Assert.assertTrue;
5   -import static org.powermock.api.easymock.PowerMock.mockStatic;
6   -import static org.powermock.api.easymock.PowerMock.replay;
7   -
8   -import java.util.Locale;
9   -
10   -import org.junit.After;
11   -import org.junit.Before;
12   -import org.junit.Test;
13   -import org.junit.runner.RunWith;
14   -import org.powermock.core.classloader.annotations.PrepareForTest;
15   -import org.powermock.modules.junit4.PowerMockRunner;
16   -
17   -import br.gov.frameworkdemoiselle.DemoiselleException;
18   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
19   -
20   -/**
21   - * @author SERPRO
22   - * @see DefaultAuthorizer
23   - */
24   -@RunWith(PowerMockRunner.class)
25   -@PrepareForTest(CoreBundle.class)
26   -public class DefaultAuthorizerTest {
27   -
28   - private DefaultAuthorizer authorizer;
29   -
30   - @Before
31   - public void setUp() throws Exception {
32   - authorizer = new DefaultAuthorizer();
33   -
34   - mockStatic(CoreBundle.class);
35   -
36   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
37   - expect(CoreBundle.get()).andReturn(bundle);
38   -
39   - replay(CoreBundle.class);
40   - }
41   -
42   - @After
43   - public void tearDown() {
44   - authorizer = null;
45   - }
46   -
47   - @Test
48   - public void testHasRole() {
49   - try {
50   - authorizer.hasRole(null);
51   - } catch (Exception e) {
52   - assertTrue(e instanceof DemoiselleException);
53   - }
54   - }
55   -
56   - @Test
57   - public void testHasPermission() {
58   - try {
59   - authorizer.hasPermission(null, null);
60   - } catch (Exception e) {
61   - assertTrue(e instanceof DemoiselleException);
62   - }
63   - }
64   -
65   -}
  1 +//package br.gov.frameworkdemoiselle.internal.implementation;
  2 +//
  3 +//import static org.easymock.EasyMock.expect;
  4 +//import static org.junit.Assert.assertTrue;
  5 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  6 +//import static org.powermock.api.easymock.PowerMock.replay;
  7 +//
  8 +//import java.util.Locale;
  9 +//
  10 +//import org.junit.After;
  11 +//import org.junit.Before;
  12 +//import org.junit.Test;
  13 +//import org.junit.runner.RunWith;
  14 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  15 +//import org.powermock.modules.junit4.PowerMockRunner;
  16 +//
  17 +//import br.gov.frameworkdemoiselle.DemoiselleException;
  18 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  19 +//
  20 +///**
  21 +// * @author SERPRO
  22 +// * @see DefaultAuthorizer
  23 +// */
  24 +//@RunWith(PowerMockRunner.class)
  25 +//@PrepareForTest(CoreBundle.class)
  26 +//public class DefaultAuthorizerTest {
  27 +//
  28 +// private DefaultAuthorizer authorizer;
  29 +//
  30 +// @Before
  31 +// public void setUp() throws Exception {
  32 +// authorizer = new DefaultAuthorizer();
  33 +//
  34 +// mockStatic(CoreBundle.class);
  35 +//
  36 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  37 +// expect(CoreBundle.get()).andReturn(bundle);
  38 +//
  39 +// replay(CoreBundle.class);
  40 +// }
  41 +//
  42 +// @After
  43 +// public void tearDown() {
  44 +// authorizer = null;
  45 +// }
  46 +//
  47 +// @Test
  48 +// public void testHasRole() {
  49 +// try {
  50 +// authorizer.hasRole(null);
  51 +// } catch (Exception e) {
  52 +// assertTrue(e instanceof DemoiselleException);
  53 +// }
  54 +// }
  55 +//
  56 +// @Test
  57 +// public void testHasPermission() {
  58 +// try {
  59 +// authorizer.hasPermission(null, null);
  60 +// } catch (Exception e) {
  61 +// assertTrue(e instanceof DemoiselleException);
  62 +// }
  63 +// }
  64 +//
  65 +//}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultTransactionTest.java
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.implementation;
38   -
39   -import static org.easymock.EasyMock.expect;
40   -import static org.junit.Assert.assertTrue;
41   -import static org.powermock.api.easymock.PowerMock.mockStatic;
42   -import static org.powermock.api.easymock.PowerMock.replay;
43   -
44   -import java.util.Locale;
45   -
46   -import org.junit.After;
47   -import org.junit.Before;
48   -import org.junit.Test;
49   -import org.junit.runner.RunWith;
50   -import org.powermock.core.classloader.annotations.PrepareForTest;
51   -import org.powermock.modules.junit4.PowerMockRunner;
52   -
53   -import br.gov.frameworkdemoiselle.DemoiselleException;
54   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
55   -
56   -/**
57   - * @author SERPRO
58   - * @see DefaultTransaction
59   - */
60   -@RunWith(PowerMockRunner.class)
61   -@PrepareForTest(CoreBundle.class)
62   -public class DefaultTransactionTest {
63   -
64   - private DefaultTransaction tx;
65   -
66   - @Before
67   - public void setUp() throws Exception {
68   - tx = new DefaultTransaction();
69   -
70   - mockStatic(CoreBundle.class);
71   -
72   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
73   - expect(CoreBundle.get()).andReturn(bundle);
74   -
75   - replay(CoreBundle.class);
76   - }
77   -
78   - @After
79   - public void tearDown() {
80   - tx = null;
81   - }
82   -
83   - @Test
84   - public void testBegin() {
85   - try {
86   - tx.begin();
87   - } catch (Exception e) {
88   - assertTrue(e instanceof DemoiselleException);
89   - }
90   - }
91   -
92   - @Test
93   - public void testCommit() {
94   - try {
95   - tx.commit();
96   - } catch (Exception e) {
97   - assertTrue(e instanceof DemoiselleException);
98   - }
99   - }
100   -
101   - @Test
102   - public void testIsActive() {
103   - try {
104   - tx.isActive();
105   - } catch (Exception e) {
106   - assertTrue(e instanceof DemoiselleException);
107   - }
108   - }
109   -
110   - @Test
111   - public void testIsMarkedRollback() {
112   - try {
113   - tx.isMarkedRollback();
114   - } catch (Exception e) {
115   - assertTrue(e instanceof DemoiselleException);
116   - }
117   - }
118   -
119   - @Test
120   - public void testRollback() {
121   - try {
122   - tx.rollback();
123   - } catch (Exception e) {
124   - assertTrue(e instanceof DemoiselleException);
125   - }
126   - }
127   -
128   - @Test
129   - public void testSetRollbackOnly() {
130   - try {
131   - tx.setRollbackOnly();
132   - } catch (Exception e) {
133   - assertTrue(e instanceof DemoiselleException);
134   - }
135   - }
136   -}
  1 +///*
  2 +// * Demoiselle Framework
  3 +// * Copyright (C) 2010 SERPRO
  4 +// * ----------------------------------------------------------------------------
  5 +// * This file is part of Demoiselle Framework.
  6 +// *
  7 +// * Demoiselle Framework is free software; you can redistribute it and/or
  8 +// * modify it under the terms of the GNU Lesser General Public License version 3
  9 +// * as published by the Free Software Foundation.
  10 +// *
  11 +// * This program is distributed in the hope that it will be useful,
  12 +// * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 +// * GNU General Public License for more details.
  15 +// *
  16 +// * You should have received a copy of the GNU Lesser General Public License version 3
  17 +// * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 +// * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 +// * Fifth Floor, Boston, MA 02110-1301, USA.
  20 +// * ----------------------------------------------------------------------------
  21 +// * Este arquivo é parte do Framework Demoiselle.
  22 +// *
  23 +// * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 +// * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 +// * do Software Livre (FSF).
  26 +// *
  27 +// * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 +// * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 +// * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 +// * para maiores detalhes.
  31 +// *
  32 +// * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 +// * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 +// * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 +// */
  37 +//package br.gov.frameworkdemoiselle.internal.implementation;
  38 +//
  39 +//import static org.easymock.EasyMock.expect;
  40 +//import static org.junit.Assert.assertTrue;
  41 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  42 +//import static org.powermock.api.easymock.PowerMock.replay;
  43 +//
  44 +//import java.util.Locale;
  45 +//
  46 +//import org.junit.After;
  47 +//import org.junit.Before;
  48 +//import org.junit.Test;
  49 +//import org.junit.runner.RunWith;
  50 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  51 +//import org.powermock.modules.junit4.PowerMockRunner;
  52 +//
  53 +//import br.gov.frameworkdemoiselle.DemoiselleException;
  54 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  55 +//
  56 +///**
  57 +// * @author SERPRO
  58 +// * @see DefaultTransaction
  59 +// */
  60 +//@RunWith(PowerMockRunner.class)
  61 +//@PrepareForTest(CoreBundle.class)
  62 +//public class DefaultTransactionTest {
  63 +//
  64 +// private DefaultTransaction tx;
  65 +//
  66 +// @Before
  67 +// public void setUp() throws Exception {
  68 +// tx = new DefaultTransaction();
  69 +//
  70 +// mockStatic(CoreBundle.class);
  71 +//
  72 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  73 +// expect(CoreBundle.get()).andReturn(bundle);
  74 +//
  75 +// replay(CoreBundle.class);
  76 +// }
  77 +//
  78 +// @After
  79 +// public void tearDown() {
  80 +// tx = null;
  81 +// }
  82 +//
  83 +// @Test
  84 +// public void testBegin() {
  85 +// try {
  86 +// tx.begin();
  87 +// } catch (Exception e) {
  88 +// assertTrue(e instanceof DemoiselleException);
  89 +// }
  90 +// }
  91 +//
  92 +// @Test
  93 +// public void testCommit() {
  94 +// try {
  95 +// tx.commit();
  96 +// } catch (Exception e) {
  97 +// assertTrue(e instanceof DemoiselleException);
  98 +// }
  99 +// }
  100 +//
  101 +// @Test
  102 +// public void testIsActive() {
  103 +// try {
  104 +// tx.isActive();
  105 +// } catch (Exception e) {
  106 +// assertTrue(e instanceof DemoiselleException);
  107 +// }
  108 +// }
  109 +//
  110 +// @Test
  111 +// public void testIsMarkedRollback() {
  112 +// try {
  113 +// tx.isMarkedRollback();
  114 +// } catch (Exception e) {
  115 +// assertTrue(e instanceof DemoiselleException);
  116 +// }
  117 +// }
  118 +//
  119 +// @Test
  120 +// public void testRollback() {
  121 +// try {
  122 +// tx.rollback();
  123 +// } catch (Exception e) {
  124 +// assertTrue(e instanceof DemoiselleException);
  125 +// }
  126 +// }
  127 +//
  128 +// @Test
  129 +// public void testSetRollbackOnly() {
  130 +// try {
  131 +// tx.setRollbackOnly();
  132 +// } catch (Exception e) {
  133 +// assertTrue(e instanceof DemoiselleException);
  134 +// }
  135 +// }
  136 +//}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/implementation/SecurityContextImplTest.java
1   -package br.gov.frameworkdemoiselle.internal.implementation;
2   -
3   -import static junit.framework.Assert.assertEquals;
4   -import static junit.framework.Assert.assertFalse;
5   -import static junit.framework.Assert.assertNotNull;
6   -import static junit.framework.Assert.assertNull;
7   -import static junit.framework.Assert.assertTrue;
8   -import static junit.framework.Assert.fail;
9   -import static org.easymock.EasyMock.createMock;
10   -import static org.easymock.EasyMock.expect;
11   -import static org.powermock.api.easymock.PowerMock.mockStatic;
12   -import static org.powermock.api.easymock.PowerMock.replay;
13   -import static org.powermock.api.easymock.PowerMock.replayAll;
14   -import static org.powermock.reflect.Whitebox.setInternalState;
15   -
16   -import java.util.Locale;
17   -
18   -import javax.enterprise.inject.spi.BeanManager;
19   -
20   -import org.easymock.EasyMock;
21   -import org.junit.Before;
22   -import org.junit.Test;
23   -import org.junit.runner.RunWith;
24   -import org.powermock.api.easymock.PowerMock;
25   -import org.powermock.core.classloader.annotations.PrepareForTest;
26   -import org.powermock.modules.junit4.PowerMockRunner;
27   -
28   -import br.gov.frameworkdemoiselle.internal.configuration.SecurityConfig;
29   -import br.gov.frameworkdemoiselle.security.Authenticator;
30   -import br.gov.frameworkdemoiselle.security.Authorizer;
31   -import br.gov.frameworkdemoiselle.security.NotLoggedInException;
32   -import br.gov.frameworkdemoiselle.security.User;
33   -import br.gov.frameworkdemoiselle.util.Beans;
34   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
35   -
36   -@RunWith(PowerMockRunner.class)
37   -@PrepareForTest({ CoreBundle.class, Beans.class })
38   -public class SecurityContextImplTest {
39   -
40   - private SecurityContextImpl context;
41   -
42   - private SecurityConfig config;
43   -
44   - @Before
45   - public void setUp() {
46   - context = new SecurityContextImpl();
47   -
48   - config = createMock(SecurityConfig.class);
49   - setInternalState(context, "config", config);
50   - }
51   -
52   - @Test
53   - public void testHasPermissionWithSecurityDisabled() {
54   -
55   - expect(config.isEnabled()).andReturn(false);
56   -
57   - replay(config);
58   -
59   - try {
60   - assertTrue(context.hasPermission(null, null));
61   - } catch (NotLoggedInException e) {
62   - fail();
63   - }
64   -
65   - }
66   -
67   - @Test
68   - public void testHasPermissionWithSecurityEnabledAndNotLoggedIn() {
69   - Authenticator authenticator = createMock(Authenticator.class);
70   - expect(authenticator.getUser()).andReturn(null).anyTimes();
71   -
72   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
73   - setInternalState(context, "bundle", bundle);
74   - setInternalState(context, "authenticator", authenticator);
75   -
76   - expect(config.isEnabled()).andReturn(true).anyTimes();
77   - replay(config, authenticator);
78   -
79   - try {
80   - context.hasPermission(null, null);
81   - fail();
82   - } catch (NotLoggedInException e) {
83   - assertTrue(e.getMessage().equals(bundle.getString("user-not-authenticated")));
84   - }
85   -
86   - }
87   -
88   - @Test
89   - public void testHasPermissionWithSecurityEnabledAndLoggedIn() {
90   - expect(config.isEnabled()).andReturn(true).anyTimes();
91   - replay(config);
92   -
93   - loginSuccessfully();
94   -
95   - Authorizer authorizer = createMock(Authorizer.class);
96   - expect(authorizer.hasPermission(null, null)).andReturn(true);
97   -
98   - setInternalState(context, "authorizer", authorizer);
99   -
100   - replay(authorizer);
101   -
102   - try {
103   - assertTrue(context.hasPermission(null, null));
104   - } catch (NotLoggedInException e) {
105   - fail();
106   - }
107   -
108   - }
109   -
110   - private void loginSuccessfully() {
111   - Authenticator authenticator = createMock(Authenticator.class);
112   - expect(authenticator.authenticate()).andReturn(true);
113   -
114   - BeanManager manager = createMock(BeanManager.class);
115   - mockStatic(Beans.class);
116   - expect(Beans.getBeanManager()).andReturn(manager);
117   - manager.fireEvent(EasyMock.anyObject(Class.class));
118   - PowerMock.expectLastCall();
119   -
120   - User user = createMock(User.class);
121   - expect(authenticator.getUser()).andReturn(user).anyTimes();
122   -
123   - setInternalState(context, "authenticator", authenticator);
124   -
125   - replayAll(authenticator, user, Beans.class, manager);
126   -
127   - context.login();
128   - assertTrue(context.isLoggedIn());
129   - }
130   -
131   - @Test
132   - public void testHasRoleWithSecurityDisabled() {
133   -
134   - expect(config.isEnabled()).andReturn(false);
135   -
136   - replay(config);
137   -
138   - try {
139   - assertTrue(context.hasRole(null));
140   - } catch (NotLoggedInException e) {
141   - fail();
142   - }
143   -
144   - }
145   -
146   - @Test
147   - public void testHasRoleWithSecurityEnabledAndNotLoggedIn() {
148   - Authenticator authenticator = createMock(Authenticator.class);
149   - expect(authenticator.getUser()).andReturn(null).anyTimes();
150   -
151   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
152   - setInternalState(context, "bundle", bundle);
153   - expect(config.isEnabled()).andReturn(true).anyTimes();
154   -
155   - setInternalState(context, "authenticator", authenticator);
156   -
157   - replay(config, authenticator);
158   -
159   - try {
160   - context.hasRole(null);
161   - fail();
162   - } catch (NotLoggedInException e) {
163   - assertTrue(e.getMessage().equals(bundle.getString("user-not-authenticated")));
164   - }
165   -
166   - }
167   -
168   - @Test
169   - public void testHasRoleWithSecurityEnabledAndLoggedIn() {
170   - expect(config.isEnabled()).andReturn(true).anyTimes();
171   - replay(config);
172   -
173   - loginSuccessfully();
174   -
175   - Authorizer authorizer = createMock(Authorizer.class);
176   - expect(authorizer.hasRole(null)).andReturn(true);
177   -
178   - setInternalState(context, "authorizer", authorizer);
179   -
180   - replay(authorizer);
181   -
182   - try {
183   - assertTrue(context.hasRole(null));
184   - } catch (NotLoggedInException e) {
185   - fail();
186   - }
187   -
188   - }
189   -
190   - @Test
191   - public void testIsLoggedInWithSecurityEnabled() {
192   - Authenticator authenticator = createMock(Authenticator.class);
193   - expect(authenticator.getUser()).andReturn(null).anyTimes();
194   -
195   - expect(config.isEnabled()).andReturn(true).anyTimes();
196   -
197   - setInternalState(context, "authenticator", authenticator);
198   -
199   - replay(config, authenticator);
200   -
201   - assertFalse(context.isLoggedIn());
202   - }
203   -
204   - @Test
205   - public void testIsLoggedInWithSecurityDisabled() {
206   -
207   - expect(config.isEnabled()).andReturn(false);
208   -
209   - replay(config);
210   -
211   - assertTrue(context.isLoggedIn());
212   -
213   - }
214   -
215   - @Test
216   - public void testLoginWithSecurityDisabled() {
217   -
218   - expect(config.isEnabled()).andReturn(false).times(2);
219   -
220   - replay(config);
221   -
222   - context.login();
223   -
224   - assertTrue(context.isLoggedIn());
225   -
226   - }
227   -
228   - @Test
229   - public void testLoginWithAuthenticationFail() {
230   -
231   - expect(config.isEnabled()).andReturn(true).anyTimes();
232   -
233   - Authenticator authenticator = createMock(Authenticator.class);
234   - expect(authenticator.authenticate()).andReturn(false);
235   - expect(authenticator.getUser()).andReturn(null).anyTimes();
236   -
237   - setInternalState(context, "authenticator", authenticator);
238   -
239   - replayAll(authenticator, config);
240   -
241   - context.login();
242   -
243   - assertFalse(context.isLoggedIn());
244   - }
245   -
246   - @Test
247   - public void testLogOutWithSecurityDisabled() {
248   -
249   - expect(config.isEnabled()).andReturn(false).times(2);
250   -
251   - replay(config);
252   -
253   - try {
254   - context.logout();
255   - assertTrue(context.isLoggedIn());
256   - } catch (NotLoggedInException e) {
257   - fail();
258   - }
259   - }
260   -
261   - @Test
262   - public void testLogOutWithoutPreviousLogin() {
263   - Authenticator authenticator = createMock(Authenticator.class);
264   - expect(authenticator.getUser()).andReturn(null).anyTimes();
265   -
266   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
267   - setInternalState(context, "bundle", bundle);
268   -
269   - expect(config.isEnabled()).andReturn(true).anyTimes();
270   -
271   - setInternalState(context, "authenticator", authenticator);
272   -
273   - replay(config, authenticator);
274   -
275   - try {
276   - context.logout();
277   - fail();
278   - } catch (NotLoggedInException e) {
279   - assertTrue(e.getMessage().equals(bundle.getString("user-not-authenticated")));
280   - }
281   - }
282   -
283   - @Test
284   - public void testLogOutAfterSuccessfulLogin() {
285   - mockStatic(Beans.class);
286   -
287   - expect(config.isEnabled()).andReturn(true).anyTimes();
288   -
289   - Authenticator authenticator = createMock(Authenticator.class);
290   - expect(authenticator.authenticate()).andReturn(true);
291   - authenticator.unAuthenticate();
292   - PowerMock.expectLastCall();
293   -
294   - User user = createMock(User.class);
295   - expect(authenticator.getUser()).andReturn(user);
296   - expect(authenticator.getUser()).andReturn(null);
297   -
298   - BeanManager manager = createMock(BeanManager.class);
299   - expect(Beans.getBeanManager()).andReturn(manager).times(2);
300   - manager.fireEvent(EasyMock.anyObject(Class.class));
301   - PowerMock.expectLastCall().times(2);
302   -
303   - setInternalState(context, "authenticator", authenticator);
304   -
305   - replayAll(Beans.class, authenticator, user, manager, config);
306   -
307   - context.login();
308   - context.logout();
309   -
310   - assertFalse(context.isLoggedIn());
311   - }
312   -
313   - @Test
314   - public void testGetUserWhenSecurityIsDisabled() {
315   - Authenticator authenticator = createMock(Authenticator.class);
316   - expect(authenticator.getUser()).andReturn(null).anyTimes();
317   -
318   - expect(config.isEnabled()).andReturn(false).anyTimes();
319   - replay(config, authenticator, Beans.class);
320   -
321   - setInternalState(context, "authenticator", authenticator);
322   -
323   - assertNotNull(context.getUser());
324   - assertNotNull(context.getUser().getId());
325   - assertNull(context.getUser().getAttribute(null));
326   - context.getUser().setAttribute(null, null);
327   - }
328   -
329   - @Test
330   - public void testGetUserWhenSecurityIsEnabled() {
331   - Authenticator authenticator = createMock(Authenticator.class);
332   - expect(authenticator.getUser()).andReturn(null).anyTimes();
333   -
334   - expect(config.isEnabled()).andReturn(true);
335   - replay(config, authenticator, Beans.class);
336   -
337   - setInternalState(context, "authenticator", authenticator);
338   -
339   - assertNull(context.getUser());
340   - }
341   -
342   - @Test
343   - public void testGetUserWhenSecurityIsEnabledAndUserIsNotNull() {
344   - User user = createMock(User.class);
345   -
346   - Authenticator authenticator = createMock(Authenticator.class);
347   - expect(authenticator.getUser()).andReturn(user).anyTimes();
348   -
349   - expect(config.isEnabled()).andReturn(true).anyTimes();
350   - replay(config, user, authenticator, Beans.class);
351   -
352   - setInternalState(context, "authenticator", authenticator);
353   -
354   - assertEquals(context.getUser(), user);
355   - }
356   -}
  1 +//package br.gov.frameworkdemoiselle.internal.implementation;
  2 +//
  3 +//import static junit.framework.Assert.assertEquals;
  4 +//import static junit.framework.Assert.assertFalse;
  5 +//import static junit.framework.Assert.assertNotNull;
  6 +//import static junit.framework.Assert.assertNull;
  7 +//import static junit.framework.Assert.assertTrue;
  8 +//import static junit.framework.Assert.fail;
  9 +//import static org.easymock.EasyMock.createMock;
  10 +//import static org.easymock.EasyMock.expect;
  11 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  12 +//import static org.powermock.api.easymock.PowerMock.replay;
  13 +//import static org.powermock.api.easymock.PowerMock.replayAll;
  14 +//import static org.powermock.reflect.Whitebox.setInternalState;
  15 +//
  16 +//import java.util.Locale;
  17 +//
  18 +//import javax.enterprise.inject.spi.BeanManager;
  19 +//
  20 +//import org.easymock.EasyMock;
  21 +//import org.junit.Before;
  22 +//import org.junit.Test;
  23 +//import org.junit.runner.RunWith;
  24 +//import org.powermock.api.easymock.PowerMock;
  25 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  26 +//import org.powermock.modules.junit4.PowerMockRunner;
  27 +//
  28 +//import br.gov.frameworkdemoiselle.internal.configuration.SecurityConfig;
  29 +//import br.gov.frameworkdemoiselle.security.Authenticator;
  30 +//import br.gov.frameworkdemoiselle.security.Authorizer;
  31 +//import br.gov.frameworkdemoiselle.security.NotLoggedInException;
  32 +//import br.gov.frameworkdemoiselle.security.User;
  33 +//import br.gov.frameworkdemoiselle.util.Beans;
  34 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  35 +//
  36 +//@RunWith(PowerMockRunner.class)
  37 +//@PrepareForTest({ CoreBundle.class, Beans.class })
  38 +//public class SecurityContextImplTest {
  39 +//
  40 +// private SecurityContextImpl context;
  41 +//
  42 +// private SecurityConfig config;
  43 +//
  44 +// @Before
  45 +// public void setUp() {
  46 +// context = new SecurityContextImpl();
  47 +//
  48 +// config = createMock(SecurityConfig.class);
  49 +// setInternalState(context, "config", config);
  50 +// }
  51 +//
  52 +// @Test
  53 +// public void testHasPermissionWithSecurityDisabled() {
  54 +//
  55 +// expect(config.isEnabled()).andReturn(false);
  56 +//
  57 +// replay(config);
  58 +//
  59 +// try {
  60 +// assertTrue(context.hasPermission(null, null));
  61 +// } catch (NotLoggedInException e) {
  62 +// fail();
  63 +// }
  64 +//
  65 +// }
  66 +//
  67 +// @Test
  68 +// public void testHasPermissionWithSecurityEnabledAndNotLoggedIn() {
  69 +// Authenticator authenticator = createMock(Authenticator.class);
  70 +// expect(authenticator.getUser()).andReturn(null).anyTimes();
  71 +//
  72 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  73 +// setInternalState(context, "bundle", bundle);
  74 +// setInternalState(context, "authenticator", authenticator);
  75 +//
  76 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  77 +// replay(config, authenticator);
  78 +//
  79 +// try {
  80 +// context.hasPermission(null, null);
  81 +// fail();
  82 +// } catch (NotLoggedInException e) {
  83 +// assertTrue(e.getMessage().equals(bundle.getString("user-not-authenticated")));
  84 +// }
  85 +//
  86 +// }
  87 +//
  88 +// @Test
  89 +// public void testHasPermissionWithSecurityEnabledAndLoggedIn() {
  90 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  91 +// replay(config);
  92 +//
  93 +// loginSuccessfully();
  94 +//
  95 +// Authorizer authorizer = createMock(Authorizer.class);
  96 +// expect(authorizer.hasPermission(null, null)).andReturn(true);
  97 +//
  98 +// setInternalState(context, "authorizer", authorizer);
  99 +//
  100 +// replay(authorizer);
  101 +//
  102 +// try {
  103 +// assertTrue(context.hasPermission(null, null));
  104 +// } catch (NotLoggedInException e) {
  105 +// fail();
  106 +// }
  107 +//
  108 +// }
  109 +//
  110 +// private void loginSuccessfully() {
  111 +// Authenticator authenticator = createMock(Authenticator.class);
  112 +// expect(authenticator.authenticate()).andReturn(true);
  113 +//
  114 +// BeanManager manager = createMock(BeanManager.class);
  115 +// mockStatic(Beans.class);
  116 +// expect(Beans.getBeanManager()).andReturn(manager);
  117 +// manager.fireEvent(EasyMock.anyObject(Class.class));
  118 +// PowerMock.expectLastCall();
  119 +//
  120 +// User user = createMock(User.class);
  121 +// expect(authenticator.getUser()).andReturn(user).anyTimes();
  122 +//
  123 +// setInternalState(context, "authenticator", authenticator);
  124 +//
  125 +// replayAll(authenticator, user, Beans.class, manager);
  126 +//
  127 +// context.login();
  128 +// assertTrue(context.isLoggedIn());
  129 +// }
  130 +//
  131 +// @Test
  132 +// public void testHasRoleWithSecurityDisabled() {
  133 +//
  134 +// expect(config.isEnabled()).andReturn(false);
  135 +//
  136 +// replay(config);
  137 +//
  138 +// try {
  139 +// assertTrue(context.hasRole(null));
  140 +// } catch (NotLoggedInException e) {
  141 +// fail();
  142 +// }
  143 +//
  144 +// }
  145 +//
  146 +// @Test
  147 +// public void testHasRoleWithSecurityEnabledAndNotLoggedIn() {
  148 +// Authenticator authenticator = createMock(Authenticator.class);
  149 +// expect(authenticator.getUser()).andReturn(null).anyTimes();
  150 +//
  151 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  152 +// setInternalState(context, "bundle", bundle);
  153 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  154 +//
  155 +// setInternalState(context, "authenticator", authenticator);
  156 +//
  157 +// replay(config, authenticator);
  158 +//
  159 +// try {
  160 +// context.hasRole(null);
  161 +// fail();
  162 +// } catch (NotLoggedInException e) {
  163 +// assertTrue(e.getMessage().equals(bundle.getString("user-not-authenticated")));
  164 +// }
  165 +//
  166 +// }
  167 +//
  168 +// @Test
  169 +// public void testHasRoleWithSecurityEnabledAndLoggedIn() {
  170 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  171 +// replay(config);
  172 +//
  173 +// loginSuccessfully();
  174 +//
  175 +// Authorizer authorizer = createMock(Authorizer.class);
  176 +// expect(authorizer.hasRole(null)).andReturn(true);
  177 +//
  178 +// setInternalState(context, "authorizer", authorizer);
  179 +//
  180 +// replay(authorizer);
  181 +//
  182 +// try {
  183 +// assertTrue(context.hasRole(null));
  184 +// } catch (NotLoggedInException e) {
  185 +// fail();
  186 +// }
  187 +//
  188 +// }
  189 +//
  190 +// @Test
  191 +// public void testIsLoggedInWithSecurityEnabled() {
  192 +// Authenticator authenticator = createMock(Authenticator.class);
  193 +// expect(authenticator.getUser()).andReturn(null).anyTimes();
  194 +//
  195 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  196 +//
  197 +// setInternalState(context, "authenticator", authenticator);
  198 +//
  199 +// replay(config, authenticator);
  200 +//
  201 +// assertFalse(context.isLoggedIn());
  202 +// }
  203 +//
  204 +// @Test
  205 +// public void testIsLoggedInWithSecurityDisabled() {
  206 +//
  207 +// expect(config.isEnabled()).andReturn(false);
  208 +//
  209 +// replay(config);
  210 +//
  211 +// assertTrue(context.isLoggedIn());
  212 +//
  213 +// }
  214 +//
  215 +// @Test
  216 +// public void testLoginWithSecurityDisabled() {
  217 +//
  218 +// expect(config.isEnabled()).andReturn(false).times(2);
  219 +//
  220 +// replay(config);
  221 +//
  222 +// context.login();
  223 +//
  224 +// assertTrue(context.isLoggedIn());
  225 +//
  226 +// }
  227 +//
  228 +// @Test
  229 +// public void testLoginWithAuthenticationFail() {
  230 +//
  231 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  232 +//
  233 +// Authenticator authenticator = createMock(Authenticator.class);
  234 +// expect(authenticator.authenticate()).andReturn(false);
  235 +// expect(authenticator.getUser()).andReturn(null).anyTimes();
  236 +//
  237 +// setInternalState(context, "authenticator", authenticator);
  238 +//
  239 +// replayAll(authenticator, config);
  240 +//
  241 +// context.login();
  242 +//
  243 +// assertFalse(context.isLoggedIn());
  244 +// }
  245 +//
  246 +// @Test
  247 +// public void testLogOutWithSecurityDisabled() {
  248 +//
  249 +// expect(config.isEnabled()).andReturn(false).times(2);
  250 +//
  251 +// replay(config);
  252 +//
  253 +// try {
  254 +// context.logout();
  255 +// assertTrue(context.isLoggedIn());
  256 +// } catch (NotLoggedInException e) {
  257 +// fail();
  258 +// }
  259 +// }
  260 +//
  261 +// @Test
  262 +// public void testLogOutWithoutPreviousLogin() {
  263 +// Authenticator authenticator = createMock(Authenticator.class);
  264 +// expect(authenticator.getUser()).andReturn(null).anyTimes();
  265 +//
  266 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  267 +// setInternalState(context, "bundle", bundle);
  268 +//
  269 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  270 +//
  271 +// setInternalState(context, "authenticator", authenticator);
  272 +//
  273 +// replay(config, authenticator);
  274 +//
  275 +// try {
  276 +// context.logout();
  277 +// fail();
  278 +// } catch (NotLoggedInException e) {
  279 +// assertTrue(e.getMessage().equals(bundle.getString("user-not-authenticated")));
  280 +// }
  281 +// }
  282 +//
  283 +// @Test
  284 +// public void testLogOutAfterSuccessfulLogin() {
  285 +// mockStatic(Beans.class);
  286 +//
  287 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  288 +//
  289 +// Authenticator authenticator = createMock(Authenticator.class);
  290 +// expect(authenticator.authenticate()).andReturn(true);
  291 +// authenticator.unAuthenticate();
  292 +// PowerMock.expectLastCall();
  293 +//
  294 +// User user = createMock(User.class);
  295 +// expect(authenticator.getUser()).andReturn(user);
  296 +// expect(authenticator.getUser()).andReturn(null);
  297 +//
  298 +// BeanManager manager = createMock(BeanManager.class);
  299 +// expect(Beans.getBeanManager()).andReturn(manager).times(2);
  300 +// manager.fireEvent(EasyMock.anyObject(Class.class));
  301 +// PowerMock.expectLastCall().times(2);
  302 +//
  303 +// setInternalState(context, "authenticator", authenticator);
  304 +//
  305 +// replayAll(Beans.class, authenticator, user, manager, config);
  306 +//
  307 +// context.login();
  308 +// context.logout();
  309 +//
  310 +// assertFalse(context.isLoggedIn());
  311 +// }
  312 +//
  313 +// @Test
  314 +// public void testGetUserWhenSecurityIsDisabled() {
  315 +// Authenticator authenticator = createMock(Authenticator.class);
  316 +// expect(authenticator.getUser()).andReturn(null).anyTimes();
  317 +//
  318 +// expect(config.isEnabled()).andReturn(false).anyTimes();
  319 +// replay(config, authenticator, Beans.class);
  320 +//
  321 +// setInternalState(context, "authenticator", authenticator);
  322 +//
  323 +// assertNotNull(context.getUser());
  324 +// assertNotNull(context.getUser().getId());
  325 +// assertNull(context.getUser().getAttribute(null));
  326 +// context.getUser().setAttribute(null, null);
  327 +// }
  328 +//
  329 +// @Test
  330 +// public void testGetUserWhenSecurityIsEnabled() {
  331 +// Authenticator authenticator = createMock(Authenticator.class);
  332 +// expect(authenticator.getUser()).andReturn(null).anyTimes();
  333 +//
  334 +// expect(config.isEnabled()).andReturn(true);
  335 +// replay(config, authenticator, Beans.class);
  336 +//
  337 +// setInternalState(context, "authenticator", authenticator);
  338 +//
  339 +// assertNull(context.getUser());
  340 +// }
  341 +//
  342 +// @Test
  343 +// public void testGetUserWhenSecurityIsEnabledAndUserIsNotNull() {
  344 +// User user = createMock(User.class);
  345 +//
  346 +// Authenticator authenticator = createMock(Authenticator.class);
  347 +// expect(authenticator.getUser()).andReturn(user).anyTimes();
  348 +//
  349 +// expect(config.isEnabled()).andReturn(true).anyTimes();
  350 +// replay(config, user, authenticator, Beans.class);
  351 +//
  352 +// setInternalState(context, "authenticator", authenticator);
  353 +//
  354 +// assertEquals(context.getUser(), user);
  355 +// }
  356 +//}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/interceptor/RequiredPermissionInterceptorTest.java
1   -package br.gov.frameworkdemoiselle.internal.interceptor;
2   -
3   -import static org.easymock.EasyMock.createMock;
4   -import static org.easymock.EasyMock.expect;
5   -import static org.easymock.EasyMock.expectLastCall;
6   -import static org.junit.Assert.fail;
7   -import static org.powermock.api.easymock.PowerMock.mockStatic;
8   -import static org.powermock.api.easymock.PowerMock.replay;
9   -
10   -import java.util.Locale;
11   -
12   -import javax.enterprise.inject.Instance;
13   -import javax.interceptor.InvocationContext;
14   -
15   -import org.junit.Before;
16   -import org.junit.Test;
17   -import org.junit.runner.RunWith;
18   -import org.powermock.core.classloader.annotations.PrepareForTest;
19   -import org.powermock.modules.junit4.PowerMockRunner;
20   -import org.slf4j.Logger;
21   -
22   -import br.gov.frameworkdemoiselle.annotation.Name;
23   -import br.gov.frameworkdemoiselle.internal.implementation.CoreBundle;
24   -import br.gov.frameworkdemoiselle.security.NotLoggedInException;
25   -import br.gov.frameworkdemoiselle.security.RequiredPermission;
26   -import br.gov.frameworkdemoiselle.security.SecurityContext;
27   -import br.gov.frameworkdemoiselle.security.SecurityException;
28   -import br.gov.frameworkdemoiselle.security.User;
29   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
30   -
31   -@RunWith(PowerMockRunner.class)
32   -@PrepareForTest(CoreBundle.class)
33   -public class RequiredPermissionInterceptorTest {
34   -
35   - private RequiredPermissionInterceptor interceptor;
36   -
37   - private InvocationContext ic;
38   -
39   - private SecurityContext securityContext;
40   -
41   - class UnnamedClass {
42   -
43   - @RequiredPermission
44   - public void requiredPermissionWithoutDeclaredResourceAndOperation() {
45   - }
46   -
47   - @RequiredPermission(operation = "insert")
48   - public void requiredPermissionWithDeclaredOperation() {
49   - }
50   -
51   - @RequiredPermission(resource = "contact")
52   - public void requiredPermissionWithDeclaredResource() {
53   - }
54   -
55   - @RequiredPermission(resource = "contact", operation = "insert")
56   - public void requiredPermissionWithDeclaredResourceAndOperation() {
57   - }
58   - }
59   -
60   - @Name("contact2")
61   - class NamedClass {
62   -
63   - @RequiredPermission
64   - public void requiredPermissionWithoutDeclaredResourceAndOperation() {
65   - }
66   -
67   - @RequiredPermission(operation = "insert")
68   - public void requiredPermissionWithDeclaredOperation() {
69   - }
70   -
71   - @RequiredPermission(resource = "contact")
72   - public void requiredPermissionWithDeclaredResource() {
73   - }
74   -
75   - @RequiredPermission(resource = "contact", operation = "insert")
76   - public void requiredPermissionWithDeclaredResourceAndOperation() {
77   - }
78   - }
79   -
80   - @Name("contact2")
81   - class NamedClassWithNamedMethods {
82   -
83   - @Name("delete")
84   - @RequiredPermission
85   - public void requiredPermissionWithoutDeclaredResourceAndOperation() {
86   - }
87   -
88   - @Name("delete")
89   - @RequiredPermission(operation = "insert")
90   - public void requiredPermissionWithDeclaredOperation() {
91   - }
92   -
93   - @Name("delete")
94   - @RequiredPermission(resource = "contact")
95   - public void requiredPermissionWithDeclaredResource() {
96   - }
97   -
98   - @Name("delete")
99   - @RequiredPermission(resource = "contact", operation = "insert")
100   - public void requiredPermissionWithDeclaredResourceAndOperation() {
101   - }
102   - }
103   -
104   - @RequiredPermission
105   - class ClassAnnotedWithRequiredPermission {
106   -
107   - public void withoutRequiredPermissionAnnotation() {
108   - }
109   -
110   - @RequiredPermission(operation = "insert")
111   - public void requiredPermissionWithDeclaredOperation() {
112   - }
113   - }
114   -
115   - @Before
116   - public void setUp() throws Exception {
117   - @SuppressWarnings("unchecked")
118   - Instance<SecurityContext> securityContextInstance = createMock(Instance.class);
119   - Logger logger = createMock(Logger.class);
120   -
121   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
122   - User user = createMock(User.class);
123   -
124   - mockStatic(CoreBundle.class);
125   - expect(CoreBundle.get()).andReturn(bundle);
126   -
127   - this.securityContext = createMock(SecurityContext.class);
128   - this.ic = createMock(InvocationContext.class);
129   -
130   - expect(user.getId()).andReturn("UserName").anyTimes();
131   - expect(this.securityContext.getUser()).andReturn(user).anyTimes();
132   - expect(securityContextInstance.get()).andReturn(securityContext).anyTimes();
133   - expect(this.ic.proceed()).andReturn(null);
134   - replay(securityContextInstance, user, CoreBundle.class);
135   -
136   - this.interceptor = new RequiredPermissionInterceptor(securityContextInstance, bundle, logger);
137   - }
138   -
139   - private void prepareMock(Object target, String methodName, String expectedResource, String expectedOperation,
140   - boolean hasPermission, boolean isLoggedUser) throws Exception {
141   -
142   - expect(this.securityContext.isLoggedIn()).andReturn(isLoggedUser).anyTimes();
143   -
144   - this.securityContext.hasPermission(expectedResource, expectedOperation);
145   -
146   - if (isLoggedUser) {
147   - expectLastCall().andReturn(hasPermission);
148   - } else {
149   - expectLastCall().andThrow(new NotLoggedInException(""));
150   - }
151   -
152   - expect(this.ic.getTarget()).andReturn(target).anyTimes();
153   - expect(this.ic.getMethod()).andReturn(target.getClass().getMethod(methodName)).anyTimes();
154   - replay(this.ic, this.securityContext);
155   - }
156   -
157   - /* Testing UnnamedClass */
158   -
159   - @Test
160   - public void testManageUnnamedClassAtRequiredPermissionWithoutDeclaredResourceAndOperationMethod() throws Exception {
161   - try {
162   - Object target = new UnnamedClass();
163   - String methodName = "requiredPermissionWithoutDeclaredResourceAndOperation";
164   - String expectedResource = target.getClass().getSimpleName();
165   - String expectedOperation = methodName;
166   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
167   -
168   - interceptor.manage(this.ic);
169   - } catch (SecurityException cause) {
170   - fail();
171   - }
172   - }
173   -
174   - @Test
175   - public void testManageUnnamedClassAtRequiredPermissionWithDeclaredOperationMethod() throws Exception {
176   - try {
177   - Object target = new UnnamedClass();
178   - String methodName = "requiredPermissionWithDeclaredOperation";
179   - String expectedResource = target.getClass().getSimpleName();
180   - String expectedOperation = "insert";
181   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
182   -
183   - interceptor.manage(this.ic);
184   - } catch (SecurityException cause) {
185   - fail();
186   - }
187   - }
188   -
189   - @Test
190   - public void testManageUnnamedClassAtRequiredPermissionWithDeclaredResourceMethod() throws Exception {
191   - try {
192   - Object target = new UnnamedClass();
193   - String methodName = "requiredPermissionWithDeclaredResource";
194   - String expectedResource = "contact";
195   - String expectedOperation = methodName;
196   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
197   -
198   - interceptor.manage(this.ic);
199   - } catch (SecurityException cause) {
200   - fail();
201   - }
202   - }
203   -
204   - @Test
205   - public void testManageUnnamedClassAtRequiredPermissionWithDeclaredResourceAndOperation() throws Exception {
206   - try {
207   - Object target = new UnnamedClass();
208   - String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
209   - String expectedResource = "contact";
210   - String expectedOperation = "insert";
211   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
212   -
213   - interceptor.manage(this.ic);
214   - } catch (SecurityException cause) {
215   - fail();
216   - }
217   - }
218   -
219   - /* Testing NamedClass */
220   -
221   - @Test
222   - public void testManageNamedClassAtRequiredPermissionWithoutDeclaredResourceAndOperationMethod() throws Exception {
223   - try {
224   - Object target = new NamedClass();
225   - String methodName = "requiredPermissionWithoutDeclaredResourceAndOperation";
226   - String expectedResource = "contact2";
227   - String expectedOperation = methodName;
228   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
229   -
230   - interceptor.manage(this.ic);
231   - } catch (SecurityException cause) {
232   - fail();
233   - }
234   - }
235   -
236   - @Test
237   - public void testManageNamedClassAtRequiredPermissionWithDeclaredOperationMethod() throws Exception {
238   - try {
239   - Object target = new NamedClass();
240   - String methodName = "requiredPermissionWithDeclaredOperation";
241   - String expectedResource = "contact2";
242   - String expectedOperation = "insert";
243   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
244   -
245   - interceptor.manage(this.ic);
246   - } catch (SecurityException cause) {
247   - fail();
248   - }
249   - }
250   -
251   - @Test
252   - public void testManageNamedClassAtRequiredPermissionWithDeclaredResourceMethod() throws Exception {
253   - try {
254   - Object target = new NamedClass();
255   - String methodName = "requiredPermissionWithDeclaredResource";
256   - String expectedResource = "contact";
257   - String expectedOperation = methodName;
258   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
259   -
260   - interceptor.manage(this.ic);
261   - } catch (SecurityException cause) {
262   - fail();
263   - }
264   - }
265   -
266   - @Test
267   - public void testManageNamedClassAtRequiredPermissionWithDeclaredResourceAndOperation() throws Exception {
268   - try {
269   - Object target = new NamedClass();
270   - String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
271   - String expectedResource = "contact";
272   - String expectedOperation = "insert";
273   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
274   -
275   - interceptor.manage(this.ic);
276   - } catch (SecurityException cause) {
277   - fail();
278   - }
279   - }
280   -
281   - /* Testing NamedClassWithNamedMethods */
282   -
283   - @Test
284   - public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithoutDeclaredResourceAndOperationMethod()
285   - throws Exception {
286   - try {
287   - Object target = new NamedClassWithNamedMethods();
288   - String methodName = "requiredPermissionWithoutDeclaredResourceAndOperation";
289   - String expectedResource = "contact2";
290   - String expectedOperation = "delete";
291   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
292   -
293   - interceptor.manage(this.ic);
294   - } catch (SecurityException cause) {
295   - fail();
296   - }
297   - }
298   -
299   - @Test
300   - public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithDeclaredOperationMethod() throws Exception {
301   - try {
302   - Object target = new NamedClassWithNamedMethods();
303   - String methodName = "requiredPermissionWithDeclaredOperation";
304   - String expectedResource = "contact2";
305   - String expectedOperation = "insert";
306   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
307   -
308   - interceptor.manage(this.ic);
309   - } catch (SecurityException cause) {
310   - fail();
311   - }
312   - }
313   -
314   - @Test
315   - public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithDeclaredResourceMethod() throws Exception {
316   - try {
317   - Object target = new NamedClassWithNamedMethods();
318   - String methodName = "requiredPermissionWithDeclaredResource";
319   - String expectedResource = "contact";
320   - String expectedOperation = "delete";
321   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
322   -
323   - interceptor.manage(this.ic);
324   - } catch (SecurityException cause) {
325   - fail();
326   - }
327   - }
328   -
329   - @Test
330   - public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithDeclaredResourceAndOperation()
331   - throws Exception {
332   - try {
333   - Object target = new NamedClassWithNamedMethods();
334   - String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
335   - String expectedResource = "contact";
336   - String expectedOperation = "insert";
337   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
338   -
339   - interceptor.manage(this.ic);
340   - } catch (SecurityException cause) {
341   - fail();
342   - }
343   - }
344   -
345   - /* Testing ClassAnnotedWithRequiredPermission */
346   -
347   - @Test
348   - public void testManageClassAnnotedWithRequiredPermissionAtWithoutRequiredPermissionAnnotation() throws Exception {
349   - try {
350   - Object target = new ClassAnnotedWithRequiredPermission();
351   - String methodName = "withoutRequiredPermissionAnnotation";
352   - String expectedResource = target.getClass().getSimpleName();
353   - String expectedOperation = methodName;
354   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
355   -
356   - interceptor.manage(this.ic);
357   - } catch (SecurityException cause) {
358   - fail();
359   - }
360   - }
361   -
362   - @Test
363   - public void testManageClassAnnotedWithRequiredPermissionAtRequiredPermissionWithDeclaredOperation()
364   - throws Exception {
365   - try {
366   - Object target = new ClassAnnotedWithRequiredPermission();
367   - String methodName = "requiredPermissionWithDeclaredOperation";
368   - String expectedResource = target.getClass().getSimpleName();
369   - String expectedOperation = "insert";
370   - prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
371   -
372   - interceptor.manage(this.ic);
373   - } catch (SecurityException cause) {
374   - fail();
375   - }
376   - }
377   -
378   - /* Other tests */
379   -
380   - @Test
381   - public void testManagePermissionNotAllowed() throws Exception {
382   - try {
383   - Object target = new UnnamedClass();
384   - String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
385   - String expectedResource = "contact";
386   - String expectedOperation = "insert";
387   - prepareMock(target, methodName, expectedResource, expectedOperation, false, true);
388   -
389   - interceptor.manage(this.ic);
390   - fail();
391   - } catch (SecurityException cause) {
392   - }
393   - }
394   -
395   - @Test
396   - public void testUserNotLoggedIn() throws Exception {
397   - try {
398   - Object target = new UnnamedClass();
399   - String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
400   - String expectedResource = "contact";
401   - String expectedOperation = "insert";
402   - prepareMock(target, methodName, expectedResource, expectedOperation, true, false);
403   -
404   - interceptor.manage(this.ic);
405   - fail();
406   - } catch (SecurityException cause) {
407   - }
408   - }
409   -
410   -}
  1 +//package br.gov.frameworkdemoiselle.internal.interceptor;
  2 +//
  3 +//import static org.easymock.EasyMock.createMock;
  4 +//import static org.easymock.EasyMock.expect;
  5 +//import static org.easymock.EasyMock.expectLastCall;
  6 +//import static org.junit.Assert.fail;
  7 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  8 +//import static org.powermock.api.easymock.PowerMock.replay;
  9 +//
  10 +//import java.util.Locale;
  11 +//
  12 +//import javax.enterprise.inject.Instance;
  13 +//import javax.interceptor.InvocationContext;
  14 +//
  15 +//import org.junit.Before;
  16 +//import org.junit.Test;
  17 +//import org.junit.runner.RunWith;
  18 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  19 +//import org.powermock.modules.junit4.PowerMockRunner;
  20 +//import org.slf4j.Logger;
  21 +//
  22 +//import br.gov.frameworkdemoiselle.annotation.Name;
  23 +//import br.gov.frameworkdemoiselle.internal.implementation.CoreBundle;
  24 +//import br.gov.frameworkdemoiselle.security.NotLoggedInException;
  25 +//import br.gov.frameworkdemoiselle.security.RequiredPermission;
  26 +//import br.gov.frameworkdemoiselle.security.SecurityContext;
  27 +//import br.gov.frameworkdemoiselle.security.SecurityException;
  28 +//import br.gov.frameworkdemoiselle.security.User;
  29 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  30 +//
  31 +//@RunWith(PowerMockRunner.class)
  32 +//@PrepareForTest(CoreBundle.class)
  33 +//public class RequiredPermissionInterceptorTest {
  34 +//
  35 +// private RequiredPermissionInterceptor interceptor;
  36 +//
  37 +// private InvocationContext ic;
  38 +//
  39 +// private SecurityContext securityContext;
  40 +//
  41 +// class UnnamedClass {
  42 +//
  43 +// @RequiredPermission
  44 +// public void requiredPermissionWithoutDeclaredResourceAndOperation() {
  45 +// }
  46 +//
  47 +// @RequiredPermission(operation = "insert")
  48 +// public void requiredPermissionWithDeclaredOperation() {
  49 +// }
  50 +//
  51 +// @RequiredPermission(resource = "contact")
  52 +// public void requiredPermissionWithDeclaredResource() {
  53 +// }
  54 +//
  55 +// @RequiredPermission(resource = "contact", operation = "insert")
  56 +// public void requiredPermissionWithDeclaredResourceAndOperation() {
  57 +// }
  58 +// }
  59 +//
  60 +// @Name("contact2")
  61 +// class NamedClass {
  62 +//
  63 +// @RequiredPermission
  64 +// public void requiredPermissionWithoutDeclaredResourceAndOperation() {
  65 +// }
  66 +//
  67 +// @RequiredPermission(operation = "insert")
  68 +// public void requiredPermissionWithDeclaredOperation() {
  69 +// }
  70 +//
  71 +// @RequiredPermission(resource = "contact")
  72 +// public void requiredPermissionWithDeclaredResource() {
  73 +// }
  74 +//
  75 +// @RequiredPermission(resource = "contact", operation = "insert")
  76 +// public void requiredPermissionWithDeclaredResourceAndOperation() {
  77 +// }
  78 +// }
  79 +//
  80 +// @Name("contact2")
  81 +// class NamedClassWithNamedMethods {
  82 +//
  83 +// @Name("delete")
  84 +// @RequiredPermission
  85 +// public void requiredPermissionWithoutDeclaredResourceAndOperation() {
  86 +// }
  87 +//
  88 +// @Name("delete")
  89 +// @RequiredPermission(operation = "insert")
  90 +// public void requiredPermissionWithDeclaredOperation() {
  91 +// }
  92 +//
  93 +// @Name("delete")
  94 +// @RequiredPermission(resource = "contact")
  95 +// public void requiredPermissionWithDeclaredResource() {
  96 +// }
  97 +//
  98 +// @Name("delete")
  99 +// @RequiredPermission(resource = "contact", operation = "insert")
  100 +// public void requiredPermissionWithDeclaredResourceAndOperation() {
  101 +// }
  102 +// }
  103 +//
  104 +// @RequiredPermission
  105 +// class ClassAnnotedWithRequiredPermission {
  106 +//
  107 +// public void withoutRequiredPermissionAnnotation() {
  108 +// }
  109 +//
  110 +// @RequiredPermission(operation = "insert")
  111 +// public void requiredPermissionWithDeclaredOperation() {
  112 +// }
  113 +// }
  114 +//
  115 +// @Before
  116 +// public void setUp() throws Exception {
  117 +// @SuppressWarnings("unchecked")
  118 +// Instance<SecurityContext> securityContextInstance = createMock(Instance.class);
  119 +// Logger logger = createMock(Logger.class);
  120 +//
  121 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  122 +// User user = createMock(User.class);
  123 +//
  124 +// mockStatic(CoreBundle.class);
  125 +// expect(CoreBundle.get()).andReturn(bundle);
  126 +//
  127 +// this.securityContext = createMock(SecurityContext.class);
  128 +// this.ic = createMock(InvocationContext.class);
  129 +//
  130 +// expect(user.getId()).andReturn("UserName").anyTimes();
  131 +// expect(this.securityContext.getUser()).andReturn(user).anyTimes();
  132 +// expect(securityContextInstance.get()).andReturn(securityContext).anyTimes();
  133 +// expect(this.ic.proceed()).andReturn(null);
  134 +// replay(securityContextInstance, user, CoreBundle.class);
  135 +//
  136 +// this.interceptor = new RequiredPermissionInterceptor(securityContextInstance, bundle, logger);
  137 +// }
  138 +//
  139 +// private void prepareMock(Object target, String methodName, String expectedResource, String expectedOperation,
  140 +// boolean hasPermission, boolean isLoggedUser) throws Exception {
  141 +//
  142 +// expect(this.securityContext.isLoggedIn()).andReturn(isLoggedUser).anyTimes();
  143 +//
  144 +// this.securityContext.hasPermission(expectedResource, expectedOperation);
  145 +//
  146 +// if (isLoggedUser) {
  147 +// expectLastCall().andReturn(hasPermission);
  148 +// } else {
  149 +// expectLastCall().andThrow(new NotLoggedInException(""));
  150 +// }
  151 +//
  152 +// expect(this.ic.getTarget()).andReturn(target).anyTimes();
  153 +// expect(this.ic.getMethod()).andReturn(target.getClass().getMethod(methodName)).anyTimes();
  154 +// replay(this.ic, this.securityContext);
  155 +// }
  156 +//
  157 +// /* Testing UnnamedClass */
  158 +//
  159 +// @Test
  160 +// public void testManageUnnamedClassAtRequiredPermissionWithoutDeclaredResourceAndOperationMethod() throws Exception {
  161 +// try {
  162 +// Object target = new UnnamedClass();
  163 +// String methodName = "requiredPermissionWithoutDeclaredResourceAndOperation";
  164 +// String expectedResource = target.getClass().getSimpleName();
  165 +// String expectedOperation = methodName;
  166 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  167 +//
  168 +// interceptor.manage(this.ic);
  169 +// } catch (SecurityException cause) {
  170 +// fail();
  171 +// }
  172 +// }
  173 +//
  174 +// @Test
  175 +// public void testManageUnnamedClassAtRequiredPermissionWithDeclaredOperationMethod() throws Exception {
  176 +// try {
  177 +// Object target = new UnnamedClass();
  178 +// String methodName = "requiredPermissionWithDeclaredOperation";
  179 +// String expectedResource = target.getClass().getSimpleName();
  180 +// String expectedOperation = "insert";
  181 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  182 +//
  183 +// interceptor.manage(this.ic);
  184 +// } catch (SecurityException cause) {
  185 +// fail();
  186 +// }
  187 +// }
  188 +//
  189 +// @Test
  190 +// public void testManageUnnamedClassAtRequiredPermissionWithDeclaredResourceMethod() throws Exception {
  191 +// try {
  192 +// Object target = new UnnamedClass();
  193 +// String methodName = "requiredPermissionWithDeclaredResource";
  194 +// String expectedResource = "contact";
  195 +// String expectedOperation = methodName;
  196 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  197 +//
  198 +// interceptor.manage(this.ic);
  199 +// } catch (SecurityException cause) {
  200 +// fail();
  201 +// }
  202 +// }
  203 +//
  204 +// @Test
  205 +// public void testManageUnnamedClassAtRequiredPermissionWithDeclaredResourceAndOperation() throws Exception {
  206 +// try {
  207 +// Object target = new UnnamedClass();
  208 +// String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
  209 +// String expectedResource = "contact";
  210 +// String expectedOperation = "insert";
  211 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  212 +//
  213 +// interceptor.manage(this.ic);
  214 +// } catch (SecurityException cause) {
  215 +// fail();
  216 +// }
  217 +// }
  218 +//
  219 +// /* Testing NamedClass */
  220 +//
  221 +// @Test
  222 +// public void testManageNamedClassAtRequiredPermissionWithoutDeclaredResourceAndOperationMethod() throws Exception {
  223 +// try {
  224 +// Object target = new NamedClass();
  225 +// String methodName = "requiredPermissionWithoutDeclaredResourceAndOperation";
  226 +// String expectedResource = "contact2";
  227 +// String expectedOperation = methodName;
  228 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  229 +//
  230 +// interceptor.manage(this.ic);
  231 +// } catch (SecurityException cause) {
  232 +// fail();
  233 +// }
  234 +// }
  235 +//
  236 +// @Test
  237 +// public void testManageNamedClassAtRequiredPermissionWithDeclaredOperationMethod() throws Exception {
  238 +// try {
  239 +// Object target = new NamedClass();
  240 +// String methodName = "requiredPermissionWithDeclaredOperation";
  241 +// String expectedResource = "contact2";
  242 +// String expectedOperation = "insert";
  243 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  244 +//
  245 +// interceptor.manage(this.ic);
  246 +// } catch (SecurityException cause) {
  247 +// fail();
  248 +// }
  249 +// }
  250 +//
  251 +// @Test
  252 +// public void testManageNamedClassAtRequiredPermissionWithDeclaredResourceMethod() throws Exception {
  253 +// try {
  254 +// Object target = new NamedClass();
  255 +// String methodName = "requiredPermissionWithDeclaredResource";
  256 +// String expectedResource = "contact";
  257 +// String expectedOperation = methodName;
  258 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  259 +//
  260 +// interceptor.manage(this.ic);
  261 +// } catch (SecurityException cause) {
  262 +// fail();
  263 +// }
  264 +// }
  265 +//
  266 +// @Test
  267 +// public void testManageNamedClassAtRequiredPermissionWithDeclaredResourceAndOperation() throws Exception {
  268 +// try {
  269 +// Object target = new NamedClass();
  270 +// String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
  271 +// String expectedResource = "contact";
  272 +// String expectedOperation = "insert";
  273 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  274 +//
  275 +// interceptor.manage(this.ic);
  276 +// } catch (SecurityException cause) {
  277 +// fail();
  278 +// }
  279 +// }
  280 +//
  281 +// /* Testing NamedClassWithNamedMethods */
  282 +//
  283 +// @Test
  284 +// public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithoutDeclaredResourceAndOperationMethod()
  285 +// throws Exception {
  286 +// try {
  287 +// Object target = new NamedClassWithNamedMethods();
  288 +// String methodName = "requiredPermissionWithoutDeclaredResourceAndOperation";
  289 +// String expectedResource = "contact2";
  290 +// String expectedOperation = "delete";
  291 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  292 +//
  293 +// interceptor.manage(this.ic);
  294 +// } catch (SecurityException cause) {
  295 +// fail();
  296 +// }
  297 +// }
  298 +//
  299 +// @Test
  300 +// public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithDeclaredOperationMethod() throws Exception {
  301 +// try {
  302 +// Object target = new NamedClassWithNamedMethods();
  303 +// String methodName = "requiredPermissionWithDeclaredOperation";
  304 +// String expectedResource = "contact2";
  305 +// String expectedOperation = "insert";
  306 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  307 +//
  308 +// interceptor.manage(this.ic);
  309 +// } catch (SecurityException cause) {
  310 +// fail();
  311 +// }
  312 +// }
  313 +//
  314 +// @Test
  315 +// public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithDeclaredResourceMethod() throws Exception {
  316 +// try {
  317 +// Object target = new NamedClassWithNamedMethods();
  318 +// String methodName = "requiredPermissionWithDeclaredResource";
  319 +// String expectedResource = "contact";
  320 +// String expectedOperation = "delete";
  321 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  322 +//
  323 +// interceptor.manage(this.ic);
  324 +// } catch (SecurityException cause) {
  325 +// fail();
  326 +// }
  327 +// }
  328 +//
  329 +// @Test
  330 +// public void testManageNamedClassWithNamedMethodsAtRequiredPermissionWithDeclaredResourceAndOperation()
  331 +// throws Exception {
  332 +// try {
  333 +// Object target = new NamedClassWithNamedMethods();
  334 +// String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
  335 +// String expectedResource = "contact";
  336 +// String expectedOperation = "insert";
  337 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  338 +//
  339 +// interceptor.manage(this.ic);
  340 +// } catch (SecurityException cause) {
  341 +// fail();
  342 +// }
  343 +// }
  344 +//
  345 +// /* Testing ClassAnnotedWithRequiredPermission */
  346 +//
  347 +// @Test
  348 +// public void testManageClassAnnotedWithRequiredPermissionAtWithoutRequiredPermissionAnnotation() throws Exception {
  349 +// try {
  350 +// Object target = new ClassAnnotedWithRequiredPermission();
  351 +// String methodName = "withoutRequiredPermissionAnnotation";
  352 +// String expectedResource = target.getClass().getSimpleName();
  353 +// String expectedOperation = methodName;
  354 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  355 +//
  356 +// interceptor.manage(this.ic);
  357 +// } catch (SecurityException cause) {
  358 +// fail();
  359 +// }
  360 +// }
  361 +//
  362 +// @Test
  363 +// public void testManageClassAnnotedWithRequiredPermissionAtRequiredPermissionWithDeclaredOperation()
  364 +// throws Exception {
  365 +// try {
  366 +// Object target = new ClassAnnotedWithRequiredPermission();
  367 +// String methodName = "requiredPermissionWithDeclaredOperation";
  368 +// String expectedResource = target.getClass().getSimpleName();
  369 +// String expectedOperation = "insert";
  370 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, true);
  371 +//
  372 +// interceptor.manage(this.ic);
  373 +// } catch (SecurityException cause) {
  374 +// fail();
  375 +// }
  376 +// }
  377 +//
  378 +// /* Other tests */
  379 +//
  380 +// @Test
  381 +// public void testManagePermissionNotAllowed() throws Exception {
  382 +// try {
  383 +// Object target = new UnnamedClass();
  384 +// String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
  385 +// String expectedResource = "contact";
  386 +// String expectedOperation = "insert";
  387 +// prepareMock(target, methodName, expectedResource, expectedOperation, false, true);
  388 +//
  389 +// interceptor.manage(this.ic);
  390 +// fail();
  391 +// } catch (SecurityException cause) {
  392 +// }
  393 +// }
  394 +//
  395 +// @Test
  396 +// public void testUserNotLoggedIn() throws Exception {
  397 +// try {
  398 +// Object target = new UnnamedClass();
  399 +// String methodName = "requiredPermissionWithDeclaredResourceAndOperation";
  400 +// String expectedResource = "contact";
  401 +// String expectedOperation = "insert";
  402 +// prepareMock(target, methodName, expectedResource, expectedOperation, true, false);
  403 +//
  404 +// interceptor.manage(this.ic);
  405 +// fail();
  406 +// } catch (SecurityException cause) {
  407 +// }
  408 +// }
  409 +//
  410 +//}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/interceptor/RequiredRoleInterceptorTest.java
1   -package br.gov.frameworkdemoiselle.internal.interceptor;
2   -
3   -import static org.easymock.EasyMock.expect;
4   -import static org.junit.Assert.fail;
5   -import static org.powermock.api.easymock.PowerMock.mockStatic;
6   -import static org.powermock.api.easymock.PowerMock.replay;
7   -
8   -import java.util.Locale;
9   -
10   -import javax.enterprise.inject.Instance;
11   -import javax.interceptor.InvocationContext;
12   -
13   -import org.easymock.EasyMock;
14   -import org.junit.Before;
15   -import org.junit.Test;
16   -import org.junit.runner.RunWith;
17   -import org.powermock.core.classloader.annotations.PrepareForTest;
18   -import org.powermock.modules.junit4.PowerMockRunner;
19   -import org.slf4j.Logger;
20   -
21   -import br.gov.frameworkdemoiselle.internal.implementation.CoreBundle;
22   -import br.gov.frameworkdemoiselle.security.AuthorizationException;
23   -import br.gov.frameworkdemoiselle.security.NotLoggedInException;
24   -import br.gov.frameworkdemoiselle.security.RequiredRole;
25   -import br.gov.frameworkdemoiselle.security.SecurityContext;
26   -import br.gov.frameworkdemoiselle.security.User;
27   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
28   -
29   -@RunWith(PowerMockRunner.class)
30   -@PrepareForTest(CoreBundle.class)
31   -public class RequiredRoleInterceptorTest {
32   -
33   - private RequiredRoleInterceptor interceptor;
34   -
35   - private InvocationContext ic;
36   -
37   - private SecurityContext securityContext;
38   -
39   - class ClassNotAnnoted {
40   -
41   - @RequiredRole("simpleRoleName")
42   - public void requiredRoleWithSingleRole() {
43   - }
44   -
45   - @RequiredRole({ "firstRole", "secondRole", "thirdRole", "fourthRole", "fifthRole" })
46   - public void requiredRoleWithArrayOfRoles() {
47   - }
48   -
49   - @RequiredRole({ "firstRole, secondRole" })
50   - public void requiredRoleWithArrayOfSingleRoleComma() {
51   - }
52   -
53   - @RequiredRole("firstRole, secondRole")
54   - public void requiredRoleWithSingleRoleComma() {
55   - }
56   -
57   - @RequiredRole("")
58   - public void requiredRoleWithEmptyValue() {
59   - }
60   -
61   - @RequiredRole({})
62   - public void requiredRoleWithEmptyArray() {
63   - }
64   -
65   - @RequiredRole({ "" })
66   - public void requiredRoleWithArrayOfEmptyString() {
67   - }
68   -
69   - public void methodNotAnnoted() {
70   - }
71   - }
72   -
73   - @RequiredRole("classRole")
74   - class ClassAnnotedWithRequiredRole {
75   -
76   - public void withoutRole() {
77   - }
78   -
79   - @RequiredRole("simpleRoleName")
80   - public void requiredRoleWithSingleRole() {
81   - }
82   - }
83   -
84   - @Before
85   - public void setUp() throws Exception {
86   -
87   - @SuppressWarnings("unchecked")
88   - Instance<SecurityContext> securityContextInstance = EasyMock.createMock(Instance.class);
89   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
90   - Logger logger = EasyMock.createMock(Logger.class);
91   - User user = EasyMock.createMock(User.class);
92   -
93   - this.securityContext = EasyMock.createMock(SecurityContext.class);
94   - this.ic = EasyMock.createMock(InvocationContext.class);
95   -
96   - mockStatic(CoreBundle.class);
97   - expect(CoreBundle.get()).andReturn(bundle);
98   -
99   - expect(user.getId()).andReturn("UserName").anyTimes();
100   - expect(this.securityContext.getUser()).andReturn(user).anyTimes();
101   - expect(securityContextInstance.get()).andReturn(securityContext).anyTimes();
102   - expect(this.ic.proceed()).andReturn(null);
103   - replay(securityContextInstance, user, CoreBundle.class);
104   -
105   - this.interceptor = new RequiredRoleInterceptor(securityContextInstance, bundle, logger);
106   - }
107   -
108   - private void prepareMock(Object target, String methodName, String[] expectedRoles, boolean hasHole,
109   - boolean isLoggedUser) throws Exception {
110   -
111   - expect(this.securityContext.isLoggedIn()).andReturn(isLoggedUser).anyTimes();
112   -
113   - for (String role : expectedRoles) {
114   - this.securityContext.hasRole(role);
115   - if (isLoggedUser) {
116   - EasyMock.expectLastCall().andReturn(hasHole);
117   - } else {
118   - EasyMock.expectLastCall().andThrow(new NotLoggedInException(""));
119   - }
120   - }
121   -
122   - expect(this.ic.getTarget()).andReturn(target).anyTimes();
123   - expect(this.ic.getMethod()).andReturn(target.getClass().getMethod(methodName)).anyTimes();
124   - replay(this.ic, this.securityContext);
125   - }
126   -
127   - /*
128   - * Testing ClassNotAnnoted
129   - */
130   - @Test
131   - public void testManageClassNotAnnotedAtRequiredRoleWithSingleRole() throws Exception {
132   - Object target = new ClassNotAnnoted();
133   - String methodName = "requiredRoleWithSingleRole";
134   - String[] expectedRoles = { "simpleRoleName" };
135   - prepareMock(target, methodName, expectedRoles, true, true);
136   -
137   - interceptor.manage(this.ic);
138   - }
139   -
140   - @Test
141   - public void testManageClassNotAnnotedAtRequiredRoleWithArrayOfRoles() throws Exception {
142   - Object target = new ClassNotAnnoted();
143   - String methodName = "requiredRoleWithArrayOfRoles";
144   - String[] expectedRoles = { "firstRole", "secondRole", "thirdRole", "fourthRole", "fifthRole" };
145   - prepareMock(target, methodName, expectedRoles, true, true);
146   -
147   - interceptor.manage(this.ic);
148   - }
149   -
150   - @Test
151   - public void testManageClassNotAnnotedAtRequiredRoleWithArrayOfSingleRoleComma() throws Exception {
152   - Object target = new ClassNotAnnoted();
153   - String methodName = "requiredRoleWithArrayOfSingleRoleComma";
154   - String[] expectedRoles = { "firstRole, secondRole" };
155   - prepareMock(target, methodName, expectedRoles, true, true);
156   -
157   - interceptor.manage(this.ic);
158   - }
159   -
160   - @Test
161   - public void testManageClassNotAnnotedAtRequiredRoleWithSingleRoleComma() throws Exception {
162   - Object target = new ClassNotAnnoted();
163   - String methodName = "requiredRoleWithSingleRoleComma";
164   - String[] expectedRoles = { "firstRole, secondRole" };
165   - prepareMock(target, methodName, expectedRoles, true, true);
166   -
167   - interceptor.manage(this.ic);
168   - }
169   -
170   - @Test
171   - public void testManageClassNotAnnotedAtRequiredRoleWithEmptyValue() throws Exception {
172   - try {
173   - Object target = new ClassNotAnnoted();
174   - String methodName = "requiredRoleWithEmptyValue";
175   - String[] expectedRoles = { "" };
176   - prepareMock(target, methodName, expectedRoles, false, true);
177   -
178   - interceptor.manage(this.ic);
179   - fail();
180   - } catch (AuthorizationException cause) {
181   - }
182   - }
183   -
184   - @Test
185   - public void testManageClassNotAnnotedAtRequiredRoleWithEmptyArray() throws Exception {
186   - try {
187   - Object target = new ClassNotAnnoted();
188   - String methodName = "requiredRoleWithEmptyArray";
189   - String[] expectedRoles = { "" };
190   - prepareMock(target, methodName, expectedRoles, false, true);
191   -
192   - interceptor.manage(this.ic);
193   - fail();
194   - } catch (AuthorizationException cause) {
195   - }
196   - }
197   -
198   - @Test
199   - public void testManageClassNotAnnotedAtRequiredRoleWithArrayOfEmptyString() throws Exception {
200   - try {
201   - Object target = new ClassNotAnnoted();
202   - String methodName = "requiredRoleWithArrayOfEmptyString";
203   - String[] expectedRoles = { "" };
204   - prepareMock(target, methodName, expectedRoles, false, true);
205   -
206   - interceptor.manage(this.ic);
207   - fail();
208   - } catch (AuthorizationException cause) {
209   - }
210   - }
211   -
212   - @Test
213   - public void testManageClassNotAnnotedAtMethodNotAnnoted() throws Exception {
214   - try {
215   - Object target = new ClassNotAnnoted();
216   - String methodName = "methodNotAnnoted";
217   - String[] expectedRoles = { "" };
218   - prepareMock(target, methodName, expectedRoles, false, true);
219   -
220   - interceptor.manage(this.ic);
221   - fail();
222   - } catch (AuthorizationException cause) {
223   - }
224   - }
225   -
226   - /*
227   - * Testing ClassAnnoted
228   - */
229   - @Test
230   - public void testManageClassAnnotedWithRequiredRoleAtWithoutRole() throws Exception {
231   - Object target = new ClassAnnotedWithRequiredRole();
232   - String methodName = "withoutRole";
233   - String[] expectedRoles = { "classRole" };
234   - prepareMock(target, methodName, expectedRoles, true, true);
235   -
236   - interceptor.manage(this.ic);
237   - }
238   -
239   - @Test
240   - public void testManageClassAnnotedWithRequiredRoleAtRequiredRoleWithSingleRole() throws Exception {
241   - Object target = new ClassAnnotedWithRequiredRole();
242   - String methodName = "requiredRoleWithSingleRole";
243   - String[] expectedRoles = { "simpleRoleName" };
244   - prepareMock(target, methodName, expectedRoles, true, true);
245   -
246   - interceptor.manage(this.ic);
247   - }
248   -
249   - /*
250   - * Other tests
251   - */
252   -
253   - @Test
254   - public void testDoesNotHaveSingleRole() throws Exception {
255   - try {
256   - Object target = new ClassNotAnnoted();
257   - String methodName = "requiredRoleWithSingleRole";
258   - String[] expectedRoles = { "simpleRoleName" };
259   - prepareMock(target, methodName, expectedRoles, false, true);
260   -
261   - interceptor.manage(this.ic);
262   - fail();
263   - } catch (AuthorizationException cause) {
264   - }
265   - }
266   -
267   - @Test
268   - public void testUserNotLoggedIn() throws Exception {
269   - try {
270   - Object target = new ClassNotAnnoted();
271   - String methodName = "requiredRoleWithSingleRole";
272   - String[] expectedRoles = { "simpleRoleName" };
273   - prepareMock(target, methodName, expectedRoles, true, false);
274   -
275   - interceptor.manage(this.ic);
276   - fail();
277   - } catch (NotLoggedInException cause) {
278   - }
279   - }
280   -
281   - @Test
282   - public void testDoesNotHaveOneOrMoreRolesOfArray() throws Exception {
283   - Object target = new ClassNotAnnoted();
284   - String methodName = "requiredRoleWithArrayOfRoles";
285   - String[] expectedRoles = { "thirdRole", "fourthRole", "fifthRole" };
286   -
287   - expect(this.securityContext.hasRole("firstRole")).andReturn(false);
288   - expect(this.securityContext.hasRole("secondRole")).andReturn(false);
289   -
290   - prepareMock(target, methodName, expectedRoles, true, true);
291   -
292   - interceptor.manage(this.ic);
293   - }
294   -
295   - @Test
296   - public void testHasMoreRolesThenArray() throws Exception {
297   - Object target = new ClassNotAnnoted();
298   - String methodName = "requiredRoleWithArrayOfRoles";
299   - String[] expectedRoles = { "thirdRole", "fourthRole", "fifthRole" };
300   -
301   - expect(this.securityContext.hasRole("firstRole")).andReturn(false);
302   - expect(this.securityContext.hasRole("secondRole")).andReturn(false);
303   - expect(this.securityContext.hasRole("sixthRole")).andReturn(true);
304   -
305   - prepareMock(target, methodName, expectedRoles, true, true);
306   -
307   - interceptor.manage(this.ic);
308   - }
309   -
310   -}
  1 +//package br.gov.frameworkdemoiselle.internal.interceptor;
  2 +//
  3 +//import static org.easymock.EasyMock.expect;
  4 +//import static org.junit.Assert.fail;
  5 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  6 +//import static org.powermock.api.easymock.PowerMock.replay;
  7 +//
  8 +//import java.util.Locale;
  9 +//
  10 +//import javax.enterprise.inject.Instance;
  11 +//import javax.interceptor.InvocationContext;
  12 +//
  13 +//import org.easymock.EasyMock;
  14 +//import org.junit.Before;
  15 +//import org.junit.Test;
  16 +//import org.junit.runner.RunWith;
  17 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  18 +//import org.powermock.modules.junit4.PowerMockRunner;
  19 +//import org.slf4j.Logger;
  20 +//
  21 +//import br.gov.frameworkdemoiselle.internal.implementation.CoreBundle;
  22 +//import br.gov.frameworkdemoiselle.security.AuthorizationException;
  23 +//import br.gov.frameworkdemoiselle.security.NotLoggedInException;
  24 +//import br.gov.frameworkdemoiselle.security.RequiredRole;
  25 +//import br.gov.frameworkdemoiselle.security.SecurityContext;
  26 +//import br.gov.frameworkdemoiselle.security.User;
  27 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  28 +//
  29 +//@RunWith(PowerMockRunner.class)
  30 +//@PrepareForTest(CoreBundle.class)
  31 +//public class RequiredRoleInterceptorTest {
  32 +//
  33 +// private RequiredRoleInterceptor interceptor;
  34 +//
  35 +// private InvocationContext ic;
  36 +//
  37 +// private SecurityContext securityContext;
  38 +//
  39 +// class ClassNotAnnoted {
  40 +//
  41 +// @RequiredRole("simpleRoleName")
  42 +// public void requiredRoleWithSingleRole() {
  43 +// }
  44 +//
  45 +// @RequiredRole({ "firstRole", "secondRole", "thirdRole", "fourthRole", "fifthRole" })
  46 +// public void requiredRoleWithArrayOfRoles() {
  47 +// }
  48 +//
  49 +// @RequiredRole({ "firstRole, secondRole" })
  50 +// public void requiredRoleWithArrayOfSingleRoleComma() {
  51 +// }
  52 +//
  53 +// @RequiredRole("firstRole, secondRole")
  54 +// public void requiredRoleWithSingleRoleComma() {
  55 +// }
  56 +//
  57 +// @RequiredRole("")
  58 +// public void requiredRoleWithEmptyValue() {
  59 +// }
  60 +//
  61 +// @RequiredRole({})
  62 +// public void requiredRoleWithEmptyArray() {
  63 +// }
  64 +//
  65 +// @RequiredRole({ "" })
  66 +// public void requiredRoleWithArrayOfEmptyString() {
  67 +// }
  68 +//
  69 +// public void methodNotAnnoted() {
  70 +// }
  71 +// }
  72 +//
  73 +// @RequiredRole("classRole")
  74 +// class ClassAnnotedWithRequiredRole {
  75 +//
  76 +// public void withoutRole() {
  77 +// }
  78 +//
  79 +// @RequiredRole("simpleRoleName")
  80 +// public void requiredRoleWithSingleRole() {
  81 +// }
  82 +// }
  83 +//
  84 +// @Before
  85 +// public void setUp() throws Exception {
  86 +//
  87 +// @SuppressWarnings("unchecked")
  88 +// Instance<SecurityContext> securityContextInstance = EasyMock.createMock(Instance.class);
  89 +// ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  90 +// Logger logger = EasyMock.createMock(Logger.class);
  91 +// User user = EasyMock.createMock(User.class);
  92 +//
  93 +// this.securityContext = EasyMock.createMock(SecurityContext.class);
  94 +// this.ic = EasyMock.createMock(InvocationContext.class);
  95 +//
  96 +// mockStatic(CoreBundle.class);
  97 +// expect(CoreBundle.get()).andReturn(bundle);
  98 +//
  99 +// expect(user.getId()).andReturn("UserName").anyTimes();
  100 +// expect(this.securityContext.getUser()).andReturn(user).anyTimes();
  101 +// expect(securityContextInstance.get()).andReturn(securityContext).anyTimes();
  102 +// expect(this.ic.proceed()).andReturn(null);
  103 +// replay(securityContextInstance, user, CoreBundle.class);
  104 +//
  105 +// this.interceptor = new RequiredRoleInterceptor(securityContextInstance, bundle, logger);
  106 +// }
  107 +//
  108 +// private void prepareMock(Object target, String methodName, String[] expectedRoles, boolean hasHole,
  109 +// boolean isLoggedUser) throws Exception {
  110 +//
  111 +// expect(this.securityContext.isLoggedIn()).andReturn(isLoggedUser).anyTimes();
  112 +//
  113 +// for (String role : expectedRoles) {
  114 +// this.securityContext.hasRole(role);
  115 +// if (isLoggedUser) {
  116 +// EasyMock.expectLastCall().andReturn(hasHole);
  117 +// } else {
  118 +// EasyMock.expectLastCall().andThrow(new NotLoggedInException(""));
  119 +// }
  120 +// }
  121 +//
  122 +// expect(this.ic.getTarget()).andReturn(target).anyTimes();
  123 +// expect(this.ic.getMethod()).andReturn(target.getClass().getMethod(methodName)).anyTimes();
  124 +// replay(this.ic, this.securityContext);
  125 +// }
  126 +//
  127 +// /*
  128 +// * Testing ClassNotAnnoted
  129 +// */
  130 +// @Test
  131 +// public void testManageClassNotAnnotedAtRequiredRoleWithSingleRole() throws Exception {
  132 +// Object target = new ClassNotAnnoted();
  133 +// String methodName = "requiredRoleWithSingleRole";
  134 +// String[] expectedRoles = { "simpleRoleName" };
  135 +// prepareMock(target, methodName, expectedRoles, true, true);
  136 +//
  137 +// interceptor.manage(this.ic);
  138 +// }
  139 +//
  140 +// @Test
  141 +// public void testManageClassNotAnnotedAtRequiredRoleWithArrayOfRoles() throws Exception {
  142 +// Object target = new ClassNotAnnoted();
  143 +// String methodName = "requiredRoleWithArrayOfRoles";
  144 +// String[] expectedRoles = { "firstRole", "secondRole", "thirdRole", "fourthRole", "fifthRole" };
  145 +// prepareMock(target, methodName, expectedRoles, true, true);
  146 +//
  147 +// interceptor.manage(this.ic);
  148 +// }
  149 +//
  150 +// @Test
  151 +// public void testManageClassNotAnnotedAtRequiredRoleWithArrayOfSingleRoleComma() throws Exception {
  152 +// Object target = new ClassNotAnnoted();
  153 +// String methodName = "requiredRoleWithArrayOfSingleRoleComma";
  154 +// String[] expectedRoles = { "firstRole, secondRole" };
  155 +// prepareMock(target, methodName, expectedRoles, true, true);
  156 +//
  157 +// interceptor.manage(this.ic);
  158 +// }
  159 +//
  160 +// @Test
  161 +// public void testManageClassNotAnnotedAtRequiredRoleWithSingleRoleComma() throws Exception {
  162 +// Object target = new ClassNotAnnoted();
  163 +// String methodName = "requiredRoleWithSingleRoleComma";
  164 +// String[] expectedRoles = { "firstRole, secondRole" };
  165 +// prepareMock(target, methodName, expectedRoles, true, true);
  166 +//
  167 +// interceptor.manage(this.ic);
  168 +// }
  169 +//
  170 +// @Test
  171 +// public void testManageClassNotAnnotedAtRequiredRoleWithEmptyValue() throws Exception {
  172 +// try {
  173 +// Object target = new ClassNotAnnoted();
  174 +// String methodName = "requiredRoleWithEmptyValue";
  175 +// String[] expectedRoles = { "" };
  176 +// prepareMock(target, methodName, expectedRoles, false, true);
  177 +//
  178 +// interceptor.manage(this.ic);
  179 +// fail();
  180 +// } catch (AuthorizationException cause) {
  181 +// }
  182 +// }
  183 +//
  184 +// @Test
  185 +// public void testManageClassNotAnnotedAtRequiredRoleWithEmptyArray() throws Exception {
  186 +// try {
  187 +// Object target = new ClassNotAnnoted();
  188 +// String methodName = "requiredRoleWithEmptyArray";
  189 +// String[] expectedRoles = { "" };
  190 +// prepareMock(target, methodName, expectedRoles, false, true);
  191 +//
  192 +// interceptor.manage(this.ic);
  193 +// fail();
  194 +// } catch (AuthorizationException cause) {
  195 +// }
  196 +// }
  197 +//
  198 +// @Test
  199 +// public void testManageClassNotAnnotedAtRequiredRoleWithArrayOfEmptyString() throws Exception {
  200 +// try {
  201 +// Object target = new ClassNotAnnoted();
  202 +// String methodName = "requiredRoleWithArrayOfEmptyString";
  203 +// String[] expectedRoles = { "" };
  204 +// prepareMock(target, methodName, expectedRoles, false, true);
  205 +//
  206 +// interceptor.manage(this.ic);
  207 +// fail();
  208 +// } catch (AuthorizationException cause) {
  209 +// }
  210 +// }
  211 +//
  212 +// @Test
  213 +// public void testManageClassNotAnnotedAtMethodNotAnnoted() throws Exception {
  214 +// try {
  215 +// Object target = new ClassNotAnnoted();
  216 +// String methodName = "methodNotAnnoted";
  217 +// String[] expectedRoles = { "" };
  218 +// prepareMock(target, methodName, expectedRoles, false, true);
  219 +//
  220 +// interceptor.manage(this.ic);
  221 +// fail();
  222 +// } catch (AuthorizationException cause) {
  223 +// }
  224 +// }
  225 +//
  226 +// /*
  227 +// * Testing ClassAnnoted
  228 +// */
  229 +// @Test
  230 +// public void testManageClassAnnotedWithRequiredRoleAtWithoutRole() throws Exception {
  231 +// Object target = new ClassAnnotedWithRequiredRole();
  232 +// String methodName = "withoutRole";
  233 +// String[] expectedRoles = { "classRole" };
  234 +// prepareMock(target, methodName, expectedRoles, true, true);
  235 +//
  236 +// interceptor.manage(this.ic);
  237 +// }
  238 +//
  239 +// @Test
  240 +// public void testManageClassAnnotedWithRequiredRoleAtRequiredRoleWithSingleRole() throws Exception {
  241 +// Object target = new ClassAnnotedWithRequiredRole();
  242 +// String methodName = "requiredRoleWithSingleRole";
  243 +// String[] expectedRoles = { "simpleRoleName" };
  244 +// prepareMock(target, methodName, expectedRoles, true, true);
  245 +//
  246 +// interceptor.manage(this.ic);
  247 +// }
  248 +//
  249 +// /*
  250 +// * Other tests
  251 +// */
  252 +//
  253 +// @Test
  254 +// public void testDoesNotHaveSingleRole() throws Exception {
  255 +// try {
  256 +// Object target = new ClassNotAnnoted();
  257 +// String methodName = "requiredRoleWithSingleRole";
  258 +// String[] expectedRoles = { "simpleRoleName" };
  259 +// prepareMock(target, methodName, expectedRoles, false, true);
  260 +//
  261 +// interceptor.manage(this.ic);
  262 +// fail();
  263 +// } catch (AuthorizationException cause) {
  264 +// }
  265 +// }
  266 +//
  267 +// @Test
  268 +// public void testUserNotLoggedIn() throws Exception {
  269 +// try {
  270 +// Object target = new ClassNotAnnoted();
  271 +// String methodName = "requiredRoleWithSingleRole";
  272 +// String[] expectedRoles = { "simpleRoleName" };
  273 +// prepareMock(target, methodName, expectedRoles, true, false);
  274 +//
  275 +// interceptor.manage(this.ic);
  276 +// fail();
  277 +// } catch (NotLoggedInException cause) {
  278 +// }
  279 +// }
  280 +//
  281 +// @Test
  282 +// public void testDoesNotHaveOneOrMoreRolesOfArray() throws Exception {
  283 +// Object target = new ClassNotAnnoted();
  284 +// String methodName = "requiredRoleWithArrayOfRoles";
  285 +// String[] expectedRoles = { "thirdRole", "fourthRole", "fifthRole" };
  286 +//
  287 +// expect(this.securityContext.hasRole("firstRole")).andReturn(false);
  288 +// expect(this.securityContext.hasRole("secondRole")).andReturn(false);
  289 +//
  290 +// prepareMock(target, methodName, expectedRoles, true, true);
  291 +//
  292 +// interceptor.manage(this.ic);
  293 +// }
  294 +//
  295 +// @Test
  296 +// public void testHasMoreRolesThenArray() throws Exception {
  297 +// Object target = new ClassNotAnnoted();
  298 +// String methodName = "requiredRoleWithArrayOfRoles";
  299 +// String[] expectedRoles = { "thirdRole", "fourthRole", "fifthRole" };
  300 +//
  301 +// expect(this.securityContext.hasRole("firstRole")).andReturn(false);
  302 +// expect(this.securityContext.hasRole("secondRole")).andReturn(false);
  303 +// expect(this.securityContext.hasRole("sixthRole")).andReturn(true);
  304 +//
  305 +// prepareMock(target, methodName, expectedRoles, true, true);
  306 +//
  307 +// interceptor.manage(this.ic);
  308 +// }
  309 +//
  310 +//}
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/interceptor/TransactionalInterceptorTest.java
... ... @@ -43,20 +43,13 @@ import static org.junit.Assert.assertEquals;
43 43 import static org.junit.Assert.assertTrue;
44 44 import static org.junit.Assert.fail;
45 45  
46   -import java.util.Locale;
47   -
48   -import javax.enterprise.inject.Instance;
49 46 import javax.interceptor.InvocationContext;
50 47  
51 48 import org.easymock.EasyMock;
52   -import org.junit.Before;
53 49 import org.junit.Test;
54   -import org.slf4j.Logger;
55 50  
56 51 import br.gov.frameworkdemoiselle.DemoiselleException;
57   -import br.gov.frameworkdemoiselle.internal.implementation.TransactionInfo;
58 52 import br.gov.frameworkdemoiselle.transaction.Transaction;
59   -import br.gov.frameworkdemoiselle.util.ResourceBundle;
60 53  
61 54 public class TransactionalInterceptorTest {
62 55  
... ... @@ -73,26 +66,26 @@ public class TransactionalInterceptorTest {
73 66 }
74 67 }
75 68  
76   - @Before
77   - @SuppressWarnings("unchecked")
78   - public void setUp() throws Exception {
79   - Instance<Transaction> transactionInstance = EasyMock.createMock(Instance.class);
80   - Instance<TransactionInfo> transactionContextInstance = EasyMock.createMock(Instance.class);
81   -
82   - Logger logger = EasyMock.createMock(Logger.class);
83   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
84   - transaction = EasyMock.createMock(Transaction.class);
85   - TransactionInfo context = new TransactionInfo();
86   -
87   - this.interceptor = new TransactionalInterceptor(transactionInstance, transactionContextInstance, logger, bundle);
88   - this.ic = EasyMock.createMock(InvocationContext.class);
89   -
90   - expect(transactionInstance.get()).andReturn(transaction).anyTimes();
91   - expect(transactionContextInstance.get()).andReturn(context).anyTimes();
92   - expect(this.ic.proceed()).andReturn(null);
93   - expect(this.ic.getMethod()).andReturn(ClassWithMethod.class.getMethod("method"));
94   - replay(this.ic, transactionInstance, transactionContextInstance);
95   - }
  69 + // @Before
  70 + // @SuppressWarnings("unchecked")
  71 + // public void setUp() throws Exception {
  72 + // Instance<Transaction> transactionInstance = EasyMock.createMock(Instance.class);
  73 + // Instance<TransactionInfo> transactionContextInstance = EasyMock.createMock(Instance.class);
  74 + //
  75 + // Logger logger = EasyMock.createMock(Logger.class);
  76 + // ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  77 + // transaction = EasyMock.createMock(Transaction.class);
  78 + // TransactionInfo context = new TransactionInfo();
  79 + //
  80 + // this.interceptor = new TransactionalInterceptor(transactionInstance, transactionContextInstance, logger, bundle);
  81 + // this.ic = EasyMock.createMock(InvocationContext.class);
  82 + //
  83 + // expect(transactionInstance.get()).andReturn(transaction).anyTimes();
  84 + // expect(transactionContextInstance.get()).andReturn(context).anyTimes();
  85 + // expect(this.ic.proceed()).andReturn(null);
  86 + // expect(this.ic.getMethod()).andReturn(ClassWithMethod.class.getMethod("method"));
  87 + // replay(this.ic, transactionInstance, transactionContextInstance);
  88 + // }
96 89  
97 90 @Test
98 91 public void testManageWithInativeTransactionAndTransactionInterceptorBeginAndDoNotIsMarkedRollback()
... ...
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/producer/ResourceBundleProducerTest.java
... ... @@ -36,16 +36,10 @@
36 36 */
37 37 package br.gov.frameworkdemoiselle.internal.producer;
38 38  
39   -import static org.easymock.EasyMock.expect;
40   -import static org.easymock.EasyMock.replay;
41 39 import static org.junit.Assert.assertTrue;
42 40  
43 41 import java.util.Locale;
44 42  
45   -import javax.enterprise.inject.spi.Annotated;
46   -import javax.enterprise.inject.spi.InjectionPoint;
47   -
48   -import org.easymock.EasyMock;
49 43 import org.junit.After;
50 44 import org.junit.AfterClass;
51 45 import org.junit.Assert;
... ... @@ -54,7 +48,6 @@ import org.junit.BeforeClass;
54 48 import org.junit.Test;
55 49  
56 50 import br.gov.frameworkdemoiselle.DemoiselleException;
57   -import br.gov.frameworkdemoiselle.annotation.Name;
58 51  
59 52 public class ResourceBundleProducerTest {
60 53  
... ... @@ -89,42 +82,42 @@ public class ResourceBundleProducerTest {
89 82 }
90 83 }
91 84  
92   - @Test
93   - public void testCreateNullInjectionPoint() {
94   - ResourceBundleProducer factory = new ResourceBundleProducer();
95   - Assert.assertNotNull(factory.create((InjectionPoint) null, Locale.getDefault()));
96   - }
97   -
98   - @Test
99   - public void testCreateInjectionPointNameAnnoted() {
100   - Name name = EasyMock.createMock(Name.class);
101   - expect(name.value()).andReturn("demoiselle-core-bundle");
102   - replay(name);
103   -
104   - Annotated annotated = EasyMock.createMock(Annotated.class);
105   - expect(annotated.getAnnotation(Name.class)).andReturn(name).anyTimes();
106   - expect(annotated.isAnnotationPresent(Name.class)).andReturn(true).anyTimes();
107   - replay(annotated);
108   -
109   - InjectionPoint ip = EasyMock.createMock(InjectionPoint.class);
110   - expect(ip.getAnnotated()).andReturn(annotated).anyTimes();
111   - replay(ip);
112   -
113   - ResourceBundleProducer factory = new ResourceBundleProducer();
114   - Assert.assertNotNull(factory.create(ip, Locale.getDefault()));
115   - }
116   -
117   - @Test
118   - public void testCreateInjectionPointNameUnannoted() {
119   - Annotated annotated = EasyMock.createMock(Annotated.class);
120   - expect(annotated.isAnnotationPresent(Name.class)).andReturn(false).anyTimes();
121   - replay(annotated);
122   -
123   - InjectionPoint ip = EasyMock.createMock(InjectionPoint.class);
124   - expect(ip.getAnnotated()).andReturn(annotated).anyTimes();
125   - replay(ip);
126   -
127   - ResourceBundleProducer factory = new ResourceBundleProducer();
128   - Assert.assertNotNull(factory.create(ip, Locale.getDefault()));
129   - }
  85 + // @Test
  86 + // public void testCreateNullInjectionPoint() {
  87 + // ResourceBundleProducer factory = new ResourceBundleProducer();
  88 + // Assert.assertNotNull(factory.create((InjectionPoint) null, Locale.getDefault()));
  89 + // }
  90 +
  91 + // @Test
  92 + // public void testCreateInjectionPointNameAnnoted() {
  93 + // Name name = EasyMock.createMock(Name.class);
  94 + // expect(name.value()).andReturn("demoiselle-core-bundle");
  95 + // replay(name);
  96 + //
  97 + // Annotated annotated = EasyMock.createMock(Annotated.class);
  98 + // expect(annotated.getAnnotation(Name.class)).andReturn(name).anyTimes();
  99 + // expect(annotated.isAnnotationPresent(Name.class)).andReturn(true).anyTimes();
  100 + // replay(annotated);
  101 + //
  102 + // InjectionPoint ip = EasyMock.createMock(InjectionPoint.class);
  103 + // expect(ip.getAnnotated()).andReturn(annotated).anyTimes();
  104 + // replay(ip);
  105 + //
  106 + // ResourceBundleProducer factory = new ResourceBundleProducer();
  107 + // Assert.assertNotNull(factory.create(ip, Locale.getDefault()));
  108 + // }
  109 +
  110 + // @Test
  111 + // public void testCreateInjectionPointNameUnannoted() {
  112 + // Annotated annotated = EasyMock.createMock(Annotated.class);
  113 + // expect(annotated.isAnnotationPresent(Name.class)).andReturn(false).anyTimes();
  114 + // replay(annotated);
  115 + //
  116 + // InjectionPoint ip = EasyMock.createMock(InjectionPoint.class);
  117 + // expect(ip.getAnnotated()).andReturn(annotated).anyTimes();
  118 + // replay(ip);
  119 + //
  120 + // ResourceBundleProducer factory = new ResourceBundleProducer();
  121 + // Assert.assertNotNull(factory.create(ip, Locale.getDefault()));
  122 + // }
130 123 }
... ...
impl/core/src/test/resources/configuration-with-array.properties 0 → 100644
... ... @@ -0,0 +1,50 @@
  1 +# Demoiselle Framework
  2 +# Copyright (C) 2010 SERPRO
  3 +# ----------------------------------------------------------------------------
  4 +# This file is part of Demoiselle Framework.
  5 +#
  6 +# Demoiselle Framework is free software; you can redistribute it and/or
  7 +# modify it under the terms of the GNU Lesser General Public License version 3
  8 +# as published by the Free Software Foundation.
  9 +#
  10 +# This program is distributed in the hope that it will be useful,
  11 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13 +# GNU General Public License for more details.
  14 +#
  15 +# You should have received a copy of the GNU Lesser General Public License version 3
  16 +# along with this program; if not, see <http://www.gnu.org/licenses/>
  17 +# or write to the Free Software Foundation, Inc., 51 Franklin Street,
  18 +# Fifth Floor, Boston, MA 02110-1301, USA.
  19 +# ----------------------------------------------------------------------------
  20 +# Este arquivo é parte do Framework Demoiselle.
  21 +#
  22 +# O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  23 +# modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  24 +# do Software Livre (FSF).
  25 +#
  26 +# Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  27 +# GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  28 +# APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  29 +# para maiores detalhes.
  30 +#
  31 +# Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  32 +# "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  33 +# ou escreva para a Fundação do Software Livre (FSF) Inc.,
  34 +# 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  35 +
  36 +integer.array = 2147483647, 10993, 12330, 129399
  37 +short.array = 32767, 123, 5512, 4212
  38 +byte.array = 127, 12, 51, 123, 11, 5, 1, -12
  39 +boolean.array = true, false
  40 +long.array = 9223372036854775807, 0901920390123, 1235234523, 134230094, 66123413423
  41 +float.array = 3.4028235E38, 34.244, 2412.423444, 513.234, 10000.000
  42 +double.array = 1.7976931348623157E308, 1231234.00120349192348123, 1234123512341.9134828348238
  43 +big.decimal.array = 16578.69899, 48787.548877788, 4487787.559
  44 +big.integer.array = 1998987987897, 89789498171, 21474836475
  45 +calendar.array = 2012-06-14 10:10:00, 2012-07-14 10:10:00, 2012-06-15 18:10:00
  46 +date.array = 2012-08-14 18:10:50, 2012-07-14 10:10:00, 2012-06-15 18:10:00
  47 +color.array = #808080, #cccccc, #ABCCCC
  48 +locale.array = en, pt_br, ca
  49 +url.array = http://www.test.com, https://test.of.test.com, ftp://192.168.0.1
  50 +string.array = Test, One, Two
... ...
impl/core/src/test/resources/configuration-with-array.xml 0 → 100644
... ... @@ -0,0 +1,145 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!--
  3 + Demoiselle Framework
  4 + Copyright (C) 2010 SERPRO
  5 + ============================================================================
  6 + This file is part of Demoiselle Framework.
  7 +
  8 + Demoiselle Framework is free software; you can redistribute it and/or
  9 + modify it under the terms of the GNU Lesser General Public License version 3
  10 + as published by the Free Software Foundation.
  11 +
  12 + This program is distributed in the hope that it will be useful,
  13 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15 + GNU General Public License for more details.
  16 +
  17 + You should have received a copy of the GNU Lesser General Public License version 3
  18 + along with this program; if not, see <http://www.gnu.org/licenses/>
  19 + or write to the Free Software Foundation, Inc., 51 Franklin Street,
  20 + Fifth Floor, Boston, MA 02110-1301, USA.
  21 + ============================================================================
  22 + Este arquivo é parte do Framework Demoiselle.
  23 +
  24 + O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  25 + modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  26 + do Software Livre (FSF).
  27 +
  28 + Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  29 + GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  30 + APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  31 + para maiores detalhes.
  32 +
  33 + Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  34 + "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  35 + ou escreva para a Fundação do Software Livre (FSF) Inc.,
  36 + 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  37 +-->
  38 +
  39 +<configuration>
  40 +
  41 + <integer>
  42 + <array>2147483647</array>
  43 + <array>10993</array>
  44 + <array>12330</array>
  45 + <array>129399</array>
  46 + </integer>
  47 +
  48 + <short>
  49 + <array>32767</array>
  50 + <array>123</array>
  51 + <array>5512</array>
  52 + <array>4212</array>
  53 + </short>
  54 +
  55 + <byte>
  56 + <array>127</array>
  57 + <array>12</array>
  58 + <array>51</array>
  59 + <array>123</array>
  60 + <array>11</array>
  61 + <array>5</array>
  62 + <array>1</array>
  63 + <array>-12</array>
  64 + </byte>
  65 +
  66 + <boolean>
  67 + <array>true</array>
  68 + <array>false</array>
  69 + </boolean>
  70 +
  71 + <long>
  72 + <array>9223372036854775807</array>
  73 + <array>0901920390123</array>
  74 + <array>1235234523</array>
  75 + <array>134230094</array>
  76 + <array>66123413423</array>
  77 + </long>
  78 +
  79 + <float>
  80 + <array>3.4028235E38</array>
  81 + <array>34.244</array>
  82 + <array>2412.423444</array>
  83 + <array>513.234</array>
  84 + <array>10000.000</array>
  85 + </float>
  86 +
  87 + <double>
  88 + <array>1.7976931348623157E308</array>
  89 + <array>1231234.00120349192348123</array>
  90 + <array>1234123512341.9134828348238</array>
  91 + </double>
  92 +
  93 + <big>
  94 + <decimal>
  95 + <array>16578.69899</array>
  96 + <array>48787.548877788</array>
  97 + <array>4487787.559</array>
  98 + </decimal>
  99 + </big>
  100 +
  101 + <big>
  102 + <integer>
  103 + <array>1998987987897</array>
  104 + <array>89789498171</array>
  105 + <array>21474836475</array>
  106 + </integer>
  107 + </big>
  108 +
  109 + <calendar>
  110 + <array>2012-06-14 10:10:00</array>
  111 + <array>2012-07-14 10:10:00</array>
  112 + <array>2012-06-15 18:10:00</array>
  113 + </calendar>
  114 +
  115 + <date>
  116 + <array>2012-08-14 18:10:50</array>
  117 + <array>2012-07-14 10:10:00</array>
  118 + <array>2012-06-15 18:10:00</array>
  119 + </date>
  120 +
  121 + <color>
  122 + <array>#808080</array>
  123 + <array>#cccccc</array>
  124 + <array> #ABCCCC</array>
  125 + </color>
  126 +
  127 + <locale>
  128 + <array>en</array>
  129 + <array>pt_br</array>
  130 + <array>ca</array>
  131 + </locale>
  132 +
  133 + <url>
  134 + <array>http://www.test.com</array>
  135 + <array>https://test.of.test.com</array>
  136 + <array>ftp://192.168.0.1</array>
  137 + </url>
  138 +
  139 + <string>
  140 + <array>Test</array>
  141 + <array>One</array>
  142 + <array>Two</array>
  143 + </string>
  144 +
  145 +</configuration>
0 146 \ No newline at end of file
... ...
impl/core/src/test/resources/configuration-with-list.properties 0 → 100644
... ... @@ -0,0 +1,50 @@
  1 +# Demoiselle Framework
  2 +# Copyright (C) 2010 SERPRO
  3 +# ----------------------------------------------------------------------------
  4 +# This file is part of Demoiselle Framework.
  5 +#
  6 +# Demoiselle Framework is free software; you can redistribute it and/or
  7 +# modify it under the terms of the GNU Lesser General Public License version 3
  8 +# as published by the Free Software Foundation.
  9 +#
  10 +# This program is distributed in the hope that it will be useful,
  11 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13 +# GNU General Public License for more details.
  14 +#
  15 +# You should have received a copy of the GNU Lesser General Public License version 3
  16 +# along with this program; if not, see <http://www.gnu.org/licenses/>
  17 +# or write to the Free Software Foundation, Inc., 51 Franklin Street,
  18 +# Fifth Floor, Boston, MA 02110-1301, USA.
  19 +# ----------------------------------------------------------------------------
  20 +# Este arquivo é parte do Framework Demoiselle.
  21 +#
  22 +# O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  23 +# modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  24 +# do Software Livre (FSF).
  25 +#
  26 +# Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  27 +# GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  28 +# APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  29 +# para maiores detalhes.
  30 +#
  31 +# Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  32 +# "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  33 +# ou escreva para a Fundação do Software Livre (FSF) Inc.,
  34 +# 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  35 +
  36 +integer.list = 2147483647, 10993, 12330, 129399
  37 +short.list = 32767, 123, 5512, 4212
  38 +byte.list = 127, 12, 51, 123, 11, 5, 1, -12
  39 +boolean.list = true, false
  40 +long.list = 9223372036854775807, 0901920390123, 1235234523, 134230094, 66123413423
  41 +float.list = 3.4028235E38, 34.244, 2412.423444, 513.234, 10000.000
  42 +double.list = 1.7976931348623157E308, 1231234.00120349192348123, 1234123512341.9134828348238
  43 +big.decimal.list = 16578.69899, 48787.548877788, 4487787.559
  44 +big.integer.list = 1998987987897, 89789498171, 21474836475
  45 +calendar.list = 2012-06-14 10:10:00, 2012-07-14 10:10:00, 2012-06-15 18:10:00
  46 +date.list = 2012-08-14 18:10:50, 2012-07-14 10:10:00, 2012-06-15 18:10:00
  47 +color.list = #808080, #cccccc, #ABCCCC
  48 +locale.list = en, pt_br, ca
  49 +url.list = http://www.test.com, https://test.of.test.com, ftp://192.168.0.1
  50 +string.list = Test, One, Two
... ...
impl/core/src/test/resources/configuration-with-list.xml 0 → 100644
... ... @@ -0,0 +1,145 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!--
  3 + Demoiselle Framework
  4 + Copyright (C) 2010 SERPRO
  5 + ============================================================================
  6 + This file is part of Demoiselle Framework.
  7 +
  8 + Demoiselle Framework is free software; you can redistribute it and/or
  9 + modify it under the terms of the GNU Lesser General Public License version 3
  10 + as published by the Free Software Foundation.
  11 +
  12 + This program is distributed in the hope that it will be useful,
  13 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15 + GNU General Public License for more details.
  16 +
  17 + You should have received a copy of the GNU Lesser General Public License version 3
  18 + along with this program; if not, see <http://www.gnu.org/licenses/>
  19 + or write to the Free Software Foundation, Inc., 51 Franklin Street,
  20 + Fifth Floor, Boston, MA 02110-1301, USA.
  21 + ============================================================================
  22 + Este arquivo é parte do Framework Demoiselle.
  23 +
  24 + O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  25 + modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  26 + do Software Livre (FSF).
  27 +
  28 + Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  29 + GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  30 + APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  31 + para maiores detalhes.
  32 +
  33 + Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  34 + "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  35 + ou escreva para a Fundação do Software Livre (FSF) Inc.,
  36 + 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  37 +-->
  38 +
  39 +<configuration>
  40 +
  41 + <integer>
  42 + <list>2147483647</list>
  43 + <list>10993</list>
  44 + <list>12330</list>
  45 + <list>129399</list>
  46 + </integer>
  47 +
  48 + <short>
  49 + <list>32767</list>
  50 + <list>123</list>
  51 + <list>5512</list>
  52 + <list>4212</list>
  53 + </short>
  54 +
  55 + <byte>
  56 + <list>127</list>
  57 + <list>12</list>
  58 + <list>51</list>
  59 + <list>123</list>
  60 + <list>11</list>
  61 + <list>5</list>
  62 + <list>1</list>
  63 + <list>-12</list>
  64 + </byte>
  65 +
  66 + <boolean>
  67 + <list>true</list>
  68 + <list>false</list>
  69 + </boolean>
  70 +
  71 + <long>
  72 + <list>9223372036854775807</list>
  73 + <list>0901920390123</list>
  74 + <list>1235234523</list>
  75 + <list>134230094</list>
  76 + <list>66123413423</list>
  77 + </long>
  78 +
  79 + <float>
  80 + <list>3.4028235E38</list>
  81 + <list>34.244</list>
  82 + <list>2412.423444</list>
  83 + <list>513.234</list>
  84 + <list>10000.000</list>
  85 + </float>
  86 +
  87 + <double>
  88 + <list>1.7976931348623157E308</list>
  89 + <list>1231234.00120349192348123</list>
  90 + <list>1234123512341.9134828348238</list>
  91 + </double>
  92 +
  93 + <big>
  94 + <decimal>
  95 + <list>16578.69899</list>
  96 + <list>48787.548877788</list>
  97 + <list>4487787.559</list>
  98 + </decimal>
  99 + </big>
  100 +
  101 + <big>
  102 + <integer>
  103 + <list>1998987987897</list>
  104 + <list>89789498171</list>
  105 + <list>21474836475</list>
  106 + </integer>
  107 + </big>
  108 +
  109 + <calendar>
  110 + <list>2012-06-14 10:10:00</list>
  111 + <list>2012-07-14 10:10:00</list>
  112 + <list>2012-06-15 18:10:00</list>
  113 + </calendar>
  114 +
  115 + <date>
  116 + <list>2012-08-14 18:10:50</list>
  117 + <list>2012-07-14 10:10:00</list>
  118 + <list>2012-06-15 18:10:00</list>
  119 + </date>
  120 +
  121 + <color>
  122 + <list>#808080</list>
  123 + <list>#cccccc</list>
  124 + <list> #ABCCCC</list>
  125 + </color>
  126 +
  127 + <locale>
  128 + <list>en</list>
  129 + <list>pt_br</list>
  130 + <list>ca</list>
  131 + </locale>
  132 +
  133 + <url>
  134 + <list>http://www.test.com</list>
  135 + <list>https://test.of.test.com</list>
  136 + <list>ftp://192.168.0.1</list>
  137 + </url>
  138 +
  139 + <string>
  140 + <list>Test</list>
  141 + <list>One</list>
  142 + <list>Two</list>
  143 + </string>
  144 +
  145 +</configuration>
0 146 \ No newline at end of file
... ...
impl/core/src/test/resources/configuration.xml
1   -<?xml version="1.0" encoding="UTF-8"?>
2 1 <!--
3 2 Demoiselle Framework
4 3 Copyright (C) 2010 SERPRO
... ...
impl/core/src/test/resources/demoiselle.xml
1   -<?xml version="1.0" encoding="UTF-8"?>
2 1 <!--
3 2 Demoiselle Framework
4 3 Copyright (C) 2010 SERPRO
... ...
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerFactoryProducer.java
1 1 package br.gov.frameworkdemoiselle.internal.producer;
2 2  
3 3 import java.io.Serializable;
  4 +import java.util.ArrayList;
4 5 import java.util.Collections;
5 6 import java.util.HashMap;
6 7 import java.util.Map;
... ... @@ -38,29 +39,45 @@ public class EntityManagerFactoryProducer implements Serializable {
38 39 @Name("demoiselle-jpa-bundle")
39 40 private ResourceBundle bundle;
40 41  
41   - private final Map<String, EntityManagerFactory> cache = Collections
42   - .synchronizedMap(new HashMap<String, EntityManagerFactory>());
  42 + // private final Map<String, EntityManagerFactory> cache = Collections
  43 + // .synchronizedMap(new HashMap<String, EntityManagerFactory>());
  44 +
  45 + /*
  46 + * private final Map<Key, EntityManagerFactory> cache = Collections .synchronizedMap(new HashMap<Key,
  47 + * EntityManagerFactory>());
  48 + */
  49 +
  50 + private final Map<ClassLoader, Map<String, EntityManagerFactory>> factoryCache = Collections
  51 + .synchronizedMap(new HashMap<ClassLoader, Map<String, EntityManagerFactory>>());
43 52  
44 53 public EntityManagerFactory create(String persistenceUnit) {
45 54 EntityManagerFactory factory;
46 55  
47   - if (cache.containsKey(persistenceUnit)) {
48   - factory = cache.get(persistenceUnit);
  56 + ClassLoader c = Thread.currentThread().getContextClassLoader();
  57 +
  58 + if (factoryCache.containsKey(c)) {
  59 + Map<String, EntityManagerFactory> localCache = factoryCache.get(c);
  60 + if (localCache.containsKey(persistenceUnit)) {
  61 + factory = localCache.get(persistenceUnit);
  62 + } else {
  63 + factory = Persistence.createEntityManagerFactory(persistenceUnit);
  64 + localCache.put(persistenceUnit, factory);
  65 + }
49 66 } else {
  67 + Map<String, EntityManagerFactory> localCache = new HashMap<String, EntityManagerFactory>();
50 68 factory = Persistence.createEntityManagerFactory(persistenceUnit);
51   - cache.put(persistenceUnit, factory);
  69 + localCache.put(persistenceUnit, factory);
  70 + factoryCache.put(c, localCache);
52 71 }
53 72  
54 73 return factory;
55 74 }
56 75  
57   - @PostConstruct
58   - public void init() {
59   - ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
60   -
  76 + private String[] loadPersistenceUnitFromClassloader(ClassLoader classLoader) {
61 77 try {
  78 + ArrayList<String> persistenceUnits = new ArrayList<String>();
62 79 DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
63   - Document document = documentBuilder.parse(contextClassLoader.getResourceAsStream(ENTITY_MANAGER_RESOURCE));
  80 + Document document = documentBuilder.parse(classLoader.getResourceAsStream(ENTITY_MANAGER_RESOURCE));
64 81 NodeList nodes = document.getElementsByTagName("persistence-unit");
65 82  
66 83 String persistenceUnit = "";
... ... @@ -70,30 +87,57 @@ public class EntityManagerFactoryProducer implements Serializable {
70 87  
71 88 if ("".equals(persistenceUnit)) {
72 89 throw new DemoiselleException(bundle.getString("can-not-get-persistence-unit-from-persistence"));
  90 + } else {
  91 + persistenceUnits.add(persistenceUnit);
73 92 }
  93 + // logger.debug(bundle.getString("persistence-unit-name-found",
  94 + // persistenceUnit));
74 95  
75   - create(persistenceUnit);
76   - logger.debug(bundle.getString("persistence-unit-name-found", persistenceUnit));
77 96 }
78 97  
  98 + return persistenceUnits.toArray(new String[0]);
  99 +
79 100 } catch (Exception cause) {
80 101 String message = bundle.getString("can-not-get-persistence-unit-from-persistence");
81 102 logger.error(message, cause);
82 103  
83 104 throw new DemoiselleException(message, cause);
84 105 }
  106 +
  107 + }
  108 +
  109 + @PostConstruct
  110 + public void loadPersistenceUnits() {
  111 + ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
  112 + for (String persistenceUnit : loadPersistenceUnitFromClassloader(contextClassLoader)) {
  113 + create(persistenceUnit);
  114 + logger.debug(bundle.getString("persistence-unit-name-found", persistenceUnit));
  115 + }
85 116 }
86 117  
87 118 @PreDestroy
88 119 public void close() {
89   - for (EntityManagerFactory factory : cache.values()) {
90   - factory.close();
  120 + for (Map<String, EntityManagerFactory> factories : factoryCache.values()) {
  121 + for (EntityManagerFactory factory : factories.values()) {
  122 + factory.close();
  123 + }
91 124 }
92   -
93   - cache.clear();
  125 + factoryCache.clear();
94 126 }
95 127  
96 128 public Map<String, EntityManagerFactory> getCache() {
97   - return cache;
  129 + ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  130 + Map<String, EntityManagerFactory> result = factoryCache.get(classLoader);
  131 +
  132 + if (result == null || result.isEmpty()) {
  133 + logger.debug(bundle.getString("entity-manager-factory-not-found-in-cache"));
  134 + for (String persistenceUnit : loadPersistenceUnitFromClassloader(classLoader)) {
  135 + create(persistenceUnit);
  136 + result = factoryCache.get(classLoader);
  137 + }
  138 + }
  139 +
  140 + return result;
98 141 }
  142 +
99 143 }
... ...
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java
... ... @@ -39,6 +39,8 @@ package br.gov.frameworkdemoiselle.template;
39 39 import java.lang.reflect.Field;
40 40 import java.util.ArrayList;
41 41 import java.util.List;
  42 +import java.util.regex.Matcher;
  43 +import java.util.regex.Pattern;
42 44  
43 45 import javax.enterprise.inject.Instance;
44 46 import javax.inject.Inject;
... ... @@ -46,9 +48,9 @@ import javax.persistence.Basic;
46 48 import javax.persistence.Column;
47 49 import javax.persistence.EntityManager;
48 50 import javax.persistence.Enumerated;
49   -import javax.persistence.PersistenceContext;
50 51 import javax.persistence.Query;
51 52 import javax.persistence.TransactionRequiredException;
  53 +import javax.persistence.TypedQuery;
52 54 import javax.persistence.criteria.CriteriaBuilder;
53 55 import javax.persistence.criteria.CriteriaQuery;
54 56 import javax.persistence.criteria.Predicate;
... ... @@ -78,7 +80,6 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
78 80  
79 81 private static final long serialVersionUID = 1L;
80 82  
81   -// @PersistenceContext
82 83 private EntityManager entityManager;
83 84  
84 85 @Inject
... ... @@ -105,10 +106,10 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
105 106 }
106 107  
107 108 protected EntityManager getEntityManager() {
108   - if(this.entityManager == null) {
  109 + if (this.entityManager == null) {
109 110 this.entityManager = Beans.getReference(EntityManager.class);
110 111 }
111   -
  112 +
112 113 return this.entityManager;
113 114 }
114 115  
... ... @@ -117,6 +118,7 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
117 118 PaginationContext context = paginationContext.get();
118 119 pagination = context.getPagination(getBeanClass());
119 120 }
  121 +
120 122 return pagination;
121 123 }
122 124  
... ... @@ -132,6 +134,7 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
132 134 if (cause instanceof TransactionRequiredException) {
133 135 String message = bundle.get().getString("no-transaction-active", "frameworkdemoiselle.transaction.class",
134 136 Configuration.DEFAULT_RESOURCE);
  137 +
135 138 throw new DemoiselleException(message, cause);
136 139  
137 140 } else {
... ... @@ -164,31 +167,80 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
164 167 }
165 168  
166 169 @Override
167   - @SuppressWarnings("unchecked")
168 170 public List<T> findAll() {
169   - final String jpql = "select this from " + getBeanClass().getSimpleName() + " this";
170   - final Query query = getEntityManager().createQuery(jpql);
171   -
172   - final Pagination pagination = getPagination();
173   - if (pagination != null) {
174   - pagination.setTotalResults(this.countAll().intValue());
175   - query.setFirstResult(pagination.getFirstResult());
176   - query.setMaxResults(pagination.getPageSize());
  171 + return findByJPQL("select this from " + getBeanClass().getSimpleName() + " this");
  172 + }
  173 +
  174 + /**
  175 + * Search JPQL integrated into the context of paging
  176 + *
  177 + * @param jpql
  178 + * - query in syntax JPQL
  179 + * @return a list of entities
  180 + */
  181 + protected List<T> findByJPQL(String jpql) {
  182 + TypedQuery<T> listQuery = getEntityManager().createQuery(jpql, getBeanClass());
  183 +
  184 + if (getPagination() != null) {
  185 + String countQuery = createCountQuery(jpql);
  186 + Query query = getEntityManager().createQuery(countQuery);
  187 + Number cResults = (Number) query.getSingleResult();
  188 + getPagination().setTotalResults(cResults.intValue());
  189 + listQuery.setFirstResult(getPagination().getFirstResult());
  190 + listQuery.setMaxResults(getPagination().getPageSize());
  191 + }
  192 +
  193 + return listQuery.getResultList();
  194 + }
  195 +
  196 + /**
  197 + * Search CriteriaQuery integrated into the context of paging
  198 + *
  199 + * @param criteriaQuery
  200 + * - structure CriteriaQuery
  201 + * @return a list of entities
  202 + */
  203 + public List<T> findByCriteriaQuery(CriteriaQuery<T> criteriaQuery) {
  204 + TypedQuery<T> listQuery = getEntityManager().createQuery(criteriaQuery);
  205 +
  206 + if (getPagination() != null) {
  207 + CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
  208 + CriteriaQuery<Long> countQuery = builder.createQuery(Long.class);
  209 + countQuery.select(builder.count(countQuery.from(getBeanClass())));
  210 + countQuery.where(criteriaQuery.getRestriction());
  211 + getEntityManager().createQuery(countQuery);
  212 + getPagination().setTotalResults((int) (getEntityManager().createQuery(countQuery).getSingleResult() + 0));
  213 + listQuery.setFirstResult(getPagination().getFirstResult());
  214 + listQuery.setMaxResults(getPagination().getPageSize());
177 215 }
178 216  
179   - List<T> lista = query.getResultList();
180   - return lista;
  217 + return listQuery.getResultList();
181 218 }
182 219  
183 220 /**
184   - * Retrieves the number of persisted objects for the current class type.
  221 + * Converts a query into a count query
185 222 *
186   - * @return the row count
  223 + * @param query
  224 + * @return
187 225 */
188   - private Long countAll() {
189   - final Query query = getEntityManager().createQuery(
190   - "select count(this) from " + beanClass.getSimpleName() + " this");
191   - return (Long) query.getSingleResult();
  226 + private String createCountQuery(String query) {
  227 + Matcher matcher = Pattern.compile("[Ss][Ee][Ll][Ee][Cc][Tt](.+)[Ff][Rr][Oo][Mm]").matcher(query);
  228 +
  229 + if (matcher.find()) {
  230 + String group = matcher.group(1).trim();
  231 + query = query.replaceFirst(group, "COUNT(" + group + ")");
  232 + matcher = Pattern.compile("[Oo][Rr][Dd][Ee][Rr](.+)").matcher(query);
  233 +
  234 + if (matcher.find()) {
  235 + group = matcher.group(0);
  236 + query = query.replaceFirst(group, "");
  237 + }
  238 +
  239 + return query;
  240 +
  241 + } else {
  242 + throw new DemoiselleException(bundle.get().getString("malformed-jpql"));
  243 + }
192 244 }
193 245  
194 246 /**
... ... @@ -219,7 +271,6 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
219 271 * @return an instance of {@code CriteriaQuery}
220 272 */
221 273 private CriteriaQuery<T> createCriteriaByExample(final T example) {
222   -
223 274 final CriteriaBuilder builder = getCriteriaBuilder();
224 275 final CriteriaQuery<T> query = builder.createQuery(getBeanClass());
225 276 final Root<T> entity = query.from(getBeanClass());
... ... @@ -228,7 +279,6 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
228 279 final Field[] fields = example.getClass().getDeclaredFields();
229 280  
230 281 for (Field field : fields) {
231   -
232 282 if (!field.isAnnotationPresent(Column.class) && !field.isAnnotationPresent(Basic.class)
233 283 && !field.isAnnotationPresent(Enumerated.class)) {
234 284 continue;
... ... @@ -239,10 +289,13 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
239 289 try {
240 290 field.setAccessible(true);
241 291 value = field.get(example);
  292 +
242 293 } catch (IllegalArgumentException e) {
243 294 continue;
  295 +
244 296 } catch (IllegalAccessException e) {
245 297 continue;
  298 +
246 299 }
247 300  
248 301 if (value == null) {
... ... @@ -252,6 +305,7 @@ public class JPACrud&lt;T, I&gt; implements Crud&lt;T, I&gt; {
252 305 final Predicate pred = builder.equal(entity.get(field.getName()), value);
253 306 predicates.add(pred);
254 307 }
  308 +
255 309 return query.where(predicates.toArray(new Predicate[0])).select(entity);
256 310 }
257 311  
... ...
impl/extension/jpa/src/main/resources/demoiselle-jpa-bundle.properties
... ... @@ -34,6 +34,7 @@
34 34 # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
35 35  
36 36 entity-manager-was-created=Gerenciador de entidades criado a partir da unidade de persist\u00EAncia "{0}".
  37 +entity-manager-factory-not-found-in-cache=Entity Manager Factory n\u00E3o encontrado para contexto atual, criando um agora.
37 38 operation-not-supported=Esta operação não é suportada.
38 39 getting-persistence-unit-from-properties=Obtendo a unidade de persist\u00EAncia a partir do arquivo de configura\u00E7\u00E3o "{0}".
39 40 getting-persistence-unit-from-persistence=Obtendo a unidade de persist\u00EAncia a partir do arquivo "persistence.xml".
... ... @@ -41,4 +42,5 @@ can-not-get-persistence-unit-from-persistence=N\u00E3o foi poss\u00EDvel obter a
41 42 more-than-one-persistence-unit-defined=Existe mais de uma unidade de persist\u00EAncia definida. Utilize @{0} no ponto de inje\u00E7\u00E3o ou defina o atributo "frameworkdemoiselle.persistence.unit.name" no arquivo demoiselle.properties.
42 43 persistence-unit-name-found=Unidade de persist\u00EAncia "{0}" encontrada.
43 44 entity-manager-closed=O gerenciador de entidades foi fechado.
44   -no-transaction-active=Nenhuma transa\u00E7\u00E3o est\u00E1 ativa, verifique a configura\u00E7\u00E3o "{0}" no arquivo "{1}" e defina a sua estrat\u00E9gia de transa\u00E7\u00E3o.
45 45 \ No newline at end of file
  46 +no-transaction-active=Nenhuma transa\u00E7\u00E3o est\u00E1 ativa, verifique a configura\u00E7\u00E3o "{0}" no arquivo "{1}" e defina a sua estrat\u00E9gia de transa\u00E7\u00E3o.
  47 +malformed-jpql=Consulta JPQL mal formada para pagina\u00E7\u00E3o de dados.
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/configuration/EntityManagerConfigTest.java
... ... @@ -70,7 +70,7 @@ public class EntityManagerConfigTest {
70 70 @Before
71 71 public void setUp() throws Exception {
72 72 Logger logger = PowerMock.createMock(Logger.class);
73   - ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());;
  73 + ResourceBundle bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
74 74  
75 75 ConfigurationLoader configurationLoader = new ConfigurationLoader();
76 76  
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerFactoryProducerTest.java
... ... @@ -40,7 +40,7 @@ public class EntityManagerFactoryProducerTest {
40 40 @Before
41 41 public void setUp() {
42 42 logger = createMock(Logger.class);
43   - bundle = new ResourceBundleProducer().create("demoiselle-jpa-bundle", Locale.getDefault());
  43 + bundle = ResourceBundleProducer.create("demoiselle-jpa-bundle", Locale.getDefault());
44 44 producer = new EntityManagerFactoryProducer();
45 45 cache = Collections.synchronizedMap(new HashMap<String, EntityManagerFactory>());
46 46 setInternalState(producer, Map.class, cache);
... ... @@ -72,14 +72,14 @@ public class EntityManagerFactoryProducerTest {
72 72 expect(Persistence.createEntityManagerFactory("pu1")).andReturn(emFactory);
73 73 replay(Persistence.class);
74 74  
75   - producer.init();
  75 + producer.loadPersistenceUnits();
76 76 Assert.assertEquals(emFactory, cache.get("pu1"));
77 77 }
78 78  
79 79 @Test
80 80 public void testInitWithError() {
81 81 try {
82   - producer.init();
  82 + producer.loadPersistenceUnits();
83 83 Assert.fail();
84 84 }catch(DemoiselleException cause) {
85 85 Assert.assertTrue(true);
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducerTest.java
... ... @@ -106,7 +106,7 @@ public class EntityManagerProducerTest {
106 106 replay(emf, Persistence.class);
107 107  
108 108 producer = new EntityManagerProducer();
109   - bundle = new ResourceBundleProducer().create("demoiselle-jpa-bundle", Locale.getDefault());
  109 + bundle = ResourceBundleProducer.create("demoiselle-jpa-bundle", Locale.getDefault());
110 110 logger = createMock(Logger.class);
111 111  
112 112 setInternalState(producer, ResourceBundle.class, bundle);
... ...
impl/extension/jpa/src/test/java/br/gov/frameworkdemoiselle/template/JPACrudTest.java
... ... @@ -129,28 +129,37 @@ public class JPACrudTest {
129 129 this.contactDAO.delete(this.contact.getId());
130 130 verify(this.entityManager);
131 131 }
132   -
  132 +
  133 + private TypedQuery<Contact> makeTypedQuery() {
  134 + @SuppressWarnings("unchecked")
  135 + TypedQuery<Contact> typeQuery = EasyMock.createMock(TypedQuery.class);
  136 + expect(typeQuery.setFirstResult(EasyMock.anyInt())).andReturn(null);
  137 + expect(typeQuery.setMaxResults(EasyMock.anyInt())).andReturn(null);
  138 + expect(typeQuery.getResultList()).andReturn(createContacts(1));
  139 + return typeQuery;
  140 + }
  141 +
133 142 @Test
134 143 public void testCountAll() {
135 144  
136 145 Pagination pagination = new PaginationImpl();
  146 + pagination.setPageSize(10);
137 147 PaginationContext actualContext = PowerMock.createMock(PaginationContext.class);
138 148 expect(actualContext.getPagination(Contact.class)).andReturn(pagination);
139 149 @SuppressWarnings("unchecked")
140 150 Instance<PaginationContext> paginationContext = PowerMock.createMock(Instance.class);
141 151 expect(paginationContext.get()).andReturn(actualContext);
142 152 setInternalState(this.contactDAO, "paginationContext", paginationContext);
  153 +
  154 + TypedQuery<Contact> typeQuery = makeTypedQuery();
143 155  
144 156 Query query = EasyMock.createMock(Query.class);
145   - expect(query.setFirstResult(EasyMock.anyInt())).andReturn(query);
146   - expect(query.setMaxResults(EasyMock.anyInt())).andReturn(query);
147 157 expect(query.getSingleResult()).andReturn(10L);
  158 +
  159 + expect(this.entityManager.createQuery("select this from Contact this", Contact.class)).andReturn(typeQuery);
  160 + expect(this.entityManager.createQuery("SELECT COUNT(THIS) FROM CONTACT THIS")).andReturn(query);
148 161  
149   - expect(this.entityManager.createQuery("select this from Contact this")).andReturn(query);
150   - expect(this.entityManager.createQuery("select count(this) from Contact this")).andReturn(query);
151   - expect(query.getResultList()).andReturn(createContacts(1));
152   -
153   - replayAll(query, this.entityManager, paginationContext);
  162 + replayAll(typeQuery, query, this.entityManager, paginationContext);
154 163  
155 164 List<Contact> find = this.contactDAO.findAll();
156 165  
... ... @@ -171,11 +180,13 @@ public class JPACrudTest {
171 180 expect(paginationContext.get()).andReturn(actualContext);
172 181 setInternalState(this.contactDAO, "paginationContext", paginationContext);
173 182  
  183 + TypedQuery<Contact> typeQuery = makeTypedQuery();
  184 +
174 185 Query query = EasyMock.createMock(Query.class);
175 186  
176 187 expect(query.getSingleResult()).andThrow(new DemoiselleException(""));
177   - expect(this.entityManager.createQuery("select this from Contact this")).andReturn(query);
178   - expect(this.entityManager.createQuery("select count(this) from Contact this")).andReturn(query);
  188 + expect(this.entityManager.createQuery("select this from Contact this", Contact.class)).andReturn(typeQuery);
  189 + expect(this.entityManager.createQuery("SELECT COUNT(THIS) FROM CONTACT THIS")).andReturn(query);
179 190  
180 191 replayAll(query, this.entityManager, paginationContext);
181 192  
... ... @@ -280,27 +291,31 @@ public class JPACrudTest {
280 291  
281 292 @Test
282 293 public void testFindAll() {
283   -
  294 +
  295 + Pagination pagination = new PaginationImpl();
  296 + pagination.setPageSize(10);
284 297 PaginationContext actualContext = PowerMock.createMock(PaginationContext.class);
285   - expect(actualContext.getPagination(Contact.class)).andReturn(null);
  298 + expect(actualContext.getPagination(Contact.class)).andReturn(pagination);
286 299 @SuppressWarnings("unchecked")
287 300 Instance<PaginationContext> paginationContext = PowerMock.createMock(Instance.class);
288 301 expect(paginationContext.get()).andReturn(actualContext);
289 302 setInternalState(this.contactDAO, "paginationContext", paginationContext);
  303 +
  304 + TypedQuery<Contact> typeQuery = makeTypedQuery();
290 305  
291 306 Query query = EasyMock.createMock(Query.class);
292   - // expect(query.setFirstResult(EasyMock.anyInt())).andReturn(query);
293   - // expect(query.setMaxResults(EasyMock.anyInt())).andReturn(query);
294   - expect(this.entityManager.createQuery("select this from Contact this")).andReturn(query);
295   - expect(query.getResultList()).andReturn(createContacts(1));
  307 + expect(query.getSingleResult()).andReturn(10L);
  308 +
  309 + expect(this.entityManager.createQuery("select this from Contact this", Contact.class)).andReturn(typeQuery);
  310 + expect(this.entityManager.createQuery("SELECT COUNT(THIS) FROM CONTACT THIS")).andReturn(query);
296 311  
297   - replayAll(query, this.entityManager, paginationContext);
  312 + replayAll(typeQuery, query, this.entityManager, paginationContext);
298 313  
299 314 List<Contact> find = this.contactDAO.findAll();
300 315  
301 316 assertEquals(1, find.size());
302 317 assertTrue(find.iterator().next().getId().equals(1L));
303   -
  318 +
304 319 verifyAll();
305 320 }
306 321  
... ... @@ -313,12 +328,15 @@ public class JPACrudTest {
313 328 Instance<PaginationContext> paginationContext = PowerMock.createMock(Instance.class);
314 329 expect(paginationContext.get()).andReturn(actualContext);
315 330 setInternalState(this.contactDAO, "paginationContext", paginationContext);
  331 +
  332 + @SuppressWarnings("unchecked")
  333 + TypedQuery<Contact> typeQuery = EasyMock.createMock(TypedQuery.class);
  334 + expect(typeQuery.getResultList()).andThrow(new DemoiselleException(""));
316 335  
317 336 Query query = EasyMock.createMock(Query.class);
318   - expect(this.entityManager.createQuery("select this from Contact this")).andReturn(query);
319   - expect(query.getResultList()).andThrow(new DemoiselleException(""));
  337 + expect(this.entityManager.createQuery("select this from Contact this", Contact.class)).andReturn(typeQuery);
320 338  
321   - replayAll(query, this.entityManager, paginationContext);
  339 + replayAll(typeQuery, query, this.entityManager, paginationContext);
322 340  
323 341 try {
324 342 this.contactDAO.findAll();
... ...
impl/extension/jpa/src/test/resources/demoiselle-jpa-bundle.properties
... ... @@ -34,6 +34,7 @@
34 34 # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
35 35  
36 36 entity-manager-was-created=Gerenciador de entidades criado a partir da unidade de persist\u00EAncia "{0}".
  37 +entity-manager-factory-not-found-in-cache=Entity Manager Factory n\u00E3o encontrado para contexto atual, criando um agora.
37 38 operation-not-supported=Esta operação não é suportada.
38 39 getting-persistence-unit-from-properties=Obtendo a unidade de persist\u00EAncia a partir do arquivo de configura\u00E7\u00E3o "{0}".
39 40 getting-persistence-unit-from-persistence=Obtendo a unidade de persist\u00EAncia a partir do arquivo "persistence.xml".
... ...
impl/extension/jpa/src/test/resources/empty-persistence.xml
1   -<?xml version="1.0" encoding="UTF-8"?>
2 1 <!--
3 2 Demoiselle Framework
4 3 Copyright (C) 2010 SERPRO
... ... @@ -35,6 +34,9 @@
35 34 ou escreva para a Fundação do Software Livre (FSF) Inc.,
36 35 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
37 36 -->
38   -<persistence>
  37 +<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  38 + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  39 +
  40 + <persistence-unit name=""></persistence-unit>
39 41  
40 42 </persistence>
41 43 \ No newline at end of file
... ...
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/util/ServletContextListener.java
... ... @@ -1,19 +0,0 @@
1   -package br.gov.frameworkdemoiselle.util;
2   -
3   -import javax.servlet.ServletContextEvent;
4   -
5   -import br.gov.frameworkdemoiselle.internal.bootstrap.ShutdownBootstrap;
6   -import br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap;
7   -
8   -public class ServletContextListener implements javax.servlet.ServletContextListener {
9   -
10   - @Override
11   - public void contextInitialized(ServletContextEvent event) {
12   - StartupBootstrap.startup();
13   - }
14   -
15   - @Override
16   - public void contextDestroyed(ServletContextEvent event) {
17   - ShutdownBootstrap.shutdown();
18   - }
19   -}
impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/implementation/AuthenticationExceptionHandlerTest.java
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.implementation;
38   -
39   -import static junit.framework.Assert.assertFalse;
40   -import static junit.framework.Assert.assertTrue;
41   -import static org.easymock.EasyMock.expect;
42   -import static org.powermock.api.easymock.PowerMock.createMock;
43   -import static org.powermock.api.easymock.PowerMock.expectLastCall;
44   -import static org.powermock.api.easymock.PowerMock.mockStatic;
45   -import static org.powermock.api.easymock.PowerMock.replayAll;
46   -import static org.powermock.api.easymock.PowerMock.verifyAll;
47   -
48   -import java.util.ArrayList;
49   -import java.util.Collection;
50   -
51   -import javax.faces.context.ExceptionHandler;
52   -import javax.faces.event.ExceptionQueuedEvent;
53   -import javax.faces.event.ExceptionQueuedEventContext;
54   -
55   -import org.junit.Before;
56   -import org.junit.Test;
57   -import org.junit.runner.RunWith;
58   -import org.powermock.core.classloader.annotations.PrepareForTest;
59   -import org.powermock.modules.junit4.PowerMockRunner;
60   -
61   -import br.gov.frameworkdemoiselle.security.NotLoggedInException;
62   -import br.gov.frameworkdemoiselle.util.Beans;
63   -
64   -@RunWith(PowerMockRunner.class)
65   -@PrepareForTest({ Beans.class, CoreBundle.class })
66   -public class AuthenticationExceptionHandlerTest {
67   -
68   - private AuthenticationExceptionHandler handler;
69   -
70   - private ExceptionQueuedEventContext eventContext;
71   -
72   - private Collection<ExceptionQueuedEvent> events;
73   -
74   - @Before
75   - public void setUp() {
76   -
77   - mockStatic(Beans.class);
78   -
79   - events = new ArrayList<ExceptionQueuedEvent>();
80   - ExceptionHandler jsfExceptionHandler = createMock(ExceptionHandler.class);
81   - handler = new AuthenticationExceptionHandler(jsfExceptionHandler);
82   - eventContext = createMock(ExceptionQueuedEventContext.class);
83   - ExceptionQueuedEvent event = createMock(ExceptionQueuedEvent.class);
84   -
85   - expect(event.getSource()).andReturn(eventContext);
86   - expect(handler.getUnhandledExceptionQueuedEvents()).andReturn(events).times(2);
87   -
88   - events.add(event);
89   -
90   - }
91   -
92   - @Test
93   - public void testHandleNotLoggedInException() {
94   -
95   - NotLoggedInException exception = new NotLoggedInException("");
96   -
97   - SecurityObserver observer = createMock(SecurityObserver.class);
98   - expect(Beans.getReference(SecurityObserver.class)).andReturn(observer);
99   - expect(eventContext.getException()).andReturn(exception);
100   -
101   - observer.redirectToLoginPage();
102   - expectLastCall();
103   -
104   - replayAll();
105   -
106   - handler.handle();
107   -
108   - assertTrue(events.isEmpty());
109   -
110   - verifyAll();
111   -
112   - }
113   -
114   - @Test
115   - public void testHandleAnyException() {
116   -
117   - Exception exception = new Exception();
118   -
119   - expect(eventContext.getException()).andReturn(exception);
120   -
121   - handler.getWrapped().handle();
122   - expectLastCall();
123   -
124   - replayAll();
125   -
126   - handler.handle();
127   -
128   - assertFalse(events.isEmpty());
129   -
130   - verifyAll();
131   -
132   - }
133   -
134   -}
  1 +///*
  2 +// * Demoiselle Framework
  3 +// * Copyright (C) 2010 SERPRO
  4 +// * ----------------------------------------------------------------------------
  5 +// * This file is part of Demoiselle Framework.
  6 +// *
  7 +// * Demoiselle Framework is free software; you can redistribute it and/or
  8 +// * modify it under the terms of the GNU Lesser General Public License version 3
  9 +// * as published by the Free Software Foundation.
  10 +// *
  11 +// * This program is distributed in the hope that it will be useful,
  12 +// * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 +// * GNU General Public License for more details.
  15 +// *
  16 +// * You should have received a copy of the GNU Lesser General Public License version 3
  17 +// * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 +// * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 +// * Fifth Floor, Boston, MA 02110-1301, USA.
  20 +// * ----------------------------------------------------------------------------
  21 +// * Este arquivo é parte do Framework Demoiselle.
  22 +// *
  23 +// * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 +// * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 +// * do Software Livre (FSF).
  26 +// *
  27 +// * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 +// * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 +// * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 +// * para maiores detalhes.
  31 +// *
  32 +// * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 +// * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 +// * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 +// */
  37 +//package br.gov.frameworkdemoiselle.internal.implementation;
  38 +//
  39 +//import static junit.framework.Assert.assertFalse;
  40 +//import static junit.framework.Assert.assertTrue;
  41 +//import static org.easymock.EasyMock.expect;
  42 +//import static org.powermock.api.easymock.PowerMock.createMock;
  43 +//import static org.powermock.api.easymock.PowerMock.expectLastCall;
  44 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  45 +//import static org.powermock.api.easymock.PowerMock.replayAll;
  46 +//import static org.powermock.api.easymock.PowerMock.verifyAll;
  47 +//
  48 +//import java.util.ArrayList;
  49 +//import java.util.Collection;
  50 +//
  51 +//import javax.faces.context.ExceptionHandler;
  52 +//import javax.faces.event.ExceptionQueuedEvent;
  53 +//import javax.faces.event.ExceptionQueuedEventContext;
  54 +//
  55 +//import org.junit.Before;
  56 +//import org.junit.Test;
  57 +//import org.junit.runner.RunWith;
  58 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  59 +//import org.powermock.modules.junit4.PowerMockRunner;
  60 +//
  61 +//import br.gov.frameworkdemoiselle.security.NotLoggedInException;
  62 +//import br.gov.frameworkdemoiselle.util.Beans;
  63 +//
  64 +//@RunWith(PowerMockRunner.class)
  65 +//@PrepareForTest({ Beans.class, CoreBundle.class })
  66 +//public class AuthenticationExceptionHandlerTest {
  67 +//
  68 +// private AuthenticationExceptionHandler handler;
  69 +//
  70 +// private ExceptionQueuedEventContext eventContext;
  71 +//
  72 +// private Collection<ExceptionQueuedEvent> events;
  73 +//
  74 +// @Before
  75 +// public void setUp() {
  76 +//
  77 +// mockStatic(Beans.class);
  78 +//
  79 +// events = new ArrayList<ExceptionQueuedEvent>();
  80 +// ExceptionHandler jsfExceptionHandler = createMock(ExceptionHandler.class);
  81 +// handler = new AuthenticationExceptionHandler(jsfExceptionHandler);
  82 +// eventContext = createMock(ExceptionQueuedEventContext.class);
  83 +// ExceptionQueuedEvent event = createMock(ExceptionQueuedEvent.class);
  84 +//
  85 +// expect(event.getSource()).andReturn(eventContext);
  86 +// expect(handler.getUnhandledExceptionQueuedEvents()).andReturn(events).times(2);
  87 +//
  88 +// events.add(event);
  89 +//
  90 +// }
  91 +//
  92 +// @Test
  93 +// public void testHandleNotLoggedInException() {
  94 +//
  95 +// NotLoggedInException exception = new NotLoggedInException("");
  96 +//
  97 +// SecurityObserver observer = createMock(SecurityObserver.class);
  98 +// expect(Beans.getReference(SecurityObserver.class)).andReturn(observer);
  99 +// expect(eventContext.getException()).andReturn(exception);
  100 +//
  101 +// observer.redirectToLoginPage();
  102 +// expectLastCall();
  103 +//
  104 +// replayAll();
  105 +//
  106 +// handler.handle();
  107 +//
  108 +// assertTrue(events.isEmpty());
  109 +//
  110 +// verifyAll();
  111 +//
  112 +// }
  113 +//
  114 +// @Test
  115 +// public void testHandleAnyException() {
  116 +//
  117 +// Exception exception = new Exception();
  118 +//
  119 +// expect(eventContext.getException()).andReturn(exception);
  120 +//
  121 +// handler.getWrapped().handle();
  122 +// expectLastCall();
  123 +//
  124 +// replayAll();
  125 +//
  126 +// handler.handle();
  127 +//
  128 +// assertFalse(events.isEmpty());
  129 +//
  130 +// verifyAll();
  131 +//
  132 +// }
  133 +//
  134 +//}
... ...
impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/implementation/AuthorizationExceptionHandlerTest.java
1   -/*
2   - * Demoiselle Framework
3   - * Copyright (C) 2010 SERPRO
4   - * ----------------------------------------------------------------------------
5   - * This file is part of Demoiselle Framework.
6   - *
7   - * Demoiselle Framework is free software; you can redistribute it and/or
8   - * modify it under the terms of the GNU Lesser General Public License version 3
9   - * as published by the Free Software Foundation.
10   - *
11   - * This program is distributed in the hope that it will be useful,
12   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14   - * GNU General Public License for more details.
15   - *
16   - * You should have received a copy of the GNU Lesser General Public License version 3
17   - * along with this program; if not, see <http://www.gnu.org/licenses/>
18   - * or write to the Free Software Foundation, Inc., 51 Franklin Street,
19   - * Fifth Floor, Boston, MA 02110-1301, USA.
20   - * ----------------------------------------------------------------------------
21   - * Este arquivo é parte do Framework Demoiselle.
22   - *
23   - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
24   - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
25   - * do Software Livre (FSF).
26   - *
27   - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
28   - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
29   - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
30   - * para maiores detalhes.
31   - *
32   - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
33   - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
34   - * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35   - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36   - */
37   -package br.gov.frameworkdemoiselle.internal.implementation;
38   -
39   -import static junit.framework.Assert.assertFalse;
40   -import static junit.framework.Assert.assertTrue;
41   -import static org.easymock.EasyMock.expect;
42   -import static org.powermock.api.easymock.PowerMock.createMock;
43   -import static org.powermock.api.easymock.PowerMock.expectLastCall;
44   -import static org.powermock.api.easymock.PowerMock.mockStatic;
45   -import static org.powermock.api.easymock.PowerMock.replayAll;
46   -import static org.powermock.api.easymock.PowerMock.verifyAll;
47   -
48   -import java.util.ArrayList;
49   -import java.util.Collection;
50   -
51   -import javax.faces.context.ExceptionHandler;
52   -import javax.faces.context.FacesContext;
53   -import javax.faces.event.ExceptionQueuedEvent;
54   -import javax.faces.event.ExceptionQueuedEventContext;
55   -import javax.faces.event.PhaseId;
56   -
57   -import org.junit.Before;
58   -import org.junit.Test;
59   -import org.junit.runner.RunWith;
60   -import org.powermock.api.easymock.PowerMock;
61   -import org.powermock.core.classloader.annotations.PrepareForTest;
62   -import org.powermock.modules.junit4.PowerMockRunner;
63   -
64   -import br.gov.frameworkdemoiselle.security.AuthorizationException;
65   -import br.gov.frameworkdemoiselle.util.Faces;
66   -
67   -@RunWith(PowerMockRunner.class)
68   -@PrepareForTest({ FacesContext.class, CoreBundle.class, Faces.class })
69   -public class AuthorizationExceptionHandlerTest {
70   -
71   - private AuthorizationExceptionHandler handler;
72   -
73   - private ExceptionQueuedEventContext eventContext;
74   -
75   - private Collection<ExceptionQueuedEvent> events;
76   -
77   - private FacesContext facesContext;
78   -
79   - @Before
80   - public void setUp() {
81   -
82   - mockStatic(FacesContext.class);
83   -
84   - events = new ArrayList<ExceptionQueuedEvent>();
85   - ExceptionHandler jsfExceptionHandler = createMock(ExceptionHandler.class);
86   - handler = new AuthorizationExceptionHandler(jsfExceptionHandler);
87   - eventContext = createMock(ExceptionQueuedEventContext.class);
88   - ExceptionQueuedEvent event = createMock(ExceptionQueuedEvent.class);
89   - facesContext = PowerMock.createMock(FacesContext.class);
90   -
91   - expect(event.getSource()).andReturn(eventContext);
92   - events.add(event);
93   - expect(handler.getUnhandledExceptionQueuedEvents()).andReturn(events).times(2);
94   - expect(FacesContext.getCurrentInstance()).andReturn(facesContext).anyTimes();
95   -
96   -
97   - }
98   -
99   - @Test
100   - public void testHandleAnAuthorizationExceptionNotOnRenderResponse() {
101   -
102   - mockStatic(Faces.class);
103   -
104   -// ResourceBundle bundle = new ResourceBundle(ResourceBundle.getBundle("demoiselle-core-bundle"));
105   -
106   - AuthorizationException exception = new AuthorizationException("");
107   - PhaseId phaseId = PowerMock.createMock(PhaseId.class);
108   -
109   - expect(eventContext.getException()).andReturn(exception);
110   - expect(facesContext.getCurrentPhaseId()).andReturn(phaseId);
111   -
112   - Faces.addMessage(exception);
113   - expectLastCall();
114   -
115   - replayAll();
116   -
117   - handler.handle();
118   -
119   - assertTrue(events.isEmpty());
120   -
121   - verifyAll();
122   -
123   - }
124   -
125   - @Test
126   - public void testHandleAnAuthorizationExceptionOnRenderResponse() {
127   -
128   -// ResourceBundle bundle = new ResourceBundle(ResourceBundle.getBundle("demoiselle-core-bundle"));
129   -
130   - AuthorizationException exception = new AuthorizationException("");
131   - PhaseId phaseId = PhaseId.RENDER_RESPONSE;
132   -
133   - expect(eventContext.getException()).andReturn(exception);
134   - expect(facesContext.getCurrentPhaseId()).andReturn(phaseId);
135   -
136   - handler.getWrapped().handle();
137   - expectLastCall();
138   -
139   - replayAll();
140   -
141   - handler.handle();
142   -
143   - assertFalse(events.isEmpty());
144   -
145   - verifyAll();
146   -
147   - }
148   -
149   - @Test
150   - public void testHandleAnyException() {
151   -
152   - Exception exception = new Exception();
153   - PhaseId phaseId = PowerMock.createMock(PhaseId.class);
154   -
155   - expect(eventContext.getException()).andReturn(exception);
156   - expect(facesContext.getCurrentPhaseId()).andReturn(phaseId);
157   -
158   - handler.getWrapped().handle();
159   - expectLastCall();
160   -
161   - replayAll();
162   -
163   - handler.handle();
164   -
165   - assertFalse(events.isEmpty());
166   -
167   - verifyAll();
168   -
169   - }
170   -
171   -}
  1 +///*
  2 +// * Demoiselle Framework
  3 +// * Copyright (C) 2010 SERPRO
  4 +// * ----------------------------------------------------------------------------
  5 +// * This file is part of Demoiselle Framework.
  6 +// *
  7 +// * Demoiselle Framework is free software; you can redistribute it and/or
  8 +// * modify it under the terms of the GNU Lesser General Public License version 3
  9 +// * as published by the Free Software Foundation.
  10 +// *
  11 +// * This program is distributed in the hope that it will be useful,
  12 +// * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 +// * GNU General Public License for more details.
  15 +// *
  16 +// * You should have received a copy of the GNU Lesser General Public License version 3
  17 +// * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 +// * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 +// * Fifth Floor, Boston, MA 02110-1301, USA.
  20 +// * ----------------------------------------------------------------------------
  21 +// * Este arquivo é parte do Framework Demoiselle.
  22 +// *
  23 +// * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 +// * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 +// * do Software Livre (FSF).
  26 +// *
  27 +// * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 +// * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 +// * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 +// * para maiores detalhes.
  31 +// *
  32 +// * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 +// * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 +// * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 +// */
  37 +//package br.gov.frameworkdemoiselle.internal.implementation;
  38 +//
  39 +//import static junit.framework.Assert.assertFalse;
  40 +//import static junit.framework.Assert.assertTrue;
  41 +//import static org.easymock.EasyMock.expect;
  42 +//import static org.powermock.api.easymock.PowerMock.createMock;
  43 +//import static org.powermock.api.easymock.PowerMock.expectLastCall;
  44 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  45 +//import static org.powermock.api.easymock.PowerMock.replayAll;
  46 +//import static org.powermock.api.easymock.PowerMock.verifyAll;
  47 +//
  48 +//import java.util.ArrayList;
  49 +//import java.util.Collection;
  50 +//
  51 +//import javax.faces.context.ExceptionHandler;
  52 +//import javax.faces.context.FacesContext;
  53 +//import javax.faces.event.ExceptionQueuedEvent;
  54 +//import javax.faces.event.ExceptionQueuedEventContext;
  55 +//import javax.faces.event.PhaseId;
  56 +//
  57 +//import org.junit.Before;
  58 +//import org.junit.Test;
  59 +//import org.junit.runner.RunWith;
  60 +//import org.powermock.api.easymock.PowerMock;
  61 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  62 +//import org.powermock.modules.junit4.PowerMockRunner;
  63 +//
  64 +//import br.gov.frameworkdemoiselle.security.AuthorizationException;
  65 +//import br.gov.frameworkdemoiselle.util.Faces;
  66 +//
  67 +//@RunWith(PowerMockRunner.class)
  68 +//@PrepareForTest({ FacesContext.class, CoreBundle.class, Faces.class })
  69 +//public class AuthorizationExceptionHandlerTest {
  70 +//
  71 +// private AuthorizationExceptionHandler handler;
  72 +//
  73 +// private ExceptionQueuedEventContext eventContext;
  74 +//
  75 +// private Collection<ExceptionQueuedEvent> events;
  76 +//
  77 +// private FacesContext facesContext;
  78 +//
  79 +// @Before
  80 +// public void setUp() {
  81 +//
  82 +// mockStatic(FacesContext.class);
  83 +//
  84 +// events = new ArrayList<ExceptionQueuedEvent>();
  85 +// ExceptionHandler jsfExceptionHandler = createMock(ExceptionHandler.class);
  86 +// handler = new AuthorizationExceptionHandler(jsfExceptionHandler);
  87 +// eventContext = createMock(ExceptionQueuedEventContext.class);
  88 +// ExceptionQueuedEvent event = createMock(ExceptionQueuedEvent.class);
  89 +// facesContext = PowerMock.createMock(FacesContext.class);
  90 +//
  91 +// expect(event.getSource()).andReturn(eventContext);
  92 +// events.add(event);
  93 +// expect(handler.getUnhandledExceptionQueuedEvents()).andReturn(events).times(2);
  94 +// expect(FacesContext.getCurrentInstance()).andReturn(facesContext).anyTimes();
  95 +//
  96 +//
  97 +// }
  98 +//
  99 +// @Test
  100 +// public void testHandleAnAuthorizationExceptionNotOnRenderResponse() {
  101 +//
  102 +// mockStatic(Faces.class);
  103 +//
  104 +//// ResourceBundle bundle = new ResourceBundle(ResourceBundle.getBundle("demoiselle-core-bundle"));
  105 +//
  106 +// AuthorizationException exception = new AuthorizationException("");
  107 +// PhaseId phaseId = PowerMock.createMock(PhaseId.class);
  108 +//
  109 +// expect(eventContext.getException()).andReturn(exception);
  110 +// expect(facesContext.getCurrentPhaseId()).andReturn(phaseId);
  111 +//
  112 +// Faces.addMessage(exception);
  113 +// expectLastCall();
  114 +//
  115 +// replayAll();
  116 +//
  117 +// handler.handle();
  118 +//
  119 +// assertTrue(events.isEmpty());
  120 +//
  121 +// verifyAll();
  122 +//
  123 +// }
  124 +//
  125 +// @Test
  126 +// public void testHandleAnAuthorizationExceptionOnRenderResponse() {
  127 +//
  128 +//// ResourceBundle bundle = new ResourceBundle(ResourceBundle.getBundle("demoiselle-core-bundle"));
  129 +//
  130 +// AuthorizationException exception = new AuthorizationException("");
  131 +// PhaseId phaseId = PhaseId.RENDER_RESPONSE;
  132 +//
  133 +// expect(eventContext.getException()).andReturn(exception);
  134 +// expect(facesContext.getCurrentPhaseId()).andReturn(phaseId);
  135 +//
  136 +// handler.getWrapped().handle();
  137 +// expectLastCall();
  138 +//
  139 +// replayAll();
  140 +//
  141 +// handler.handle();
  142 +//
  143 +// assertFalse(events.isEmpty());
  144 +//
  145 +// verifyAll();
  146 +//
  147 +// }
  148 +//
  149 +// @Test
  150 +// public void testHandleAnyException() {
  151 +//
  152 +// Exception exception = new Exception();
  153 +// PhaseId phaseId = PowerMock.createMock(PhaseId.class);
  154 +//
  155 +// expect(eventContext.getException()).andReturn(exception);
  156 +// expect(facesContext.getCurrentPhaseId()).andReturn(phaseId);
  157 +//
  158 +// handler.getWrapped().handle();
  159 +// expectLastCall();
  160 +//
  161 +// replayAll();
  162 +//
  163 +// handler.handle();
  164 +//
  165 +// assertFalse(events.isEmpty());
  166 +//
  167 +// verifyAll();
  168 +//
  169 +// }
  170 +//
  171 +//}
... ...
impl/extension/se/pom.xml
... ... @@ -51,17 +51,6 @@
51 51 <name>SE Extension</name>
52 52 <description>Extensão para aplicações SE</description>
53 53  
54   - <dependencies>
55   - <dependency>
56   - <groupId>org.jboss.weld.se</groupId>
57   - <artifactId>weld-se-core</artifactId>
58   - </dependency>
59   - <dependency>
60   - <groupId>org.hibernate</groupId>
61   - <artifactId>hibernate-validator</artifactId>
62   - </dependency>
63   - </dependencies>
64   -
65 54 <repositories>
66 55 <repository>
67 56 <id>demoiselle.sourceforge.net</id>
... ...
impl/extension/servlet/src/main/java/br/gov/frameworkdemoiselle/util/ServletListener.java
... ... @@ -38,18 +38,30 @@ package br.gov.frameworkdemoiselle.util;
38 38  
39 39 import javax.servlet.ServletContextEvent;
40 40  
41   -import br.gov.frameworkdemoiselle.internal.bootstrap.ShutdownBootstrap;
42   -import br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap;
  41 +import br.gov.frameworkdemoiselle.internal.bootstrap.BeforeApplicationFinalization;
  42 +import br.gov.frameworkdemoiselle.internal.bootstrap.BeforeApplicationInitialization;
43 43  
44 44 public class ServletListener implements javax.servlet.ServletContextListener {
45 45  
46 46 @Override
47 47 public void contextInitialized(ServletContextEvent event) {
48   - StartupBootstrap.startup();
  48 + Beans.getBeanManager().fireEvent(new BeforeApplicationInitialization() {
  49 +
  50 + @Override
  51 + public boolean removeProcessors() {
  52 + return true;
  53 + }
  54 + });
49 55 }
50 56  
51 57 @Override
52 58 public void contextDestroyed(ServletContextEvent event) {
53   - ShutdownBootstrap.shutdown();
  59 + Beans.getBeanManager().fireEvent(new BeforeApplicationFinalization() {
  60 +
  61 + @Override
  62 + public boolean removeProcessors() {
  63 + return true;
  64 + }
  65 + });
54 66 }
55 67 }
... ...