1 20 21 package org.apache.directory.ldapstudio.browser.common.filtereditor; 22 23 24 import java.util.ArrayList ; 25 import java.util.Arrays ; 26 import java.util.List ; 27 28 import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator; 29 import org.apache.directory.ldapstudio.browser.common.BrowserCommonConstants; 30 import org.apache.directory.ldapstudio.browser.core.model.filter.LdapFilter; 31 import org.apache.directory.ldapstudio.browser.core.model.filter.LdapFilterItemComponent; 32 import org.apache.directory.ldapstudio.browser.core.model.filter.parser.LdapFilterParser; 33 34 import org.eclipse.jface.contentassist.IContentAssistSubjectControl; 35 import org.eclipse.jface.contentassist.ISubjectControlContentAssistProcessor; 36 import org.eclipse.jface.text.IRegion; 37 import org.eclipse.jface.text.ITextViewer; 38 import org.eclipse.jface.text.contentassist.CompletionProposal; 39 import org.eclipse.jface.text.contentassist.ICompletionProposal; 40 import org.eclipse.jface.text.contentassist.IContextInformation; 41 import org.eclipse.jface.text.source.ISourceViewer; 42 import org.eclipse.jface.text.templates.Template; 43 import org.eclipse.jface.text.templates.TemplateCompletionProcessor; 44 import org.eclipse.jface.text.templates.TemplateContextType; 45 import org.eclipse.swt.graphics.Image; 46 47 48 public class FilterContentAssistProcessor extends TemplateCompletionProcessor implements 50 ISubjectControlContentAssistProcessor 51 { 52 53 private LdapFilterParser parser; 54 55 private ISourceViewer sourceViewer; 56 57 private char[] autoActivationCharacters; 58 59 private String [] possibleAttributeTypes; 60 61 62 public FilterContentAssistProcessor( LdapFilterParser parser ) 63 { 64 this( null, parser ); 65 } 66 67 68 public FilterContentAssistProcessor( ISourceViewer sourceViewer, LdapFilterParser parser ) 69 { 70 super(); 71 this.parser = parser; 72 this.sourceViewer = sourceViewer; 73 74 this.autoActivationCharacters = new char[1 + 26 + 26]; 75 this.autoActivationCharacters[0] = '('; 76 int i = 1; 77 for ( char c = 'a'; c <= 'z'; c++, i++ ) 78 { 79 this.autoActivationCharacters[i] = c; 80 } 81 for ( char c = 'A'; c <= 'Z'; c++, i++ ) 82 { 83 this.autoActivationCharacters[i] = c; 84 } 85 } 86 87 88 public void setPossibleAttributeTypes( String [] possibleAttributeTypes ) 89 { 90 Arrays.sort( possibleAttributeTypes ); 91 this.possibleAttributeTypes = possibleAttributeTypes; 92 } 93 94 95 public char[] getCompletionProposalAutoActivationCharacters() 96 { 97 return this.autoActivationCharacters; 98 } 99 100 101 public ICompletionProposal[] computeCompletionProposals( ITextViewer viewer, int offset ) 102 { 103 return this.computeCompletionProposals( offset ); 104 } 105 106 107 public ICompletionProposal[] computeCompletionProposals( IContentAssistSubjectControl contentAssistSubjectControl, 108 int documentOffset ) 109 { 110 String filter = contentAssistSubjectControl.getDocument().get(); 111 this.parser.parse( filter ); 112 return this.computeCompletionProposals( documentOffset ); 113 } 114 115 116 public IContextInformation[] computeContextInformation( IContentAssistSubjectControl contentAssistSubjectControl, 117 int documentOffset ) 118 { 119 return null; 120 } 121 122 123 private ICompletionProposal[] computeCompletionProposals( int offset ) 124 { 125 List proposalList = new ArrayList (); 126 LdapFilter filter = this.parser.getModel().getFilter( offset ); 127 if ( filter != null ) 128 { 129 if ( filter.getStartToken() != null && filter.getFilterComponent() == null ) 130 { 131 132 if ( sourceViewer != null ) 133 { 134 ICompletionProposal[] templateProposals = super.computeCompletionProposals( sourceViewer, offset ); 135 if ( templateProposals != null ) 136 { 137 proposalList.addAll( Arrays.asList( templateProposals ) ); 138 } 139 } 140 141 for ( int k = 0; k < this.possibleAttributeTypes.length; k++ ) 142 { 143 ICompletionProposal proposal = new CompletionProposal( this.possibleAttributeTypes[k], offset, 0, 144 this.possibleAttributeTypes[k].length() ); 145 proposalList.add( proposal ); 146 } 147 } 148 else if ( filter.getFilterComponent() instanceof LdapFilterItemComponent 149 && filter.getFilterComponent().getStartToken().getOffset() <= offset 150 && offset <= filter.getFilterComponent().getStartToken().getOffset() 151 + filter.getFilterComponent().getStartToken().getLength() ) 152 { 153 LdapFilterItemComponent fc = ( LdapFilterItemComponent ) filter.getFilterComponent(); 155 for ( int k = 0; k < this.possibleAttributeTypes.length; k++ ) 156 { 157 if ( this.possibleAttributeTypes[k].startsWith( fc.getAttributeToken().getValue() ) ) 158 { 159 ICompletionProposal proposal = new CompletionProposal( this.possibleAttributeTypes[k], fc 160 .getAttributeToken().getOffset(), fc.getAttributeToken().getLength(), 161 this.possibleAttributeTypes[k].length() ); 162 proposalList.add( proposal ); 163 } 164 } 165 } 166 else 167 { 168 } 170 } 171 return ( ICompletionProposal[] ) proposalList.toArray( new ICompletionProposal[0] ); 172 173 } 174 175 176 protected Template[] getTemplates( String contextTypeId ) 177 { 178 Template[] templates = BrowserCommonActivator.getDefault().getFilterTemplateStore().getTemplates( 179 BrowserCommonConstants.FILTER_TEMPLATE_ID ); 180 return templates; 181 } 182 183 184 protected TemplateContextType getContextType( ITextViewer viewer, IRegion region ) 185 { 186 TemplateContextType contextType = BrowserCommonActivator.getDefault().getFilterTemplateContextTypeRegistry() 187 .getContextType( BrowserCommonConstants.FILTER_TEMPLATE_ID ); 188 return contextType; 189 } 190 191 192 protected Image getImage( Template template ) 193 { 194 return BrowserCommonActivator.getDefault().getImage( BrowserCommonConstants.IMG_TEMPLATE ); 195 } 196 197 } 198 | Popular Tags |