From acbc2d900f916013d5e2e5558030313e2059fbe2 Mon Sep 17 00:00:00 2001 From: RiedNyko Date: Tue, 5 Mar 2019 16:59:39 +0300 Subject: [PATCH] Add/Edit event dialog #3761 --- .../ext/mysql/edit/MySQLEventManager.java | 82 +++++++++++++++++++ .../dbeaver/ext/mysql/model/MySQLEvent.java | 10 ++- .../dbeaver/model/struct/DBSEntityType.java | 1 + 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLEventManager.java diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLEventManager.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLEventManager.java new file mode 100644 index 0000000000..c51a09367a --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLEventManager.java @@ -0,0 +1,82 @@ +package org.jkiss.dbeaver.ext.mysql.edit; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Map; + +import org.jkiss.code.Nullable; +import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.ext.mysql.model.MySQLCatalog; +import org.jkiss.dbeaver.ext.mysql.model.MySQLEvent; +import org.jkiss.dbeaver.ext.mysql.model.MySQLProcedure; +import org.jkiss.dbeaver.model.DBConstants; +import org.jkiss.dbeaver.model.DBPDataSource; +import org.jkiss.dbeaver.model.DBUtils; +import org.jkiss.dbeaver.model.edit.DBECommandContext; +import org.jkiss.dbeaver.model.edit.DBEPersistAction; +import org.jkiss.dbeaver.model.impl.DBSObjectCache; +import org.jkiss.dbeaver.model.impl.edit.SQLDatabasePersistAction; +import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor; +import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; +import org.jkiss.dbeaver.model.sql.SQLUtils; +import org.jkiss.dbeaver.model.struct.DBSEntityType; +import org.jkiss.dbeaver.ui.UITask; +import org.jkiss.dbeaver.ui.editors.object.struct.EntityEditPage; +import org.jkiss.utils.CommonUtils; + +public class MySQLEventManager extends SQLObjectEditor { + + public DBSObjectCache getObjectsCache(MySQLEvent object) { + return object.getCatalog().getEventCache(); + } + + @Override + public long getMakerOptions(DBPDataSource dataSource) { + return FEATURE_EDITOR_ON_CREATE; + } + + @Nullable + @Override + protected MySQLEvent createDatabaseObject(DBRProgressMonitor monitor, DBECommandContext context, MySQLCatalog parent, Object copyFrom) { + return new UITask() { + @Override + protected MySQLEvent runTask() { + EntityEditPage editPage = new EntityEditPage(parent.getDataSource(), DBSEntityType.EVENT); + if (!editPage.edit()) { + return null; + } + MySQLEvent newEvent = new MySQLEvent(parent, editPage.getEntityName()); + newEvent.setObjectDefinitionText("SELECT 1"); + return newEvent; + } + }.execute(); + } + + @Override + protected void addObjectCreateActions(DBRProgressMonitor monitor, List actions, SQLObjectEditor.ObjectCreateCommand command, Map options) { + final MySQLEvent event = command.getObject(); + final StringBuilder script = new StringBuilder(); + try { + script.append(event.getObjectDefinitionText(monitor, options)); + } catch (DBException e) { + log.error(e); + } + + actions.add(new SQLDatabasePersistAction("Create event", script.toString())); // $NON-NLS-2$ + + } + + + @Override + protected void addObjectModifyActions(DBRProgressMonitor monitor, List actionList, ObjectChangeCommand command, Map options) { + } + + @Override + protected void addObjectDeleteActions(List actions, SQLObjectEditor.ObjectDeleteCommand command, Map options) { + actions.add(new SQLDatabasePersistAction("Drop event", "DROP EVENT " + DBUtils.getQuotedIdentifier(command.getObject())) //$NON-NLS-1$ + ); + + } + +} diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLEvent.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLEvent.java index cb7831b5ad..b0c860e5cb 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLEvent.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLEvent.java @@ -78,7 +78,7 @@ public class MySQLEvent implements MySQLSourceObject, DBPSaveableObject { this.loadInfo(dbResult); } - public MySQLEvent(MySQLCatalog catalog, boolean persisted, String name) { + public MySQLEvent(MySQLCatalog catalog, String name) { this.catalog = catalog; this.name = name; @@ -249,7 +249,7 @@ public class MySQLEvent implements MySQLSourceObject, DBPSaveableObject { DateFormat dateFormat = new SimpleDateFormat(DBConstants.DEFAULT_TIMESTAMP_FORMAT); StringBuilder sql = new StringBuilder(); sql.append("CREATE EVENT ").append(DBUtils.getQuotedIdentifier(this)).append("\n") - .append("ON SCHEDULE EVERY ").append(intervalValue).append(" ").append(intervalField).append("\n"); + .append("ON SCHEDULE EVERY ").append(intervalValue = "1").append(" ").append(intervalField = "DAY").append("\n"); if (starts != null) { sql.append("STARTS '").append(dateFormat.format(starts)).append("'\n"); } @@ -272,8 +272,12 @@ public class MySQLEvent implements MySQLSourceObject, DBPSaveableObject { } @Override - public void setObjectDefinitionText(String sourceText) throws DBException { + public void setObjectDefinitionText(String sourceText) { eventDefinition = sourceText; } + public MySQLCatalog getCatalog() { + return catalog; + } + } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/struct/DBSEntityType.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/struct/DBSEntityType.java index 4dbe3aeeb6..03ce0ac2a3 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/struct/DBSEntityType.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/struct/DBSEntityType.java @@ -35,6 +35,7 @@ public class DBSEntityType public static final DBSEntityType VIRTUAL_ASSOCIATION = new DBSEntityType("virtual_association", "Virtual Association", DBIcon.TREE_ASSOCIATION, false); //$NON-NLS-1$ public static final DBSEntityType SEQUENCE = new DBSEntityType("sequence", "Sequence", DBIcon.TREE_SEQUENCE, true); public static final DBSEntityType PACKAGE = new DBSEntityType("package", "Package", DBIcon.TREE_PACKAGE, true); + public static final DBSEntityType EVENT = new DBSEntityType("event", "Event", DBIcon.TREE_EVENT, true); private final String id; private final String name; -- GitLab