class DefaultWebApplication implements WebApplication {

    @Override
    public void setAttribute(String name, Object value) {
        Objects.requireNonNull(name);
        if (value != null) {
            boolean added = true;
            if (attributes.containsKey(name)) {
                added = false;
            }
            Object previousValue = attributes.put(name, value);
            if (added) {
                attributeAdded(name, value);
            } else {
                attributeReplaced(name, previousValue);
            }
        } else {
            removeAttribute(name);
        }
    }

    public  DefaultWebApplication();

}