Session

ContextBroker

@Springfield 는 HTTP Session Context Attribute 에 접근하기 위해 com.u2ware.springfield.support.context. ContextBroker를 제공한다.

package com.u2ware.springfield.support.context;

public interface ContextBroker  {

	public <O> void put(O object);
	public <O> O get(Class<O> type);
	public <O> O get(Class<O> type, boolean throwException);
	public <O> O remove(Class<O> type);
}
		

Code

package com.u2ware.springfield.sample.others.context;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;

import lombok.Getter;
import lombok.Setter;

import org.hibernate.annotations.Type;
import org.joda.time.DateTime;
import org.springframework.format.annotation.DateTimeFormat;

import com.u2ware.springfield.config.Springfield;
import com.u2ware.springfield.config.Springfield.Strategy;

@Springfield(
	strategy=Strategy.JPA
)
@Entity
public class DayStep {

	@Id
	@Getter @Setter private @NotNull String name;

	@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
	@Getter @Setter private @NotNull @DateTimeFormat(pattern="yyyy-MM-dd")  DateTime step;	
}
		
package com.u2ware.springfield.sample.others.context;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.u2ware.springfield.repository.EntityRepository;
import com.u2ware.springfield.service.EntityServiceImpl;
import com.u2ware.springfield.support.context.ContextBroker;

@Service
public class DayStepService extends EntityServiceImpl<DayStep, DayStep>{

	@Autowired @Qualifier("sessionContextBroker")
	private ContextBroker sessionContextBroker;	
	
	@Autowired
	public DayStepService(
		@Qualifier("dayStepRepository")EntityRepository<DayStep, ?> r) {
		super("dayStepRepository", r);
	}

	@Override
	@Transactional
	public Object createForm(DayStep entity) {
		DayStep saved = sessionContextBroker.get(DayStep.class, false);
		if(saved != null){
			entity.setName(saved.getName());
			entity.setStep(saved.getStep().plusDays(1));
		}
		return entity;
	}

	@Override
	@Transactional
	public Object create(DayStep entity) {
		DayStep newEntity = getRepository().create(entity);
		sessionContextBroker.put(newEntity);
		return newEntity;
	}
}