/*
* Carrot2 project.
*
* Copyright (C) 2002-2016, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/
package org.carrot2.util.simplexml;
import java.util.HashMap;
import java.util.Map;
import org.simpleframework.xml.strategy.Strategy;
import org.simpleframework.xml.strategy.Type;
import org.simpleframework.xml.strategy.Value;
import org.simpleframework.xml.stream.NodeMap;
import org.simpleframework.xml.stream.OutputNode;
import org.carrot2.shaded.guava.common.collect.Maps;
/**
* Proxy for initializing session values.
*/
final class SessionInitStrategy implements Strategy
{
private final Strategy delegate;
private final HashMap<Object, Object> sessionValues;
private boolean sessionInitialized;
public SessionInitStrategy(Strategy delegate, Map<Object, Object> sessionValues)
{
this.delegate = delegate;
this.sessionValues = Maps.newHashMap(sessionValues);
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public Value read(Type type, NodeMap node, Map session) throws Exception
{
if (!sessionInitialized)
{
sessionInitialized = true;
session.putAll(sessionValues);
}
return delegate.read(type, node, session);
}
@SuppressWarnings("rawtypes")
@Override
public boolean write(Type type, Object target, NodeMap<OutputNode> nodeMap, Map session)
throws Exception
{
return delegate.write(type, target, nodeMap, session);
}
}