/** Writes the UiCommonListenerMap for the edited model */
  private void writeListenerMap() {
    logger.log(Type.DEBUG, "Starting to write ListenerMap"); // $NON-NLS-1$
    sw.println();
    sw.println("@Override"); // $NON-NLS-1$
    sw.println(
        "protected "
            + UiCommonListenerMap.class.getName()
            + " getListenerMap() {"); //$NON-NLS-1$ //$NON-NLS-2$
    sw.indent();

    sw.println(
        UiCommonListenerMap.class.getName()
            + " listenerMap = new "
            + UiCommonListenerMap.class.getName() // $NON-NLS-1$
            + "();"); //$NON-NLS-1$
    sw.println();

    logger.log(Type.DEBUG, "Looking for top-level Editor Fields"); // $NON-NLS-1$

    for (EditorData editorData : model.getEditorData()) {
      logger.log(Type.DEBUG, "Going over Field: " + editorData); // $NON-NLS-1$
      String path = editorData.getPath();
      // Change first letter to Upper to comply with UiCommon Property Names
      path = Character.toUpperCase(path.charAt(0)) + path.substring(1, path.length());

      if (path.length() == 0) {
        continue;
      }

      // only relevant for top-level properties
      if (!editorData.isDeclaredPathNested()) {
        logger.log(Type.DEBUG, "Found top-level Field: " + editorData); // $NON-NLS-1$

        sw.println(
            "listenerMap.addListener(\"%s\", \"PropertyChanged\", new org.ovirt.engine.ui.uicompat.IEventListener() {", //$NON-NLS-1$
            path);
        sw.indent();
        sw.println("@Override"); // $NON-NLS-1$
        sw.println(
            "public void eventRaised(org.ovirt.engine.ui.uicompat.Event ev, Object sender, org.ovirt.engine.ui.uicompat.EventArgs args) {"); //$NON-NLS-1$
        sw.indent();
        sw.println(
            "getEditor().%s.setValue(getObject()%s);", //$NON-NLS-1$
            editorData.getExpression(), editorData.getGetterExpression());
        sw.outdent();
        sw.println("}"); // $NON-NLS-1$
        sw.outdent();
        sw.println("});"); // $NON-NLS-1$
        sw.println();
      }
    }

    sw.println("return listenerMap;"); // $NON-NLS-1$
    sw.outdent();
    sw.println("}"); // $NON-NLS-1$
  }