docs: @SuppressWarnings ("unchecked")
      public static NodeEntryImpl createFromMap(final Map<String, Object> map) throws IllegalArgumentException {
          final NodeEntryImpl nodeEntry = new NodeEntryImpl();
          final HashMap<String, Object> newmap = new HashMap<String, Object>(map);
          for (final String excludeProp : excludeProps) {
              newmap.remove(excludeProp);
          }
          if (null != newmap.get("tags") && newmap.get("tags") instanceof String) {
              String tags = (String) newmap.get("tags");
              String[] data;
              if ("".equals(tags.trim())) {
                  data = new String[0];
              } else {
                  data = tags.split(",");
              }
              final HashSet set = new HashSet();
              for (final String s : data) {
                  if (null != s && !"".equals(s.trim())) {
                      set.add(s.trim());
                  }
              }
              newmap.put("tags", set);
          } else if (null != newmap.get("tags") && newmap.get("tags") instanceof Collection) {
              Collection tags = (Collection) newmap.get("tags");
              HashSet data = new HashSet();
              for (final Object tag : tags) {
                  if(null!=tag && !"".equals(tag.toString().trim())){
                      data.add(tag.toString().trim());
                  }
              }
              newmap.put("tags", data);
          }else if (null != newmap.get("tags")) {
              Object o = newmap.get("tags");
              newmap.put("tags", new HashSet(Arrays.asList(o.toString().trim())));
          }
          try {
              BeanUtils.populate(nodeEntry, newmap);
          } catch (IllegalAccessException | InvocationTargetException e) {
              e.printStackTrace();
          }
          if (null == nodeEntry.getNodename()) {
              throw new IllegalArgumentException("Required property 'nodename' was not specified");
          }
          if (null == nodeEntry.getAttributes()) {
              nodeEntry.setAttributes(new HashMap<String, String>());
          }
  
          //populate attributes with any keys outside of nodeprops
          for (final Map.Entry<String, Object> entry : newmap.entrySet()) {
              if (!ResourceXMLConstants.allPropSet.contains(entry.getKey())) {
                  Object value = entry.getValue();
                  if (null != value) {
                      nodeEntry.setAttribute(entry.getKey(), value.toString());
                  }
              }
          }
  
          return nodeEntry;
      }