@Override
 public void execute() {
   super.execute();
   try {
     if (var != null) jDataset.addVariable((JRDesignVariable) var);
   } catch (JRException e) {
     e.printStackTrace();
   }
 }
 @Override
 protected void createObject() {
   try {
     MCell mparent = (MCell) parent;
     Tag tag = Tag.getExpression(child);
     switch (mparent.getType()) {
       case TableUtil.COLUMN_HEADER:
       case TableUtil.COLUMN_FOOTER:
         var = Tag.createVariable(tag, ResetTypeEnum.COLUMN, null, jDataset);
         srcNode = Tag.createTextField(tag.txt.replaceAll("%", tag.name), tag.classname);
         break;
       case TableUtil.COLUMN_GROUP_HEADER:
         var = Tag.createVariable(tag, ResetTypeEnum.GROUP, mparent.getJrGroup(), jDataset);
         srcNode = Tag.createTextField(tag.txt.replaceAll("%", tag.name), tag.classname);
         break;
       case TableUtil.COLUMN_GROUP_FOOTER:
         var = Tag.createVariable(tag, ResetTypeEnum.GROUP, mparent.getJrGroup(), jDataset);
         srcNode = Tag.createTextField(tag.txt.replaceAll("%", tag.name), tag.classname);
         break;
       case TableUtil.COLUMN_DETAIL:
         srcNode = Tag.createTextField(tag.txt.replaceAll("%", tag.name), tag.classname);
         break;
       case TableUtil.TABLE_FOOTER:
       case TableUtil.TABLE_HEADER:
         var = Tag.createVariable(tag, ResetTypeEnum.REPORT, null, jDataset);
         srcNode = Tag.createTextField(tag.txt.replaceAll("%", tag.name), tag.classname);
         break;
       default:
         srcNode = Tag.createStaticText(tag.name);
     }
     jrElement = srcNode.getValue();
     super.createObject();
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
 @Override
 public void undo() {
   super.undo();
   if (var != null) jDataset.removeVariable(var);
 }