class SolonPropertyModelHandler extends ModelHandlerBase {

    SolonPropertyModelHandler(Context context) {
        super(context);
    }

    @Override
    public void handle(ModelInterpretationContext intercon, Model model) throws ModelHandlerException {<FILL_FUNCTION_BODY>}

    private String getValue(String source, String defaultValue) {
        String value = Solon.cfg().getProperty(source);
        if (value != null) {
            return value;
        } else {
            int lastDot = source.lastIndexOf(46);
            if (lastDot > 0) {
                String prefix = source.substring(0, lastDot + 1);
                return Solon.cfg().getProperty(prefix + source.substring(lastDot + 1), defaultValue);
            } else {
                return defaultValue;
            }
        }
    }

}

        SolonPropertyModel propertyModel = (SolonPropertyModel) model;
        Scope scope = ActionUtil.stringToScope(propertyModel.getScope());
        String defaultValue = propertyModel.getDefaultValue();
        String source = propertyModel.getSource();
        if (OptionHelper.isNullOrEmpty(propertyModel.getName()) || OptionHelper.isNullOrEmpty(source)) {
            addError("The \"name\" and \"source\" attributes of <solonProperty> must be set");
        }
        ModelUtil.setProperty(intercon, propertyModel.getName(), getValue(source, defaultValue), scope);
    
<methods>public void <init>(ch.qos.logback.core.Context) ,public abstract void handle(ch.qos.logback.core.model.processor.ModelInterpretationContext, ch.qos.logback.core.model.Model) throws ch.qos.logback.core.model.processor.ModelHandlerException,public void postHandle(ch.qos.logback.core.model.processor.ModelInterpretationContext, ch.qos.logback.core.model.Model) throws ch.qos.logback.core.model.processor.ModelHandlerException,public java.lang.String toString() <variables>