Commit e3e6c05b967a39ddab26cfb2f8d10368e2913496

Authored by ROGERIO CASSIMIRO DE SOUZA
1 parent f45a2eca
Exists in master

redmine #4583 assinatura em documento anexo e online; visualizacao de assinatura…

…s de doc anexo e online;
cit-ecm-api/src/main/java/br/com/centralit/api/model/Assinatura.java
... ... @@ -68,6 +68,7 @@ public class Assinatura extends PersistentObjectAudit {
68 68 private Usuario usuario;
69 69  
70 70 /** Atributo documentoGed. */
  71 + @JsonView({ ViewsEcm.AssinaturaEdit.class })
71 72 @ManyToOne(fetch = FetchType.LAZY)
72 73 private DocumentoGed documentoGed;
73 74  
... ... @@ -91,7 +92,7 @@ public class Assinatura extends PersistentObjectAudit {
91 92  
92 93 /** Atributo conteudoTarja. */
93 94 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
94   - @JsonView({ Views.DocumentoGedEdit.class })
  95 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
95 96 private ConteudoTarja conteudoTarja;
96 97  
97 98 /** Atributo pessoa. */
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/ConteudoTarja.java
... ... @@ -7,11 +7,14 @@ import javax.persistence.GeneratedValue;
7 7 import javax.persistence.GenerationType;
8 8 import javax.persistence.Id;
9 9 import javax.persistence.Lob;
  10 +import javax.persistence.OneToOne;
10 11 import javax.persistence.Transient;
11 12  
12 13 import org.hibernate.annotations.Type;
13 14  
  15 +import br.com.centralit.api.framework.json.ViewsEcm;
14 16 import br.com.centralit.framework.json.Views;
  17 +import br.com.centralit.framework.model.AnexoImagem;
15 18  
16 19 import com.fasterxml.jackson.annotation.JsonView;
17 20  
... ... @@ -36,7 +39,7 @@ public class ConteudoTarja {
36 39 @JsonView({ Views.GenericView.class })
37 40 private Long id;
38 41  
39   - @JsonView({ Views.DocumentoGedEdit.class })
  42 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
40 43 @Transient
41 44 private String conteudo;
42 45  
... ... @@ -45,6 +48,13 @@ public class ConteudoTarja {
45 48 @Type(type = "org.hibernate.type.BinaryType")
46 49 private byte[] conteudoCriptografado;
47 50  
  51 + @OneToOne
  52 + @JsonView({ ViewsEcm.AssinaturaEdit.class })
  53 + private AnexoImagem anexoImagem;
  54 +
  55 + @Transient
  56 + private Long idTarjaAssinatura;
  57 +
48 58 /**
49 59 * Retorna o valor do atributo <code>id</code>
50 60 *
... ... @@ -105,4 +115,44 @@ public class ConteudoTarja {
105 115 this.conteudoCriptografado = conteudoCriptografado;
106 116 }
107 117  
  118 + /**
  119 + * Retorna o valor do atributo <code>idTarjaAssinatura</code>
  120 + *
  121 + * @return <code>Long</code>
  122 + */
  123 + public Long getIdTarjaAssinatura() {
  124 +
  125 + return idTarjaAssinatura;
  126 + }
  127 +
  128 + /**
  129 + * Define o valor do atributo <code>idTarjaAssinatura</code>.
  130 + *
  131 + * @param idTarjaAssinatura
  132 + */
  133 + public void setIdTarjaAssinatura(Long idTarjaAssinatura) {
  134 +
  135 + this.idTarjaAssinatura = idTarjaAssinatura;
  136 + }
  137 +
  138 + /**
  139 + * Retorna o valor do atributo <code>anexoImagem</code>
  140 + *
  141 + * @return <code>AnexoImagem</code>
  142 + */
  143 + public AnexoImagem getAnexoImagem() {
  144 +
  145 + return anexoImagem;
  146 + }
  147 +
  148 + /**
  149 + * Define o valor do atributo <code>anexoImagem</code>.
  150 + *
  151 + * @param anexoImagem
  152 + */
  153 + public void setAnexoImagem(AnexoImagem anexoImagem) {
  154 +
  155 + this.anexoImagem = anexoImagem;
  156 + }
  157 +
108 158 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
... ... @@ -245,7 +245,7 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
245 245 private Collection<Assinatura> assinaturas;
246 246  
247 247 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
248   - @JsonView({ Views.DocumentoGedEdit.class })
  248 + @JsonView({ Views.DocumentoGedEdit.class, ViewsEcm.AssinaturaEdit.class })
249 249 private ConteudoTarja conteudoTarja;
250 250  
251 251 @Transient
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/model/TarjaAssinatura.java
... ... @@ -46,8 +46,8 @@ public class TarjaAssinatura extends PersistentObjectAudit{
46 46  
47 47 public static String LOGO = "@logo@";
48 48 public static String NOME_ASSINANTE = "@nome_assinante@";
49   - public static String FUNCAO_ASSINANTE = " @funcao_assinante@";
50   - public static String DATA_ASSINATURA = " @data_assinatura@";
  49 + public static String FUNCAO_ASSINANTE = "@funcao_assinante@";
  50 + public static String DATA_ASSINATURA = "@data_assinatura@";
51 51 public static String HORA_ASSINATURA = "@hora_assinatura@";
52 52 public static String CODIGO_ASSINATURA = "@codigo_assinatura@";
53 53  
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/TarjaAssinaturaService.java
... ... @@ -7,26 +7,32 @@ import br.com.centralit.api.model.TarjaAssinatura;
7 7 import br.com.centralit.framework.service.arquitetura.GenericService;
8 8  
9 9 /**
10   - * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
11   - *
12   - * <p><b>Company: </b> Central IT - Governan&ccedil;a Corporativa - </p>
13   - *
14   - * <p><b>Description: </b></p>
  10 + * <p>
  11 + * <img src="http://centralit.com.br/images/logo_central.png">
  12 + * </p>
  13 + *
  14 + * <p>
  15 + * <b>Company: </b> Central IT - Governan&ccedil;a Corporativa -
  16 + * </p>
  17 + *
  18 + * <p>
  19 + * <b>Description: </b>
  20 + * </p>
15 21 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio.
16   - *
  22 + *
17 23 * @since 13 de abr de 2016 - 13:40:36
18 24 * @version 1.0.0
19 25 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
20   - *
  26 + *
21 27 */
22 28 public interface TarjaAssinaturaService extends GenericService<TarjaAssinatura, Long> {
23 29  
24 30 /**
25   - *
  31 + *
26 32 * M&eacute;todo respons&aacute;vel por fazer o upload da imagem do logotipo de uma tarja de assinatura.
27   - *
  33 + *
28 34 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
29   - *
  35 + *
30 36 * @param file
31 37 * @param idOrganizacao
32 38 * @param idConfiguracao
... ... @@ -34,30 +40,30 @@ public interface TarjaAssinaturaService extends GenericService&lt;TarjaAssinatura,
34 40 void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idConfiguracao);
35 41  
36 42 /**
37   - *
  43 + *
38 44 * M&eacute;todo respons&aacute;vel por salvar os dois tipos de tarjas de assinatura ao mesmo tempo
39   - *
  45 + *
40 46 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
41   - *
  47 + *
42 48 * @param tarjaAssinaturaVH
43 49 * @return
44 50 */
45   - TarjaAssinatura save (TarjaAssinatura tarjaAssinatura);
46   -
  51 + TarjaAssinatura save(TarjaAssinatura tarjaAssinatura);
47 52  
48 53 /**
49   - *
  54 + *
50 55 * M&eacute;todo respons&aacute;vel por remover a imagem associada a uma tarja de assinatura.
51   - *
  56 + *
52 57 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
53   - *
  58 + *
54 59 * @param tarjaAssinatura
55 60 * @return
56 61 */
57   - TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura);
58   -
  62 + TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura);
  63 +
59 64 /**
60 65 * Método responsável por obter tarja assinatura interna
  66 + *
61 67 * @author rogerio.cassimiro
62 68 * @return {@link TarjaAssinatura}
63 69 */
... ... @@ -65,8 +71,26 @@ public interface TarjaAssinaturaService extends GenericService&lt;TarjaAssinatura,
65 71  
66 72 /**
67 73 * Método responsável por gerar assinatura interna por usuário e por documento
  74 + *
68 75 * @author rogerio.cassimiro
69 76 * @param assinatura
  77 + * @param formaCriacao
  78 + */
  79 + void gerarAssinaturaInternaUsuario(Assinatura assinatura, Long formaCriacao);
  80 +
  81 + /**
  82 + * Método responsável por criptografar o texto através da chave
  83 + * @author rogerio.cassimiro
  84 + * @param text
  85 + * @return {@link Byte}
  86 + */
  87 + byte[] encrypted(String text);
  88 +
  89 + /**
  90 + * Método responsável por descriptografar texto
  91 + * @author rogerio.cassimiro
  92 + * @param text
  93 + * @return {@link String}
70 94 */
71   - void gerarAssinaturaInternaUsuario(Assinatura assinatura);
  95 + String decrypted(byte[] text);
72 96 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java
... ... @@ -73,24 +73,26 @@ public class AssinaturaServiceImpl extends GenericServiceImpl&lt;Assinatura, Long&gt;
73 73 @Override
74 74 public Assinatura saveAssinaturaInterna(Assinatura assinatura) {
75 75 Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
76   - this.validarSenha(assinatura.getPassword(), usuario);
  76 + validarSenha(assinatura.getPassword(), usuario);
  77 + montarTransients(assinatura, usuario);
  78 + historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);
  79 + tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura,assinatura.getDocumentoGed().getFormaCriacao().getCodigo());
  80 + return super.save(assinatura);
  81 + }
  82 +
  83 + /**
  84 + * Método responsável por montar transients da assinatura
  85 + * @author rogerio.cassimiro
  86 + * @param assinatura
  87 + * @param usuario
  88 + */
  89 + private void montarTransients(Assinatura assinatura, Usuario usuario) {
  90 +
77 91 assinatura.setDocumentoGed(this.documentoGedService.getReference(assinatura.getDocumentoGed().getId()));
78 92 assinatura.setUsuario(usuario);
79 93 assinatura.setPessoa(this.pessoaService.getReference(assinatura.getPessoa().getId()));
80 94 assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA));
81 95 assinatura.setFuncao(funcaoService.getReference(assinatura.getFuncao().getId()));
82   - historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);
83   - salvarTarjaAssinaturaPorTipoDocumento(assinatura);
84   - return super.save(assinatura);
85   - }
86   -
87   - private void salvarTarjaAssinaturaPorTipoDocumento(Assinatura assinatura) {
88   - //OnLine
89   - if(assinatura.getDocumentoGed().getFormaCriacao().getCodigo() == 1){
90   - //TODO ON LINE
91   - }else {
92   - this.tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura);
93   - }
94 96 }
95 97  
96 98 /**
... ... @@ -123,4 +125,14 @@ public class AssinaturaServiceImpl extends GenericServiceImpl&lt;Assinatura, Long&gt;
123 125 public Boolean validarAssinaturaPorUsuario(Long idDocumento) {
124 126 return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
125 127 }
  128 +
  129 + @Override
  130 + public Assinatura getReference(Long id) {
  131 + Assinatura assinatura = (Assinatura) this.assinaturaDao.getReference(id);
  132 + assinatura.getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getConteudoTarja().getConteudoCriptografado()));
  133 + if(UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())){
  134 + assinatura.getDocumentoGed().getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado()));
  135 + }
  136 + return assinatura;
  137 + }
126 138 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
1 1 package br.com.centralit.api.service.impl;
2 2  
3 3 import java.io.IOException;
  4 +import java.security.Key;
  5 +
  6 +import javax.crypto.Cipher;
  7 +import javax.crypto.spec.SecretKeySpec;
4 8  
5 9 import org.apache.log4j.Logger;
6 10 import org.springframework.beans.factory.annotation.Autowired;
7 11 import org.springframework.beans.factory.annotation.Qualifier;
  12 +import org.springframework.beans.factory.annotation.Value;
8 13 import org.springframework.stereotype.Service;
9 14 import org.springframework.validation.Validator;
10 15 import org.springframework.web.multipart.MultipartFile;
11 16  
12   -import com.ibm.icu.util.Calendar;
13   -
14 17 import br.com.centralit.api.dao.TarjaAssinaturaDao;
15 18 import br.com.centralit.api.model.Assinatura;
  19 +import br.com.centralit.api.model.ConteudoTarja;
16 20 import br.com.centralit.api.model.TarjaAssinatura;
17 21 import br.com.centralit.api.service.AnexoImagemService;
18 22 import br.com.centralit.api.service.DominioService;
... ... @@ -22,19 +26,30 @@ import br.com.centralit.framework.model.AnexoImagem;
22 26 import br.com.centralit.framework.model.Dominio;
23 27 import br.com.centralit.framework.model.Organizacao;
24 28 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
  29 +import br.com.centralit.framework.util.UtilDate;
  30 +import br.com.centralit.framework.util.UtilObjeto;
  31 +
  32 +import com.ibm.icu.util.Calendar;
  33 +import com.lowagie.text.DocumentException;
25 34  
26 35 /**
27   - * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
28   - *
29   - * <p><b>Company: </b> Central IT - Governan&ccedil;a Corporativa - </p>
30   - *
31   - * <p><b>Description: </b></p>
  36 + * <p>
  37 + * <img src="http://centralit.com.br/images/logo_central.png">
  38 + * </p>
  39 + *
  40 + * <p>
  41 + * <b>Company: </b> Central IT - Governan&ccedil;a Corporativa -
  42 + * </p>
  43 + *
  44 + * <p>
  45 + * <b>Description: </b>
  46 + * </p>
32 47 * Classe de servi&ccedil;os para a entidade TarjaAssinatura, a qual mant&eacute;m as regras de neg&oacute;cio.
33   - *
  48 + *
34 49 * @since 13 de abr de 2016 - 13:40:36
35 50 * @version 1.0.0
36 51 * @author ciro.junior (<a href="mailto:ciro.junior@centralit.com.br">ciro.junior@centralit.com.br</a>)
37   - *
  52 + *
38 53 */
39 54 @Service("tarjaAssinaturaService")
40 55 public class TarjaAssinaturaServiceImpl extends GenericServiceImpl<TarjaAssinatura, Long> implements TarjaAssinaturaService {
... ... @@ -48,41 +63,48 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
48 63 private AnexoImagemService anexoImagemService;
49 64  
50 65 private TarjaAssinaturaDao tarjaAssinaturaDao;
51   -
  66 +
52 67 @Autowired
53 68 private DominioService dominioService;
54 69  
  70 + @Value("${ecm.doc.key.decrypted.document}")
  71 + public String keyDocument;
  72 +
55 73 @Autowired
56   - public TarjaAssinaturaServiceImpl (TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator) {
  74 + public TarjaAssinaturaServiceImpl( TarjaAssinaturaDao tarjaAssinaturaDao, @Qualifier("tarjaAssinaturaValidator") Validator validator ) {
  75 +
57 76 this.dao = tarjaAssinaturaDao;
58 77 this.tarjaAssinaturaDao = tarjaAssinaturaDao;
59 78 this.validator = validator;
60 79 }
61 80  
62   - public TarjaAssinatura save (TarjaAssinatura tarjaAssinatura){
  81 + public TarjaAssinatura save(TarjaAssinatura tarjaAssinatura) {
  82 +
63 83 return this.merge(tarjaAssinatura);
64 84 }
65 85  
66 86 @Override
67 87 public TarjaAssinatura merge(TarjaAssinatura tarjaAssinatura) {
  88 +
68 89 this.validarEntidade(tarjaAssinatura, this.validator);
69 90 return super.merge(tarjaAssinatura);
70 91 }
71 92  
72 93 @Override
73   - public TarjaAssinatura removeImagem (TarjaAssinatura tarjaAssinatura) {
74   - if(tarjaAssinatura.getAnexoImagem() != null) {
  94 + public TarjaAssinatura removeImagem(TarjaAssinatura tarjaAssinatura) {
  95 +
  96 + if (tarjaAssinatura.getAnexoImagem() != null) {
75 97 anexoImagemService.removeById(tarjaAssinatura.getAnexoImagem().getId());
76 98 tarjaAssinatura.setAnexoImagem(null);
77 99 }
78 100 return this.merge(tarjaAssinatura);
79 101 }
80 102  
81   - /**{@inheritDoc}*/
  103 + /** {@inheritDoc} */
82 104 @Override
83 105 public void uploadAnexoImagemTarja(MultipartFile file, Long idOrganizacao, Long idTarjaAssinatura) {
84 106  
85   - AnexoImagem anexoImagem = new AnexoImagem ();
  107 + AnexoImagem anexoImagem = new AnexoImagem();
86 108 try {
87 109 Organizacao organizacao = (Organizacao) this.organizacaoService.find(idOrganizacao);
88 110 anexoImagem.setAnexo(file.getBytes());
... ... @@ -94,35 +116,143 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
94 116 tarjaAssinatura.setAnexoImagem(anexoImagemSaved);
95 117 this.merge(tarjaAssinatura);
96 118 } catch (IOException ioe) {
97   - LOG.error("N\u00e3o consegui anexar a imagem \u00e0 entidade TarjaAssinatura. Verifique a exce\u00e7\u00e3o para "
98   - + "identificar a causa: ", ioe.getCause());
  119 + LOG.error("N\u00e3o consegui anexar a imagem \u00e0 entidade TarjaAssinatura. Verifique a exce\u00e7\u00e3o para " + "identificar a causa: ", ioe.getCause());
99 120 }
100 121 }
101   -
  122 +
102 123 /**
103 124 * Método responsável por obter tarja assinatura interna
  125 + *
104 126 * @author rogerio.cassimiro
105 127 * @return {@link TarjaAssinatura}
106 128 */
107 129 @Override
108 130 public TarjaAssinatura getTarjaAssinaturaInterna() {
  131 +
109 132 Dominio dominio = dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA);
110 133 return this.tarjaAssinaturaDao.getTarjaAssinaturaInterna(dominio);
111 134 }
112   -
  135 +
113 136 /**
114 137 * Método responsável por gerar assinatura interna por usuário e por documento
  138 + *
115 139 * @author rogerio.cassimiro
116 140 * @param assinatura
  141 + * @param formaCriacao
117 142 */
118 143 @Override
119   - public void gerarAssinaturaInternaUsuario(Assinatura assinatura) {
120   - String conteudo = assinatura.getConteudoTarja().getConteudo();
121   - conteudo = conteudo.replaceAll(TarjaAssinatura.DATA_ASSINATURA, Calendar.getInstance().toString())
122   - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome())
123   - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome())
124   - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome())
125   - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getPessoa().getNome());
126   -
  144 + public void gerarAssinaturaInternaUsuario(Assinatura assinatura, Long formaCriacao) {
  145 +
  146 + TarjaAssinatura tarjaAssinatura = (TarjaAssinatura) tarjaAssinaturaDao.getReference(assinatura.getConteudoTarja().getIdTarjaAssinatura());
  147 + String conteudoAssinatura = getConteudoTarja(assinatura, tarjaAssinatura.getConteudo());
  148 +
  149 + gerarAssinaturaDocAnexo(assinatura, tarjaAssinatura.getAnexoImagem(), conteudoAssinatura);
  150 + if (formaCriacao == 1)
  151 + gerarAssinaturaDocOnline(assinatura, tarjaAssinatura.getAnexoImagem(), conteudoAssinatura);
  152 + }
  153 +
  154 + /**
  155 + * Método responsável por montar o conteúdo substituindo as chaves
  156 + *
  157 + * @author rogerio.cassimiro
  158 + * @param assinatura
  159 + * @param conteudo
  160 + * @return {@link String}
  161 + */
  162 + private String getConteudoTarja(Assinatura assinatura, String conteudo) {
  163 +
  164 + conteudo = conteudo.replaceAll(TarjaAssinatura.NOME_ASSINANTE, assinatura.getPessoa().getNome()).replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getFuncao().getNome()).replaceAll(TarjaAssinatura.DATA_ASSINATURA, UtilDate.getDataSemHorasString(Calendar.getInstance().getTime())).replaceAll(TarjaAssinatura.HORA_ASSINATURA, UtilDate.getHoraAtualHHMMSS()).replaceAll(TarjaAssinatura.CODIGO_ASSINATURA, "TODO ASSINATURA");
  165 + return conteudo;
  166 + }
  167 +
  168 + /**
  169 + * Método responsável por gerar assinatura em documento anexo
  170 + *
  171 + * @author rogerio.cassimiro
  172 + * @param assinatura
  173 + * @param tarjaAssinatura
  174 + * @param conteudo
  175 + * @throws DocumentException
  176 + * @throws IOException
  177 + */
  178 + private void gerarAssinaturaDocAnexo(Assinatura assinatura, AnexoImagem anexoImagem, String conteudo) {
  179 +
  180 + assinatura.getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudo));
  181 + assinatura.getConteudoTarja().setAnexoImagem(anexoImagem);
  182 + }
  183 +
  184 + /**
  185 + * Método responsável por gerar assinatura em documento online
  186 + *
  187 + * @author rogerio.cassimiro
  188 + * @param assinatura
  189 + * @param tarjaAssinatura
  190 + * @param conteudo
  191 + */
  192 + private void gerarAssinaturaDocOnline(Assinatura assinatura, AnexoImagem anexoImagem, String conteudo) {
  193 +
  194 + String conteudoOriginalDocOnLine = new String();
  195 +
  196 + if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) {
  197 + conteudoOriginalDocOnLine = decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado());
  198 + } else {
  199 + assinatura.getDocumentoGed().setConteudoTarja(new ConteudoTarja());
  200 + conteudoOriginalDocOnLine = decrypted(assinatura.getDocumentoGed().getConteudoCriptografado());
  201 + }
  202 +
  203 + conteudoOriginalDocOnLine = conteudoOriginalDocOnLine.concat("<br/>");
  204 + conteudoOriginalDocOnLine = conteudoOriginalDocOnLine.concat(conteudo);
  205 +
  206 + assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocOnLine));
  207 + }
  208 +
  209 + /**
  210 + * Método responsável por criptografar o texto através da chave
  211 + *
  212 + * @author rogerio.costa
  213 + * @param text
  214 + * @return {@link Byte}
  215 + */
  216 + @Override
  217 + public byte[] encrypted(String text) {
  218 +
  219 + try {
  220 + byte[] encrypted = null;
  221 + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES");
  222 + Cipher cipher = Cipher.getInstance("AES");
  223 + cipher.init(Cipher.ENCRYPT_MODE, aesKey);
  224 + encrypted = cipher.doFinal(text.getBytes());
  225 +
  226 + return encrypted;
  227 +
  228 + } catch (Exception e) {
  229 + e.printStackTrace();
  230 + }
  231 + return null;
  232 + }
  233 +
  234 + /**
  235 + * Método responsável por descriptografar texto
  236 + *
  237 + * @author rogerio.cassimiro
  238 + * @param text
  239 + * @return {@link String}
  240 + */
  241 + @Override
  242 + public String decrypted(byte[] text) {
  243 +
  244 + try {
  245 + Cipher cipher = Cipher.getInstance("AES");
  246 + Key aesKey = new SecretKeySpec(this.keyDocument.getBytes(), "AES");
  247 +
  248 + cipher.init(Cipher.DECRYPT_MODE, aesKey);
  249 + String decrypted = new String(cipher.doFinal(text));
  250 +
  251 + return decrypted;
  252 +
  253 + } catch (Exception e) {
  254 + e.printStackTrace();
  255 + }
  256 + return null;
127 257 }
128 258 }
... ...
cit-ecm-web/src/main/java/br/com/centralit/controller/AssinaturaController.java
... ... @@ -2,6 +2,7 @@ package br.com.centralit.controller;
2 2  
3 3 import org.springframework.beans.factory.annotation.Autowired;
4 4 import org.springframework.stereotype.Controller;
  5 +import org.springframework.web.bind.annotation.PathVariable;
5 6 import org.springframework.web.bind.annotation.RequestBody;
6 7 import org.springframework.web.bind.annotation.RequestMapping;
7 8 import org.springframework.web.bind.annotation.RequestMethod;
... ... @@ -69,4 +70,14 @@ public class AssinaturaController extends GenericController&lt;Assinatura&gt;{
69 70 return ViewsEcm.DocumentoGedEdit.class;
70 71 }
71 72  
  73 + @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  74 + @ResponseBody
  75 + public ResponseBodyWrapper getObject(@PathVariable("id") Long id) {
  76 + ResultResponseVH<Assinatura> resultResponseVH = new ResultResponseVH<Assinatura>(genericService.getReference(id));
  77 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, ViewsEcm.AssinaturaEdit.class);
  78 + return responseBody;
  79 + }
  80 +
  81 +
  82 +
72 83 }
... ...
cit-ecm-web/src/main/java/br/com/centralit/listener/StartupListenerEcm.java
... ... @@ -573,5 +573,6 @@ public class StartupListenerEcm extends UtilStartup implements ApplicationListen
573 573 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.USUARIO_SEM_PESSOA", "Usuário não está presente no Cadastro de Pessoa!", dominio, modulo));
574 574 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_SEM_ASSINATURAS", "Esta versão do Documento não possui assinaturas!", dominio, modulo));
575 575 internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.DOCUMENTO_JA_ASSINADO", "Documento já foi assinado por este usuário!", dominio, modulo));
  576 + internacionalizacaoList.add(new Internacionalizacao("ECM.MSG.CONFIRMAR_ASSINATURA", "Deseja realmente assinar este documento? Após esta ação, não será possível cancelar!", dominio, modulo));
576 577 }
577 578 }
... ...
cit-ecm-web/src/main/webapp/assets/js/angular/custom/controller/AssinarDocumentoController.js
... ... @@ -27,6 +27,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
27 27 _validarAssinaturaPorUsuario(documento.id).then(function(exibirIncluirAssinatura){
28 28 $scope.exibirIncluirAssinatura = !(exibirIncluirAssinatura == true);
29 29 $scope.exibirDocJaAssinado = !$scope.exibirIncluirAssinatura;
  30 + _getTarjaAssinaturaInterna();
30 31 });
31 32 });
32 33 }
... ... @@ -73,13 +74,22 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
73 74 $scope.showAlert("error", $translate.instant('ECM.VALIDACAO.SENHA_ASSINATURA'));
74 75 return;
75 76 }
76   -
77   - AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){
78   - _atualizarDocumentoSelecionadoAposAssinar(result.originalElement);
79   - _resetAssinar();
80   - _atualizarDocDoProcessoAposAssinar();
81   - $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO'));
  77 +
  78 + $scope.$openModalConfirm({
  79 + message: $translate.instant("ECM.MSG.CONFIRMAR_ASSINATURA"),
  80 + callback: function () {
  81 + $scope.setLoadingRemove(true);
  82 + AssinaturaRepository.saveAssinaturaInterna(_getAssinatura()).then(function(result){
  83 + _atualizarDocumentoSelecionadoAposAssinar(result.originalElement);
  84 + _resetAssinar();
  85 + _atualizarDocDoProcessoAposAssinar();
  86 + $scope.$modalConfirmInstance.dismiss('cancel');
  87 + $scope.setLoading(false);
  88 + $scope.showAlert("success", $translate.instant('ECM.ASSINADO_SUCESSO'));
  89 + });
  90 + }
82 91 });
  92 +
83 93 };
84 94  
85 95 function _getAssinatura(){
... ... @@ -89,7 +99,7 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
89 99 idTask : $scope.$parent.task.id,
90 100 password : $scope.autenticacao,
91 101 pessoa : { id : $scope.pessoa.id},
92   - conteudoTarja : { id : $scope.tarjaAssinatura.id}};
  102 + conteudoTarja : { idTarjaAssinatura : $scope.tarjaAssinatura.id}};
93 103 };
94 104  
95 105 function _atualizarDocumentoSelecionadoAposAssinar(assinatura){
... ... @@ -146,12 +156,13 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
146 156  
147 157 function _exibirNenhumaAssinatura(){
148 158 $scope.nenhumaAssinatura = $scope.documentosSelecionados.some(function(doc){
149   - return doc.assinaturas.length > 0;
  159 + return doc.assinaturas.length == 0;
150 160 });
151 161 };
152 162  
153 163 $scope.visualizarAssinatura = function(docSelecionado, assinatura){
154 164 var valorOriginal = assinatura.isVisualizarAssinatura;
  165 + var idAssinaturaSelecionada = null;
155 166 if(valorOriginal)
156 167 assinatura.isVisualizarAssinatura = false;
157 168 else
... ... @@ -165,12 +176,18 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
165 176 doc.assinaturas.forEach(function(ass){
166 177 if(ass.id != assinatura.id)
167 178 ass.isVisualizarAssinatura = false;
168   - else
  179 + else {
169 180 ass.isVisualizarAssinatura = valorOriginal != true;
  181 + idAssinaturaSelecionada = angular.copy(ass.id);
  182 + }
170 183 });
171 184 });
172 185  
173   - $scope.visualizarAssinaturaOnLine = $scope.doc.formaCriacao.codigo == 1;
  186 + $scope.visualizarAssinaturaOnLine = $scope.doc.formaCriacao.codigo == 1;
  187 + _getTarjaDaAssinatura(idAssinaturaSelecionada);
  188 +// if($scope.visualizarAssinaturaOnLine) {
  189 +// //TODO TARJA DOC ON
  190 +// } else
174 191 });
175 192 };
176 193  
... ... @@ -182,4 +199,11 @@ citApp.controller(&#39;AssinarDocumentoController&#39;, [ &#39;$scope&#39;, &#39;$translate&#39;, &#39;Geren
182 199 });
183 200 });
184 201 };
  202 +
  203 + function _getTarjaDaAssinatura(idAssinaturaSelecionada){
  204 + AssinaturaRepository.get(idAssinaturaSelecionada).then(function(result){
  205 + $scope.assinaturaSelecionada = result.originalElement;
  206 + });
  207 + }
  208 +
185 209 }] );
186 210 \ No newline at end of file
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturaEdit.html
... ... @@ -42,8 +42,4 @@
42 42 <!-- </div> -->
43 43 </div>
44 44  
45   -<div class="row">
46   - <div class="col-sm-12">
47   - <div ng-include src="'/cit-ecm-web/html/assinatura/documentoTarjaAssinaturaInterna.html'" ng-show="exibirIncluirAssinatura"/>
48   - </div>
49   -</div>
50 45 \ No newline at end of file
  46 +<div ng-include src="'/cit-ecm-web/html/assinatura/documentoTarjaAssinaturaInterna.html'" ng-show="exibirIncluirAssinatura"/>
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoAssinaturas.html
... ... @@ -41,15 +41,22 @@
41 41 </tr>
42 42 <tr ng-repeat-end ng-show="assinatura.isVisualizarAssinatura">
43 43 <td colspan="7">
44   - <iframe id="visualizacaoConteudoDoc" srcdoc="{{doc.conteudo}}" allowfullscreen class="iframe-assinatura" ng-if="visualizarAssinaturaOnLine"></iframe>
45   - <div ng-hide="visualizarAssinaturaOnLine">
46   - doc anexo
  44 + <iframe id="conteudoPrototipo" srcdoc="{{assinaturaSelecionada.documentoGed.conteudoTarja.conteudo}}" allowfullscreen class="iframe-assinatura" ng-if="visualizarAssinaturaOnLine"></iframe>
  45 + <div class="row" style="margin-top: 10px; margin-bottom: 10px;" ng-hide="visualizarAssinaturaOnLine">
  46 + <div class="col-sm-2" ng-show="assinaturaSelecionada.conteudoTarja.anexoImagem.anexo">
  47 + <img ng-src="data:image/JPEG;base64,{{assinaturaSelecionada.conteudoTarja.anexoImagem.anexo}}" class="img-thumbnail" style="max-width: 80px; height: 80px;">
  48 + </div>
  49 + <div class="col-md-10">
  50 + <iframe id="conteudoAssinado" srcdoc="{{assinaturaSelecionada.conteudoTarja.conteudo}}" allowfullscreen class="iframe-assinatura"
  51 + style="min-height: 80px !important; max-height: 120px !important;">
  52 + </iframe>
  53 + </div>
47 54 </div>
48 55 </td>
49 56 </tr>
50 57 </tbody>
51 58 <tfoot>
52   - <tr ng-hide="nenhumaAssinatura">
  59 + <tr ng-show="nenhumaAssinatura">
53 60 <td colspan="7">
54 61 <strong><translate>ECM.LABEL.DOCUMENTO_SEM_ASSINATURA</translate></strong>
55 62 </td>
... ...
cit-ecm-web/src/main/webapp/html/assinatura/documentoTarjaAssinaturaInterna.html
1 1 <div class="row" style="margin-bottom: 10px;">
2   - <div class="col-sm-2" ng-show="tarjaAssinatura.anexoImagem.anexo">
3   - <img ng-src="data:image/JPEG;base64,{{tarjaAssinatura.anexoImagem.anexo}}" class="img-thumbnail" style="max-width: 80px; height: 80px;">
  2 + <div class="col-sm-2">
  3 + <img ng-src="data:image/JPEG;base64,{{tarjaAssinatura.anexoImagem.anexo}}" class="img-thumbnail" style="max-width: 80px; height: 80px;"
  4 + ng-show="tarjaAssinatura.anexoImagem.anexo">
4 5 </div>
5 6 <div class="col-md-10">
6 7 <iframe id="visualizacaoConteudoTarjaAssinaturaDocumento" srcdoc="{{tarjaAssinatura.conteudo}}"
7   - allowfullscreen class="iframe-report" ng-show="!edit" style="min-height: 80px !important; max-height: 120px !important;" />
  8 + allowfullscreen class="iframe-assinatura" ng-show="!edit" style="min-height: 80px !important; max-height: 120px !important;" />
8 9 </div>
9 10 </div>
10 11 \ No newline at end of file
... ...