Skip to content

Instantly share code, notes, and snippets.

@mneedham
Created December 7, 2009 09:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mneedham/250736 to your computer and use it in GitHub Desktop.
Save mneedham/250736 to your computer and use it in GitHub Desktop.
@Component
public class FooStrategyModelFactory {
private final MemberRepository memberRepository;
private final BarRepository barRepository;
private final FooStrategyRepository fooRepository;
private final BarViewFactory barViewFactory;
private final JsonConverter jsonConverter;
@Autowired
public FooStrategyModelFactory(MemberRepository memberRepository,
BarRepository barRepository,
FooStrategyRepository fooRepository,
BarViewFactory barViewFactory,
JsonConverter jsonConverter) {
this.memberRepository = memberRepository;
this.barRepository = barRepository;
this.fooRepository = fooRepository;
this.barViewFactory = barViewFactory;
this.jsonConverter = jsonConverter;
}
public ModelMap createViewModel(UserAccount userAccount, Context context, HttpServletRequest request,
List changeData) {
ModelMap model = new ModelMap();
Member member = memberRepository.getMember(userAccount, context);
List availableBars = getAvailableBarsForMember(context, changeData);
List availableWidgetBars = Lists.select(availableBars, new WidgetBarMatcher());
List BarViews = barViewFactory.createBarViews(availableWidgetBars, member.getAccountType());
model.addAttribute("Bars", jsonConverter.toJson(BarViews));
addBarStrategiesToModel(userAccount, context, request, model, member, availableBars);
return model;
}
private void addBarStrategiesToModel(UserAccount userAccount, Context context,
HttpServletRequest request,
ModelMap model,
Member member,
List availableBars) {
List strategies = getCurrentStrategiesForMember(userAccount, context, availableBars, request);
List strategyViews = barViewFactory.createBarStrategyViews(
strategies, availableBars, member.getAccountType());
model.addAttribute("cashFlowStrategyItems", jsonConverter.toJson(strategyViews));
}
protected List getAvailableBarsForMember(Context context, List changeData) {
List thing = barRepository.getThingsForMember(context);
List memberBars = Lists.map(things, new Function() {
public Bar apply(Thing thing) {
return thing.getBar();
}
});
List newlyAddedChangeData = Lists.select(changeData, new NewlyAddedChangeDataMatcher());
for (ChangeData changeDataItem : newlyAddedChangeData) {
memberBars.add(barRepository.getBarByBarNumber(changeDataItem.getBarNumber()));
}
List newChangeData = Lists.select(changeData, new NewChangeDataMatcher());
return Lists.reject(memberBars, new OtherChangeDataMatcher(newChangeData));
}
protected List getCurrentStrategiesForMember(UserAccount userAccount, Context context,
List Bars, HttpServletRequest request) {
String json = (String) WebUtils.getSessionAttribute(request, UpdatedBarStrategy.SESSION_KEY);
if (StringUtils.isNotEmpty(json)) {
List strategies = jsonConverter.fromJsonArray(json, UpdatedBarStrategy.class);
return Lists.map(strategies, new BarStrategyFactory(Bars));
}
return fooRepository.load(userAccount, context);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment