docs: private void doBasicInfo(PortletDefinitionForm def, MessageContext context) {
  
          // fname
          if (StringUtils.isEmpty(def.getFname())) {
              context.addMessage(
                      new MessageBuilder()
                              .error()
                              .source("fName")
                              .code("please.enter.fname")
                              .build());
          } else if (!FunctionalNameType.isValid(def.getFname())) {
              context.addMessage(
                      new MessageBuilder().error().source("fName").code("fname.invalid").build());
          } else if (def.getId() == null
                  && portletDefinitionRegistry.getPortletDefinitionByFname(def.getFname()) != null) {
              // This is a new portlet and the fname is already taken
              context.addMessage(
                      new MessageBuilder().error().source("fName").code("fname.in.use").build());
          }
  
          // Title
          if (StringUtils.isEmpty(def.getTitle())) {
              context.addMessage(
                      new MessageBuilder()
                              .error()
                              .source("title")
                              .code("please.enter.title")
                              .build());
          }
  
          // Name
          if (StringUtils.isEmpty(def.getName())) {
              context.addMessage(
                      new MessageBuilder().error().source("name").code("please.enter.name").build());
          }
          if (def.getId() == null
                  && portletDefinitionRegistry.getPortletDefinitionByName(def.getName()) != null) {
              // This is a new portlet and the name is already taken
              context.addMessage(
                      new MessageBuilder().error().source("name").code("name.in.use").build());
          }
      }