|
|
|
|
Re: Adding Additional Parameters to ContentAssistContext [message #1723501 is a reply to message #1723499] |
Tue, 16 February 2016 08:34 |
pranay roy Messages: 196 Registered: January 2016 |
Senior Member |
|
|
This metadata is like additional parameter that is used to invoke content assist api. For example ,
This is how I am executing the content assist
def ContentAssistServiceResponse executeContentAssistor(ContentAssistServiceRequest request) {
val prefix =request.getPrefix ;
val prefixSize = prefix.length
val accountNo=request.accountNo
val Injector injector = new EinDslStandAloneCASetup().createInjectorAndDoEMFRegistration()
val resourceSet = injector.getInstance(ResourceSet);
val resource = resourceSet.createResource(URI.createURI("file:/example.eindsl")) as XtextResource
resource.load(new ByteArrayInputStream(prefix.toString.getBytes(Charsets.UTF_8)),null)
val standAloneContentAssistService = injector.getInstance(StandAloneContentAssistService)
val selection = new TextRegion(prefixSize,0 )
val result = standAloneContentAssistService.createProposals(resource, resource.parseResult.rootNode.text, selection,prefixSize, 1000)
if(result==null) {
throw new ContentAssistFailureException("Content Assist has failed to provide proposals")
}
val contentAssistServiceResponse= updateResponseModelFromResultAndPrefix(prefix,result)
return contentAssistServiceResponse
}
This is the StandAloneContentAssistService
class StandAloneContentAssistService {
@Inject Provider<ContentAssistContextFactory> contextFactoryProvider
@Inject IdeContentProposalProvider proposalProvider
def createProposals(XtextResource resource, String text, ITextRegion selection, int caretOffset, int limit) {
val contexts = getContexts(resource, text, selection, caretOffset)
return createProposals(Arrays.asList(contexts), limit)
}
def private ContentAssistContext[] getContexts(XtextResource resource, String text, ITextRegion selection,
int caretOffset) {
if (caretOffset > text.length)
return #[]
val contextFactory = contextFactoryProvider.get() => [pool = Executors.newCachedThreadPool]
contextFactory.create(text, selection, caretOffset, resource)
}
def private createProposals(List<ContentAssistContext> contexts, int proposalsLimit) {
val result = new ContentAssistResult(null)
if (!contexts.empty) {
val proposals = new HashSet<Pair<Integer, ContentAssistEntry>>
val acceptor = new IIdeContentProposalAcceptor{
override accept(ContentAssistEntry entry, int priority) {
if (entry.proposal === null)
throw new IllegalArgumentException('proposal must not be null.')
proposals.add(priority -> entry)
}
override canAcceptMoreProposals() {
proposals.size < proposalsLimit
}
}
proposalProvider.createProposals(contexts, acceptor)
result.entries.addAll(proposals.sortWith [ p1, p2 |
val prioResult = p2.key.compareTo(p1.key)
if (prioResult != 0)
return prioResult
val s1 = p1.value.label ?: p1.value.proposal
val s2 = p2.value.label ?: p2.value.proposal
return s1.compareTo(s2)
].map[value])
}
return result
}
}
Notice the account Number that I had in my request .
I want to retrieve it here when
class StatemachineWebContentProposalProvider extends IdeContentProposalProvider {
@Inject extension EinDslGrammarAccess
@Inject SuggestionsService suggestionService
override dispatch createProposals(RuleCall ruleCall, ContentAssistContext context,
IIdeContentProposalAcceptor acceptor) {
val prefix= context.prefix
val accountNo=??? <------------need accountNo here.
val rule=ruleCall.rule
I do not intend to inject the class variable of provider. Instead I wish to add in the ContentAssistContext.
[Updated on: Tue, 16 February 2016 08:39] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.05452 seconds