package tela.dialog;
import static aplicacao.helper.LayoutHelper.getActiveShell;
import static aplicacao.helper.MessageHelper.openInformation;
import static aplicacao.helper.ValidatorHelper.validar;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.PojoObservables;
import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.ResourceManager;
import aplicacao.exception.ValidationException;
import aplicacao.helper.FileHelper;
import aplicacao.helper.LayoutHelper;
import aplicacao.helper.UsuarioHelper;
import aplicacao.service.ConfiguracaoService;
import aplicacao.service.PessoaService;
import aplicacao.service.UsuarioService;
import banco.modelo.Configuracao;
import banco.modelo.Papel;
import banco.modelo.Pessoa;
import banco.modelo.Usuario;
public class ConfiguracaoDialog extends TitleAreaDialog {
private Logger log = Logger.getLogger(getClass());
private ConfiguracaoService service = new ConfiguracaoService();
private UsuarioService usuarioService = new UsuarioService();
private Usuario user;
private Text txtEmpresa;
private Text txtSenhaAtual;
private Text txtNovaSenha;
private Text txtConfirmarSenha;
private Text txtLogoEmpresa;
private Label lblStatusLogo;
private Label lblIconStatusLogo;
public ConfiguracaoDialog(Shell parentShell) {
super(parentShell);
//pega as configura��es caso o usu�rio ja tenha salvo
if(UsuarioHelper.getConfiguracaoPadrao() == null)
service.setConfiguracao(new Configuracao());
else
service.setConfiguracao(service.find(UsuarioHelper.getConfiguracaoPadrao().getId()));
//permissao do usu�rio
if(UsuarioHelper.getUsuarioLogado() == null){
Papel p = new Papel();
p.setGerServico(false);
user = new Usuario();
user.setPapel(p);
}else
user = UsuarioHelper.getUsuarioLogado();
}
@Override
protected Control createDialogArea(Composite parent) {
setMessage("Selecione a pessoa cadastrada que representa a empresa e informe os horarios de espediente");
setTitle("Configura\u00E7\u00F5es");
Composite area = (Composite) super.createDialogArea(parent);
area.setLayout(new GridLayout(1, false));
Group grpEmpresa = new Group(area, SWT.NONE);
grpEmpresa.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
grpEmpresa.setLayout(new GridLayout(6, false));
grpEmpresa.setText("Empresa");
Label lblEmpresa = new Label(grpEmpresa, SWT.NONE);
lblEmpresa.setText("Empresa:");
txtEmpresa = new Text(grpEmpresa, SWT.BORDER);
txtEmpresa.setEnabled(false);
GridData gd_txtEmpresa = new GridData(SWT.FILL, SWT.CENTER, false, false, 4, 1);
gd_txtEmpresa.widthHint = 254;
txtEmpresa.setLayoutData(gd_txtEmpresa);
Button btnSelecionarEmpresa = new Button(grpEmpresa, SWT.NONE);
btnSelecionarEmpresa.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
btnSelecionarEmpresa.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Pessoa p = selecionarPessoa();
if(p != null){
service.getConfiguracao().setRepresentanteEmpresa(p);
txtEmpresa.setText(p.getNomeFantasia());
}
}
});
btnSelecionarEmpresa.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/find16.png"));
btnSelecionarEmpresa.setText("Selecionar");
Label lblLogoDaEmpresa = new Label(grpEmpresa, SWT.NONE);
lblLogoDaEmpresa.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblLogoDaEmpresa.setText("Logo da empresa:");
txtLogoEmpresa = new Text(grpEmpresa, SWT.BORDER);
txtLogoEmpresa.setEnabled(false);
txtLogoEmpresa.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 4, 1));
Button btnSelecionarLogo = new Button(grpEmpresa, SWT.NONE);
btnSelecionarLogo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
//pega o arquivo
FileDialog fd = new FileDialog(getActiveShell(), SWT.SINGLE);
fd.setFilterExtensions(new String[]{"*.png", "*.jpg"});
String caminho = fd.open();
//adiciona o nome do arquivo as configuracoes
service.getConfiguracao().setLogoEmpresa(fd.getFileName());
initDataBindings();
//verifica se o usu�rio selecionou uma imagem
if(caminho == null){
verificaLogo();
return;
}
//se o arquivo existir mesmo, move para a pasta do sistema
File file = new File(caminho);
if(!file.exists())
return;
moveLogo(file);
verificaLogo();
}
});
btnSelecionarLogo.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/find16.png"));
btnSelecionarLogo.setText("Selecionar");
lblIconStatusLogo = new Label(grpEmpresa, SWT.NONE);
lblIconStatusLogo.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true, 1, 1));
lblStatusLogo = new Label(grpEmpresa, SWT.NONE);
lblStatusLogo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
new Label(grpEmpresa, SWT.NONE);
verificaLogo();
Group grpSenha = new Group(area, SWT.NONE);
grpSenha.setLayout(new GridLayout(2, false));
grpSenha.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
grpSenha.setText("Senha");
Label lblSenhaAtual = new Label(grpSenha, SWT.NONE);
lblSenhaAtual.setText("Senha atual:");
txtSenhaAtual = new Text(grpSenha, SWT.BORDER | SWT.PASSWORD);
txtSenhaAtual.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblNovaSenha = new Label(grpSenha, SWT.NONE);
lblNovaSenha.setText("Nova senha:");
txtNovaSenha = new Text(grpSenha, SWT.BORDER | SWT.PASSWORD);
txtNovaSenha.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblConfirmarSenha = new Label(grpSenha, SWT.NONE);
lblConfirmarSenha.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblConfirmarSenha.setText("Confirmar senha:");
txtConfirmarSenha = new Text(grpSenha, SWT.BORDER | SWT.PASSWORD);
txtConfirmarSenha.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
initDataBindings();
return area;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
@Override
protected void okPressed() {
try{
validar(service.getConfiguracao());
//verificar senha do usuario
if(!txtSenhaAtual.getText().isEmpty() || !txtNovaSenha.getText().isEmpty()){
if(!txtSenhaAtual.getText().equals(UsuarioHelper.getUsuarioLogado().getSenha())){
setErrorMessage("Senha incorreta. Informe a senha atual corretamente para alterar a senha ou apague o campo \"Senha atual\".");
return;
}
if(!txtNovaSenha.getText().equals(txtConfirmarSenha.getText())){
setErrorMessage("A senha n�o coincide com a confirma��o.");
return;
}
Usuario user = UsuarioHelper.getUsuarioLogado();
user.setSenha(txtNovaSenha.getText());
usuarioService.setUsuario(user);
usuarioService.saveOrUpdate();
}
service.saveOrUpdate();
UsuarioHelper.setConfiguracaoPadrao(service.getConfiguracao());
openInformation("Configura��es salvas com sucesso!");
// HibernateConnection.commit(service.getConfiguracao());
super.okPressed();
}catch (ValidationException e) {
setErrorMessage(e.getMessage());
}catch(Exception e){
setErrorMessage("Informe os hor�rios corretamente");
}
}
private Pessoa selecionarPessoa(){
SelecionarItemDialog sid = new SelecionarItemDialog(LayoutHelper.getActiveShell(), new LabelProvider(){
@Override
public String getText(Object element) {
return ((Pessoa)element).getNomeFantasia();
}
});
sid.setElements(new PessoaService().findAllAtivos().toArray());
return (Pessoa)sid.getElementoSelecionado();
}
private void verificaLogo(){
if (service.getConfiguracao().getLogoEmpresa() == null || service.getConfiguracao().getLogoEmpresa().isEmpty()){
lblIconStatusLogo.setImage(null);
lblStatusLogo.setText("");
return;
}
File file = new File(FileHelper.logoPath());
if (file.exists()) {
lblIconStatusLogo.setImage(ResourceManager.getPluginImage(
"mecasoft", "assents/funcoes/ativo16.png"));
lblStatusLogo.setText("Imagem encontrada");
lblStatusLogo.setForeground(ResourceManager.getColor(SWT.COLOR_DARK_GREEN));
}else{
lblIconStatusLogo.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/inativo16.png"));
lblStatusLogo.setText("Imagem n�o encontrada");
lblStatusLogo.setForeground(ResourceManager.getColor(SWT.COLOR_RED));
}
}
private void moveLogo(File file){
try {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(Configuracao.pastaLogo + service.getConfiguracao().getLogoEmpresa()));
byte array[] = new byte[10000];
while(fis.read(array) > -1)
fos.write(array);
fis.close();
fos.close();
} catch (FileNotFoundException e) {
log.error(e);
} catch (IOException e) {
log.error(e);
}
}
@Override
protected Point getInitialSize() {
return new Point(488, 399);
}
protected DataBindingContext initDataBindings() {
DataBindingContext bindingContext = new DataBindingContext();
//
IObservableValue txtEmpresaObserveTextObserveWidget = SWTObservables.observeText(txtEmpresa, SWT.Modify);
IObservableValue servicegetConfiguracaoRepresentanteEmpresanomeFantasiaObserveValue = PojoObservables.observeValue(service.getConfiguracao(), "representanteEmpresa.nomeFantasia");
bindingContext.bindValue(txtEmpresaObserveTextObserveWidget, servicegetConfiguracaoRepresentanteEmpresanomeFantasiaObserveValue, null, null);
//
IObservableValue observeTextTxtLogoEmpresaObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtLogoEmpresa);
IObservableValue logoEmpresaServicegetConfiguracaoObserveValue = PojoProperties.value("logoEmpresa").observe(service.getConfiguracao());
bindingContext.bindValue(observeTextTxtLogoEmpresaObserveWidget, logoEmpresaServicegetConfiguracaoObserveValue, null, null);
//
return bindingContext;
}
}