Skip to main content



      Home
Home » Modeling » TMF (Xtext) » Adding Additional Parameters to ContentAssistContext
Adding Additional Parameters to ContentAssistContext [message #1723489] Tue, 16 February 2016 02:22 Go to next message
Eclipse UserFriend
Hi,
I am trying to add additional metadata (say abc) to ContentAssistContext which I want to use here.


 StatemachineWebContentProposalProvider extends IdeContentProposalProvider {

    
  override dispatch createProposals(RuleCall ruleCall, ContentAssistContext context,
    IIdeContentProposalAcceptor acceptor) {

    context.abc



    }




I though I could directly add in the context which I could retrieve as above. However I see that , it is created using Factory which restricts any additional paramter.
  val contextFactory = contextFactoryProvider.get() => [pool = Executors.newCachedThreadPool]
        contextFactory.create(text, selection, caretOffset, resource)


Could you suggest a way to modify context. Is it recommended. Basically , I wish to pass additional parameter to the method I posted above.
Re: Adding Additional Parameters to ContentAssistContext [message #1723490 is a reply to message #1723489] Tue, 16 February 2016 02:26 Go to previous messageGo to next message
Eclipse UserFriend
can you be a bit more specific what you want to do?
Re: Adding Additional Parameters to ContentAssistContext [message #1723492 is a reply to message #1723490] Tue, 16 February 2016 02:48 Go to previous messageGo to next message
Eclipse UserFriend
I want to add an additional metadata to ContentAssistContext. Such that I can use it in createProposals . For example :context.accountNo


 StatemachineWebContentProposalProvider extends IdeContentProposalProvider {

    
  override dispatch createProposals(RuleCall ruleCall, ContentAssistContext context,
    IIdeContentProposalAcceptor acceptor) {

    



    }
Re: Adding Additional Parameters to ContentAssistContext [message #1723499 is a reply to message #1723492] Tue, 16 February 2016 03:20 Go to previous messageGo to next message
Eclipse UserFriend
hi,

what i wanted to know.

- where does this metadata come from?
- why you cannot inject/set this data into the proposalprovider itself?
Re: Adding Additional Parameters to ContentAssistContext [message #1723501 is a reply to message #1723499] Tue, 16 February 2016 03:34 Go to previous messageGo to next message
Eclipse UserFriend
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 03:39] by Moderator

Re: Adding Additional Parameters to ContentAssistContext [message #1723502 is a reply to message #1723501] Tue, 16 February 2016 03:39 Go to previous messageGo to next message
Eclipse UserFriend
id create a

@Singleton
class MyBusinessContext {
public var accountNo
}

and inject that to my proposal provider ContentAssistServiceResponse id ask the injector
for the MyBusinessContext and set its accountno
Re: Adding Additional Parameters to ContentAssistContext [message #1723518 is a reply to message #1723502] Tue, 16 February 2016 06:07 Go to previous messageGo to next message
Eclipse UserFriend
Could you please elaborate on "and inject that to my proposal provider ContentAssistServiceResponse id ask the injector
for the MyBusinessContext and set its accountno"

I
Re: Adding Additional Parameters to ContentAssistContext [message #1723521 is a reply to message #1723518] Tue, 16 February 2016 06:18 Go to previous messageGo to next message
Eclipse UserFriend
val myBusinessContext = injector.getInstance(MyBusinessContext);
myBusinessContext.accountNo=accountNo
.......

class StatemachineWebContentProposalProvider extends IdeContentProposalProvider {
@Inject extension MyBusinessContext
}
Re: Adding Additional Parameters to ContentAssistContext [message #1723643 is a reply to message #1723521] Tue, 16 February 2016 22:37 Go to previous messageGo to next message
Eclipse UserFriend
Thank You.I intend to have account number different for each request. Please suggest

[Updated on: Tue, 16 February 2016 22:38] by Moderator

Re: Adding Additional Parameters to ContentAssistContext [message #1723647 is a reply to message #1723643] Tue, 16 February 2016 23:35 Go to previous messageGo to next message
Eclipse UserFriend
pranay roy <forums-noreply@xxxxxxxx> wrote:
> I intend to have account number different for each request. Please suggest
>

I think you are standalone. So are you or are you not
Re: Adding Additional Parameters to ContentAssistContext [message #1723649 is a reply to message #1723647] Tue, 16 February 2016 23:51 Go to previous messageGo to next message
Eclipse UserFriend
cause if you are standalone,
(in your example you call standalone foreach request)
you can set different data into the businesscontext at each request
Re: Adding Additional Parameters to ContentAssistContext [message #1723653 is a reply to message #1723649] Wed, 17 February 2016 00:58 Go to previous messageGo to next message
Eclipse UserFriend
Is it a good idea to call a new standalone for each request. I am using REST api for invoking this. So each request will have a new Standalone.!What do you suggest.
Re: Adding Additional Parameters to ContentAssistContext [message #1723659 is a reply to message #1723653] Wed, 17 February 2016 02:04 Go to previous message
Eclipse UserFriend
i dont know how to handle this multithreading wise
ntl

if you want to make it multithreading enabled put a threadlocal into the businesscontext
Previous Topic:Load EObject with all cross-references from file path
Next Topic:IResourceDescription's URI sync
Goto Forum:
  


Current Time: Wed Jul 23 13:42:40 EDT 2025

Powered by FUDForum. Page generated in 0.05219 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top