public Map<String, VProperty> getPropertiesMap(boolean includePrimaryType) {
    Map<String, VProperty> propertiesMap = new HashMap<String, VProperty>();
    for (Map.Entry<String, VPropertyDefinitionI> entry : properties.entrySet()) {
      // TODO: Replace with VProperty Factory
      VProperty newProp =
          new XMLProperty(name, entry.getValue().getDefaultValue(), AbstractProperty.STRING_PREFIX);
      propertiesMap.put(entry.getKey(), newProp);
    }
    if (includePrimaryType) {
      propertiesMap.put(
          AbstractProperty.JCR_PRIMARYTYPE,
          new XMLProperty(AbstractProperty.JCR_PRIMARYTYPE, name, AbstractProperty.STRING_PREFIX));
    }

    // also get supertype properties
    for (String supertype : supertypes) {
      VNodeDefinition vNodeDefinition = VNodeDefinition.getDefinition(supertype);
      if (vNodeDefinition != null) propertiesMap.putAll(vNodeDefinition.getPropertiesMap(false));
      else {
        log.error("Could not get definition for " + supertype);
      }
    }

    return propertiesMap;
  }
  public Map<String, String> getChildSuggestions() {
    Map<String, String> suggestions = new HashMap<String, String>();
    // get supertype child suggestions
    for (String supertype : supertypes) {
      VNodeDefinition vNodeDefinition = VNodeDefinition.getDefinition(supertype);
      suggestions.putAll(vNodeDefinition.getChildSuggestions());
    }

    // now put in this node's suggestions
    suggestions.putAll(childSuggestions);

    return suggestions;
  }