IDEMPIERE-4060 Implement change scheduler state at scheduler window. Deactivate toolbar button and add button field implementation

This commit is contained in:
Heng Sin Low 2019-10-08 10:45:13 +08:00
parent fc27803ac0
commit dce1355998
6 changed files with 551 additions and 1 deletions

View File

@ -0,0 +1,75 @@
SET SQLBLANKLINES ON
SET DEFINE OFF
-- IDEMPIERE-4060 Implement change scheduler state at scheduler window
-- Oct 7, 2019, 5:15:42 PM MYT
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,Help,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (214058,0,'System Element','System Element enables the central maintenance of column description and help.','The System Element allows for the central maintenance of help, descriptions and terminology for a database column.',102,'AD_Element_ID',22,'N','N','N','N','N',0,'N',30,0,0,'Y',TO_DATE('2019-10-07 17:15:41','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-10-07 17:15:41','YYYY-MM-DD HH24:MI:SS'),100,106,'Y','N','D','N','N','N','Y','403c387b-fc05-48d3-8bfa-4bff1d84ebe0','Y',0,'N','N','N','N')
;
-- Oct 7, 2019, 5:15:52 PM MYT
UPDATE AD_Column SET FKConstraintName='ADElement_ADReference', FKConstraintType='N',Updated=TO_DATE('2019-10-07 17:15:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=214058
;
-- Oct 7, 2019, 5:15:52 PM MYT
ALTER TABLE AD_Reference ADD AD_Element_ID NUMBER(10) DEFAULT NULL
;
-- Oct 7, 2019, 5:15:52 PM MYT
ALTER TABLE AD_Reference ADD CONSTRAINT ADElement_ADReference FOREIGN KEY (AD_Element_ID) REFERENCES ad_element(ad_element_id) DEFERRABLE INITIALLY DEFERRED
;
-- Oct 7, 2019, 5:18:40 PM MYT
INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200137,'AD_Reference of AD_Element','S','(AD_Reference.AD_Element_ID IS NULL OR AD_Reference.AD_Element_ID=@AD_Element_ID:0@)',0,0,'Y',TO_DATE('2019-10-07 17:18:39','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-10-07 17:18:39','YYYY-MM-DD HH24:MI:SS'),100,'D','30490e6b-25df-44ed-b12f-1f0c9858a9c4')
;
-- Oct 7, 2019, 5:21:29 PM MYT
UPDATE AD_Field SET SeqNo=120, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, SeqNoGrid=120, IsToolbarButton=NULL,Updated=TO_DATE('2019-10-07 17:21:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54400
;
-- Oct 7, 2019, 5:21:38 PM MYT
UPDATE AD_Field SET SeqNo=110, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, SeqNoGrid=110, IsToolbarButton=NULL,Updated=TO_DATE('2019-10-07 17:21:38','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=314
;
-- Oct 7, 2019, 5:23:39 PM MYT
INSERT INTO AD_Field (AD_Field_ID,Name,Description,Help,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLogic,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206184,'System Element','System Element enables the central maintenance of column description and help.','The System Element allows for the central maintenance of help, descriptions and terminology for a database column.',102,214058,'Y','@ValidationType@=''D''',0,100,0,'N','N','N','N',0,0,'Y',TO_DATE('2019-10-07 17:23:38','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-10-07 17:23:38','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','1f1ae42b-f779-4b83-bdcd-7c562f93821e','Y',100,4,2,1,'N','N','N')
;
-- Oct 7, 2019, 5:25:33 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_DATE('2019-10-07 17:25:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=226
;
-- Oct 7, 2019, 5:26:02 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_DATE('2019-10-07 17:26:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=15011
;
-- Oct 7, 2019, 5:26:28 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_DATE('2019-10-07 17:26:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2827
;
-- Oct 7, 2019, 5:26:54 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_DATE('2019-10-07 17:26:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200959
;
-- Oct 7, 2019, 5:30:43 PM MYT
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203368,0,0,'Y',TO_DATE('2019-10-07 17:30:42','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-10-07 17:30:42','YYYY-MM-DD HH24:MI:SS'),100,'SchedulerState','Scheduler State','State of this scheduler record (not scheduled, started or stopped)','Scheduler State','D','e266c453-619a-4ac8-bf2c-a3826cf5e3ea')
;
-- Oct 7, 2019, 5:34:10 PM MYT
INSERT INTO AD_Reference (AD_Reference_ID,Name,Description,ValidationType,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,IsOrderByValue,AD_Reference_UU,AD_Element_ID) VALUES (200173,'Scheduler State','View and change the state of a scheduler','D',0,0,'Y',TO_DATE('2019-10-07 17:34:09','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-10-07 17:34:09','YYYY-MM-DD HH24:MI:SS'),100,'D','N','6b31c7a3-12ee-40d6-ae12-e5d16dc854b4',203368)
;
-- Oct 7, 2019, 5:37:01 PM MYT
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,ColumnSQL,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (214059,0,'Scheduler State','State of this scheduler record (not scheduled, started or stopped)',688,'SchedulerState',10,'N','N','N','N','N',0,'N',200173,0,0,'Y',TO_DATE('2019-10-07 17:37:00','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-10-07 17:37:00','YYYY-MM-DD HH24:MI:SS'),100,203368,'N','N','D','N','N','AD_Scheduler_ID','N','N','43da28ea-8c13-4c0a-a61c-c6a27311a986','N',0,'N','N','N','N')
;
-- Oct 7, 2019, 5:38:37 PM MYT
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206185,'Scheduler State','State of this scheduler record (not scheduled, started or stopped)',589,214059,'Y',0,150,0,'N','N','N','N',0,0,'Y',TO_DATE('2019-10-07 17:38:36','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-10-07 17:38:36','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','4f57d49d-c334-44e8-98bc-a725007e5032','Y',160,1,2,1,'N','N','N')
;
-- IDEMPIERE-4060 Implement change scheduler state at scheduler window
-- Oct 7, 2019, 9:54:33 PM MYT
UPDATE AD_ToolBarButton SET IsActive='N',Updated=TO_DATE('2019-10-07 21:54:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_ToolBarButton_ID=200099
;
SELECT register_migration_script('201910081000_IDEMPIERE-4060.sql') FROM dual
;

View File

@ -0,0 +1,72 @@
-- IDEMPIERE-4060 Implement change scheduler state at scheduler window
-- Oct 7, 2019, 5:15:42 PM MYT
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,Help,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (214058,0,'System Element','System Element enables the central maintenance of column description and help.','The System Element allows for the central maintenance of help, descriptions and terminology for a database column.',102,'AD_Element_ID',22,'N','N','N','N','N',0,'N',30,0,0,'Y',TO_TIMESTAMP('2019-10-07 17:15:41','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-10-07 17:15:41','YYYY-MM-DD HH24:MI:SS'),100,106,'Y','N','D','N','N','N','Y','403c387b-fc05-48d3-8bfa-4bff1d84ebe0','Y',0,'N','N','N','N')
;
-- Oct 7, 2019, 5:15:52 PM MYT
UPDATE AD_Column SET FKConstraintName='ADElement_ADReference', FKConstraintType='N',Updated=TO_TIMESTAMP('2019-10-07 17:15:52','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=214058
;
-- Oct 7, 2019, 5:15:52 PM MYT
ALTER TABLE AD_Reference ADD COLUMN AD_Element_ID NUMERIC(10) DEFAULT NULL
;
-- Oct 7, 2019, 5:15:52 PM MYT
ALTER TABLE AD_Reference ADD CONSTRAINT ADElement_ADReference FOREIGN KEY (AD_Element_ID) REFERENCES ad_element(ad_element_id) DEFERRABLE INITIALLY DEFERRED
;
-- Oct 7, 2019, 5:18:40 PM MYT
INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200137,'AD_Reference of AD_Element','S','(AD_Reference.AD_Element_ID IS NULL OR AD_Reference.AD_Element_ID=@AD_Element_ID:0@)',0,0,'Y',TO_TIMESTAMP('2019-10-07 17:18:39','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-10-07 17:18:39','YYYY-MM-DD HH24:MI:SS'),100,'D','30490e6b-25df-44ed-b12f-1f0c9858a9c4')
;
-- Oct 7, 2019, 5:21:29 PM MYT
UPDATE AD_Field SET SeqNo=120, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, SeqNoGrid=120, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2019-10-07 17:21:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54400
;
-- Oct 7, 2019, 5:21:38 PM MYT
UPDATE AD_Field SET SeqNo=110, AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, SeqNoGrid=110, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2019-10-07 17:21:38','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=314
;
-- Oct 7, 2019, 5:23:39 PM MYT
INSERT INTO AD_Field (AD_Field_ID,Name,Description,Help,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLogic,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206184,'System Element','System Element enables the central maintenance of column description and help.','The System Element allows for the central maintenance of help, descriptions and terminology for a database column.',102,214058,'Y','@ValidationType@=''D''',0,100,0,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2019-10-07 17:23:38','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-10-07 17:23:38','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','1f1ae42b-f779-4b83-bdcd-7c562f93821e','Y',100,4,2,1,'N','N','N')
;
-- Oct 7, 2019, 5:25:33 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_TIMESTAMP('2019-10-07 17:25:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=226
;
-- Oct 7, 2019, 5:26:02 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_TIMESTAMP('2019-10-07 17:26:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=15011
;
-- Oct 7, 2019, 5:26:28 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_TIMESTAMP('2019-10-07 17:26:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2827
;
-- Oct 7, 2019, 5:26:54 PM MYT
UPDATE AD_Column SET AD_Val_Rule_ID=200137,Updated=TO_TIMESTAMP('2019-10-07 17:26:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200959
;
-- Oct 7, 2019, 5:30:43 PM MYT
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (203368,0,0,'Y',TO_TIMESTAMP('2019-10-07 17:30:42','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-10-07 17:30:42','YYYY-MM-DD HH24:MI:SS'),100,'SchedulerState','Scheduler State','State of this scheduler record (not scheduled, started or stopped)','Scheduler State','D','e266c453-619a-4ac8-bf2c-a3826cf5e3ea')
;
-- Oct 7, 2019, 5:34:10 PM MYT
INSERT INTO AD_Reference (AD_Reference_ID,Name,Description,ValidationType,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,IsOrderByValue,AD_Reference_UU,AD_Element_ID) VALUES (200173,'Scheduler State','View and change the state of a scheduler','D',0,0,'Y',TO_TIMESTAMP('2019-10-07 17:34:09','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-10-07 17:34:09','YYYY-MM-DD HH24:MI:SS'),100,'D','N','6b31c7a3-12ee-40d6-ae12-e5d16dc854b4',203368)
;
-- Oct 7, 2019, 5:37:01 PM MYT
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,ColumnSQL,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType,IsHtml) VALUES (214059,0,'Scheduler State','State of this scheduler record (not scheduled, started or stopped)',688,'SchedulerState',10,'N','N','N','N','N',0,'N',200173,0,0,'Y',TO_TIMESTAMP('2019-10-07 17:37:00','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-10-07 17:37:00','YYYY-MM-DD HH24:MI:SS'),100,203368,'N','N','D','N','N','AD_Scheduler_ID','N','N','43da28ea-8c13-4c0a-a61c-c6a27311a986','N',0,'N','N','N','N')
;
-- Oct 7, 2019, 5:38:37 PM MYT
INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206185,'Scheduler State','State of this scheduler record (not scheduled, started or stopped)',589,214059,'Y',0,150,0,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2019-10-07 17:38:36','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-10-07 17:38:36','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','4f57d49d-c334-44e8-98bc-a725007e5032','Y',160,1,2,1,'N','N','N')
;
-- IDEMPIERE-4060 Implement change scheduler state at scheduler window
-- Oct 7, 2019, 9:54:33 PM MYT
UPDATE AD_ToolBarButton SET IsActive='N',Updated=TO_TIMESTAMP('2019-10-07 21:54:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_ToolBarButton_ID=200099
;
SELECT register_migration_script('201910081000_IDEMPIERE-4060.sql') FROM dual
;

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.adempiere.webui.scheduler.SchedulerStateEditorFactory">
<property name="service.ranking" type="Integer" value="1"/>
<service>
<provide interface="org.adempiere.webui.factory.IEditorFactory"/>
</service>
<implementation class="org.adempiere.webui.scheduler.SchedulerStateEditorFactory"/>
</scr:component>

View File

@ -2193,7 +2193,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
}); });
} }
private void onSave(final boolean onSaveEvent, final boolean onNavigationEvent, final Callback<Boolean> callback) { public void onSave(final boolean onSaveEvent, final boolean onNavigationEvent, final Callback<Boolean> callback) {
final Callback<Boolean> postCallback = new Callback<Boolean>() { final Callback<Boolean> postCallback = new Callback<Boolean>() {
@Override @Override
public void onCallback(Boolean result) { public void onCallback(Boolean result) {

View File

@ -0,0 +1,337 @@
/**********************************************************************
* This file is part of iDempiere ERP Open Source *
* http://www.idempiere.org *
* *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trek Global Corporation *
* - Heng Sin Low *
**********************************************************************/
package org.adempiere.webui.scheduler;
import org.adempiere.base.IServiceHolder;
import org.adempiere.base.Service;
import org.adempiere.util.Callback;
import org.adempiere.webui.adwindow.ADWindow;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.editor.WEditor;
import org.adempiere.webui.window.FDialog;
import org.compiere.model.GridField;
import org.compiere.model.MScheduler;
import org.compiere.model.StateChangeEvent;
import org.compiere.model.StateChangeListener;
import org.compiere.server.AdempiereServerMgr;
import org.compiere.server.IServerManager;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.idempiere.distributed.IClusterService;
import org.idempiere.server.cluster.ClusterServerMgr;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.Clients;
/**
* @author hengsin
*
*/
public class SchedulerStateEditor extends WEditor {
private static final String ON_START_SCHEDULER_EVENT = "onStartScheduler";
private static final String ON_STOP_SCHEDULER_EVENT = "onStopScheduler";
private static final String ON_ADD_SCHEDULER_EVENT = "onAddScheduler";
private int schedulerState;
public SchedulerStateEditor(GridField gridField)
{
this(gridField, -1);
}
public SchedulerStateEditor(GridField gridField, int rowIndex) {
super(new Button(), gridField, rowIndex);
Button btn = getComponent();
btn.addEventListener(ON_START_SCHEDULER_EVENT, evt -> {
int id = getAD_Scheduler_ID();
if (id > 0) {
MScheduler model = new MScheduler(Env.getCtx(), id, null);
IServerManager serverMgr = getServerMgr();
if (serverMgr != null) {
String error = serverMgr.start(model.getServerID());
if (error == null) {
FDialog.info(0, null, "SchedulerStartSuccess");
} else {
FDialog.error(0, "SchedulerStartFail", error);
}
getComponent().setLabel(getDisplay());
}
Clients.clearBusy();
}
});
btn.addEventListener(ON_STOP_SCHEDULER_EVENT, evt -> {
int id = getAD_Scheduler_ID();
if (id > 0) {
MScheduler model = new MScheduler(Env.getCtx(), id, null);
IServerManager serverMgr = getServerMgr();
if (serverMgr != null) {
String error = serverMgr.stop(model.getServerID());
if (error == null) {
FDialog.info(0, null, "SchedulerStopSuccess");
} else {
FDialog.error(0, "SchedulerStopFail", error);
}
getComponent().setLabel(getDisplay());
}
Clients.clearBusy();
}
});
btn.addEventListener(ON_ADD_SCHEDULER_EVENT, evt -> {
int id = getAD_Scheduler_ID();
if (id > 0) {
MScheduler model = new MScheduler(Env.getCtx(), id, null);
IServerManager serverMgr = getServerMgr();
if (serverMgr != null) {
String error = serverMgr.addScheduler(model);
if (error == null) {
FDialog.info(0, null, "SchedulerAddAndStartSuccess");
} else {
FDialog.error(0, "SchedulerAddAndStartFail", error);
}
getComponent().setLabel(getDisplay());
}
Clients.clearBusy();
}
});
getComponent().addEventListener(Events.ON_CLICK, this);
getComponent().setLabel(getDisplay());
if (gridField.getGridTab() != null) {
gridField.getGridTab().addStateChangeListener(new StateChangeListener() {
@Override
public void stateChange(StateChangeEvent event) {
if (event.getEventType() == StateChangeEvent.DATA_SAVE || event.getEventType() == StateChangeEvent.DATA_IGNORE) {
getComponent().setLabel(getDisplay());
}
}
});
}
}
private int getAD_Scheduler_ID() {
return gridTab.getRecord_ID();
}
/**
* @see org.zkoss.zk.ui.event.EventListener#onEvent(org.zkoss.zk.ui.event.Event)
*/
@Override
public void onEvent(Event event) throws Exception {
if (event.getName().equals(Events.ON_CLICK)) {
if (schedulerState == AdempiereServerMgr.SERVER_STATE_NOT_SCHEDULE) {
ADWindow adwindow = ADWindow.findADWindow(getComponent());
if (adwindow != null) {
if (gridTab.isNew() || gridTab.needSave(false, false)) {
adwindow.getADWindowContent().onSave(true, false, new Callback<Boolean>() {
@Override
public void onCallback(Boolean result) {
if (result) {
int id = getAD_Scheduler_ID();
if (id <= 0)
return;
schedule();
}
}
});
} else {
schedule();
}
}
} else if (schedulerState == AdempiereServerMgr.SERVER_STATE_STARTED) {
ADWindow adwindow = ADWindow.findADWindow(getComponent());
if (adwindow != null) {
if (gridTab.isNew() || gridTab.needSave(false, false)) {
adwindow.getADWindowContent().onSave(true, false, new Callback<Boolean>() {
@Override
public void onCallback(Boolean result) {
if (result)
stop();
}
});
} else {
stop();
}
}
} else if (schedulerState == AdempiereServerMgr.SERVER_STATE_STOPPED) {
ADWindow adwindow = ADWindow.findADWindow(getComponent());
if (adwindow != null) {
if (gridTab.isNew() || gridTab.needSave(false, false)) {
adwindow.getADWindowContent().onSave(true, false, new Callback<Boolean>() {
@Override
public void onCallback(Boolean result) {
if (result)
start();
}
});
} else {
start();
}
}
} else {
FDialog.error(0, "CantReadCurrentSchedulerState");
}
}
}
private void schedule() {
int id = getAD_Scheduler_ID();
if (id <= 0)
return;
FDialog.ask(0, null, "SchedulerAddAndStartPrompt", new Callback<Boolean>() {
@Override
public void onCallback(Boolean result) {
if (result) {
Clients.showBusy(Msg.getMsg(Env.getCtx(), "Processing"));
Events.echoEvent(ON_ADD_SCHEDULER_EVENT, getComponent(), null);
}
}
});
}
private void stop() {
int id = getAD_Scheduler_ID();
if (id <= 0)
return;
FDialog.ask(0, null, "SchedulerStopPrompt", new Callback<Boolean>() {
@Override
public void onCallback(Boolean result) {
if (result) {
Clients.showBusy(Msg.getMsg(Env.getCtx(), "Processing"));
Events.echoEvent(ON_STOP_SCHEDULER_EVENT, getComponent(), null);
}
}
});
}
private void start() {
int id = getAD_Scheduler_ID();
if (id <= 0)
return;
FDialog.ask(0, null, "SchedulerStartPrompt", new Callback<Boolean>() {
@Override
public void onCallback(Boolean result) {
if (result) {
Clients.showBusy(Msg.getMsg(Env.getCtx(), "Processing"));
Events.echoEvent(ON_START_SCHEDULER_EVENT, getComponent(), null);
}
}
});
}
/* (non-Javadoc)
* @see org.adempiere.webui.editor.WEditor#setReadWrite(boolean)
*/
@Override
public void setReadWrite(boolean readWrite) {
GridField descriptionField = gridTab.getField("Description");
if (descriptionField != null)
getComponent().setEnabled(descriptionField.isEditable(true));
else
getComponent().setEnabled(readWrite);
}
/* (non-Javadoc)
* @see org.adempiere.webui.editor.WEditor#isReadWrite()
*/
@Override
public boolean isReadWrite() {
return getComponent().isEnabled();
}
/* (non-Javadoc)
* @see org.adempiere.webui.editor.WEditor#setValue(java.lang.Object)
*/
@Override
public void setValue(Object value) {
getComponent().setLabel(getDisplay());
}
/* (non-Javadoc)
* @see org.adempiere.webui.editor.WEditor#getValue()
*/
@Override
public Object getValue() {
return getAD_Scheduler_ID();
}
/* (non-Javadoc)
* @see org.adempiere.webui.editor.WEditor#getDisplay()
*/
@Override
public String getDisplay() {
schedulerState=0;
MScheduler scheduler = new MScheduler(Env.getCtx(), getAD_Scheduler_ID(), null);
IServerManager serverMgr = getServerMgr();
schedulerState = serverMgr.getServerStatus(scheduler.getServerID());
String label = null;
if (schedulerState == IServerManager.SERVER_STATE_NOT_SCHEDULE)
label = Msg.getMsg(Env.getCtx(), "SchedulerNotSchedule");
else if (schedulerState == IServerManager.SERVER_STATE_STARTED)
label = Msg.getMsg(Env.getCtx(), "SchedulerStarted");
else if (schedulerState == IServerManager.SERVER_STATE_STOPPED)
label = Msg.getMsg(Env.getCtx(), "SchedulerStopped");
else
label = "-";
return label;
}
@Override
public Button getComponent() {
return (Button) component;
}
/* (non-Javadoc)
* @see org.adempiere.webui.editor.WEditor#isSearchable()
*/
@Override
public boolean isSearchable() {
return false;
}
private IServerManager getServerMgr() {
IServerManager serverMgr = null;
IServiceHolder<IClusterService> holder = Service.locator().locate(IClusterService.class);
IClusterService service = holder != null ? holder.getService() : null;
if (service != null)
serverMgr = ClusterServerMgr.getInstance();
else
serverMgr = AdempiereServerMgr.get(false);
return serverMgr;
}
}

View File

@ -0,0 +1,58 @@
/**********************************************************************
* This file is part of iDempiere ERP Open Source *
* http://www.idempiere.org *
* *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trek Global Corporation *
* - Heng Sin Low *
**********************************************************************/
package org.adempiere.webui.scheduler;
import org.adempiere.webui.editor.WEditor;
import org.adempiere.webui.factory.IEditorFactory;
import org.compiere.model.GridField;
import org.compiere.model.GridTab;
import org.osgi.service.component.annotations.Component;
/**
* @author hengsin
*
*/
@Component(name = "org.adempiere.webui.scheduler.SchedulerStateEditorFactory", service = {IEditorFactory.class},
property = {"service.ranking:Integer=1"})
public class SchedulerStateEditorFactory implements IEditorFactory {
private final static int SCHEDULER_STATE_AD_REFERENCE_ID = 200173;
/**
* default constructor
*/
public SchedulerStateEditorFactory() {
}
@Override
public WEditor getEditor(GridTab gridTab, GridField gridField, boolean tableEditor) {
if (gridField != null && gridField.getDisplayType() == SCHEDULER_STATE_AD_REFERENCE_ID) {
return new SchedulerStateEditor(gridField);
}
return null;
}
}