package tela.editor; import static aplicacao.helper.LayoutHelper.getActiveShell; import static aplicacao.helper.MessageHelper.openInformation; import static aplicacao.helper.MessageHelper.openQuestion; import static aplicacao.helper.ValidatorHelper.validar; import java.math.BigDecimal; import java.util.List; 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.Realm; import org.eclipse.core.databinding.observable.list.IObservableList; 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.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.wb.swt.ResourceManager; import tela.dialog.SelecionarItemDialog; import tela.editingSupport.ForneceProdutoEditingSupport; import tela.editor.editorInput.ServicoEditorInput; import aplicacao.exception.ValidationException; import aplicacao.helper.FormatterHelper; import aplicacao.helper.LayoutHelper; import aplicacao.service.MecasoftService; import aplicacao.service.PessoaService; import aplicacao.service.ProdutoServicoService; import banco.modelo.ForneceProduto; import banco.modelo.Pessoa; import banco.modelo.ProdutoServico; public class ServicoEditor extends MecasoftEditor { public static final String ID = "tela.editor.ServicoEditor"; //$NON-NLS-1$ private ProdutoServicoService service = new ProdutoServicoService(); private PessoaService pessoaService = new PessoaService(); private Text txtDescricao; private Table tableProduto; private TableViewer tvProdutos; private Button btnAtivo; private Text txtMediaServico; private Table tablePrestador; private final FormToolkit formToolkit = new FormToolkit(Display.getDefault()); private TableViewer tvPrestador; public ServicoEditor() { } @Override public void salvarRegistro() throws ValidationException{ validar(service.getProdutoServico()); service.saveOrUpdate(); openInformation("Servi�o cadastrado com sucesso!"); } @Override public void excluirRegistro() {} @Override public void addComponentes(Composite compositeConteudo) { compositeConteudo.setLayout(new GridLayout(4, false)); Label lblDescricao = new Label(compositeConteudo, SWT.NONE); lblDescricao.setText("Descri\u00E7\u00E3o:"); txtDescricao = new Text(compositeConteudo, SWT.BORDER); txtDescricao.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); Label lblMediaValor = new Label(compositeConteudo, SWT.NONE); lblMediaValor.setText("M\u00E9dia Val. Servi\u00E7o"); txtMediaServico = new Text(compositeConteudo, SWT.BORDER); txtMediaServico.setEnabled(false); txtMediaServico.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); new Label(compositeConteudo, SWT.NONE); new Label(compositeConteudo, SWT.NONE); Label lblPrestadoresDoServico = new Label(compositeConteudo, SWT.NONE); lblPrestadoresDoServico.setText("Prestadores do servico"); tvPrestador = new TableViewer(compositeConteudo, SWT.BORDER | SWT.FULL_SELECTION); tablePrestador = tvPrestador.getTable(); tablePrestador.setLinesVisible(true); tablePrestador.setHeaderVisible(true); GridData gd_tablePrestador = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 2); gd_tablePrestador.heightHint = 95; tablePrestador.setLayoutData(gd_tablePrestador); TableViewerColumn tvcNome = new TableViewerColumn(tvPrestador, SWT.NONE); tvcNome.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { return ((ForneceProduto)element).getPessoa().getNome(); } }); TableColumn tblclmnNome = tvcNome.getColumn(); tblclmnNome.setWidth(222); tblclmnNome.setText("Nome"); TableViewerColumn tvcValor = new TableViewerColumn(tvPrestador, SWT.NONE); tvcValor.setEditingSupport(new ForneceProdutoEditingSupport(tvPrestador){ @Override protected void setValue(Object element, Object value) { super.setValue(element, value); initDataBindings(); } }); tvcValor.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { try{ return FormatterHelper.getDecimalFormat().format(((ForneceProduto)element).getValorUnitario()); }catch (Exception e) { return ""; } } }); TableColumn tblclmnValor = tvcValor.getColumn(); tblclmnValor.setWidth(100); tblclmnValor.setText("Valor"); Button btnAdicionarPrestador = formToolkit.createButton(compositeConteudo, "Adicionar", SWT.NONE); btnAdicionarPrestador.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Pessoa prestador = selecionarPrestador(); if(prestador != null){ ForneceProduto fp = new ForneceProduto(); fp.setPessoa(prestador); fp.setProduto(service.getProdutoServico()); service.getProdutoServico().getListaFornecedores().add(fp); calcularMedia(); tvPrestador.refresh(); initDataBindings(); } } }); btnAdicionarPrestador.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/fornecedor/removeFornecedor16.png")); btnAdicionarPrestador.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); new Label(compositeConteudo, SWT.NONE); Button btnRemoverPrestador = formToolkit.createButton(compositeConteudo, "Remover", SWT.NONE); btnRemoverPrestador.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { IStructuredSelection selecao = (IStructuredSelection)tvPrestador.getSelection(); if(selecao.isEmpty()) return; if(openQuestion("Deseja realmente remover este prestador da lista?")){ ForneceProduto fp = (ForneceProduto) selecao.getFirstElement(); service.getProdutoServico().getListaFornecedores().remove(fp); fp.getPessoa().getListaProduto().remove(fp); calcularMedia(); tvPrestador.refresh(); } } }); btnRemoverPrestador.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/fornecedor/addFornecedor16.png")); btnRemoverPrestador.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 2, 1)); Label lblProdutosParametrizados = new Label(compositeConteudo, SWT.NONE); lblProdutosParametrizados.setText("Produtos parametrizados:"); tvProdutos = new TableViewer(compositeConteudo, SWT.BORDER | SWT.FULL_SELECTION); tableProduto = tvProdutos.getTable(); tableProduto.setLinesVisible(true); tableProduto.setHeaderVisible(true); GridData gd_tableProduto = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 2); gd_tableProduto.heightHint = 95; tableProduto.setLayoutData(gd_tableProduto); TableViewerColumn tvcDescricao = new TableViewerColumn(tvProdutos, SWT.NONE); tvcDescricao.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { return ((ProdutoServico)element).getDescricao(); } }); TableColumn tblclmnDescricao = tvcDescricao.getColumn(); tblclmnDescricao.setWidth(221); tblclmnDescricao.setText("Descri\u00E7\u00E3o"); TableViewerColumn tvcValorUnitario = new TableViewerColumn(tvProdutos, SWT.NONE); tvcValorUnitario.setLabelProvider(new ColumnLabelProvider(){ @Override public String getText(Object element) { return FormatterHelper.getDecimalFormat().format(((ProdutoServico)element).getValorUnitario()); } }); TableColumn tblclmnValorUnitrio = tvcValorUnitario.getColumn(); tblclmnValorUnitrio.setWidth(100); tblclmnValorUnitrio.setText("Valor unit\u00E1rio"); Button btnAdicionarProduto = new Button(compositeConteudo, SWT.NONE); btnAdicionarProduto.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/product/productAdd16.png")); btnAdicionarProduto.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { ProdutoServico ps = selecionarProduto(); if(ps != null){ if(service.getProdutoServico().getListaProduto().contains(ps)){ setErroMessage("O produto selecionado j� esta parametrizado neste servi�o."); return; } service.getProdutoServico().getListaProduto().add(ps); tvProdutos.refresh(); } } }); btnAdicionarProduto.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); btnAdicionarProduto.setText("Adicionar"); new Label(compositeConteudo, SWT.NONE); Button btnRemoverProduto = new Button(compositeConteudo, SWT.NONE); btnRemoverProduto.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/product/productRemove16.png")); btnRemoverProduto.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { IStructuredSelection selecao = (IStructuredSelection)tvProdutos.getSelection(); if(selecao.isEmpty()) return; if(openQuestion("Deseja realmente remover este produto do servi�o?")){ ProdutoServico ps = (ProdutoServico)selecao.getFirstElement(); service.getProdutoServico().getListaProduto().remove(ps); tvProdutos.refresh(); } } }); btnRemoverProduto.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 2, 1)); btnRemoverProduto.setText("Remover"); btnAtivo = new Button(compositeConteudo, SWT.CHECK); btnAtivo.setText("Ativo"); new Label(compositeConteudo, SWT.NONE); new Label(compositeConteudo, SWT.NONE); new Label(compositeConteudo, SWT.NONE); initDataBindings(); } @Override public void init(IEditorSite site, IEditorInput input) throws PartInitException { ServicoEditorInput sei = (ServicoEditorInput)input; if(sei.getProdutoServico().getId() != null){ service.setProdutoServico(service.find(sei.getProdutoServico().getId())); this.setPartName("Servi�o: " + service.getProdutoServico().getDescricao()); }else{ service.setProdutoServico(sei.getProdutoServico()); service.getProdutoServico().setTipo(ProdutoServico.TIPOSERVICO); } setShowExcluir(false); setSite(site); setInput(input); } public ProdutoServico selecionarProduto(){ SelecionarItemDialog sid = new SelecionarItemDialog(LayoutHelper.getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return ((ProdutoServico)element).getDescricao(); } }); sid.setElements(service.findAllProdutos().toArray()); return (ProdutoServico) sid.getElementoSelecionado(); } public Pessoa selecionarPrestador(){ SelecionarItemDialog sid = new SelecionarItemDialog(getActiveShell(), new LabelProvider(){ @Override public String getText(Object element) { return ((Pessoa)element).getNome(); } }); List<Pessoa> listaPrestador = pessoaService.findAllFornecedoresAtivos(); //removendo os fornecedores ja adicionados for(ForneceProduto fp : service.getProdutoServico().getListaFornecedores()){ listaPrestador.remove(fp.getPessoa()); } sid.setElements(listaPrestador.toArray()); return (Pessoa) sid.getElementoSelecionado(); } private void calcularMedia(){ BigDecimal media = BigDecimal.ZERO; for(ForneceProduto fp : service.getProdutoServico().getListaFornecedores()){ media = media.add(fp.getValorUnitario() == null ? BigDecimal.ZERO : fp.getValorUnitario()); } if(service.getProdutoServico().getListaFornecedores().size() > 0) media = media.divide(new BigDecimal(service.getProdutoServico().getListaFornecedores().size())); service.getProdutoServico().setValorUnitario(media); } @Override public boolean isDirty() { return service.isDirty(); } @Override public void setFocus() { initDataBindings(); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue txtDescricaoObserveTextObserveWidget = SWTObservables.observeText(txtDescricao, SWT.Modify); IObservableValue servicegetProdutoServicoDescricaoObserveValue = PojoObservables.observeValue(service.getProdutoServico(), "descricao"); bindingContext.bindValue(txtDescricaoObserveTextObserveWidget, servicegetProdutoServicoDescricaoObserveValue, null, null); // ObservableListContentProvider listContentProvider = new ObservableListContentProvider(); // IObservableMap[] observeMaps = PojoObservables.observeMaps(listContentProvider.getKnownElements(), ProdutoServico.class, new String[]{"descricao", "valorUnitario"}); // tvProdutos.setLabelProvider(new ObservableMapLabelProvider(observeMaps)); tvProdutos.setContentProvider(listContentProvider); // IObservableList servicegetProdutoServicoListaProdutoObserveList = PojoObservables.observeList(Realm.getDefault(), service.getProdutoServico(), "listaProduto"); tvProdutos.setInput(servicegetProdutoServicoListaProdutoObserveList); // IObservableValue btnAtivoObserveSelectionObserveWidget = SWTObservables.observeSelection(btnAtivo); IObservableValue servicegetProdutoServicoAtivoObserveValue = PojoObservables.observeValue(service.getProdutoServico(), "ativo"); bindingContext.bindValue(btnAtivoObserveSelectionObserveWidget, servicegetProdutoServicoAtivoObserveValue, null, null); // ObservableListContentProvider listContentProvider_1 = new ObservableListContentProvider(); // IObservableMap[] observeMaps_1 = PojoObservables.observeMaps(listContentProvider_1.getKnownElements(), ForneceProduto.class, new String[]{"id.pessoa.nome", "valorUnitario"}); // tvPrestador.setLabelProvider(new ObservableMapLabelProvider(observeMaps_1)); tvPrestador.setContentProvider(listContentProvider_1); // IObservableList listaFornecedoresServicegetProdutoServicoObserveList = PojoProperties.list("listaFornecedores").observe(service.getProdutoServico()); tvPrestador.setInput(listaFornecedoresServicegetProdutoServicoObserveList); // IObservableValue observeTextTxtMediaServicoObserveWidget = WidgetProperties.text(SWT.Modify).observe(txtMediaServico); IObservableValue valorUnitarioServicegetProdutoServicoObserveValue = PojoProperties.value("valorUnitario").observe(service.getProdutoServico()); bindingContext.bindValue(observeTextTxtMediaServicoObserveWidget, valorUnitarioServicegetProdutoServicoObserveValue, null, null); // return bindingContext; } @Override public MecasoftService<?> getService() { return service; } }