1 20 21 package org.apache.directory.ldapstudio.browser.common.widgets.browser; 22 23 24 import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator; 25 import org.apache.directory.ldapstudio.browser.core.events.AttributesInitializedEvent; 26 import org.apache.directory.ldapstudio.browser.core.events.ConnectionUpdateEvent; 27 import org.apache.directory.ldapstudio.browser.core.events.ConnectionUpdateListener; 28 import org.apache.directory.ldapstudio.browser.core.events.EntryModificationEvent; 29 import org.apache.directory.ldapstudio.browser.core.events.EntryUpdateListener; 30 import org.apache.directory.ldapstudio.browser.core.events.EventRegistry; 31 import org.apache.directory.ldapstudio.browser.core.model.IEntry; 32 import org.eclipse.jface.viewers.DoubleClickEvent; 33 import org.eclipse.jface.viewers.IDoubleClickListener; 34 import org.eclipse.jface.viewers.IStructuredSelection; 35 import org.eclipse.jface.viewers.ITreeContentProvider; 36 import org.eclipse.jface.viewers.ITreeViewerListener; 37 import org.eclipse.jface.viewers.TreeExpansionEvent; 38 import org.eclipse.jface.viewers.TreeViewer; 39 40 41 47 public class BrowserUniversalListener implements ConnectionUpdateListener, EntryUpdateListener 48 { 49 50 51 protected TreeViewer viewer; 52 53 54 private ITreeViewerListener treeViewerListener = new ITreeViewerListener() 55 { 56 66 public void treeCollapsed( TreeExpansionEvent event ) 67 { 68 if ( event.getElement() instanceof IEntry ) 69 { 70 IEntry entry = ( IEntry ) event.getElement(); 71 if ( entry.isChildrenInitialized() && entry.hasMoreChildren() 72 && entry.getChildrenCount() < entry.getConnection().getCountLimit() ) 73 { 74 entry.setChildrenInitialized( false ); 75 } 76 } 77 } 78 79 80 83 public void treeExpanded( TreeExpansionEvent event ) 84 { 85 } 86 }; 87 88 89 private IDoubleClickListener doubleClickListener = new IDoubleClickListener() 90 { 91 92 public void doubleClick( DoubleClickEvent event ) 93 { 94 if ( event.getSelection() instanceof IStructuredSelection ) 95 { 96 Object obj = ( ( IStructuredSelection ) event.getSelection() ).getFirstElement(); 97 if ( viewer.getExpandedState( obj ) ) 98 { 99 viewer.collapseToLevel( obj, 1 ); 100 } 101 else if ( ( ( ITreeContentProvider ) viewer.getContentProvider() ).hasChildren( obj ) ) 102 { 103 viewer.expandToLevel( obj, 1 ); 104 } 105 } 106 } 107 108 }; 109 110 111 116 public BrowserUniversalListener( TreeViewer viewer ) 117 { 118 this.viewer = viewer; 119 120 viewer.addTreeListener( treeViewerListener ); 121 viewer.addDoubleClickListener( doubleClickListener ); 122 123 EventRegistry.addConnectionUpdateListener( this, BrowserCommonActivator.getDefault().getEventRunner() ); 124 EventRegistry.addEntryUpdateListener( this, BrowserCommonActivator.getDefault().getEventRunner() ); 125 } 126 127 128 131 public void dispose() 132 { 133 if ( viewer != null ) 134 { 135 viewer.removeTreeListener( treeViewerListener ); 136 viewer.removeDoubleClickListener( doubleClickListener ); 137 138 EventRegistry.removeConnectionUpdateListener( this ); 139 EventRegistry.removeEntryUpdateListener( this ); 140 141 viewer = null; 142 } 143 } 144 145 146 152 public void connectionUpdated( ConnectionUpdateEvent connectionUpdateEvent ) 153 { 154 if ( connectionUpdateEvent.getDetail() == ConnectionUpdateEvent.EventDetail.CONNECTION_CLOSED ) 155 { 156 viewer.collapseAll(); 157 } 158 else if ( connectionUpdateEvent.getDetail() == ConnectionUpdateEvent.EventDetail.CONNECTION_OPENED ) 159 { 160 viewer.refresh( connectionUpdateEvent.getConnection() ); 161 } 162 else 163 { 164 viewer.refresh( connectionUpdateEvent.getConnection() ); 165 } 166 } 167 168 169 174 public void entryUpdated( EntryModificationEvent event ) 175 { 176 if ( event instanceof AttributesInitializedEvent ) 187 { 188 return; 189 } 190 191 viewer.refresh( event.getModifiedEntry(), true ); 192 193 } 194 195 } 196 | Popular Tags |