All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wings.header.SessionHeaders Maven / Gradle / Ivy

The newest version!
package org.wings.header;

import org.wings.SFrame;
import org.wings.session.SessionManager;
import org.wings.util.SessionLocal;

import java.util.*;

/**
 * A class to manage headers which should be appended to all frames within a wingS session.
 */
public final class SessionHeaders {

    protected static final SessionLocal INSTANCE = new SessionLocal() {
        @Override
        protected SessionHeaders initialValue() {
            return new SessionHeaders();
        }
    };

    protected final List
headerList = new ArrayList<>(); protected final Map linkCounts = new HashMap<>(); /** * Session local manager class. */ private SessionHeaders() {} /** * @return The session local instance of this class. */ public static SessionHeaders getInstance() { return INSTANCE.get(); } /** * @return The headers currently attached to all frames inside this wingS session. */ public List
getHeaders() { return Collections.unmodifiableList(headerList); } public void registerHeaders(List headers) { registerHeaders(headerList.size(), headers); } public void registerHeader(Header header) { registerHeader(headerList.size(), header); } public void registerHeaders(int index, List headers) { for (Header header : headers) { registerHeader(index++, header); } } public void registerHeader(int index, Header header) { if (header == null) throw new IllegalArgumentException("Header must not be null!"); if (getLinkCount(header) == 0) { Set frames = SessionManager.getSession().getFrames(); for (SFrame frame : frames) { (frame).addHeader(header); } headerList.add(index, header); } incrementLinkCount(header); } public void deregisterHeaders(List headers) { headers.forEach(this::deregisterHeader); } public void deregisterHeader(Header header) { if (header == null) throw new IllegalArgumentException("Header must not be null!"); decrementLinkCount(header); if (getLinkCount(header) == 0) { Set frames = SessionManager.getSession().getFrames(); for (SFrame frame : frames) { (frame).removeHeader(header); } headerList.remove(header); } } protected int getLinkCount(Header header) { Integer linkCount = linkCounts.get(header); if (linkCount == null) { return 0; } else { return linkCount; } } protected void incrementLinkCount(Header header) { linkCounts.put(header, getLinkCount(header) + 1); } protected void decrementLinkCount(Header header) { linkCounts.put(header, getLinkCount(header) > 0 ? getLinkCount(header) - 1 : 0); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy