@Override
 public String put(K key, String value) {
   value = TemplateEngineHelper.externalizeTemplateString(template.getTemplateInfo(), value);
   String v = super.put(key, value);
   template.setDirty();
   return v;
 }
 @Override
 public void putAll(Map<? extends K, ? extends String> map) {
   for (K key : map.keySet()) {
     String value = map.get(key);
     value = TemplateEngineHelper.externalizeTemplateString(template.getTemplateInfo(), value);
     super.put(key, value);
   }
   template.setDirty();
 }
 /**
  * initializeProcessBlockList() will create the ProcessBlockList, processPorcessBlockList() will
  * invoke each process execution by assigning resources to each process (Ref.
  * ProcessResourceManager).
  *
  * @param monitor
  */
 public IStatus[] executeTemplateProcesses(IProgressMonitor monitor, final boolean showError) {
   setDirty();
   TemplateEngine.getDefault().updateSharedDefaults(this);
   final IStatus[][] result = new IStatus[1][];
   try {
     result[0] = getProcessHandler().processAll(monitor);
   } catch (ProcessFailureException e) {
     TemplateEngineUtil.log(e);
     result[0] =
         new IStatus[] {
           new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, IStatus.ERROR, e.getMessage(), e)
         };
   }
   return result[0];
 }
 @Override
 public String remove(Object key) {
   String v = super.remove(key);
   template.setDirty();
   return v;
 }