public void readExternal(@NotNull Element element) { Map<String, AbstractProperty> propertyByName = new THashMap<>(); for (AbstractProperty abstractProperty : myExternalizers.keySet()) { propertyByName.put(abstractProperty.getName(), abstractProperty); } for (Element child : element.getChildren()) { AbstractProperty property = propertyByName.get(child.getName()); if (property == null) { continue; } Externalizer externalizer = myExternalizers.get(property); if (externalizer == null) { continue; } try { myValues.put(property, externalizer.readValue(child)); } catch (Exception e) { LOG.info(e); } } }
public void writeExternal(@NotNull Element element) { if (myExternalizers.isEmpty()) { return; } List<AbstractProperty> properties = new ArrayList<>(myExternalizers.keySet()); Collections.sort(properties, AbstractProperty.NAME_COMPARATOR); for (AbstractProperty property : properties) { Externalizer externalizer = myExternalizers.get(property); if (externalizer == null) { continue; } Object propValue = property.get(this); if (!Comparing.equal(propValue, property.getDefault(this))) { Element child = new Element(property.getName()); externalizer.writeValue(child, propValue); if (!JDOMUtil.isEmpty(child)) { element.addContent(child); } } } }
public void rememberKey(AbstractProperty property) { LOG.assertTrue(myExternalizers.get(property) == null, property.getName()); myExternalizers.put(property, null); }
public <T> void registerProperty(AbstractProperty<T> property, Externalizer<T> externalizer) { String name = property.getName(); LOG.assertTrue(!myExternalizers.containsKey(property), name); myExternalizers.put(property, externalizer); }
/** * Register pre-defined Property Accessor * * @param propertyAccessor AbstractProperty */ private void registerPropertyAccessor(AbstractProperty propertyAccessor) { propertyAccessors.put(propertyAccessor.getName(), propertyAccessor); }