рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЖрджрддреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕реЗ рдХрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдпреВрдЖрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ, рдХреЗрд╡рд▓ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЛрдИ рд╕реНрддрдВрдн рдирд╣реАрдВ рд╣рд┐рд▓рддрд╛ рд╣реИ рдпрд╛ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЫрд╛рдВрдЯрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рд╢рд╛рдпрдж рд╣реА рдЕрдиреБрдХреВрд▓ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдЬ рдЖрдк рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЗрд╕ рдХреЙрд▓рдо рдХреА рд╕реНрдерд┐рддрд┐ рдпрд╛рдж рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рдЕрдЧрд▓реЗ рд╕рддреНрд░ рдореЗрдВ рдЗрд╕реЗ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдкреНрд▓рд┐рдЯрдкрд╛рдиреЗ рдореЗрдВ рд╣рд░ рдмрд╛рд░ рд╡рд┐рднрд╛рдЬрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдПрдХ рд╣реА рдлрд╝рд┐рд▓реНрдЯрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╕реНрд╡рдпрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреА рд╣реИрдВред
рдРрд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдордВрдЪ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рджреЛ рд╣реИрдВ, рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ: рдЖрдзрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдШрдЯрдХ рдмрдирд╛рдПрдВ, рдЕрдкрдиреА рддреНрд╡рдЪрд╛ рдХреЛ рдЖрдзрд╛рд░ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдЕрдкрдирд╛ рдПрдбреЗрдкреНрдЯрд░ рдШрдЯрдХ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдХрд╛рдлреА рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рд╕реЗ рдорд┐рд▓рд╛ рдЬрд┐рдирд╕реЗ рдпрд╣ рддрд░реАрдХрд╛ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдерд╛ред
рд▓реЗрдХрд┐рди рд╡рд╣ рдПрдХрдорд╛рддреНрд░ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдиреЛрдб рд╕рдмрдЧреНрд░рд╛рдл рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ? рдПрдХ рджреВрд╕рд░реЗ рд╕рддреНрд░ рдХреЗ рджреМрд░рд╛рди рд╕рдм рдХреБрдЫ рдпрд╛рдж рд░рдЦрдиреЗ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЕрдиреНрдп - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдШрдЯрдХ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкрд╛рда рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд╛рда рдХреЗ рдЕрдВрдд рдореЗрдВ рддреАрди рдбреЙрдЯреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЖрдк рдорд╛рдЙрд╕ рдкрд░ рдордВрдбрд░рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдкреВрд░реНрдг рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдХ рдХрд┐рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╣реИ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рд╕рд┐рдЦрд╛рдирд╛ рд╣реИред
рдпрд╣ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЛрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
private final ListChangeListener changeListener = (ListChangeListener<Node>) (ListChangeListener.Change<? extends Node> c) -> { if (c.next()) { c.getAddedSubList().forEach(this::applySettingsForNodeAndAddListenerForItsChild); } };
рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдиреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб рд╣реЛрдЧрд╛:
private void applySettingsForNodeAndAddListenerForItsChild(Node n) { if (!checkApplySettings(n)) { apply(n); ObservableList<Node> children = getChildren(n); if (children != null) { addListnerForUpdateChildren(children); } markNodePropertyApplied(n); } }
рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рд╕реАрдзреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрдХ рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╣реИ:
public Node apply(Node node) { List<SettingsPlugin> settingsPlugins = settingsMap.get(Node.class); if (settingsPlugins != null) { for (SettingsPlugin plugin : settingsPlugins) { node = plugin.apply(node, userSettings.getSettings()); } } List<SettingsPlugin> settingList = settingsMap.get(node.getClass()); if (settingList != null) { for (SettingsPlugin plugin : settingList) { node = plugin.apply(node, userSettings.getSettings()); } } return node; }
рдпрд╣рд╛рдБ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реА рд╣реИ:
public interface SettingsPlugin { public Node apply(Node node, Map<String, Object> userSettings); }
рдпрд╣ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╢реНрд░реЛрддрд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рджреГрд╢реНрдп рддрддреНрд╡ рдХреЗ рдореВрд▓ рдмрд╛рд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдмрд╛рдХреА рд╕рдмрдЧреНрд░рд╛рдл рдкрд░, рдпрд╣ рдЦреБрдж рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛ ...
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рдПрдХ рд╕рд╛рджреГрд╢реНрдп рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЬрд╛рдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред