package fi.otavanopisto.muikku.controller;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import fi.otavanopisto.muikku.dao.widgets.DefaultWidgetDAO;
import fi.otavanopisto.muikku.dao.widgets.UserWidgetDAO;
import fi.otavanopisto.muikku.dao.widgets.WidgetDAO;
import fi.otavanopisto.muikku.dao.widgets.WidgetSpaceDAO;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.model.widgets.DefaultWidget;
import fi.otavanopisto.muikku.model.widgets.UserWidget;
import fi.otavanopisto.muikku.model.widgets.Widget;
import fi.otavanopisto.muikku.model.widgets.WidgetSpace;
import fi.otavanopisto.muikku.model.widgets.WidgetVisibility;
public class WidgetController {
@Inject
private WidgetDAO widgetDAO;
@Inject
private WidgetSpaceDAO widgetSpaceDAO;
@Inject
private UserWidgetDAO userWidgetDAO;
@Inject
private DefaultWidgetDAO defaultWidgetDAO;
/* Widget */
public Widget createWidget(String name, Integer minimumSize, WidgetVisibility visibility) {
return widgetDAO.create(name, minimumSize, visibility);
}
public Widget findWidget(String name) {
return widgetDAO.findByName(name);
}
public Widget ensureWidget(String name, Integer minimumSize, WidgetVisibility visibility) {
Widget widget = findWidget(name);
if (widget == null) {
widget = createWidget(name, minimumSize, visibility);
}
return widget;
}
/* WidgetSpace */
public WidgetSpace createWidgetSpace(String name) {
return widgetSpaceDAO.create(name);
}
public WidgetSpace findWidgetSpace(String name) {
return widgetSpaceDAO.findByName(name);
}
public WidgetSpace ensureWidgetSpace(String name) {
WidgetSpace widgetSpace = findWidgetSpace(name);
if (widgetSpace == null) {
widgetSpace = createWidgetSpace(name);
}
return widgetSpace;
}
/* UserWidget */
public UserWidget createUserWidget(Widget widget,
WidgetSpace widgetSpace, UserEntity userEntity) {
return userWidgetDAO.create(widget, widgetSpace, userEntity);
}
public UserWidget findUserWidget(Widget widget, WidgetSpace widgetSpace, UserEntity userEntity) {
return userWidgetDAO.findByWidgetSpaceAndUser(widget, widgetSpace, userEntity);
}
public UserWidget findUserWidget(Widget widget, String widgetSpaceName, UserEntity userEntity) {
return findUserWidget(widget, findWidgetSpace(widgetSpaceName), userEntity);
}
public List<UserWidget> listWidgetSpaceUserWidgets(WidgetSpace widgetSpace, UserEntity userEntity) {
return userWidgetDAO.listByWidgetSpaceAndUser(widgetSpace, userEntity);
}
public List<UserWidget> listWidgetSpaceUserWidgets(String widgetSpaceName, UserEntity userEntity) {
return listWidgetSpaceUserWidgets(findWidgetSpace(widgetSpaceName), userEntity);
}
public boolean hasUserWidgets(WidgetSpace widgetSpace, UserEntity user) {
return userWidgetDAO.countByWidgetSpaceAndUser(widgetSpace, user) > 0;
}
public boolean hasUserWidgets(String widgetSpaceName, UserEntity user) {
return hasUserWidgets(findWidgetSpace(widgetSpaceName), user);
}
/* DefaultWidget */
public DefaultWidget createDefaultWidget(Widget widget, WidgetSpace widgetSpace) {
return defaultWidgetDAO.create(widget, widgetSpace);
}
public DefaultWidget createDefaultWidget(WidgetSpace widgetSpace, Widget widget) {
return defaultWidgetDAO.create(widget, widgetSpace);
}
public DefaultWidget findDefaultWidget(Widget widget, WidgetSpace widgetSpace) {
return defaultWidgetDAO.findByWidgetAndWidgetSpace(widget, widgetSpace);
}
public List<DefaultWidget> listWidgetSpaceDefaultWidgetsByVisibilities(WidgetSpace widgetSpace, List<WidgetVisibility> visibilities) {
List<DefaultWidget> result = new ArrayList<>();
List<DefaultWidget> defaultWidgets = defaultWidgetDAO.listByWidgetSpace(widgetSpace);
for (DefaultWidget defaultWidget : defaultWidgets) {
if (visibilities.contains(defaultWidget.getWidget().getVisibility())) {
result.add(defaultWidget);
}
}
return result;
}
public List<DefaultWidget> listWidgetSpaceDefaultWidgetsByVisibilities(String widgetSpaceName, List<WidgetVisibility> visibilities) {
return listWidgetSpaceDefaultWidgetsByVisibilities(findWidgetSpace(widgetSpaceName), visibilities);
}
public boolean hasDefaultWidgets(WidgetSpace widgetSpace) {
return defaultWidgetDAO.countByWidgetSpace(widgetSpace) > 0;
}
public boolean hasDefaultWidgets(String widgetSpaceName) {
return hasDefaultWidgets(findWidgetSpace(widgetSpaceName));
}
public void ensureDefaultWidget(Widget widget, String widgetSpaceName) {
WidgetSpace widgetSpace = findWidgetSpace(widgetSpaceName);
if (widgetSpace == null) {
widgetSpace = createWidgetSpace(widgetSpaceName);
}
DefaultWidget defaultWidget = findDefaultWidget(widget, widgetSpace);
if (defaultWidget == null) {
defaultWidget = createDefaultWidget(widgetSpace, widget);
}
}
public void ensureDefaultWidget(String widgetName, String widgetSpaceName) {
Widget widget = findWidget(widgetName);
if (widget != null) {
ensureDefaultWidget(widget, widgetSpaceName);
}
}
public void ensureDefaultWidget(String widgetName, WidgetSpace widgetSpace) {
Widget widget = findWidget(widgetName);
if (widget != null) {
DefaultWidget defaultWidget = findDefaultWidget(widget, widgetSpace);
if (defaultWidget == null) {
defaultWidget = createDefaultWidget(widgetSpace, widget);
}
}
}
}