1 20 21 package org.apache.directory.ldapstudio.browser.ui.actions; 22 23 24 import java.util.Iterator ; 25 import java.util.LinkedHashSet ; 26 import java.util.Set ; 27 28 import org.apache.directory.ldapstudio.browser.common.actions.BrowserAction; 29 import org.apache.directory.ldapstudio.browser.common.actions.CopyAction; 30 import org.apache.directory.ldapstudio.browser.core.model.IAttribute; 31 import org.apache.directory.ldapstudio.browser.core.model.IValue; 32 import org.apache.directory.ldapstudio.browser.core.utils.LdapFilterUtils; 33 import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants; 34 import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin; 35 36 import org.eclipse.jface.resource.ImageDescriptor; 37 import org.eclipse.swt.dnd.TextTransfer; 38 import org.eclipse.swt.dnd.Transfer; 39 40 41 47 public class CopySearchFilterAction extends BrowserAction 48 { 49 50 53 public static final int MODE_EQUALS = 0; 54 55 58 public static final int MODE_NOT = 1; 59 60 63 public static final int MODE_AND = 2; 64 65 68 public static final int MODE_OR = 3; 69 70 private int mode; 71 72 73 79 public CopySearchFilterAction( int mode ) 80 { 81 this.mode = mode; 82 } 83 84 85 88 public String getText() 89 { 90 if ( mode == MODE_EQUALS ) 91 { 92 return "Copy Search Filter"; 93 } 94 else if ( mode == MODE_NOT ) 95 { 96 return "Copy NOT Search Filter"; 97 } 98 else if ( mode == MODE_AND ) 99 { 100 return "Copy AND Search Filter"; 101 } 102 else if ( mode == MODE_OR ) 103 { 104 return "Copy OR Search Filter"; 105 } 106 else 107 { 108 return "Copy Search Filter"; 109 } 110 } 111 112 113 116 public ImageDescriptor getImageDescriptor() 117 { 118 if ( mode == MODE_EQUALS ) 119 { 120 return BrowserUIPlugin.getDefault().getImageDescriptor( BrowserUIConstants.IMG_FILTER_EQUALS ); 121 } 122 else if ( mode == MODE_NOT ) 123 { 124 return BrowserUIPlugin.getDefault().getImageDescriptor( BrowserUIConstants.IMG_FILTER_NOT ); 125 } 126 else if ( mode == MODE_AND ) 127 { 128 return BrowserUIPlugin.getDefault().getImageDescriptor( BrowserUIConstants.IMG_FILTER_AND ); 129 } 130 else if ( mode == MODE_OR ) 131 { 132 return BrowserUIPlugin.getDefault().getImageDescriptor( BrowserUIConstants.IMG_FILTER_OR ); 133 } 134 else 135 { 136 return BrowserUIPlugin.getDefault().getImageDescriptor( BrowserUIConstants.IMG_FILTER_EQUALS ); 137 } 138 } 139 140 141 144 public String getCommandId() 145 { 146 return null; 147 } 148 149 150 153 public boolean isEnabled() 154 { 155 if ( mode == MODE_EQUALS || mode == MODE_NOT ) 156 { 157 return getSelectedAttributeHierarchies().length + getSelectedAttributes().length 158 + getSelectedValues().length == 1 159 && ( getSelectedValues().length == 1 160 || ( getSelectedAttributes().length == 1 && getSelectedAttributes()[0].getValueSize() == 1 ) || ( getSelectedAttributeHierarchies().length == 1 161 && getSelectedAttributeHierarchies()[0].size() == 1 && getSelectedAttributeHierarchies()[0] 162 .getAttribute().getValueSize() == 1 ) ); 163 } 164 else if ( mode == MODE_AND || mode == MODE_OR ) 165 { 166 return getSelectedAttributeHierarchies().length + getSelectedAttributes().length 167 + getSelectedValues().length > 0; 168 } 169 else 170 { 171 return false; 172 } 173 } 174 175 176 179 public void run() 180 { 181 182 String filter = null; 183 184 if ( mode == MODE_EQUALS ) 185 { 186 filter = getFilter( null ); 187 } 188 else if ( mode == MODE_NOT ) 189 { 190 filter = getFilter( "!" ); 191 } 192 else if ( mode == MODE_AND ) 193 { 194 filter = getFilter( "&" ); 195 } 196 else if ( mode == MODE_OR ) 197 { 198 filter = getFilter( "|" ); 199 } 200 201 if ( filter != null && filter.length() > 0 ) 202 { 203 CopyAction.copyToClipboard( new Object [] 204 { filter }, new Transfer[] 205 { TextTransfer.getInstance() } ); 206 } 207 208 } 209 210 211 219 private String getFilter( String filterType ) 220 { 221 Set filterSet = new LinkedHashSet (); 222 for ( int i = 0; i < getSelectedAttributeHierarchies().length; i++ ) 223 { 224 for ( Iterator it = getSelectedAttributeHierarchies()[i].iterator(); it.hasNext(); ) 225 { 226 IAttribute att = ( IAttribute ) it.next(); 227 IValue[] values = att.getValues(); 228 for ( int v = 0; v < values.length; v++ ) 229 { 230 filterSet.add( LdapFilterUtils.getFilter( values[v] ) ); 231 } 232 } 233 } 234 for ( int a = 0; a < getSelectedAttributes().length; a++ ) 235 { 236 IValue[] values = getSelectedAttributes()[a].getValues(); 237 for ( int v = 0; v < values.length; v++ ) 238 { 239 filterSet.add( LdapFilterUtils.getFilter( values[v] ) ); 240 } 241 } 242 for ( int v = 0; v < getSelectedValues().length; v++ ) 243 { 244 filterSet.add( LdapFilterUtils.getFilter( getSelectedValues()[v] ) ); 245 } 246 247 StringBuffer filter = new StringBuffer (); 248 if ( filterType != null ) 249 { 250 filter.append( "(" ); 251 filter.append( filterType ); 252 for ( Iterator filterIterator = filterSet.iterator(); filterIterator.hasNext(); ) 253 { 254 filter.append( filterIterator.next() ); 255 } 256 filter.append( ")" ); 257 } 258 else if ( filterSet.size() == 1 ) 259 { 260 filter.append( filterSet.toArray()[0] ); 261 } 262 263 return filter.toString(); 264 } 265 } 266 | Popular Tags |