KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > directory > ldapstudio > browser > common > filtereditor > FilterContentAssistProcessor


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  */

20
21 package org.apache.directory.ldapstudio.browser.common.filtereditor;
22
23
24 import java.util.ArrayList JavaDoc;
25 import java.util.Arrays JavaDoc;
26 import java.util.List JavaDoc;
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 // TODO: Refactor Filter Editor
49
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 JavaDoc[] 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 JavaDoc[] 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 JavaDoc 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 JavaDoc proposalList = new ArrayList JavaDoc();
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                 // show matching attribute types
154
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                 // no proposals
169
}
170         }
171         return ( ICompletionProposal[] ) proposalList.toArray( new ICompletionProposal[0] );
172
173     }
174
175
176     protected Template[] getTemplates( String JavaDoc 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