Created
December 7, 2009 09:54
-
-
Save mneedham/250736 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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