@Override
  public Void processInBackground(Context context) throws Exception {
    UserSettings userSettings = context.getUserSettings();
    List<PropertyGroup> groups = null;
    if (userSettings != null) {
      groups = userSettings.getPropertiesDisplayOptions().get(model.getResourceType());
    }
    CategoryProcessorContext categoryCtx = new CategoryProcessorContext(node, context);

    // Categories must be selected in the model first and then optionally
    // PropertyGroups can be defined and you can specify which categories
    // you want included in each group
    if (groups != null) {
      for (PropertyGroup group : groups) {
        if (group.isDisplayed()) {
          DevicePropertyGroup pageGroup = createGroup(group);
          for (PropertyCategory category : group.getCategories()) {
            model.addCategory(category);
            pageGroup.addCategory(category.getResourceCategory());
          }
          model.addPropertyGroup(pageGroup);
        }
      }
    }

    for (DevicePropertyCategory pageCategory : model.getCategories()) {
      pageCategory.populate(categoryCtx);
    }
    return null;
  }
 protected DevicePropertyGroup createGroup(PropertyGroup propertyGroup) {
   DevicePropertyGroup group = new DevicePropertyGroup();
   String title = propertyGroup.getTitle();
   if (title == null || title.length() == 0) {
     String groupName = propertyGroup.getName();
     title = PropertyGroupViz.getPropertyGroupViz(groupName).getTitle();
   }
   group.setGroupName(title);
   return group;
 }