Friday 29 August 2014

ExtJS4 Dynamic Grid

In the MV* patterns, model refers to the fixed state of content. If state changes then the benefit that comes out of this model is trivial. Some times it could be a case that model is dynamic, in such a case ExtJS grid should be constructed dynamically. Here is how the sample code goes...

ExtJS4 grid has a method called reconfigure which takes store and columns as input arguments and restructures grid. These columns and store depends on the field data which a part of model. Since model is dynamic lets create field data dynamically along with the actual data and send it to the server.



Here is the structure from server

Thursday 21 August 2014

ExtJS4: Missing HasOneInstance While Decoding JSON

Sometime ExtJS plays dumb role in throwing exceptions. It ignores exceptions instead of handling them, especially while dealing with associations. 

Whenever ExtJs loads data throw proxy into model, it decodes json data into respective models including associations. In case of hasMany association it creates <association-name>Store and in case of hasOne association, it creates <association-name>HasOneInstance store and decodes data into corresponding stores. 

But here are some cases where ExtJS may miss these conversions without throwing any error. 
  • If your association name is in camel case and if you have defined its association with its basic properties like type and model, then ExtJs generates rest of the properties by default. While generating default properties it converts camel case text into lower case and associate it to the association. 
   For example if you have defined a hasOne association as follows, 
       associations: [{ type: 'hasOne', model: 'homeAddress' }]
  It generates association_key as homeaddress (converts camel case into lower case) and maps this key      with the json object which will be in camel case. Because of mismatch in name, it doesn't create homeAddressHasOneInstance object in the parent object. 
  • If you don't use association's model explicitly and miss its inclusion in controller then ExtJS doesn't complain about the model and store conversion will not happen for that association. 

Saturday 16 August 2014

Logging in Eclipse Birt

Birt is one of the best open source projects that provides data visualization and reports for rich internet applications. But logging is one of the common problems while developing reports in BIRT report engine. Here is the small hack that I have used in birt global script to log my data.
  • Select initialize Script in birt(Select report, open report in Birt Report Design perspective select report and go to script tag, on the top of the screen, you can select initialize script). 
  • Since Birt uses java logging, you can use following script in initialize script to log the message
  • 
    
    
    
    importPackage(Packages.java.lang); function log(msg){ System.out.println("Info : " + msg); } reportContext.setGlobalVariable("log", log)
    
    
  • Use log function in other scripts to log message. 
Note : If you cant find the console in eclipse, open eclipse in console mode. (To open eclipse in console mode, open eclipsec.exe instead of eclipse.exe). 

You can also use Log4j properties in birt reporting. Here is the detailed explanation.   

Wednesday 13 August 2014

Eclipse : Server Error - Resource **** Does Exist

Today I was trying to configure my development environment in newly released Eclipse version: LUNA. Suddenly I faced a  problem in configuring server. I was just using simple tomcat which I had used it like hundred times. Only change I did was to modify small entry in some configuration file and then eclipse started crying. I tried many combinations, changed different tomcat servers and to test the tomcat server I moved into older eclipse. Finally I found that its a bug in eclipse. Its not with the new eclipse version but there with every eclipse version.

Here is the error...
Reason:
Could not save because file has been modified since the start of editing eclipse



Here is the solution to my problem. Its the name that has caused the problem. While naming the server I have used server location as the name of the server.

I used server name as 'C:\NGPS\apache-tomcat-7.0.27'  and because of the back slashes in the name, it was failing to add new server. Moreover message that was throwing matched in my case and I ended up in doing permutations and combinations. Simple workaround for this problem is to change tomcat name to a simple string with alpha-numerics. Once you change the name, close 'Add new server window' and try to add it agian.