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);
}
}