private Preset(String name, Layout layout) {
   this.name = name;
   this.layoutClassName = layout.getClass().getName();
   for (LayoutProperty p : layout.getProperties()) {
     try {
       Object value = p.getProperty().getValue();
       if (value != null) {
         propertyNames.add(p.getCanonicalName());
         propertyValues.add(value);
       }
     } catch (Exception e) {
     }
   }
 }
 public void loadPreset(Preset preset, Layout layout) {
   for (LayoutProperty p : layout.getProperties()) {
     for (int i = 0; i < preset.propertyNames.size(); i++) {
       if (p.getCanonicalName().equalsIgnoreCase(preset.propertyNames.get(i))
           || p.getProperty()
               .getName()
               .equalsIgnoreCase(
                   preset.propertyNames.get(
                       i))) { // Also compare with property name to maintain compatibility with old
                              // presets
         try {
           p.getProperty().setValue(preset.propertyValues.get(i));
         } catch (Exception ex) {
           ex.printStackTrace();
         }
       }
     }
   }
 }
 @Override
 public PropertySet[] getPropertySets() {
   if (propertySets == null) {
     try {
       Map<String, Sheet.Set> sheetMap = new HashMap<String, Sheet.Set>();
       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;
 }