package fi.otavanopisto.pyramus.views.system;
import java.util.ArrayList;
import java.util.List;
import fi.internetix.smvc.controllers.PageRequestContext;
import fi.otavanopisto.pyramus.I18N.Messages;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.plugins.PluginDAO;
import fi.otavanopisto.pyramus.dao.plugins.PluginRepositoryDAO;
import fi.otavanopisto.pyramus.domainmodel.plugins.Plugin;
import fi.otavanopisto.pyramus.domainmodel.plugins.PluginRepository;
import fi.otavanopisto.pyramus.framework.PyramusFormViewController;
import fi.otavanopisto.pyramus.framework.UserRole;
import fi.otavanopisto.pyramus.plugin.PluginManager;
public class PluginsViewController extends PyramusFormViewController {
@Override
public void processForm(PageRequestContext requestContext) {
PluginRepositoryDAO pluginRepositoryDAO = DAOFactory.getInstance().getPluginRepositoryDAO();
PluginDAO pluginDAO = DAOFactory.getInstance().getPluginDAO();
PluginManager pluginManager = PluginManager.getInstance();
List<PluginRepository> pluginRepositories = pluginRepositoryDAO.listAll();
List<Plugin> plugins = pluginDAO.listAll();
List<PluginBean> pluginBeans = new ArrayList<>(plugins.size());
for (Plugin plugin : plugins) {
String status;
boolean loaded = pluginManager.isLoaded(plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion());
boolean deletable = false;
if (loaded) {
if (plugin.getEnabled())
status = Messages.getInstance().getText(requestContext.getRequest().getLocale(), "system.plugins.pluginsTableStatusLoaded");
else
status = Messages.getInstance().getText(requestContext.getRequest().getLocale(), "system.plugins.pluginsTableStatusUnloadOnRestart");
} else {
if (plugin.getEnabled())
status = Messages.getInstance().getText(requestContext.getRequest().getLocale(), "system.plugins.pluginsTableStatusLoadOnRestart");
else
status = Messages.getInstance().getText(requestContext.getRequest().getLocale(), "system.plugins.pluginsTableStatusNotLoaded");
deletable = true;
}
PluginBean pluginBean = new PluginBean(plugin.getId(), plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion(), plugin.getEnabled(), deletable, status);
pluginBeans.add(pluginBean);
}
requestContext.getRequest().setAttribute("repositories", pluginRepositories);
requestContext.getRequest().setAttribute("plugins", pluginBeans);
/**
Messages.getInstance().getText(requestContext.getRequest().getLocale(), "system.plugins.pluginsTableStatusNotLoaded");
Messages.getInstance().getText(requestContext.getRequest().getLocale(), "system.plugins.pluginsTableStatusUnloadOnRestart");
Messages.getInstance().getText(requestContext.getRequest().getLocale(), "system.plugins.pluginsTableStatusLoaded");
**/
requestContext.setIncludeJSP("/templates/system/plugins.jsp");
}
@Override
public void processSend(PageRequestContext requestContext) {
PluginDAO pluginDAO = DAOFactory.getInstance().getPluginDAO();
PluginRepositoryDAO pluginRepositoryDAO = DAOFactory.getInstance().getPluginRepositoryDAO();
Long pluginsRowCount = requestContext.getLong("pluginsTable.rowCount");
for (int i = 0; i < pluginsRowCount; i++) {
String colPrefix = "pluginsTable." + i;
Long id = requestContext.getLong(colPrefix + ".id");
Boolean enabled = "1".equals(requestContext.getString(colPrefix + ".enabled"));
Boolean remove = "1".equals(requestContext.getString(colPrefix + ".remove"));
String groupId = requestContext.getString(colPrefix + ".groupId");
String artifactId = requestContext.getString(colPrefix + ".artifactId");
String version = requestContext.getString(colPrefix + ".version");
if (id == null) {
pluginDAO.create(artifactId, groupId, version, enabled);
} else {
Plugin plugin = pluginDAO.findById(id);
if (remove == true) {
pluginDAO.delete(plugin);
} else {
pluginDAO.updateEnabled(plugin, enabled);
pluginDAO.updateArtifactId(plugin, artifactId);
pluginDAO.updateGroupId(plugin, groupId);
pluginDAO.updateVersion(plugin, version);
}
}
}
Long repositoriesRowCount = requestContext.getLong("repositoriesTable.rowCount");
for (int i = 0; i < repositoriesRowCount; i++) {
String colPrefix = "repositoriesTable." + i;
Long id = requestContext.getLong(colPrefix + ".id");
String url = requestContext.getString(colPrefix + ".url");
String repositoryId = requestContext.getString(colPrefix + ".repositoryId");
Boolean remove = "1".equals(requestContext.getString(colPrefix + ".remove"));
if (id == null) {
pluginRepositoryDAO.create(url, repositoryId);
} else {
PluginRepository repository = pluginRepositoryDAO.findById(id);
if (remove == true) {
pluginRepositoryDAO.delete(repository);
} else {
pluginRepositoryDAO.update(repository, url, repositoryId);
}
}
}
processForm(requestContext);
}
public UserRole[] getAllowedRoles() {
return new UserRole[] { UserRole.ADMINISTRATOR };
}
public class PluginBean {
public PluginBean(Long id, String groupId, String artifactId, String version, Boolean enabled, Boolean deletable, String status) {
this.id = id;
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
this.enabled = enabled;
this.deletable = deletable;
this.status = status;
}
public Long getId() {
return id;
}
public String getGroupId() {
return groupId;
}
public String getArtifactId() {
return artifactId;
}
public String getVersion() {
return version;
}
public Boolean getEnabled() {
return enabled;
}
public Boolean getDeletable() {
return deletable;
}
public String getStatus() {
return status;
}
private Long id;
private String groupId;
private String artifactId;
private String version;
private Boolean enabled;
private Boolean deletable;
private String status;
}
}