package tela.editor;
import static aplicacao.helper.LayoutHelper.getActiveShell;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
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.ui.ISaveablePart2;
import org.eclipse.ui.part.EditorPart;
import org.eclipse.wb.swt.ResourceManager;
import tela.dialog.ErroDialog;
import tela.dialog.SimNaoCancelarDialog;
import aplicacao.exception.ValidationException;
import aplicacao.helper.LayoutHelper;
import aplicacao.service.MecasoftService;
public abstract class MecasoftEditor extends EditorPart implements ISaveablePart2{
private Logger log = Logger.getLogger(getClass());
protected Composite compositeConteudo;
private Composite compositeBotoes;
private Boolean showExcluir = true;
private Boolean showSalvar = true;
private Button btnExcluir;
private Button btnSalvar;
public MecasoftEditor() {
}
public abstract void salvarRegistro() throws ValidationException;
public abstract void excluirRegistro();
public abstract void addComponentes(Composite compositeConteudo);
public abstract MecasoftService<?> getService();
@Override
public void createPartControl(Composite parent) {
parent.setLayout(new FillLayout(SWT.HORIZONTAL));
ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
Composite composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
compositeConteudo = new Composite(composite, SWT.BORDER);
compositeConteudo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
compositeBotoes = new Composite(composite, SWT.BORDER);
compositeBotoes.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
compositeBotoes.setLayout(new GridLayout(6, false));
btnSalvar = new Button(compositeBotoes, SWT.NONE);
btnSalvar.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
try {
salvarRegistro();
closeThisEditor();
} catch (ValidationException e4) {
setErroMessage(e4.getMessage());
log.warn(e4);
return;
}catch(Exception e1){
log.error(e1);
}
}
});
btnSalvar.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/save32.png"));
btnSalvar.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
btnSalvar.setText("Salvar");
btnExcluir = new Button(compositeBotoes, SWT.NONE);
btnExcluir.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
excluirRegistro();
}
});
btnExcluir.setImage(ResourceManager.getPluginImage("mecasoft", "assents/funcoes/delete32.png"));
btnExcluir.setText("Excluir");
addComponentes(compositeConteudo);
scrolledComposite.setContent(composite);
scrolledComposite.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
scrolledComposite.getVerticalBar().setPageIncrement(15);
scrolledComposite.getVerticalBar().setIncrement(15);
if(!showExcluir)
btnExcluir.setEnabled(false);
// disposeExcluir();
if(!showSalvar)
btnSalvar.setEnabled(false);
// disposeSalvar();
}
@Override
public void doSave(IProgressMonitor monitor) {
}
@Override
public void doSaveAs() {
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
public void setShowExcluir(Boolean showExcluir){
this.showExcluir = showExcluir;
}
public Boolean getShowExcluir() {
return showExcluir;
}
public void setShowSalvar(Boolean showSalvar){
this.showSalvar = showSalvar;
}
public Boolean getShowSalvar() {
return showSalvar;
}
public void disposeSalvar(){
btnSalvar.dispose();
}
public void disposeExcluir(){
btnExcluir.dispose();
}
public void closeThisEditor(){
// getService().commit();
close();
}
public void close(){
getEditorSite().getPart().getSite().getWorkbenchWindow().getActivePage().closeEditor(this, false);
}
@Override
public int promptToSaveOnClose() {
SimNaoCancelarDialog sncd = new SimNaoCancelarDialog(getActiveShell(), "Os dados foram alterados, deseja salvar antes de sair?");
try {
sncd.open();
if(sncd.getId() == IDialogConstants.OK_ID){
salvarRegistro();
closeThisEditor();
return YES;
}
if(sncd.getId() == IDialogConstants.CANCEL_ID){
getService().rollBack();
getSite().getWorkbenchWindow().getActivePage().closeAllEditors(false);
return NO;
}
} catch (ValidationException e) {
setErroMessage(e.getMessage());
}
return CANCEL;
}
public Button createNewButton(String text){
Button btn = new Button(compositeBotoes, SWT.NONE);
btn.setText(text);
return btn;
}
public Button createNewButton(){
return createNewButton("");
}
public void showComponentes(Boolean possuiId){}
public void setErroMessage(String erro){
new ErroDialog(LayoutHelper.getActiveShell(), erro).open();
}
}