package simpleexplorer; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; 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.Composite; 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.ISelectionListener; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.internal.keys.model.ModelElement; import org.eclipse.ui.part.ViewPart; import simpleexplorer.db.DbBean; import simpleexplorer.db.ProcStock; import simpleexplorer.db.Query; import simpleexplorer.filter.TblRowFilter; import simpleexplorer.model.ModelProvider; import simpleexplorer.model.SubModule; import simpleexplorer.providers.TblRowContentProvider; import simpleexplorer.providers.TblRowLabelProvider; import simpleexplorer.sorter.TableSorter; public class View extends ViewPart { public static final String ID = "simpleExplorer.view"; private TableViewer viewer; private TblRowFilter filter; private TableSorter tableSorter; private DbBean myDbBean; private Query myProcStock; private ModelProvider modelProvider; private static Logger logger = Logger.getLogger(View.class); private static final String LOG_PROPERTIES_FILE = "log4j.properties"; /** * Méthode permettant de définir le contenu de la vue */ public void createPartControl(final Composite parent) { Properties logProperties = new Properties(); try { logProperties.load(new FileInputStream(LOG_PROPERTIES_FILE)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { //System.setProperty(Context.PROVIDER_URL, "file://" + FileLocator.resolve(Platform.getBundle("simpleExplorer").getEntry("/")).getPath()); System.setProperty("lo4j.properties", "file://" + FileLocator.resolve(Platform.getBundle("simpleExplorer").getEntry("/")).getPath()); //System.out.println("Chemin = " + FileLocator.resolve(Platform.getBundle("simpleExplorer").getEntry("/")).getPath()); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } PropertyConfigurator.configure("log4j.properties"); GridLayout layout = new GridLayout(2, false); parent.setLayout(layout); Label searchLabel = new Label(parent, SWT.NONE); searchLabel.setText("Search: "); final Text searchText = new Text(parent, SWT.BORDER | SWT.SEARCH); searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); searchText.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent ke) { filter.setSearchText(searchText.getText()); viewer.refresh(); } }); myProcStock = new ProcStock("dbo.rep_getAnnouncePendingAcknowledgementLN"); modelProvider = new ModelProvider(myProcStock); createTableViewer(parent, modelProvider); this.getSite().getWorkbenchWindow().getSelectionService().addSelectionListener("simpleExplorer.navigationview", new ISelectionListener(){ public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (selection == null) { return; } if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection)selection; SubModule firstElement = (SubModule)structuredSelection.getFirstElement(); if (firstElement != null) { myProcStock = new ProcStock(firstElement.getQuery().getName()); modelProvider = new ModelProvider(myProcStock); IViewPart viewPart = getViewSite().getWorkbenchWindow().getActivePage().findView(View.ID); getViewSite().getWorkbenchWindow().getActivePage().hideView(viewPart); try { getViewSite().getWorkbenchWindow().getActivePage().showView(View.ID); } catch (PartInitException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error("erreur dans le selectionchanger : " ); } createTableViewer(parent, modelProvider); for (int i = 0; i < modelProvider.getHearders().length; i++) logger.info("After createtableviewer : model provider = " + modelProvider.getHearders()[i]); } } } // @SuppressWarnings("unused") // public void doubleClick(org.eclipse.jface.viewers.DoubleClickEvent event){ // try { // if ( ((StructuredSelection)event.getSelection()).getFirstElement().getClass() == SubModule.class){ // SubModule s = null; // try { // s = (SubModule)((StructuredSelection)event.getSelection()).getFirstElement(); // System.out.println("first element" + s.getQuery().getName()); // } catch(Exception e){ // e.printStackTrace(); // s = null; // } // //Global.getInstance().setPosition(s.getID()); // IViewPart viewPart = getViewSite().getWorkbenchWindow().getActivePage().findView(View.ID); // getViewSite().getWorkbenchWindow().getActivePage().hideView(viewPart); // getViewSite().getWorkbenchWindow().getActivePage().showView(View.ID); // // myProcStock = new ProcStock(s.getQuery().getName()); // // }else{ // MessageDialog.openInformation(getSite().getShell(),"Ouverture","Veuillez ouvrir le fichier"); // } // }catch (Throwable e){ // System.out.println("Erreur: "+e); // } // } // }); //modelProvider = new ModelProvider(myProcStock); //System.out.println("My procstock = " + myProcStock.getName()); //System.out.println("model provider = " + modelProvider.getHearders().toString()); //createTableViewer(parent, modelProvider); } /** * cette méthode permet de créer un tableViewer * @param parent * @param resultset */ //private void createTableViewer(final Composite parent, final String[] headers, final String[] types){ private void createTableViewer(final Composite parent, final ModelProvider modelProvider){ viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); // création des colonnes de la table //createColumns(viewer, headers, types); createColumns(viewer, modelProvider.getHearders(), modelProvider.getTypes()); viewer.setContentProvider(new TblRowContentProvider()); viewer.setLabelProvider(new TblRowLabelProvider()); // On récupère le content de la vue, la méthode setInput appelera getElements // dans le contentProvider viewer.setInput(modelProvider.getTblRows()); // On active la sélection getSite().setSelectionProvider(viewer); // On active le Sorter sur notre table tableSorter = new TableSorter(); viewer.setSorter(tableSorter); filter = new TblRowFilter(); viewer.addFilter(filter); // Layout the viewer GridData gridData = new GridData(); gridData.verticalAlignment = GridData.FILL; gridData.horizontalSpan = 2; gridData.grabExcessHorizontalSpace = true; gridData.grabExcessVerticalSpace = true; gridData.horizontalAlignment = GridData.FILL; viewer.getControl().setLayoutData(gridData); } /** * les colonnes sont crées avec des noms vennant de la base de données * @param viewer */ private void createColumns(final TableViewer viewer, String[] headers, String[] types) { Table table = viewer.getTable(); // initialisation des bounds : leur taille devra à terme être gérée dynamiquement int[] bounds = new int [headers.length]; for (int i=0; i