hi, If we want to contribute to classes which matches a particular path/name pattern, then we can use PSI Class patterns to do it. the code is as follows: [java] import com.intellij.patterns.PsiJavaPatterns import com.intellij.patterns.PlatformPatterns //get the context of all files, and enable path matching. Note: Don’t change anything in context here. def ctx […]
Hi, Sometimes we need to contribute dynamically using current target class type. Lets take the example of .get() and .list() methods of Grails domain class. The signature of each method is as follows: public <DomainClassType> get(Long id) , Example: DemoClass.get(1) will return an object of “DemoClass” public List<DomainClassType> list() The GDSL Script […]
Hi, I have been using the Grails mail plugin for a while now, this plugin injects a method named “sendMail” to all controllers and services. Our aim will be to provide auto-completes for this method and the closure inside. The GDSL Script is as follows: [java] import com.intellij.patterns.PsiJavaPatterns import com.intellij.patterns.PlatformPatterns //Let Us […]
Hi, Here i will illustrate how you can get the code of a method within GDSL Script: The script is as follows: [java] import com.intellij.patterns.PsiJavaPatterns import com.intellij.patterns.PlatformPatterns def mongoContext = context( ctype: PsiJavaPatterns.psiClass().withName(PlatformPatterns.string().matches(/.*/)) ) contributor(mongoContext) { def path = "" try { path = psiClass.containingFile.originalFile.virtualFile.path } catch (Exception e) { } if (path […]
Hi, Here is an example which uses a lot of gdsl concepts. This example tries to simulate injecting properties to Domains. The Example is as follows: (The code is self explanatory and can be used as a reference) [java] import com.intellij.patterns.PsiJavaPatterns import com.intellij.patterns.PlatformPatterns def mongoContext = context( ctype: PsiJavaPatterns.psiClass().withName(PlatformPatterns.string().matches(/.*/)) ) contributor(mongoContext) { def […]
Hi, In the previous post, we saw how to Retweet any user’s tweet from our application. In the same project, i needed to post a new tweet on behalf of the authenticating user from the application using Twitter API. Posting a new status update is quite easy using Twitter4j library. For making any twitter API […]
We use git a lot, and one of the most used commands is “git branch”. Few Months back we found a script that enabled us to modify our prompt so that it shows our current branch. We have modified it further to add extra functionality, and our modified script enables prompt to show number of […]
As we all know that groovy is a dynamic programming language, so we can add any method to any class at runtime. First, let’s see a small and simple example of metaProgamming given below, in which we are adding a method (isEvent) into an Integer class. [groovy] Integer.metaClass.isEven = { -> // only (->) sign […]
Hi, As i am working on Twitter integration in my current project, i needed to display the searched tweets from twitter API, on my view layer. When we query the Twitter API, it returns tweets text in the form of simple string which contains HashTags, Twitter usernames and links to external resources. While displaying them […]
While working on a project with a team, there is a chance that once in a while erroneous pieces of code (bad programming, wrong conflict resolution etc) creep in. Now wading thorugh individual commits looking for a specific line in a file that looks suspicious can be hard work and takes a lot of time. I was in […]
In my current project, I tried to call a javascript function on onload event of body tag of gsp page: [html] … [/html] But this onload event was not fired, because Grails picks the body tag from layout and not from the view. So I added the following line in body tag of my layout […]
Currently I am building a mobile app using Phonegap. In my project I need to store the data into the database and refresh it with server time to time. Phonegap have the Storage API to do this. Storage API is based on the W3C HTML5 webdatabase. So we just need to create the database and […]