package fi.otavanopisto.muikku.plugins.fish;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import javax.ejb.Stateful;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.apache.commons.lang3.LocaleUtils;
import fi.otavanopisto.muikku.controller.WidgetController;
import fi.otavanopisto.muikku.i18n.LocaleBundle;
import fi.otavanopisto.muikku.i18n.LocaleLocation;
import fi.otavanopisto.muikku.model.widgets.DefaultWidget;
import fi.otavanopisto.muikku.model.widgets.Widget;
import fi.otavanopisto.muikku.model.widgets.WidgetSpace;
import fi.otavanopisto.muikku.model.widgets.WidgetVisibility;
import fi.otavanopisto.muikku.plugin.LocalizedPluginDescriptor;
import fi.otavanopisto.muikku.plugin.PersistencePluginDescriptor;
import fi.otavanopisto.muikku.plugin.PluginDescriptor;
import fi.otavanopisto.muikku.plugins.fish.dao.FishMessageDAO;
import fi.otavanopisto.muikku.plugins.fish.model.FishMessage;
@ApplicationScoped
@Stateful
public class DatabaseFishPluginDescriptor implements PluginDescriptor,
PersistencePluginDescriptor,
LocalizedPluginDescriptor {
private static final String FISH_WIDGET_LOCATION = "environment.header.right";
private static final String FISH_WIDGET_NAME = "databasefish";
private static final String FISH_ADMIN_WIDGET_LOCATION = "plugin-settings.content-sidebar.left";
private static final String FISH_ADMIN_WIDGET_NAME = "fishadmin";
private static final Integer FISH_WIDGET_MINIMUM_SIZE = 8;
private static final Integer FISH_ADMIN_MINIMUM_SIZE = 4;
@Inject
private WidgetController widgetController;
@Override
public String getName() {
return "databasefish";
}
@Override
public void init() {
Widget widget = widgetController.findWidget(FISH_WIDGET_NAME);
if (widget == null) {
widget = widgetController.createWidget(FISH_WIDGET_NAME, FISH_WIDGET_MINIMUM_SIZE, WidgetVisibility.EVERYONE);
}
WidgetSpace widgetSpace = widgetController.findWidgetSpace(FISH_WIDGET_LOCATION);
if (widgetSpace == null) { // TODO: In a perfect world, there would be no null checks
widgetSpace = widgetController.createWidgetSpace(FISH_WIDGET_LOCATION);
}
DefaultWidget defaultWidget = widgetController.findDefaultWidget(widget, widgetSpace);
if (defaultWidget == null) {
defaultWidget = widgetController.createDefaultWidget(widget, widgetSpace);
}
Widget adminWidget = widgetController.findWidget(FISH_ADMIN_WIDGET_NAME);
if (adminWidget == null) {
adminWidget = widgetController.createWidget(FISH_ADMIN_WIDGET_NAME,
FISH_ADMIN_MINIMUM_SIZE,
WidgetVisibility.AUTHENTICATED);
}
WidgetSpace adminWidgetSpace = widgetController.findWidgetSpace(FISH_ADMIN_WIDGET_LOCATION);
if (adminWidgetSpace == null) { // TODO: In a perfect world, there would be no null checks
adminWidgetSpace = widgetController.createWidgetSpace(FISH_ADMIN_WIDGET_LOCATION);
}
DefaultWidget adminDefaultWidget = widgetController.findDefaultWidget(adminWidget, adminWidgetSpace);
if (adminDefaultWidget == null) {
adminDefaultWidget = widgetController.createDefaultWidget(adminWidget, adminWidgetSpace);
}
}
@Override
public List<Class<?>> getBeans() {
return new ArrayList<Class<?>>(Arrays.asList(
/* DAOs */
FishMessageDAO.class,
/* Controllers */
DatabaseFishWidgetController.class,
/* Backing Beans */
DatabaseFishWidgetBackingBean.class));
}
@Override
public Class<?>[] getEntities() {
return new Class<?>[] {
FishMessage.class,
};
}
@Override
public List<LocaleBundle> getLocaleBundles() {
List<LocaleBundle> bundles = new ArrayList<LocaleBundle>();
bundles.add(new LocaleBundle(LocaleLocation.APPLICATION, ResourceBundle.getBundle("fi.otavanopisto.muikku.plugins.fish.DatabaseFishPluginMessages", LocaleUtils.toLocale("fi"))));
bundles.add(new LocaleBundle(LocaleLocation.APPLICATION, ResourceBundle.getBundle("fi.otavanopisto.muikku.plugins.fish.DatabaseFishPluginMessages", LocaleUtils.toLocale("en"))));
return bundles;
}
}