/*******************************************************************************
* Copyright (c) 2014 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* hangum - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.monitoring.core.editors.schedule;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;
import com.hangum.tadpole.commons.google.analytics.AnalyticCaller;
import com.hangum.tadpole.commons.libs.core.message.CommonMessages;
import com.hangum.tadpole.engine.query.dao.system.ScheduleMainDAO;
import com.hangum.tadpole.engine.query.dao.system.ScheduleResultDAO;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.engine.query.sql.TadpoleSystem_Schedule;
import com.hangum.tadpole.engine.query.sql.TadpoleSystem_UserDBQuery;
import com.hangum.tadpole.monitoring.core.Messages;
import com.hangum.tadpole.monitoring.core.dialogs.schedule.AddScheduleDialog;
import com.hangum.tadpole.monitoring.core.manager.schedule.ScheduleManager;
/**
* Tadpole Monitoring editor
*
* @author hangum
*
*/
public class ScheduleEditor extends EditorPart {
private static final Logger logger = Logger.getLogger(ScheduleEditor.class);
public static final String ID = "com.hangum.tadpole.monitoring.core.editor.schedule"; //$NON-NLS-1$
private List<ScheduleMainDAO> listScheduleMain = new ArrayList<ScheduleMainDAO>();
private TableViewer tableViewerList;
private TableViewer tvResult;
private ToolItem tltmModify;
private ToolItem tltmDelete;
public ScheduleEditor() {
}
@Override
public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout(1, false));
Composite compositeHead = new Composite(parent, SWT.NONE);
compositeHead.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
compositeHead.setLayout(new GridLayout(1, false));
Label lblInfo = new Label(compositeHead, SWT.NONE);
lblInfo.setText(Messages.get().ScheduleEditor_1);
SashForm sashForm = new SashForm(parent, SWT.VERTICAL);
sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
sashForm.setOrientation(SWT.HORIZONTAL);
Group compositeList = new Group(sashForm, SWT.NONE);
compositeList.setLayout(new GridLayout(1, false));
compositeList.setText("Schedule List");
ToolBar toolBar = new ToolBar(compositeList, SWT.FLAT | SWT.RIGHT);
ToolItem tltmRefresh = new ToolItem(toolBar, SWT.NONE);
tltmRefresh.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
refreshSchedule();
}
});
tltmRefresh.setText(Messages.get().ScheduleEditor_2);
tltmModify = new ToolItem(toolBar, SWT.NONE);
tltmModify.setEnabled(false);
tltmModify.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IStructuredSelection iss = (IStructuredSelection)tableViewerList.getSelection();
if(!iss.isEmpty()) {
try {
ScheduleMainDAO dao = (ScheduleMainDAO)iss.getFirstElement();
UserDBDAO userDB = TadpoleSystem_UserDBQuery.getUserDBInstance(dao.getDb_seq());
AddScheduleDialog dialog = new AddScheduleDialog(null, userDB, dao);
dialog.open();
} catch(Exception e1) {
logger.error("modify schedule", e1);
}
}
}
});
tltmModify.setText(Messages.get().ScheduleEditor_tltmModify_text);
tltmDelete = new ToolItem(toolBar, SWT.NONE);
tltmDelete.setEnabled(false);
tltmDelete.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IStructuredSelection iss = (IStructuredSelection)tableViewerList.getSelection();
if(!iss.isEmpty()) {
ScheduleMainDAO dao = (ScheduleMainDAO)iss.getFirstElement();
if(!MessageDialog.openQuestion(null, CommonMessages.get().Confirm, Messages.get().ScheduleEditor_4)) return;
try {
UserDBDAO userDB = TadpoleSystem_UserDBQuery.getUserDBInstance(dao.getDb_seq());
ScheduleManager.getInstance().deleteJob(userDB, dao);
TadpoleSystem_Schedule.deleteSchedule(dao.getSeq());
refreshSchedule();
} catch (Exception e1) {
logger.error("delete schedule", e1); //$NON-NLS-1$
}
}
}
});
tltmDelete.setText(Messages.get().ScheduleEditor_6);
tableViewerList = new TableViewer(compositeList, SWT.BORDER | SWT.FULL_SELECTION);
tableViewerList.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection iss = (IStructuredSelection)event.getSelection();
if(!iss.isEmpty()) {
tltmDelete.setEnabled(true);
tltmModify.setEnabled(true);
ScheduleMainDAO dao = (ScheduleMainDAO)iss.getFirstElement();
try {
List<ScheduleResultDAO> listResult = TadpoleSystem_Schedule.getScheduleResult(dao.getSeq());
tvResult.setInput(listResult);
} catch (Exception e) {
logger.error("get schedule result", e); //$NON-NLS-1$
}
}
}
});
Table tableList = tableViewerList.getTable();
tableList.setLinesVisible(true);
tableList.setHeaderVisible(true);
tableList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewerList, SWT.NONE);
TableColumn tblclmnName = tableViewerColumn.getColumn();
tblclmnName.setWidth(100);
tblclmnName.setText(Messages.get().ScheduleEditor_8);
TableViewerColumn tableViewerColumn_2 = new TableViewerColumn(tableViewerList, SWT.NONE);
TableColumn tblclmnDescription = tableViewerColumn_2.getColumn();
tblclmnDescription.setWidth(100);
tblclmnDescription.setText(Messages.get().ScheduleEditor_9);
TableViewerColumn tableViewerColumn_1 = new TableViewerColumn(tableViewerList, SWT.NONE);
TableColumn tblclmnCreateDate = tableViewerColumn_1.getColumn();
tblclmnCreateDate.setWidth(200);
tblclmnCreateDate.setText(CommonMessages.get().Description);
Group compositeResult = new Group(sashForm, SWT.NONE);
compositeResult.setLayout(new GridLayout(1, false));
compositeResult.setText("Schedule Result");
tvResult = new TableViewer(compositeResult, SWT.BORDER | SWT.FULL_SELECTION);
Table table = tvResult.getTable();
table.setLinesVisible(true);
table.setHeaderVisible(true);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
TableViewerColumn tableViewerColumn_3 = new TableViewerColumn(tvResult, SWT.NONE);
TableColumn tblclmnResult = tableViewerColumn_3.getColumn();
tblclmnResult.setWidth(52);
tblclmnResult.setText(Messages.get().ScheduleEditor_11);
TableViewerColumn tableViewerColumn_4 = new TableViewerColumn(tvResult, SWT.NONE);
TableColumn tblclmnMessage = tableViewerColumn_4.getColumn();
tblclmnMessage.setWidth(240);
tblclmnMessage.setText(Messages.get().ScheduleEditor_12);
TableViewerColumn tableViewerColumn_5 = new TableViewerColumn(tvResult, SWT.NONE);
TableColumn tblclmnDate = tableViewerColumn_5.getColumn();
tblclmnDate.setWidth(140);
tblclmnDate.setText(Messages.get().ScheduleEditor_13);
tableViewerList.setContentProvider(ArrayContentProvider.getInstance());
tableViewerList.setLabelProvider(new ScheduleLabelProvider());
tvResult.setContentProvider(ArrayContentProvider.getInstance());
tvResult.setLabelProvider(new ResultLabelProvider());
initUI();
sashForm.setWeights(new int[] {4, 6});
// google analytic
AnalyticCaller.track(this.getClass().getName());
}
private void initUI() {
refreshSchedule();
}
private void refreshSchedule() {
try {
listScheduleMain = TadpoleSystem_Schedule.findUserScheduleMain();
tableViewerList.setInput(listScheduleMain);
List<ScheduleResultDAO> listResult = new ArrayList<ScheduleResultDAO>();
tvResult.setInput(listResult);
} catch (Exception e) {
logger.error("find schedule main", e); //$NON-NLS-1$
}
}
@Override
public void doSave(IProgressMonitor monitor) {
}
@Override
public void doSaveAs() {
}
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
setSite(site);
setInput(input);
ScheduleEditorInput esqli = (ScheduleEditorInput) input;
setPartName(esqli.getName());
}
@Override
public boolean isDirty() {
return false;
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
@Override
public void setFocus() {
}
}
/**
* schedule label provider
* @author hangum
*
*/
class ScheduleLabelProvider extends LabelProvider implements ITableLabelProvider {
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
@Override
public String getColumnText(Object element, int columnIndex) {
ScheduleMainDAO dao = (ScheduleMainDAO)element;
switch(columnIndex) {
case 0: return dao.getTitle();
case 1: return dao.getCron_exp();
case 2: return dao.getDescription();
}
return null;
}
}
class ResultLabelProvider extends LabelProvider implements ITableLabelProvider {
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
@Override
public String getColumnText(Object element, int columnIndex) {
ScheduleResultDAO dao = (ScheduleResultDAO)element;
switch(columnIndex) {
case 0: return dao.getResult();
case 1: return dao.getDescription();
case 2:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //$NON-NLS-1$
return sdf.format(dao.getCreate_time().getTime());
}
return null;
}
}