Java tutorial
/******************************************************************************* * Copyright (c) 2011 Softberries Krzysztof Grajek. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Softberries Krzysztof Grajek - initial API and implementation ******************************************************************************/ package com.softberries.klerk.gui.editors; import java.sql.SQLException; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Locale; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import com.softberries.klerk.dao.CompanyDao; import com.softberries.klerk.dao.DocumentDao; import com.softberries.klerk.dao.to.Company; import com.softberries.klerk.dao.to.Document; import com.softberries.klerk.dao.to.DocumentItem; import com.softberries.klerk.dao.to.IDocumentType; import com.softberries.klerk.dao.to.Person; import com.softberries.klerk.gui.editors.input.CompanyEditorInput; import com.softberries.klerk.gui.editors.input.DocumentEditorInput; import com.softberries.klerk.gui.helpers.Messages; import com.softberries.klerk.gui.helpers.table.CompaniesModelProvider; import com.softberries.klerk.gui.helpers.table.DocumentComparator; import com.softberries.klerk.gui.helpers.table.DocumentFilter; import com.softberries.klerk.gui.helpers.table.DocumentsModelProvider; import com.softberries.klerk.gui.helpers.table.SimpleKlerkComparator; import com.softberries.klerk.gui.helpers.table.SimpleKlerkFilter; public abstract class DocumentsEditor extends GenericKlerkEditor { private Document selectedDocument; public DocumentsEditor(SimpleKlerkComparator comp, SimpleKlerkFilter filter, Object input) { super(comp, filter, input); } public DocumentsEditor(int DOC_TYPE) { super(new DocumentComparator(), new DocumentFilter(), DocumentsModelProvider.INSTANCE.getDocuments(DOC_TYPE, true));//TODO } @Override protected void createColumns(final Composite parent, final TableViewer viewer) { String[] titles = { Messages.DocumentsEditor_title, Messages.DocumentsEditor_date_created, Messages.DocumentsEditor_transaction_date, Messages.DocumentsEditor_due_date, Messages.DocumentsEditor_place_created, Messages.DocumentsEditor_creator, Messages.DocumentsEditor_notes }; int[] bounds = { 200, 100, 100, 100, 100, 100, 100 }; // First column is for the title TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0); col.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { cell.setText(((Document) cell.getElement()).getTitle()); } }); // Now the date (created) col = createTableViewerColumn(titles[1], bounds[1], 1); col.setLabelProvider(new ColumnLabelProvider() { @Override public void update(ViewerCell cell) { Date date = ((Document) cell.getElement()).getCreatedDate(); cell.setText(getDateFormatted(date)); } }); // Now the date (transaction) col = createTableViewerColumn(titles[2], bounds[2], 2); col.setLabelProvider(new ColumnLabelProvider() { @Override public void update(ViewerCell cell) { Date date = ((Document) cell.getElement()).getTransactionDate(); cell.setText(getDateFormatted(date)); } }); // Now the date (due) col = createTableViewerColumn(titles[3], bounds[3], 3); col.setLabelProvider(new ColumnLabelProvider() { @Override public void update(ViewerCell cell) { Date date = ((Document) cell.getElement()).getDueDate(); cell.setText(getDateFormatted(date)); } }); // place col = createTableViewerColumn(titles[4], bounds[4], 4); col.setLabelProvider(new ColumnLabelProvider() { @Override public void update(ViewerCell cell) { cell.setText(((Document) cell.getElement()).getPlaceCreated()); } }); // creator col = createTableViewerColumn(titles[5], bounds[5], 5); col.setLabelProvider(new ColumnLabelProvider() { @Override public void update(ViewerCell cell) { Document doc = ((Document) cell.getElement()); cell.setText(doc.getCreator().getFirstName() + " " //$NON-NLS-1$ + doc.getCreator().getLastName()); } }); // Second column is for the notes col = createTableViewerColumn(titles[6], bounds[6], 6); col.setLabelProvider(new CellLabelProvider() { @Override public void update(ViewerCell cell) { String notes = ((Document) cell.getElement()).getNotes(); if (notes != null) { notes = notes.replaceAll("\\r\\n|\\r|\\n", " "); } cell.setText(notes); } }); } private String getDateFormatted(Date date) { DateFormat dtf = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.getDefault()); return dtf.format(date); } @Override protected void addButtonClicked() { Document newD = new Document(); newD.setTitle("Faktura vat..."); newD.setItems(new ArrayList<DocumentItem>()); newD.setCreator(new Person()); newD.setBuyer(new Company()); newD.setSeller(new Company()); newD.setDocumentType(getDocumentType()); openEditor(newD, getDocumentType()); } @Override protected void deleteButtonClicked() { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); if (this.getSelectedDocument() == null || this.getSelectedDocument().getId() == null) { MessageDialog.openInformation(shell, "Information", "Nothing to delete"); return; } boolean confirmed = MessageDialog.openConfirm(shell, "Confirm", "Are you sure you want to delete this document?"); if (confirmed) { DocumentDao dao = new DocumentDao(DB_FOLDER_PATH); try { dao.delete(this.getSelectedDocument().getId()); closeOpenedEditorForThisItem(new DocumentEditorInput(this.getSelectedDocument())); DocumentsModelProvider.INSTANCE.getDocuments(getDocumentType(), false) .remove(this.getSelectedDocument()); this.setSelectedDocument(null); } catch (SQLException e) { e.printStackTrace(); } viewer.setInput(DocumentsModelProvider.INSTANCE.getDocuments(getDocumentType(), false)); viewer.refresh(); } } @Override protected void editButtonClicked() { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); if (this.getSelectedDocument() == null || this.getSelectedDocument().getId() == null) { MessageDialog.openInformation(shell, "Information", "Nothing to edit"); return; } openEditor(this.getSelectedDocument(), getDocumentType()); } @Override protected void refreshButtonClicked() { viewer.setInput(DocumentsModelProvider.INSTANCE.getDocuments(getDocumentType(), true)); viewer.refresh(); } @Override protected void onDoubleClick(IStructuredSelection selection) { Document d = (Document) selection.getFirstElement(); openEditor(d, getDocumentType()); } @Override protected void setSelectedObject(Object selection) { if (selection != null && selection instanceof Document) { this.setSelectedDocument((Document) selection); } } /** * @return the selectedDocument */ public Document getSelectedDocument() { return selectedDocument; } /** * @param selectedDocument the selectedDocument to set */ public void setSelectedDocument(Document selectedDocument) { this.selectedDocument = selectedDocument; } /** * Define a document type for this class * @return {@link IDocumentType} value */ public abstract int getDocumentType(); }