class LayoutNode extends AbstractNode {

    private final Layout layout;
    private PropertySet[] propertySets;

    public LayoutNode(Layout layout) {
        super(Children.LEAF);
        this.layout = layout;
        setName(layout.getBuilder().getName());
    }

    @Override
    public PropertySet[] getPropertySets() {<FILL_FUNCTION_BODY>}

    public Layout getLayout() {
        return layout;
    }
}

        if (propertySets == null) {
            try {
                Map<String, Sheet.Set> sheetMap = new HashMap<>();
                for (LayoutProperty layoutProperty : layout.getProperties()) {
                    Sheet.Set set = sheetMap.get(layoutProperty.getCategory());
                    if (set == null) {
                        set = Sheet.createPropertiesSet();
                        set.setDisplayName(layoutProperty.getCategory());
                        sheetMap.put(layoutProperty.getCategory(), set);
                    }
                    set.put(layoutProperty.getProperty());
                }
                propertySets = sheetMap.values().toArray(new PropertySet[0]);
            } catch (Exception ex) {
                Exceptions.printStackTrace(ex);
                return null;
            }
        }
        return propertySets;
    
<no_super_class>