/* Date: November 11, 2009
* Template: PluginScreenJavaTemplateGen.java.ftl
* generator: org.molgenis.generators.ui.PluginScreenJavaTemplateGen 3.3.2-testing
*
* THIS FILE IS A TEMPLATE. PLEASE EDIT :-)
*/
package org.molgenis.animaldb.plugins.accessibility;
import org.apache.commons.lang.StringUtils;
import org.molgenis.auth.DatabaseLogin;
import org.molgenis.auth.MolgenisUser;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.db.DatabaseException;
import org.molgenis.framework.db.jpa.JpaDatabase;
import org.molgenis.framework.db.jpa.JpaUtil;
import org.molgenis.framework.ui.PluginModel;
import org.molgenis.framework.ui.ScreenController;
import org.molgenis.framework.ui.ScreenMessage;
import org.molgenis.framework.ui.ScreenModel;
import org.molgenis.util.EmailService;
import org.molgenis.util.Entity;
import org.molgenis.util.Tuple;
import plugins.emptydb.emptyDatabase;
import app.FillMetadata;
/**
* A simple plugin to create the header of the MOLGENIS application. This
* includes the header logo as well as the top level menu items for
* documentation, services etc (replaces the hardcoded header).
*
* @author Morris Swertz
*/
public class AnimalDBHeader extends PluginModel<Entity>
{
private String feedback = null;
private static final long serialVersionUID = 4701628601897969977L;
public AnimalDBHeader(String name, ScreenController<?> parent)
{
super(name, parent);
}
public String getCustomHtmlHeaders()
{
return "<script src=\"res/jquery-plugins/ctnotify/lib/jquery.ctNotify.js\" language=\"javascript\"></script>\n"
+ "<link rel=\"stylesheet\" style=\"text/css\" href=\"res/jquery-plugins/ctnotify/lib/jquery.ctNotify.css\">"
+ "<link rel=\"stylesheet\" style=\"text/css\" href=\"res/jquery-plugins/ctnotify/lib/jquery.ctNotify.rounded.css\">"
+ "<link rel=\"stylesheet\" style=\"text/css\" href=\"res/jquery-plugins/ctnotify/lib/jquery.ctNotify.roundedBr.css\">";
}
@Override
public String getViewName()
{
return "org_molgenis_animaldb_plugins_accessibility_AnimalDBHeader";
}
@Override
public String getViewTemplate()
{
return "org/molgenis/animaldb/plugins/accessibility/AnimalDBHeader.ftl";
}
@Override
public void reload(Database db)
{
try
{
int nrOfUsersInDb = db.count(MolgenisUser.class);
if (nrOfUsersInDb == 0)
{ // Check if DB is filled by counting the nr. of users (should
// always be >= 2)
prefillDb(db);
}
}
catch (Exception e)
{
this.setError("Something went wrong while trying to reset and prefill your database: could not count number of MolgenisUsers in DB");
}
}
private void prefillDb(Database db)
{
try
{
// Empty DB and run generated sql scripts
if (db instanceof JpaDatabase)
{
JpaUtil.dropAndCreateTables(db, null);
}
else
{
new emptyDatabase(db, false);
}
FillMetadata.fillMetadata(db, false);
this.setSuccess("Your database was empty, so it was reset and prefilled with basic security entities");
// Populate db with targets, features, values etc. needed to make
// AnimalDB run
// Note: we don't do this here anymore. Use the Import database
// Plugin instead.
// FillAnimalDB myFillAnimalDB = new FillAnimalDB(db);
// myFillAnimalDB.populateDB(this.getLogin());
}
catch (Exception e)
{
String message = "Something went wrong while trying to reset and prefill your database";
if (e.getMessage() != null)
{
message += (": " + e.getMessage());
}
this.setError(message);
e.printStackTrace();
}
}
@Override
public void handleRequest(Database db, Tuple request)
{
try
{
if ("doLogout".equals(request.getAction()))
{
getLogin().logout(db);
}
if ("sendFeedback".equals(request.getAction()))
{
feedback = "User: " + request.getString("name") + " (username: " + this.getLogin().getUserName()
+ ") sent:\n\n" + request.getString("feedback") + "\n\nabout: " + request.getString("plugin");
// get admin email
MolgenisUser admin = db.query(MolgenisUser.class).eq(MolgenisUser.NAME, "admin").find().get(0);
if (StringUtils.isEmpty(admin.getEmail())) throw new DatabaseException(
"Sending feedback failed: the administrator has no email address set. Please contact your administrator about this.");
EmailService ses = this.getEmailService();
ses.email("New feedback on AnimalDB", feedback, admin.getEmail(), true);
this.getMessages().add(new ScreenMessage(feedback, true));
}
if ("resetFeedbackForm".equals(request.getAction()))
{
feedback = null;
}
}
catch (Exception e)
{
e.printStackTrace();
this.getMessages().add(new ScreenMessage(e.getMessage(), false));
// this.setError(e.getMessage());
}
}
public String getActivePlugin()
{
if (this.getParent().getSelected() == null)
{
return "";
}
ScreenModel model = this.getParent().getSelected();
while (model.getSelected() != null)
{
model = model.getSelected();
}
return model.getLabel();
}
public String getFullUserName()
{
if (this.getLogin().isAuthenticated())
{
return ((DatabaseLogin) this.getLogin()).getFullUserName();
}
return null;
}
public String getFeedback()
{
return feedback;
}
@Override
public boolean isVisible()
{
return true;
}
}