use of com.google.gwt.dom.client.TableCellElement in project kie-wb-common by kiegroup.
the class AbstractVerticalMergableGridWidget method redrawTableRowElement.
// Redraw a row adding new cells if necessary. This is used to populate part
// of a row from the given index onwards, when a new column has been
// inserted. It is important the indexes on the underlying data have
// been set correctly before calling as they are used to determine the
// correct HTML element in which to render a cell.
private void redrawTableRowElement(DynamicDataRow rowData, TableRowElement tre, int startColIndex, int endColIndex) {
for (int iCol = startColIndex; iCol <= endColIndex; iCol++) {
// Only redraw visible columns
DynamicColumn<?> column = columns.get(iCol);
if (column.isVisible()) {
int maxColumnIndex = tre.getCells().getLength() - 1;
int requiredColumnIndex = rowData.get(iCol).getHtmlCoordinate().getCol();
if (requiredColumnIndex > maxColumnIndex) {
// Make a new TD element
TableCellElement newCell = makeTableCellElement(iCol, rowData);
if (newCell != null) {
tre.appendChild(newCell);
}
} else {
// Reuse an existing TD element
TableCellElement newCell = makeTableCellElement(iCol, rowData);
if (newCell != null) {
TableCellElement oldCell = tre.getCells().getItem(requiredColumnIndex);
tre.replaceChild(newCell, oldCell);
}
}
}
}
}
use of com.google.gwt.dom.client.TableCellElement in project kie-wb-common by kiegroup.
the class AbstractVerticalMergableGridWidget method selectCell.
@Override
void selectCell(CellValue<? extends Comparable<?>> cell) {
if (cell == null) {
throw new IllegalArgumentException("cell cannot be null");
}
Coordinate hc = cell.getHtmlCoordinate();
TableRowElement tre = tbody.getRows().getItem(hc.getRow()).<TableRowElement>cast();
TableCellElement tce = tre.getCells().getItem(hc.getCol()).<TableCellElement>cast();
// Cell selected style takes precedence
String cellSelectedStyle = resources.cellTableCellSelected();
String cellOtherwiseStyle = resources.cellTableCellOtherwise();
String cellMultipleValuesStyle = resources.cellTableCellMultipleValues();
tce.removeClassName(cellMultipleValuesStyle);
tce.removeClassName(cellOtherwiseStyle);
tce.addClassName(cellSelectedStyle);
tce.focus();
}
use of com.google.gwt.dom.client.TableCellElement in project kie-wb-common by kiegroup.
the class AbstractVerticalMergableGridWidget method makeTableCellElement.
// Build a TableCellElement
@SuppressWarnings("rawtypes")
private TableCellElement makeTableCellElement(int iCol, DynamicDataRow rowData) {
TableCellElement tce = null;
// Column to handle rendering
DynamicColumn<T> column = columns.get(iCol);
CellValue<? extends Comparable<?>> cellData = rowData.get(iCol);
int rowSpan = cellData.getRowSpan();
if (rowSpan > 0) {
// Use Elements rather than Templates as it's easier to set attributes that need to be dynamic
tce = Document.get().createTDElement();
DivElement div = Document.get().createDivElement();
DivElement divText = Document.get().createDivElement();
tce.addClassName(resources.cellTableCell());
tce.addClassName(resources.cellTableColumn(column.getModelColumn()));
div.setClassName(resources.cellTableCellDiv());
divText.addClassName(resources.cellTableTextDiv());
// Set widths
int colWidth = column.getWidth();
div.getStyle().setWidth(colWidth, Unit.PX);
divText.getStyle().setWidth(colWidth, Unit.PX);
tce.getStyle().setWidth(colWidth, Unit.PX);
// Set heights, TD includes border, DIV does not
int divHeight = cellHeightCalculator.calculateHeight(rowSpan);
div.getStyle().setHeight(divHeight, Unit.PX);
tce.setRowSpan(rowSpan);
// Styling depending upon state
if (cellData.isOtherwise()) {
tce.addClassName(resources.cellTableCellOtherwise());
} else {
tce.removeClassName(resources.cellTableCellOtherwise());
}
if (cellData instanceof CellValue.GroupedCellValue) {
CellValue.GroupedCellValue gcv = (CellValue.GroupedCellValue) cellData;
if (gcv.hasMultipleValues()) {
tce.addClassName(resources.cellTableCellMultipleValues());
}
} else {
tce.removeClassName(resources.cellTableCellMultipleValues());
}
if (cellData.isSelected()) {
tce.addClassName(resources.cellTableCellSelected());
} else {
tce.removeClassName(resources.cellTableCellSelected());
}
// Render the cell and set inner HTML
SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder();
if (!cellData.isOtherwise()) {
Coordinate c = cellData.getCoordinate();
Context context = new Context(c.getRow(), c.getCol(), c);
column.render(context, rowData, cellBuilder);
} else {
cellBuilder.appendEscaped("<otherwise>");
}
divText.setInnerHTML(cellBuilder.toSafeHtml().asString());
// Construct the table
tce.appendChild(div);
div.appendChild(divText);
tce.setTabIndex(0);
// Add on "Grouping" widget, if applicable
if (rowSpan > 1 || cellData.isGrouped()) {
Element de = DOM.createDiv();
DivElement divGroup = DivElement.as(de);
divGroup.setTitle(Constants.INSTANCE.groupCells());
divGroup.addClassName(resources.cellTableGroupDiv());
if (cellData.isGrouped()) {
divGroup.setInnerHTML(selectorUngroupedCellsHtml);
} else {
divGroup.setInnerHTML(selectorGroupedCellsHtml);
}
div.appendChild(divGroup);
}
}
return tce;
}
use of com.google.gwt.dom.client.TableCellElement in project pentaho-platform by pentaho.
the class SchedulesPanel method createUI.
private void createUI(boolean isAdmin, final boolean isScheduler) {
table.getElement().setId("schedule-table");
table.setStylePrimaryName("pentaho-table");
table.setWidth("100%", true);
// BISERVER-9331 Column sort indicators should be to the right of header text in the Manage Schedules table.
if (table.getHeaderBuilder() instanceof AbstractHeaderOrFooterBuilder) {
((AbstractHeaderOrFooterBuilder<JsJob>) table.getHeaderBuilder()).setSortIconStartOfLine(false);
}
final MultiSelectionModel<JsJob> selectionModel = new MultiSelectionModel<JsJob>(new ProvidesKey<JsJob>() {
public Object getKey(JsJob item) {
return item.getJobId();
}
});
table.setSelectionModel(selectionModel);
Label noDataLabel = new Label(Messages.getString("noSchedules"));
noDataLabel.setStyleName("noDataForScheduleTable");
table.setEmptyTableWidget(noDataLabel);
TextColumn<JsJob> idColumn = new TextColumn<JsJob>() {
public String getValue(JsJob job) {
return job.getJobId();
}
};
idColumn.setSortable(true);
TextColumn<JsJob> nameColumn = new TextColumn<JsJob>() {
public String getValue(JsJob job) {
return job.getJobName();
}
};
nameColumn.setSortable(true);
HtmlColumn<JsJob> resourceColumn = new HtmlColumn<JsJob>() {
@Override
public String getStringValue(JsJob job) {
String name = job.getFullResourceName().split("\\.")[0];
return name.replaceAll("/", "/<wbr/>");
}
};
resourceColumn.setSortable(true);
HtmlColumn<JsJob> outputPathColumn = new HtmlColumn<JsJob>(new ClickableSafeHtmlCell()) {
@Override
public String getStringValue(JsJob jsJob) {
try {
String outputPath = jsJob.getOutputPath();
if (StringUtils.isEmpty(outputPath)) {
return BLANK_VALUE;
}
outputPath = new SafeHtmlBuilder().appendEscaped(outputPath).toSafeHtml().asString();
return MessageFormat.format("<span class='workspace-resource-link' title='{0}'>{0}</span>", outputPath);
} catch (Throwable t) {
return BLANK_VALUE;
}
}
};
outputPathColumn.setFieldUpdater(new FieldUpdater<JsJob, SafeHtml>() {
@Override
public void update(final int index, final JsJob jsJob, final SafeHtml value) {
if (value != null && !BLANK_VALUE.equals(value.asString())) {
final Command errorCallback = new Command() {
@Override
public void execute() {
showValidateOutputLocationError();
}
};
final Command successCallback = new Command() {
@Override
public void execute() {
openOutputLocation(jsJob.getOutputPath());
}
};
OutputLocationUtils.validateOutputLocation(jsJob.getOutputPath(), successCallback, errorCallback);
}
}
});
outputPathColumn.setSortable(true);
TextColumn<JsJob> scheduleColumn = new TextColumn<JsJob>() {
public String getValue(JsJob job) {
try {
return job.getJobTrigger().getDescription();
} catch (Throwable t) {
return BLANK_VALUE;
}
}
};
scheduleColumn.setSortable(true);
TextColumn<JsJob> userNameColumn = new TextColumn<JsJob>() {
public String getValue(JsJob job) {
try {
return job.getUserName();
} catch (Throwable t) {
return BLANK_VALUE;
}
}
};
userNameColumn.setSortable(true);
TextColumn<JsJob> stateColumn = new TextColumn<JsJob>() {
public String getValue(JsJob job) {
try {
// BISERVER-9965
final String jobState = "COMPLETE".equalsIgnoreCase(job.getState()) ? "FINISHED" : job.getState();
// not css text-transform because tooltip will use pure text from the cell
return jobState.substring(0, 1).toUpperCase() + jobState.substring(1).toLowerCase();
} catch (Throwable t) {
return BLANK_VALUE;
}
}
};
stateColumn.setSortable(true);
TextColumn<JsJob> nextFireColumn = new TextColumn<JsJob>() {
public String getValue(JsJob job) {
try {
Date date = job.getNextRun();
if (date == null) {
return BLANK_VALUE;
}
DateTimeFormat format = DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_MEDIUM);
return format.format(date);
} catch (Throwable t) {
return BLANK_VALUE;
}
}
};
nextFireColumn.setSortable(true);
TextColumn<JsJob> lastFireColumn = new TextColumn<JsJob>() {
public String getValue(JsJob job) {
try {
Date date = job.getLastRun();
if (date == null) {
return BLANK_VALUE;
}
DateTimeFormat format = DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_MEDIUM);
return format.format(date);
} catch (Throwable t) {
return BLANK_VALUE;
}
}
};
lastFireColumn.setSortable(true);
// table.addColumn(idColumn, "ID");
table.addColumn(nameColumn, Messages.getString("scheduleName"));
table.addColumn(scheduleColumn, Messages.getString("recurrence"));
table.addColumn(resourceColumn, Messages.getString("sourceFile"));
table.addColumn(outputPathColumn, Messages.getString("outputPath"));
table.addColumn(lastFireColumn, Messages.getString("lastFire"));
table.addColumn(nextFireColumn, Messages.getString("nextFire"));
if (isAdmin) {
table.addColumn(userNameColumn, Messages.getString("user"));
}
table.addColumn(stateColumn, Messages.getString("state"));
table.addColumnStyleName(0, "backgroundContentHeaderTableCell");
table.addColumnStyleName(1, "backgroundContentHeaderTableCell");
table.addColumnStyleName(2, "backgroundContentHeaderTableCell");
table.addColumnStyleName(3, "backgroundContentHeaderTableCell");
table.addColumnStyleName(4, "backgroundContentHeaderTableCell");
table.addColumnStyleName(5, "backgroundContentHeaderTableCell");
if (isAdmin) {
table.addColumnStyleName(6, "backgroundContentHeaderTableCell");
}
table.addColumnStyleName(isAdmin ? 7 : 6, "backgroundContentHeaderTableCell");
table.setColumnWidth(nameColumn, 160, Unit.PX);
table.setColumnWidth(resourceColumn, 200, Unit.PX);
table.setColumnWidth(outputPathColumn, 180, Unit.PX);
table.setColumnWidth(scheduleColumn, 170, Unit.PX);
table.setColumnWidth(lastFireColumn, 120, Unit.PX);
table.setColumnWidth(nextFireColumn, 120, Unit.PX);
if (isAdmin) {
table.setColumnWidth(userNameColumn, 100, Unit.PX);
}
table.setColumnWidth(stateColumn, 90, Unit.PX);
dataProvider.addDataDisplay(table);
List<JsJob> list = dataProvider.getList();
ListHandler<JsJob> columnSortHandler = new ListHandler<JsJob>(list);
columnSortHandler.setComparator(idColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.getJobId().compareTo(o2.getJobId()) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(nameColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.getJobName().compareTo(o2.getJobName()) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(resourceColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
String r1 = o1.getShortResourceName();
String r2 = null;
if (o2 != null) {
r2 = o2.getShortResourceName();
}
return (o2 != null) ? r1.compareTo(r2) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(outputPathColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
String r1 = o1.getOutputPath();
String r2 = null;
if (o2 != null) {
r2 = o2.getOutputPath();
}
return (o2 != null) ? r1.compareTo(r2) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(scheduleColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
String s1 = o1.getJobTrigger().getDescription();
String s2 = o2.getJobTrigger().getDescription();
return s1.compareTo(s2);
}
});
columnSortHandler.setComparator(userNameColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.getUserName().compareTo(o2.getUserName()) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(stateColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.getState().compareTo(o2.getState()) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(nextFireColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 == null || o1.getNextRun() == null) {
return -1;
}
if (o2 == null || o2.getNextRun() == null) {
return 1;
}
if (o1.getNextRun() == o2.getNextRun()) {
return 0;
}
return o1.getNextRun().compareTo(o2.getNextRun());
}
});
columnSortHandler.setComparator(lastFireColumn, new Comparator<JsJob>() {
public int compare(JsJob o1, JsJob o2) {
if (o1 == o2) {
return 0;
}
if (o1 == null || o1.getLastRun() == null) {
return -1;
}
if (o2 == null || o2.getLastRun() == null) {
return 1;
}
if (o1.getLastRun() == o2.getLastRun()) {
return 0;
}
return o1.getLastRun().compareTo(o2.getLastRun());
}
});
table.addColumnSortHandler(columnSortHandler);
table.getColumnSortList().push(idColumn);
table.getColumnSortList().push(resourceColumn);
table.getColumnSortList().push(outputPathColumn);
table.getColumnSortList().push(nameColumn);
table.getSelectionModel().addSelectionChangeHandler(new Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
Set<JsJob> selectedJobs = getSelectedJobs();
if (!selectedJobs.isEmpty()) {
final JsJob job = selectedJobs.toArray(new JsJob[0])[0];
updateJobScheduleButtonStyle(job.getState());
controlScheduleButton.setEnabled(isScheduler);
editButton.setEnabled(isScheduler);
controlScheduleButton.setEnabled(isScheduler);
scheduleRemoveButton.setEnabled(isScheduler);
triggerNowButton.setEnabled(isScheduler);
} else {
editButton.setEnabled(false);
controlScheduleButton.setEnabled(false);
scheduleRemoveButton.setEnabled(false);
triggerNowButton.setEnabled(false);
}
}
});
// BISERVER-9965
table.addCellPreviewHandler(new CellPreviewEvent.Handler<JsJob>() {
@Override
public void onCellPreview(CellPreviewEvent<JsJob> event) {
if ("mouseover".equals(event.getNativeEvent().getType())) {
final TableCellElement cell = table.getRowElement(event.getIndex()).getCells().getItem(event.getColumn());
cell.setTitle(cell.getInnerText());
}
}
});
SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true) {
@Override
public void setPageStart(int index) {
if (getDisplay() != null) {
Range range = getDisplay().getVisibleRange();
int pageSize = range.getLength();
index = Math.max(0, index);
if (index != range.getStart()) {
getDisplay().setVisibleRange(index, pageSize);
}
}
}
};
pager.setDisplay(table);
VerticalPanel tableAndPager = new VerticalPanel();
tableAndPager.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
Toolbar bar = new Toolbar();
bar.addSpacer(10);
bar.add(Toolbar.GLUE);
// Add control scheduler button
if (isAdmin) {
final ToolbarButton controlSchedulerButton = new ToolbarButton(ImageUtil.getThemeableImage(ICON_SMALL_STYLE, "icon-start-scheduler"));
controlSchedulerButton.setCommand(new Command() {
public void execute() {
toggleSchedulerOnOff(controlSchedulerButton, isScheduler);
}
});
updateControlSchedulerButtonState(controlSchedulerButton, isScheduler);
bar.add(controlSchedulerButton);
bar.addSpacer(20);
}
// Add filter button
filterButton.setCommand(new Command() {
public void execute() {
if (filterDialog == null) {
filterDialog = new FilterDialog(allJobs, filterDialogCallback);
} else {
filterDialog.initUI(allJobs);
}
filterDialog.center();
}
});
filterButton.setToolTip(Messages.getString("filterSchedules"));
if (isAdmin) {
bar.add(filterButton);
}
// Add remove filters button
filterRemoveButton.setCommand(new Command() {
public void execute() {
filterDialog = null;
filters.clear();
filterAndShowData();
filterRemoveButton.setEnabled(false);
filterButton.setImage(ImageUtil.getThemeableImage(ICON_SMALL_STYLE, "icon-filter-add"));
}
});
filterRemoveButton.setToolTip(Messages.getString("removeFilters"));
filterRemoveButton.setEnabled(!filters.isEmpty());
if (isAdmin) {
bar.add(filterRemoveButton);
}
// Add refresh button
ToolbarButton refresh = new ToolbarButton(ImageUtil.getThemeableImage(ICON_SMALL_STYLE, "icon-refresh"));
refresh.setToolTip(Messages.getString("refreshTooltip"));
refresh.setCommand(new Command() {
public void execute() {
RefreshSchedulesCommand cmd = new RefreshSchedulesCommand();
cmd.execute();
}
});
bar.add(refresh);
bar.addSpacer(20);
// Add execute now button
triggerNowButton.setToolTip(Messages.getString("executeNow"));
triggerNowButton.setCommand(new Command() {
public void execute() {
Set<JsJob> selectedJobs = getSelectedJobs();
if (!selectedJobs.isEmpty()) {
triggerExecuteNow(selectedJobs);
}
}
});
triggerNowButton.setEnabled(false);
bar.add(triggerNowButton);
// Add control schedule button
controlScheduleButton.setCommand(new Command() {
public void execute() {
Set<JsJob> selectedJobs = getSelectedJobs();
if (!selectedJobs.isEmpty()) {
final JsJob job = selectedJobs.toArray(new JsJob[0])[0];
boolean isRunning = JOB_STATE_NORMAL.equalsIgnoreCase(job.getState());
final String action = isRunning ? "pauseJob" : "resumeJob";
controlJobs(selectedJobs, action, RequestBuilder.POST, false);
}
}
});
controlScheduleButton.setEnabled(false);
bar.add(controlScheduleButton);
bar.addSpacer(20);
// Add edit button
editButton.setCommand(new Command() {
public void execute() {
Set<JsJob> selectedJobs = getSelectedJobs();
if (!selectedJobs.isEmpty()) {
final JsJob editJob = selectedJobs.toArray(new JsJob[0])[0];
canAccessJobRequest(editJob, new RequestCallback() {
public void onError(Request request, Throwable exception) {
promptForScheduleResourceError(Collections.singleton(editJob));
}
public void onResponseReceived(Request request, Response response) {
boolean canEditJob = "true".equalsIgnoreCase(response.getText());
if (!canEditJob) {
promptForScheduleResourceError(Collections.singleton(editJob));
return;
}
editJob(editJob);
}
});
}
}
});
editButton.setEnabled(false);
editButton.setToolTip(Messages.getString("editTooltip"));
bar.add(editButton);
// Add remove button
scheduleRemoveButton.setCommand(new Command() {
public void execute() {
final Set<JsJob> selectedJobs = getSelectedJobs();
int selectionSize = selectedJobs.size();
if (selectionSize > 0) {
final PromptDialogBox prompt = new PromptDialogBox(Messages.getString("warning"), Messages.getString("yes"), Messages.getString("no"), false, true);
final String promptContent = Messages.getString("deleteConfirmSchedles", "" + selectionSize);
prompt.setContent(new Label(promptContent));
prompt.setCallback(new IDialogCallback() {
public void okPressed() {
controlJobs(selectedJobs, "removeJob", RequestBuilder.DELETE, true);
prompt.hide();
}
public void cancelPressed() {
prompt.hide();
}
});
prompt.center();
}
}
});
scheduleRemoveButton.setToolTip(Messages.getString("remove"));
scheduleRemoveButton.setEnabled(false);
bar.add(scheduleRemoveButton);
tableAndPager.add(bar);
tableAndPager.add(table);
tableAndPager.add(pager);
// Add it to the root panel.
setWidget(tableAndPager);
}
use of com.google.gwt.dom.client.TableCellElement in project rstudio by rstudio.
the class FindOutputCodec method addBreak.
@Override
protected int addBreak(TableRowElement row) {
TableRowElement tr = Document.get().createTRElement();
tr.setClassName(styles_.headerRow());
TableCellElement td = Document.get().createTDElement();
td.setColSpan(2);
td.setInnerText(row.getAttribute(DATA_FILE));
tr.appendChild(td);
row.getParentElement().insertBefore(tr, row);
return 1;
}
Aggregations